TON MCP 对比:官方 @ton/mcp vs TONNode,密钥在谁手里?
TON MCP 横评:官方 @ton/mcp 与 TONNode 有何不同?托管型智能体钱包 vs 非托管跨链 MCP,附完整对比表与选型建议。
@ton/mcp 对比 TONNode:诚实横评——第一个问题是,密钥在谁手里?
这篇 TON 双 MCP 对比不从功能清单讲起,而是从一个安全问题讲起。想象一下:你把 TON 的访问权限交给了 Claude 或 Cursor。智能体读余额、组装 swap、调用各种 get 方法,一切正常——直到需要给交易签名的那一刻。然后在凌晨三点,智能体因为一条写歪的提示词(或者从网页里被塞进来的指令)决定“优化一下投资组合”,自己把交易签了。资金没了。你第二天早上才知道。
这不是吓唬人,而是一个架构选择的直接后果:智能体用自己的密钥自签,还是签名权始终留在用户钱包里?两个成熟的 TON MCP 正是在这一点上分道扬镳——TON Foundation 官方的 @ton/mcp 和 TONNode。两者都能给智能体一双伸进区块链的手。下面我们诚实地拆解,不贬低任何一方——面对不同的任务,两种路线都有存在的理由。
为什么要比:TON 上两条截然不同的 MCP 路线
MCP(Model Context Protocol)是 AI 智能体(Claude、Cursor、ChatGPT/Codex 以及任何 MCP 客户端)调用工具的标准协议。对 TON 而言,这意味着:智能体拿到一组类似 get_balance 或 build_swap_tx 的函数,然后在对话过程中自己判断何时调用。
@ton/mcp 和 TONNode 的区别不在命令列表,而在理念。打个比方:@ton/mcp 就像给助理发了一张带额度的公司卡——他自己付款,快速、自主,但卡在他手里。TONNode 则是那种帮你把付款单填好、放到你面前等签字的助理——没有你的钱包,一分钱都出不去。两种模式都成立,区别只在于你要解决的是什么任务。
如果你更想先看理论,这里有一篇专门的分析:托管型 vs 非托管 MCP。本文只谈具体差异。
官方 @ton/mcp:带 NFT 和 DNS 的托管型智能体钱包
@ton/mcp 是 TON Foundation 的官方包,这本身就是它的强项:网络核心团队维护、演进路径可预期、事实上的参考实现。
架构上,它是一个采用 split-key 模型的托管型智能体钱包:
- operator 密钥——在智能体手里。智能体用它自行签名交易,不需要你的参与。
- owner 密钥——在用户手里,作为钱包的第二道控制线。
开箱即用的能力:
- 读取网络状态、账户、余额;
- 发送 GRAM、Jetton 和 NFT(智能体自签);
- 通过 DEX 聚合器做 swap;
- 创建和导入智能体钱包;
- 读取 NFT 和 DNS——这是 TONNode 目前没有的,也是官方包实打实的优势。
可以本地运行,也支持 HTTP 或 serverless。设计上的边界:只有 TON,没有跨链。
这里的核心是自主性。智能体自己花钱,签名环节没有人类介入。对于“让智能体自己付订阅费/gas/微任务”这类场景,这正是你需要的。但同样的自主性也意味着:真正能动用资金的工作密钥放在智能体那一侧——于是提示词注入或模型幻觉都可能变成真金白银的损失。
TONNode:非托管 MCP、跨链和 hosted 选项
TONNode 是面向 TON 的 hosted MCP 服务器(官网 tonnode.io),提供整整 16 个工具。核心不变式一句话说清:
服务器永远不会签名,也不保管资金和私钥。swap、跨链和钱包类工具返回的都是未签名的 TonConnect 消息,由用户钱包完成签名。
不存在服务器能卷走资金的任何时刻,因为它物理上就没有密钥。下面按工具分组来看。
读取(7+1)
覆盖日常所需:
get_masterchain_info — 主链(masterchain)头部信息
get_balance — GRAM 余额
get_account_state — 账户状态、标志位、最近一笔交易
get_transactions — 交易历史
run_get_method — 调用合约的任意只读 get 方法
get_jetton_balance — Jetton/USDT 余额(Jetton 钱包地址在链上计算)
get_jetton_info — Jetton 元数据:名称、符号、decimals、发行量
parse_address — EQ/UQ/raw 地址格式互转,离线完成
get_jetton_info 会返回 decimals——把 raw 单位换算成人类可读数额时必须用到:USDT 是 6 位小数,大多数 Jetton 是 9 位。
Swap(2)
走 Omniston 协议——聚合了 STON.fi 和 DeDust 的流动性:
get_swap_quote——GRAM⇄Jetton 的硬报价;build_swap_tx——未签名交易,直接对接 TonConnect。
跨链(5)
这是官方包完全没有的部分。基于 HTLC 的原子锁定,且 TON 始终是源链:
get_crosschain_quote——报价;build_crosschain_swap_tx——未签名的 HTLC 锁定交易 + secret;track_crosschain_swap——跟踪两条链上的交易阶段;disclose_crosschain_secret——在链上核验就绪状态后,披露 secret 完成结算;build_crosschain_refund——交易卡住时,从锁定合约中取回资金。
支持的网络:Ethereum、Arbitrum、Base、BNB Chain、Polygon、Avalanche。TRON 暂不支持。这类交易的完整流程见TON 上第一笔智能体跨链转移价值的实录。
钱包(1):generate_wallet 可以生成 v3r2/v4/v5r1/highload_v3 版本的钱包,并把助记词、密钥和地址直接交给用户——服务器不做任何保存。
TONNode 目前没有的东西:NFT 和 DNS 工具——它们在路线图里。如果你今天的任务就是读 NFT 藏品或解析 .ton 域名,那是官方包的地盘。还有一点要注意:TONNode 也没有直接“发送/转账” GRAM 或 Jetton 的工具。所有未签名交易构建器只有 build_swap_tx、build_crosschain_swap_tx 和 build_crosschain_refund——也就是说,资金转移只能发生在 swap、跨链或锁定合约退款的语境里。任意的“send”在这里是刻意不存在的。
对比表:@ton/mcp vs TONNode
| 对比维度 | 官方 @ton/mcp | TONNode |
|---|---|---|
| 谁来签名 | 智能体自签(operator 密钥,split-key) | 用户钱包(服务器不签名) |
| 模型 | 托管型 | 严格非托管 |
| 自主花费 | 可以 | 不行(设计如此) |
| 直接发送 GRAM/Jetton | 可以,全自主 | 无独立工具;转账只能作为 swap/跨链中的未签名 tx |
| Swap | DEX 聚合器 | Omniston(STON.fi + DeDust) |
| 跨链 | 无(仅 TON) | 有,HTLC 锁定,覆盖 6 条网络 |
| NFT / DNS | 有(读取) | 在路线图中 |
| 钱包生成 | 创建/导入智能体钱包 | v3r2/v4/v5r1/highload_v3,密钥归用户 |
| 运行方式 | 本地 / HTTP / serverless | 本地(npx)+ hosted 端点 |
| 项目状态 | 官方,TON Foundation | 独立项目,开源(MIT) |
关键分岔口:智能体的密钥在谁手里
其余都是细节。真正的选择只有一个问题:你是否愿意让智能体自己给交易签名?
@ton/mcp 的 operator 密钥在智能体手里——这意味着智能体可以凭一条提示词花掉资金,没有“人来签名”这道第二因子。这对自主性来说很强大,但在提示词注入或模型幻觉面前也很危险:上下文被污染 = 资金可能真的被花掉。
TONNode 这边,签名在服务器上物理不可能发生。哪怕智能体“发疯”,带着荒谬的参数调用 build_swap_tx,它最多也只能拿到一个未签名的交易对象。在用户钱包确认之前,什么都不会动。这是架构层面的保证,不是一条政策条款。
两种路线没有绝对的“谁更好”——它们对应的是你对智能体自主性的不同信任级别。
什么时候选官方 @ton/mcp,什么时候选 TONNode
选 @ton/mcp,如果:
- 你需要自主花费——智能体自己付款、自己签名,流程里不需要人;
- 你严格只在 TON 内部工作,用不到跨链;
- 你今天就需要 NFT 和 DNS;
- Foundation 官方包的身份对你很重要。
选 TONNode,如果:
- 资金必须只由用户钱包支配,而不是智能体——这个模式在TON 智能体非托管 swap 实战里有完整拆解;
- 你需要 TON⇄EVM 跨链(Ethereum、Arbitrum、Base、BNB Chain、Polygon、Avalanche);
- 你需要走 Omniston 聚合流动性的 swap;
- 你需要一个有速率保障的 hosted 端点,而不只是本地运行。
这不是“孰优孰劣”,而是两把不同的工具。而且两条路线并不互斥:不少团队在配置里同时挂两个服务器——官方包负责 NFT/DNS 和自主任务,TONNode 负责非托管 swap 和跨链。
两边分别怎么接入
如果你是第一次接触这个话题,先看 TON 的 MCP 总体介绍:TON MCP 指南。
TONNode 本地运行——免费,完整读取工具集
@tonnode/mcp 是开源包(MIT 协议,发布在 npm 和 GitHub tonnode/mcp),走 TON 原生的 ADNL 协议,中间没有 HTTP 转发层:
{
"mcpServers": {
"ton": {
"command": "npx",
"args": ["-y", "@tonnode/mcp"]
}
}
}
TONNode hosted——自己的密钥,有保障的请求速率
{
"mcpServers": {
"ton": {
"type": "http",
"url": "https://mcp.tonnode.io/mcp",
"headers": { "Authorization": "Bearer tn_live_…" }
}
}
}
接好之后,直接给智能体下普通的自然语言任务就行——工具它自己会挑:
用 get_jetton_balance 查一下我钱包 EQ… 上的 USDT 余额。
然后用 get_swap_quote 拿一个 50 USDT 换 GRAM 的报价,
再用 build_swap_tx 组装交易。
交易不要发送——返回给我,我在钱包里签名。
智能体会依次调用 get_jetton_balance → get_swap_quote → build_swap_tx,最后交回一条未签名的 TonConnect 消息。只有在钱包里确认之后,资金才会移动。
跨链任务写起来同样自然:
组装一笔 100 GRAM 从 TON 换到 Base 上 USDC 的交易。
先给 get_crosschain_quote,然后 build_crosschain_swap_tx。
保存好 secret,用 track_crosschain_swap 跟踪状态。
所有套餐都开放全部 16 个工具——你只为请求速率付费:Hobby 永久免费,60 请求/分钟;Pro $29/月,300 请求/分钟;Scale $199/月,1200 请求/分钟。登录即发 Hobby 密钥,无需绑卡。
官方 @ton/mcp
@ton/mcp 按 TON Foundation 的文档安装,可本地、HTTP 或 serverless 运行。首次配置时会为智能体创建或导入一个带 operator 密钥的智能体钱包。务必把托管模型考虑在内:提前想清楚额度限制,以及智能体能接触到哪些资金。
结论
@ton/mcp 是官方的托管型智能体钱包:split-key、自主花费、NFT 和 DNS、仅限 TON。TONNode 是 16 个工具的非托管服务器:服务器永远不签名,额外提供覆盖 6 条网络的跨链和 hosted 选项。这个差异是诚实的、架构层面的——本质是你把签名权交给谁。谁签名,谁就决定了风险敞口。
逐个工具的详细对比,详见 TONNode vs 官方 MCP 页面。想现在就试试非托管路线,用免费的 Hobby 密钥、无需绑卡:tonnode.io/dashboard?plan=hobby。