关于 AgentGuard
AgentGuard 是一款 MCP 服务,让 AI Agent 通过受链上规则约束的金库发起 NEAR 付款。它提供付款控制、地址检查,并可对策略或文本扫描标记的交易交由所有者审核。
主要功能
- 01通过金库申请 NEAR 付款
- 02在链上执行付款限额和审批规则
- 03根据风险信号检查地址
- 04查看付款状态和历史
- 05扫描付款文本中的提示词注入
- 06通过金库购买 Sentinel 检查
适用场景
- 01让 Agent 向获准收款方付款
- 02要求所有者审批触发策略的付款
- 03转账前检查收款地址
- 04付款文本被标记时暂缓请求
MCP 相关
它提供金库付款、地址检查、余额、策略、付款状态与历史记录等工具,也支持可选的 Sentinel 检查。Agent 密钥只能申请付款,金库合约负责执行支出规则。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @zaxcoraider/agentguard-mcpAGENTGUARD_VAULTYour AgentGuard vault account, e.g. my-agent.agentguard.testnetNEAR_NETWORKtestnet (default) or mainnetAGENTGUARD_AGENT_KEY密钥The agent's ed25519 function-call key; without it the server is read-onlyAGENTGUARD_KEY_FILE密钥Path to a key file to read instead of AGENTGUARD_AGENT_KEYNEAR_RPC_URLOverride the NEAR RPC endpointSENTINEL_URLWhere to buy Sentinel's paid check本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
AgentGuard MCP 服务
让任何 MCP Agent(Claude Code、Claude Desktop、Codex 等)都能通过 AgentGuard vault 在 NEAR 上付款。Agent 只持有一个函数调用密钥,用来请求 vault 付款。vault 合约会在链上决定:paid、pending(等待人工所有者处理)或 blocked。即使 Agent 遭到提示词注入并请求任意付款,合约仍会拒绝。
工具
| 工具 | 功能 |
|---|---|
agentguard_pay | 请求 vault 向 recipient 支付 amount_near。返回 paid / pending / blocked、原因和交易链接。将发票 / 邮件 / 页面作为 source_text 传入:如果其中显示了提示词注入手法,就会请求 vault 暂缓付款,供所有者审核(flagged_for_review) |
agentguard_check_address | “向此地址付款安全吗?”检查共享诈骗登记表、账户是否存在、是否为合约、是否在允许列表中、是否有相似名称,以及(提供 source_text 时)对付款请求文本进行提示词注入扫描。返回 allow / warn / block + 原因 |
agentguard_balance | 余额、可用余额、过去 24 小时的支出、已支付 / 已拦截 / 待处理的数量 |
agentguard_policy | 单笔付款上限、24 小时限额、审批门槛、允许列表、登记表、锁定状态 |
agentguard_payment_status | 按 ID 查询一笔付款(例如所有者是否已批准) |
agentguard_history | 最近的付款请求,包括已拦截的请求 |
agentguard_sentinel_check | 通过 HTTP 402 购买 Sentinel 的付费检查:通过你的 vault 支付价格(适用你的规则;绝不超过 max_price_near,默认值为 0.02),使用 X-PAYMENT 重试,并返回检查结果 + 交易。设置 SENTINEL_URL |
设置
cd packages/mcp
npm install
npm run build
配置(环境变量):
| 变量 | 默认值 | 含义 |
|---|---|---|
AGENTGUARD_VAULT | (必填) | 你的 vault,例如 demo2.agentguard.testnet |
NEAR_NETWORK | testnet | testnet 或 mainnet |
AGENTGUARD_AGENT_KEY | 从文件读取 | Agent 的 ed25519:... 函数调用密钥 |
AGENTGUARD_KEY_FILE | ~/.near-credentials/<network>/<vault>.json | 如果未设置上方变量,则从此处读取密钥(由 scripts/gen-agent-key.mjs 创建) |
NEAR_RPC_URL | FastNEAR 公共 RPC | 覆盖 RPC 端点 |
SENTINEL_URL | https://sentinel.agentguard.app | agentguard_sentinel_check 购买检查的地址(本地 Sentinel 可设置为 http://localhost:3000) |
没有密钥时,服务仍会运行,但只能读取。
Claude Code
claude mcp add agentguard -e AGENTGUARD_VAULT=demo2.agentguard.testnet -- npx -y @zaxcoraider/agentguard-mcp
已发布到 npm,包名为 @zaxcoraider/agentguard-mcp。也可以从克隆的仓库运行:-- node /absolute/path/to/packages/mcp/dist/index.js。
然后向 Claude 提问:“检查向 agentguard-evil.testnet 付款是否安全,然后向 agentguard-shop.testnet 支付 0.05 NEAR 买咖啡。”
任意 MCP 客户端(JSON 配置)
{
"mcpServers": {
"agentguard": {
"command": "npx",
"args": ["-y", "@zaxcoraider/agentguard-mcp"],
"env": { "AGENTGUARD_VAULT": "demo2.agentguard.testnet", "NEAR_NETWORK": "testnet" }
}
}
}
获取你自己的 vault(testnet,约 2 分钟)
需要 near CLI 和一个 testnet 账户(YOU.testnet)。以下每一步都在 testnet 上运行过(vault 为 guide-test.agentguard.testnet,参见 docs/TESTNET-RESULTS.md §9)。
1. 创建 vault,使用工厂创建。1 NEAR 会存入 vault(仍归你所有)。vault 创建时不含完整访问密钥:
near contract call-function as-transaction agentguard.testnet create_vault json-args '{
"name": "my-agent",
"policy": {"max_per_payment": "500000000000000000000000", "daily_limit": "1000000000000000000000000",
"approval_threshold": "200000000000000000000000", "unknown_recipient": "require_approval",
"pending_ttl_ns": "86400000000000"},
"allowlist": ["agentguard-shop.testnet"]
}' prepaid-gas '100 Tgas' attached-deposit '1 NEAR' sign-as YOU.testnet network-config testnet sign-with-keychain send
这意味着单笔付款上限为 0.5 NEAR,每日上限为 1 NEAR,超过 0.2 NEAR 需要你批准,向陌生人付款则需要等待你批准(金额以 yoctoNEAR 为单位,1 NEAR = 10^24)。
**2. 创建 Agent 的密钥。**密钥会保存到 ~/.near-credentials/testnet/my-agent.agentguard.testnet.json;只会打印公钥:
node scripts/gen-agent-key.mjs my-agent.agentguard.testnet # from the repo root
**3. 将该密钥交给 vault。**它只能调用 request_payment:
near contract call-function as-transaction my-agent.agentguard.testnet add_agent \
json-args '{"public_key": "ed25519:<printed key>", "label": "my-agent"}' \
prepaid-gas '30 Tgas' attached-deposit '1 yoctoNEAR' sign-as YOU.testnet network-config testnet sign-with-keychain send
4. 将 MCP 服务指向该 vault(AGENTGUARD_VAULT=my-agent.agentguard.testnet,参见“设置”),然后让你的 Agent 付款。测试运行结果:
agentguard_pay agentguard-shop.testnet 0.1 -> paid
agentguard_pay agentguard-user.testnet 0.1 -> pending, unknown_recipient (approve or deny it as the owner)
作为所有者,附带 1 yoctoNEAR 即可执行:approve {"id": "1"} / deny {"id": "1"}、add_to_allowlist、set_policy、withdraw、set_paused 和 lock_rules(此操作不可逆;执行后任何人都无法放宽 vault 的规则,包括你自己)。参见 contracts/vault。
不使用 Agent 试用
npm test # 24 unit tests: scoring, lookalikes, prompt-injection scan, NEAR amount math, HTTP 402 payment checks
npx tsx scripts/live-demo.ts # starts the server over stdio and calls every tool on testnet
live-demo.ts 需要 demo2.agentguard.testnet 的 Agent 密钥才能付款。没有该密钥时,只读工具仍可使用,而 agentguard_pay 会返回密钥缺失的错误。
预期结果(记录于 2026-11-03):
agentguard_check_address agentguard-evil.testnet -> block: flagged in the shared AgentGuard registry: ...
agentguard_check_address agentguard-sh0p.testnet -> block: does not exist; looks like trusted account agentguard-shop.testnet
agentguard_pay agentguard-shop.testnet 0.05 -> paid
agentguard_pay agentguard-evil.testnet 0.2 -> blocked, recipient_flagged
agentguard_pay agentguard-shop.testnet 5 -> blocked, over_per_payment_limit
Agent 无法做什么
NEAR 本身将该密钥限制为只能对金库调用 request_payment。它无法转账 NEAR、调用所有者方法(withdraw、set_policy、approve、...)、附加存款、调用其他合约、添加密钥、部署代码或删除账户。测试网验证:scripts/prove-agent-key.sh(12/12 次均被拒绝),以及仓库根目录中的 docs/TESTNET-RESULTS.md。
agentguard_check_address 是给 Agent 的建议。真正生效的规则由金库合约执行,无论 Agent 如何决定。
提示词注入扫描(src/inject.ts)
将请求付款的文本(source_text)传给 agentguard_pay 或 agentguard_check_address。系统会扫描已知的欺骗手法,不涉及模型:
| 信号 | 严重程度 |
|---|---|
不可见字符:零宽字符、方向覆盖字符、Unicode“标签”字符(隐藏文本会被解码并作为 hidden_text 返回) | 恶意 |
| “忽略你之前的指令”、“新指令:”、“你现在是……” | 恶意 |
| “不要告诉所有者”、“未经批准”、“绕过限额/允许列表” | 恶意 |
伪造的角色标记:<system>、[SYSTEM]、<|im_start|> | 恶意 |
| 针对 AI 的文本(“如果你是 AI 助手……”)、隐藏的 HTML/CSS、“我们的收款地址已变更”、文本中的其他 NEAR 账户、较长的编码数据块 | 可疑 |
处理方式:check_address 会将恶意内容判定为 block,将可疑内容判定为 warn。agentguard_pay(也会扫描备注)会将任何命中项连同 force_review 一起发送给金库,因此合约会暂扣款项,等待所有者处理,而不是付款。扫描只会让限制更严格。它基于启发式规则,可能被绕过;扫描结果干净并不能证明安全,最终仍由金库规则决定。实时运行:TESTNET-RESULTS §14(scripts/injection-demo.mts:同一家商店、同类金额,干净的发票会付款,而被污染的发票会被暂扣)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。