免责声明
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# SDK ModelContextProtocol 1.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。源码行为如下:

  1. confirm 为 false 时,服务器拒绝发送。
  2. confirm 为 true 时,服务器在限额等检查通过后直接广播,不会在终端或任何界面上再问一次真人。
  3. 这个参数是代理自己填的。工具描述原文写得很直白:「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]

来源:

为什么这件事重要: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 用小额验证,再自行评估风险。

下一步

先在 testnet 跑起来:github.com/lifeme2027/KaspaMy(设计取舍见仓库内 docs/DECISIONS.md)

觉得有用就给 KaspaMy 和 NKaspa 点个 Star;遇到问题欢迎开 issue,维护者会看并排期。

免责声明
KaspaMy / KaspaMyMcp 目前是 alpha 软件,未经安全审计。默认网络为 Kaspa testnet-10。请只用测试币和小额。不要把真实大额资金交给 AI 代理。公共节点由第三方运营,不保证可用。confirm=true 不是人工批准。