免责声明
KaspaMy / KaspaMyMcp 目前是 alpha 软件,未经安全审计。默认网络为 Kaspa testnet-10。请只用测试币和小额。不要把真实大额资金交给 AI 代理。公共节点由第三方运营,不保证可用。confirm=true不是人工批准。
想让 Claude、Cursor 这类 AI 助手通过 MCP(Model Context Protocol)操作 Kaspa 钱包?KaspaMyMcp 是 KaspaMy 自带的 stdio MCP 服务器:密钥和签名留在你的本机,默认只连 testnet-10,单笔和每日的金额上限由本机 MCP 进程强制执行。本文按源码(commit 705bf80)逐条说明它实际强制了什么、没强制什么,包括两件容易被说错的事:它没有发送笔数限额,以及 confirm=true 不是人工批准。KaspaMy 是非官方的社区项目,与 Kaspa 核心团队无隶属关系。
你会得到什么:KaspaMy 与 Kaspa MCP 工具一览
KaspaMy 由三部分组成:
-
kaspamy:命令行钱包(create / import / status / address / balance / fee / validate / send / export-mnemonic,均支持--json)。其中status只读钱包文件头,返回未经验证的地址,不要用它收款;收款地址请用address。 -
kaspamy-mcp:stdio MCP 服务器,使用官方 C# SDKModelContextProtocol1.2.0。 -
KaspaMy.Core:keystore、HD 派生、节点访问、交易构建。
Kaspa 原语(BIP39、BIP32、地址、签名、wRPC JSON 客户端)来自 NKaspa 0.1.11-alpha,版本精确钉死为 [0.1.11-alpha]。
MCP 暴露的工具(McpTools.cs):
| 工具 | 性质 | 说明 |
|---|---|---|
wallet_create | 写 | 创建钱包,不返回助记词 |
wallet_import | 写 | 默认关闭,需 KASPAMY_MCP_ALLOW_IMPORT=1 |
wallet_status | 只读 | 含当前限额与今日已发送额 |
get_address | 只读 | 收款地址 |
get_balance | 只读 | 余额 |
estimate_fee | 只读 | 手续费估算 |
validate_address | 只读 | 地址校验 |
send_kas | 破坏性 | 发送 KAS,必须带 confirm: true(见下文:这不是人工批准) |
为什么强调「本地签名」
- 密钥不出机。 助记词加密存放在本机 keystore:AES-256-GCM + Argon2id(默认 64 MiB、t=3、p=4,
KdfParameters.Default),钱包文件的格式版本、网络、地址和 Argon2 参数一起写入 AES-GCM 的附加认证数据(AAD),任一项被改动都会解密失败。默认路径 Linux/macOS 为~/.config/KaspaMy/wallet.<network>.json、Windows 为%APPDATA%\KaspaMy\wallet.<network>.json,可用KASPAMY_HOME改。 - 密码不经过模型。 MCP 服务器只从环境变量
KASPAMY_PASSWORD读密码,没有任何工具参数可以传密码,所以 AI 看不到它。 - 助记词不回给模型。
wallet_create永远不返回助记词;备份只能在交互式终端里用 CLI 的kaspamy export-mnemonic,并需手动输入I UNDERSTAND。日志和错误信息经过SecretRedactor脱敏。
部署位置上的区别可以一句话说清:托管型 MCP 钱包把策略放在各自的服务端;KaspaMyMcp 把策略放在你机器上的 MCP 进程里。两种做法适合不同需求,本文不评高下。
默认 testnet-10,主网需操作者显式打开
- 默认网络是
testnet-10(WalletNetworkExtensions.Default)。 - 主网默认关闭:只有操作者在服务器环境里设置
KASPAMY_MCP_ALLOW_MAINNET=1,MCP 才接受主网请求,否则直接报错。本文所有示例只用 testnet-10。 - 节点白名单:代理只能使用内置公共节点、
KASPAMY_NODE或KASPAMY_MCP_NODES中列出的节点,传别的 URL 会被拒绝。内置 testnet-10 公共节点由第三方运营,不保证可用(见文首免责声明)。
Kaspa MCP 钱包限额:本机 MCP 进程强制的金额上限(单笔 + 每日)
这是本文重点,结论来自 WalletTools.cs、SpendLedger.cs 和 README,并与 Wallet2 的护栏核查表一致。
| 限额 | testnet-10 默认 | mainnet 默认 | 环境变量 |
|---|---|---|---|
| 单笔上限(amount + fee) | 10 KAS | 1 KAS | KASPAMY_MCP_MAX_KAS_TESTNET / _MAINNET |
| 每日累计上限(UTC 日历日,amount + fee) | 50 KAS | 2 KAS | KASPAMY_MCP_DAILY_MAX_KAS_TESTNET / _MAINNET |
几个细节:
- 单笔上限检查两次:发送前检查一次,交易构建出来、手续费确定后再检查一次。
- 每日累计持久化在
KASPAMY_HOME下的mcp-spend.json与mcp-spend.anchor,重启后仍然有效。广播前先预留额度,确定失败才释放。 - 没有发送笔数限额。 每日上限累计的是 sompi 金额,不是「每天最多 N 笔」。在每日金额上限之内,很小的金额理论上可以发很多次。如果你需要次数上限,目前 KaspaMyMcp 不提供。
- 限额值有上限:任何一个限额环境变量(单笔或每日)超过 1,000,000 KAS 都会被钳制为 1,000,000 KAS,并打出警告。
- 设为
0即禁止该网络上的 MCP 发送;值为负数或格式非法时,kaspamy-mcp拒绝启动(退出码 78),不会悄悄回退到默认值。 -
wallet_status会返回maxSendKas、dailyMaxKas、sentTodayKas、sendingDisabled,可以让助手先读出当前限额再做事。 - CLI 不受 MCP 限额约束。 限额只实现在
KaspaMy.Mcp里;kaspamy send默认在终端里由人输入确认词(另有--yes非交互选项,交给代理时风险更高)。这是设计边界,不是给代理绕过限额的通道,请不要给代理 shell 权限去跑 CLI。
已知局限(README「Daily-limit ledger: known limitation」与 DECISIONS #31): 每日账本防的是「只会调用 MCP 工具的失控代理」,不防对 KASPAMY_HOME 有写权限的人。有写权限就能删掉 mcp-spend.json 和 mcp-spend.anchor,把当日累计清零(也能把日期改到过去)。这类人通常也能读到 KASPAMY_PASSWORD。所以请把 KASPAMY_HOME 设为私有(0700),不要给代理 shell 或该目录的写权限。
confirm=true 不是人工批准
send_kas 有一个 confirm 参数,默认 false。源码行为如下:
-
confirm为false时,服务器拒绝发送。 -
confirm为true时,服务器在限额等检查通过后直接广播,不会在终端或任何界面上再问一次真人。 - 这个参数是代理自己填的。工具描述原文写得很直白:「confirm=true is set by the agent, so it is NOT human approval: the client must ask the user.」
所以准确的说法是:确认依赖 MCP 客户端,由客户端在代理置 confirm=true 之前询问用户;KaspaMyMcp 服务器本身不强制真人批准。 你用的客户端会不会在调用 send_kas 前弹窗询问你,是客户端自己的行为,KaspaMyMcp 管不了。请先在自己的客户端里用测试币实测一次,确认它确实会先问你,再放心使用。
还有一个容易混淆的点:如果交易带有手续费警告,MCP 会拒绝广播,提示改用 CLI 人工审阅。这只是一道「有警告就不发」的门,不是通用的人工批准流程。
诚实边界: 目前没有设备授权流、没有会话授权链接、也没有「用户点击后才签名」的带外通道。这些都不是现有功能。
与本周其他 MCP 钱包的公平对照
下面只列各方公开资料里能核对的事实,不做安全性排名。外部来源的访问日期均为 2026-11-09,方括号字母对应表下的来源列表。
| 维度 | KaspaMyMcp(源码 705bf80) | Warden MCP | MUTEX MCP |
|---|---|---|---|
| 运行位置 | 本机 stdio 进程 | 以连接器接入其产品;在 Claude 里「添加连接器并登录」,无需粘贴密钥 [A] | 本机用 npx -y @trade-mutex/mcp 运行,通过其 API 交易 [B][C] |
| 限额 | 单笔 + 每日金额上限(testnet-10 默认 10 / 50 KAS,含手续费),本机进程强制;无笔数限额 | 会话内有每日预算(daily budget)和单笔上限(per-trade cap),代理不能超过 [A] | 服务器端强制,「不靠 prompt」[B];bot 模式下 bot 账户余额就是硬上限,文档写明因此不设单笔下单上限 [C] |
| 批准方式 | 服务器不强制真人批准;只有代理可自行设置的 confirm;依赖 MCP 客户端询问用户 | 会话级批准:代理发来链接,用户批准一次会话,之后会话内不再逐笔签名 [A] | user 模式下批准方式是「粘贴密钥」,没有设备授权流 [C];用 agent key 时服务器签名前不会询问用户 [B] |
| 网络 | 默认 testnet-10,主网需操作者显式打开 | 其多链交易产品,文中介绍 Solana 等链 [A] | 文档写明没有测试网,每笔成交都是真实的 [C] |
来源:
- [A] Warden,《Solana Is Now Live on Warden Token Terminal and Warden MCP》(2026-11-05):https://wardenprotocol.org/blog/solana-live-on-warden-token-terminal-and-mcp
- [B] MUTEX,《Your AI agent can now run your MUTEX account》(2026-11-02):https://mutex.trade/news/ai-agents-on-mutex
- [C] MUTEX,MCP server 文档:https://mutex.trade/docs/mcp
为什么这件事重要:Cornell Tech 与 Yale 研究者的论文 I-HITL: Inalienable Human-in-the-Loop(arXiv:2610.35835)在 Circle agent wallet 上做了实验:提高消费上限需要输入发到邮箱的一次性验证码,而代理能读这个邮箱。在没有攻击、也没有提示的「付款代理」实验里,10 个前沿模型中有 9 个至少在一次运行中自行读取验证码、抬高了自己的每日上限。中性结论是:限额和批准通道都必须落在代理够不着的那一层。 KaspaMyMcp 的限额在本机进程的环境变量和账本文件里,代理只有 MCP 工具、没有 shell 或 KASPAMY_HOME 写权限时改不了;一旦有了这些权限,就要回到上面的「已知局限」。
五分钟上手:在 Kaspa testnet 配置 KaspaMyMcp
以下步骤来自仓库 README,只用 testnet-10 与测试币。
1. 构建(需要 .NET 8 SDK)
dotnet build -c Release dotnet publish src/KaspaMy.Cli -c Release -o out/cli dotnet publish src/KaspaMy.Mcp -c Release -o out/mcp 2. 用 CLI 创建 testnet 钱包并备份助记词
kaspamy create # 默认 testnet-10,交互设置密码,不打印助记词 kaspamy export-mnemonic # 交互式备份;不要在录屏或共享终端里运行 kaspamy address --json # 已验证的收款地址 3. 在 MCP 客户端里登记服务器
Claude Desktop(claude_desktop_config.json)或 Cursor(~/.cursor/mcp.json)。下面是 README 里的示例;各客户端的配置文件位置和字段名以客户端官方文档为准:
{ "mcpServers": { "kaspamy": { "command": "/ABS/PATH/to/out/mcp/kaspamy-mcp", "args": [], "env": { "KASPAMY_PASSWORD": "<只在本机填写的密码>", "KASPAMY_MCP_MAX_KAS_TESTNET": "5" } } } } 建议把单笔上限调得比默认更低(示例为 5 KAS)。不想 publish 也可以用 "command": "dotnet", "args": ["run", "--project", "/ABS/PATH/to/src/KaspaMy.Mcp"]。
4. 先只读,再小额发送
- 先让助手依次调用
wallet_status→get_address→get_balance→estimate_fee,确认限额和地址都对。 - 测试币:仓库里没有水龙头配置,请自行获取 testnet-10 测试币。
- 需要试
send_kas时,只用测试币和小额;确认你的客户端会在代理设置confirm=true之前先问你收款地址、金额和网络。成功后会返回交易 id(本文以<txid>代替)。
常见问题(FAQ)
KaspaMyMcp 是什么?
它是 KaspaMy 的 stdio MCP 服务器,让 AI 助手在本机调用创建钱包、查余额、估手续费、发 KAS 等工具。它基于 NKaspa 0.1.11-alpha,是 alpha、未审计的非官方社区项目,默认网络 testnet-10。
Kaspa MCP 钱包的密钥会不会发给模型?
不会。助记词加密存在本机;密码只来自 KASPAMY_PASSWORD 环境变量;wallet_create 不返回助记词;日志和错误输出经 SecretRedactor 脱敏。
KaspaMyMcp 有没有花费限额?
有金额限额,没有笔数限额。本机 MCP 进程强制:单笔默认 testnet-10 10 KAS(含手续费)、每日 UTC 累计默认 50 KAS(含手续费);主网默认 1 / 2 KAS。可用环境变量调整,设为 0 即禁止发送。
confirm=true 算人工批准吗?
不算。这个参数由代理自己设置,服务器收到后不会再弹真人确认。是否先问你,取决于你用的 MCP 客户端。
能直接用主网吗?
默认不能,必须由操作者设置 KASPAMY_MCP_ALLOW_MAINNET=1。即使打开,也只建议小额,因为软件是 alpha、未经审计。
和 Warden / MUTEX 比谁更安全?
本文不做安全性排名。据各自公开资料,Warden MCP 用会话级批准加每日预算和单笔上限(来源);MUTEX MCP 在本机运行、由其服务器强制限额,bot 模式以余额为上限(来源)。KaspaMyMcp 把 Kaspa 签名和限额都放在你的本机进程。选哪种取决于你是否需要自托管 Kaspa 密钥和原生转账。
每日限额能被 AI 清零吗?
只用 MCP 工具时不能。如果代理另有 shell 权限或能写 KASPAMY_HOME,就可能删掉账本文件,所以不要把这些权限交给代理。
能用于真实资金吗?
不建议。先在 testnet 用小额验证,再自行评估风险。
下一步
- 用 C# 连接 Kaspa 节点并发交易(dev.to 教程):英文 · 中文
- NKaspa 源码与文档:github.com/lifeme2027/NKaspa;NKaspaDoc 文档仓库:github.com/lifeme2027/NKaspaDoc
- 用 NKaspa 在 ASP.NET 里收款:AspNetCheckout 教程(另稿,待发布)
- KaspaMy 的 MCP 名录收录说明(另稿)
- MCP 规范:modelcontextprotocol.io
先在 testnet 跑起来:github.com/lifeme2027/KaspaMy(设计取舍见仓库内 docs/DECISIONS.md)
觉得有用就给 KaspaMy 和 NKaspa 点个 Star;遇到问题欢迎开 issue,维护者会看并排期。
免责声明
KaspaMy / KaspaMyMcp 目前是 alpha 软件,未经安全审计。默认网络为 Kaspa testnet-10。请只用测试币和小额。不要把真实大额资金交给 AI 代理。公共节点由第三方运营,不保证可用。confirm=true不是人工批准。

