内容
<p align="center">
<a href="https://three.ws"><img src="https://three.ws/three-ws-mcp-icon.svg" alt="three.ws" width="88" height="88"></a>
</p>
<h1 align="center">@three-ws/portfolio-mcp</h1>
<p align="center"><strong>一个 AI 代理的自主交易状态,通过 MCP — 投资组合价值、利润和亏损、实时余额、公共交易动态,以及一个真正的写入操作:一个签名的 Solana 链上转账。</strong></p>
<p align="center">
<a href="https://www.npmjs.com/package/@three-ws/portfolio-mcp"><img alt="npm" src="https://img.shields.io/npm/v/@three-ws/portfolio-mcp?logo=npm&color=cb3837"></a>
<img alt="license" src="https://img.shields.io/npm/l/@three-ws/portfolio-mcp?color=3b82f6">
<img alt="node" src="https://img.shields.io/node/v/@three-ws/portfolio-mcp?color=339933&logo=node.js">
<a href="https://registry.modelcontextprotocol.io/?q=io.github.nirholas"><img alt="MCP Registry" src="https://img.shields.io/badge/MCP%20Registry-io.github.nirholas-0ea5e9"></a>
<a href="https://three.ws"><img alt="three.ws" src="https://img.shields.io/badge/built%20by-three.ws-000"></a>
</p>
---
> 一个 [模型上下文协议](https://modelcontextprotocol.io) 服务器,为 AI 代理提供对其**自主**交易状态的编程访问权限,涵盖标准输入/输出:其持有资产、资产价值随时间的变化、单个代币的仓位与实时市场数据、平台范围内的已关闭交易动态及其**已实现利润和亏损**、任何钱包的实时链上余额 — 以及一个真正的写入操作:一个签名的 Solana 转账。
读取操作直接访问 three.ws API 和 Solana RPC — 不使用模拟数据。账户范围的读取操作针对代理钱包**您拥有**(从您的 three.ws 会话中解析)。唯一的写入操作 `send_transfer` 在本地使用您的密钥签名,并将真实的资金转移到主网。
## 安装
```bash
npm install @three-ws/portfolio-mcp
```
或使用 `npx`(无需安装):
```bash
npx @three-ws/portfolio-mcp
```
## 快速入门
**Claude Code**,一行:
```bash
claude mcp add portfolio -- npx -y @three-ws/portfolio-mcp
```
**Claude Desktop / Cursor**(`claude_desktop_config.json` 或 `mcp.json`):
```json
{
"mcpServers": {
"portfolio": {
"command": "npx",
"args": ["-y", "@three-ws/portfolio-mcp"],
"env": {
"THREE_WS_SESSION": "<您的 __Host-sid cookie>",
"SOLANA_SECRET_KEY": "<发送钱包的 base58 私钥>"
}
}
}
}
```
`THREE_WS_SESSION` 仅在账户范围的读取操作中需要;`SOLANA_SECRET_KEY` 仅在 `send_transfer` 中需要。交易动态和链上余额读取操作无需任何配置即可工作。
使用 MCP 检查器检查表面:
```bash
npx -y @modelcontextprotocol/inspector npx @three-ws/portfolio-mcp
```
## 工具
| 工具 | 类型 | 功能 |
| ------------------------ | --------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `get_portfolio_summary` | 读取 · 会话 | 实时持有资产 + 每个代理钱包的美元价值,附有每钱包明细。可选快照。 |
| `get_portfolio_history` | 读取 · 会话 | 您的总投资组合美元价值随时间变化,从存储的快照中 — 性能图表。 |
| `get_portfolio_asset` | 读取 · 会话 | 单个代币深入分析:哪些钱包持有它,您的总金额/美元价值,以及实时市场数据和价格历史图表。 |
| `get_trades_feed` | 读取 · 公共 | 平台范围内的已关闭仓位动态及其**已实现利润和亏损** — 最新退出记录优先,可按币种筛选。 |
| `get_wallet_balances` | 读取 · 公共 | 实时 Solana 链上 SOL + SPL(包括 Token-2022)余额,适用于任何 Solana 地址,直接来自 RPC。 |
| `send_transfer` | **写入 · 破坏性** | 签名并广播真实、不可逆的 Solana 主网转账 SOL 或任何 SPL 代币从您自己的钱包。 |
所有读取操作都读取实时状态 — 余额、动态和广播在调用之间移动 — 因此没有幂等工具。`send_transfer` 是唯一改变任何内容的工具。
### 输入参数
**`get_portfolio_summary`** — `snapshot`(布尔值,默认为 false — 同时持久化一个历史点)。
**`get_portfolio_history`** — `days`(1–365,默认为 90)。
**`get_portfolio_asset`** — `chain`(`solana` | `evm`,必填),`id`(`native` 或 base58 铸造 / 0x 合约,必填),`days`(1–365,默认为 30)。
**`get_trades_feed`** — `network`(`mainnet` | `devnet`,默认为 mainnet),`window`(`1h` | `6h` | `24h` | `7d` | `30d` | `all`,默认为 24h),`min_pnl_pct`(默认为 10),`limit`(1–80,默认为 40),`cursor`(用于分页的 ISO 时间戳),`mint`(筛选到一个币种)。
**`get_wallet_balances`** — `address`(base58,必填),`include_tokens`(布尔值,默认为 true)。
**`send_transfer`** — `recipient`(base58,必填),`amount`(十进制字符串,必填),`mint`(base58 SPL 铸造;省略 / `native` 表示 SOL),`secret`(base58,覆盖 `SOLANA_SECRET_KEY`),`priorityMicroLamports`(0–50,000,000),`confirm`(必须为 `true` 以执行)。
## 实现价值 vs. 实时价值
两个不同的问题,两个不同的工具:
- **"我现在值多少钱?"** → `get_portfolio_summary` / `get_portfolio_asset` — 实时持有资产按美元价值计价。
- **"我的已关闭交易表现如何?"** → `get_trades_feed` — 按已关闭仓位(入口/出口在 SOL,利润%,倍数,持有时间)计算的已实现利润和亏损。
## 写入工具 — `send_transfer`
`send_transfer` **在 Solana 主网上广播真实、不可逆的交易**,并将资金从签名钱包转移出去。它在本地使用每次调用的 `secret` 或 `SOLANA_SECRET_KEY` 进行签名 — three.ws API 从不持有您的密钥。防护措施:
- **`confirm: true` 必须**在 `REQUIRE_CONFIRM` 启用时(默认值) — 第一个没有它的调用返回拒绝,而不是广播。
- **`MAX_SOL_PER_TX`** 限制原生 SOL 发送(默认为 0.5 SOL)。
- **`RECIPIENT_ALLOWLIST`**,当设置时,将目标限制为已知集合。
- `mint` 是**运行时输入** — 传送 `$THREE` 铸造或您持有的任何 SPL 代币。没有硬编码的铸造。
对于 SPL 转账,它读取链上铸造的十进制数,验证您的余额,并在缺少时自动创建接收者的关联代币账户。在确认超时时,它返回 `tx_unconfirmed` 以及签名 — 在发送前请检查 Solscan 以避免重复支付。
## 要求
- **Node.js >= 20.**
- 访问 `https://three.ws`(或您自己的 `THREE_WS_BASE`)和 Solana RPC 的网络。
### 环境变量
| 变量 | 必需 | 默认 |
| ----------------------- | ------------------------- | --------------------------------------- |
| `THREE_WS_BASE` | 否 | `https://three.ws` |
| `THREE_WS_TIMEOUT_MS` | 否 | `20000` |
| `THREE_WS_SESSION` | 用于账户范围的读取操作 | — |
| `SOLANA_RPC_URL` | 否 | `https://api.mainnet-beta.solana.com` |
| `SOLANA_SECRET_KEY` | 用于 `send_transfer` | — |
| `MAX_SOL_PER_TX` | 否 | `0.5` |
| `RECIPIENT_ALLOWLIST` | 否 | — (任何有效的公钥均允许) |
| `REQUIRE_CONFIRM` | 否 | `true` |
`THREE_WS_SESSION` 是来自登录的 three.ws 浏览器会话的 `__Host-sid` cookie 的值。请像密码一样保护它和 `SOLANA_SECRET_KEY`。
## 链接
- 首页:https://three.ws
- 更新日志:https://three.ws/changelog
- 问题:https://github.com/nirholas/three.ws/issues
- 许可证:Apache-2.0 — 见 [LICENSE](./LICENSE)
---
<p align="center">
<sub>
three.ws SDK 套件的一部分 — 3D AI 代理、链上身份和代理支付。<br/>
<a href="https://three.ws">网站</a> · <a href="https://three.ws/changelog">更新日志</a> · <a href="https://github.com/nirholas/three.ws">GitHub</a>
</sub>
</p>
## 许可证
Copyright © 2026 nirholas. All rights reserved.
本软件是专有的 — 见 [LICENSE](./LICENSE)。未经版权所有者的明确书面许可,不得授予任何权利。