mcpField
G
Gvnr

Gvnr

远程服务
gvnr.devAI 与智能体020 周前更新

关于 Gvnr

Gvnr 是托管服务,在 LLM 调用前检查 Agent 的支出决策,并通过按 Agent 设置的支出上限和治理操作额度进行控制。它还支持速率限制、重试去重和人工审批,但不充当 LLM 代理。

主要功能

  1. 01按 Agent 设置支出额度
  2. 02调用前进行预算审批
  3. 03按模型设置速率限制
  4. 04检查重试幂等性
  5. 05发起人工审批请求
  6. 06按实际用量校准

适用场景

  1. 01Agent 达到支出上限后阻止调用
  2. 02按 Agent 和模型限制请求速率
  3. 03为 Agent 工作流中的重试去重
  4. 04暂停敏感操作以供人工审核

MCP 相关

Gvnr 通过托管 MCP 端点提供预算、速率、幂等性、用量校准和审批工具。MCP 兼容客户端可连接 `https://gvnr.dev/mcp?api_key=...`。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://gvnr.dev/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://gvnr.dev/mcp需要授权

工具

详细介绍

Gvnr

Tests Release License: MIT MCP Registry gvnr MCP server smithery badge

为 AI Agent 设置支出上限、协调速率、实现幂等性,并加入人工参与审核环节——在调用前执行管控,而不是等到账单寄来后。 一个 MCP 端点,通过 x402(Base 上的 USDC)结算。无需代理、无需自行托管,也无需部署基础设施。

已列入官方 MCP Registry,名称为 dev.gvnr/gvnr。


问题

Agent 在生产环境中的成本比预估高出 10–12 倍。系统提示词、重试循环和工具调用会迅速叠加——失控的 Agent 可能在 11 天内产生 47,000 美元的账单。常见的解决方案是自行托管 LiteLLM 之类的网关,但这意味着要运行大多数开发者都不愿设置的基础设施。

Gvnr 是一种托管式替代方案:一个外部权威服务,Agent 在支出前向它查询。Agent 会询问“我可以进行这次调用吗?”,并根据答复采取行动。


工作原理

Gvnr 不是 LLM 代理——你的令牌不会经过它,你直接向模型提供商付费。Gvnr 管控的是支出的决策,通过两个互相独立的计量项实现:

1. 治理操作配额——你向 Gvnr 购买的内容。 你的账户持有一定余额的治理操作(operations_remaining)。每次 budget_clear 会消耗 1 个操作。你使用 USDC 为其充值;它与 LLM 支出相互独立。get_balance 会报告其余额。

2. 支出额度——由你为每个 Agent 设置的美元上限。 set_envelope(agent_id, limit_usd, window) 为 Agent 设置每日或每次会话的美元上限。Gvnr 会跟踪预估支出,超过上限后即予以拒绝——这就是防止失控的安全措施。不会有资金转移;这只是由你控制的记账上限。

只有在同时满足以下条件时,budget_clear 才会获批:账户配额中仍有可用操作,且 Agent 的支出未超过额度。流程如下:

  1. Agent 在每次 LLM 请求前调用 budget_clear(agent_id, model, estimated_tokens)。
  2. Gvnr 检查操作配额和 Agent 的支出额度,并返回 { approved: true, ... } 或 { approved: false, reason }。
  3. 如果请求被拒绝,Agent 会跳过调用(或通过 request_approval 请求升级审批)。
  4. LLM 返回响应后,调用 reconcile(...) 并传入实际令牌数,以便额度跟踪实际费用,而非预估费用。

快速开始

1. 创建账户
curl -X POST https://gvnr.dev/v1/account
# { "api_key": "bg_...", "account_id": "...", "operations_remaining": 25 }

新账户包含 25 个免费试用操作——在充值前,足以完整运行整个流程(设置额度、调用 budget_clear、调用 reconcile)。你的 api_key 是每次调用所需的凭证;account_id 仅供支持团队内部查询。账户创建仅需凭证(原生支持 Agent),这是有意的设计——电子邮件为可选项,需另行通过 POST /v1/account/notification-email 设置,仅用于发送人工审批通知。

2. 为治理操作配额充值

按使用量付费:每 1 美元可购买 1,000 个操作,金额不限(可用 1 美元试跑全流程),使用 Base 上的 USDC。打开付款页面,输入金额并提供 API 密钥:

https://gvnr.dev/pay?usd=1&api_key=bg_YOUR_KEY

向页面显示的地址发送 USDC,然后粘贴交易哈希——链上验证完成后,操作数将按收到的金额比例入账。程序化客户端也可以直接提交哈希:

curl -X POST \
  -H "Authorization: Bearer bg_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tx_hash":"0x..."}' \
  https://gvnr.dev/v1/account/topup-verify
# { "operations_remaining": 1000, "credited_ops": 1000, "credited_usd": 1 }

也可以使用 x402 客户端(Base MCP、AgentKit、x402-fetch)一次往返完成结算——金额由你指定:

POST https://gvnr.dev/v1/account/topup?usd=5      # → 402 challenge → pay → 5,000 ops credited
3. 为你的 Agent 设置支出额度
curl -X PUT \
  -H "Authorization: Bearer bg_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent_id":"my-agent","limit_usd":5,"window":"daily"}' \
  https://gvnr.dev/v1/budget/envelope
# { "success": true, "agent_id": "my-agent", "limit_usd": 5, "window": "daily" }
4.(可选)为每个(Agent、提供商、模型)设置速率额度
curl -X PUT \
  -H "Authorization: Bearer bg_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent_id":"my-agent","provider":"anthropic","model":"claude-sonnet-4-6","requests_per_minute":30}' \
  https://gvnr.dev/v1/rate/envelope
5. 每次 LLM 请求前:先调用 budget_clear,再调用 rate_check
curl -X POST \
  -H "Authorization: Bearer bg_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent_id":"my-agent","model":"claude-sonnet-4-6","estimated_tokens":2000}' \
  https://gvnr.dev/v1/budget/clear
# { "approved": true, "remaining_usd": 4.994, "operations_remaining": 18999 }

curl -X POST \
  -H "Authorization: Bearer bg_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent_id":"my-agent","provider":"anthropic","model":"claude-sonnet-4-6"}' \
  https://gvnr.dev/v1/rate/check
# { "allowed": true, "requests_remaining_this_minute": 29 }
6.(可选)使用 idempotency_check 去重重试
curl -X POST \
  -H "Authorization: Bearer bg_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key":"job-abc-123","ttl_seconds":3600}' \
  https://gvnr.dev/v1/idempotency/check
# First call:  { "is_first_call": true,  "ttl_remaining_seconds": 3600 }
# Replay:      { "is_first_call": false, "ttl_remaining_seconds": 3598 }
7. LLM 响应后,根据实际用量进行结算
curl -X POST \
  -H "Authorization: Bearer bg_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent_id":"my-agent","actual_input_tokens":1800,"actual_output_tokens":2400}' \
  https://gvnr.dev/v1/budget/reconcile
# { "ok": true, "drift_usd": 0.003, "remaining_usd": 4.991, "operations_remaining": 18999 }

reconcile 会根据估算成本与实际成本之间的偏差调整支出额度(操作配额不受影响)。无需再次传入模型——reconcile 会复用你之前调用 budget_clear 时使用的模型。Anthropic、OpenAI 和 Gemini 都会在 usage 字段中返回实际令牌数——传入这些数据,即可确保额度准确反映实际情况。


人机审批

当 Agent 遭到拒绝或需要执行敏感操作时,可以暂停并请求人工审批,而不是直接失败:

# 1. Open a request — returns an approval_id and a mobile-friendly approval_url
curl -X POST -H "Authorization: Bearer bg_YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"agent_id":"my-agent","action_summary":"Spend $40 on a research run","ttl_seconds":3600}' \
  https://gvnr.dev/v1/approval/request
# { "approval_id": "...", "approval_url": "https://gvnr.dev/approve/...", "expires_at": ... }

# 2. The human opens approval_url and taps approve / deny (emailed if notification-email is set).

# 3. Your agent polls until the decision lands:
curl -H "Authorization: Bearer bg_YOUR_KEY" \
  https://gvnr.dev/v1/approval/check/APPROVAL_ID
# { "decision": "pending" }  →  "approved" | "denied" | "timeout"

Agent 收到 approved 后继续执行,收到 denied 后跳过,并可自行处理 timeout(在 expires_at 之前未收到决定)。


MCP 设置

添加到 Claude Desktop 或任何兼容 MCP 的客户端:

https://gvnr.dev/mcp?api_key=bg_YOUR_KEY
Claude Code
claude mcp add gvnr --transport http \
  "https://gvnr.dev/mcp?api_key=bg_YOUR_KEY"
MCP 工具
工具描述
budget_clear(agent_id, model, estimated_tokens)检查是否符合操作配额和支出额度;消耗一次操作配额
set_envelope(agent_id, limit_usd, window?)创建或更新 Agent 的美元支出上限
get_balance()剩余的治理操作配额(operations_remaining)
reconcile(agent_id, actual_input_tokens, actual_output_tokens)LLM 响应后,将估算值与实际值之间的偏差计入支出额度
set_rate_envelope(agent_id, provider, model, requests_per_minute)为每个(Agent、提供商、模型)分配速率额度
rate_check(agent_id, provider, model)根据速率额度批准或拒绝;拒绝时返回 retry_after_ms
idempotency_check(key, ttl_seconds?)使用调用方提供的键对重试进行去重;返回 is_first_call
request_approval(agent_id, action_summary, ttl_seconds?)发起人工审批请求;返回 approval_id
check_approval(approval_id)轮询审批状态:pending / approved / denied / timeout

REST API

除 POST /v1/account 外,所有端点都需要 Authorization: Bearer bg_YOUR_KEY。

TypeScript 用户: 根据在线 OpenAPI 规范生成完整类型:npx openapi-typescript@latest https://gvnr.dev/openapi.json -o types/gvnr.d.ts。有关集成方式(类型化的 fetch、x402 充值、判别式响应联合类型),请参阅 TYPESCRIPT.md。

账户与充值
方法路径描述
POST/v1/account创建账户——返回 api_key
GET/v1/account/balance剩余的治理操作配额(operations_remaining)
GET/v1/packs/:pack/info公开信息——预设详情、USDC 地址、原始金额
POST/v1/account/topup-verify/:pack提交交易哈希 → 链上验证 → 入账(按实际收到的金额比例计算)
POST/v1/account/topup?usd=<amount>受 x402 保护的按需充值——自行指定金额(最低 $1,最高 $100)
POST/v1/account/topup/:pack受 x402 保护的预设充值(机器客户端)
预算
方法路径描述
POST/v1/budget/clear额度检查调用——批准或拒绝
POST/v1/budget/reconcile将估算值与实际值之间的偏差计入额度
PUT/v1/budget/envelope创建或更新 Agent 支出上限
GET/v1/budget/envelope/:agent_id读取额度状态
DELETE/v1/budget/envelope/:agent_id删除 Agent 的额度
费率 · 幂等性 · 审批
方法路径说明
PUT/v1/rate/envelope设置每个(Agent、提供商、模型)的 RPM 份额
POST/v1/rate/check运行时费率检查——拒绝时返回 allowed 标志和 retry_after_ms
POST/v1/idempotency/check根据调用方提供的键去重——返回 is_first_call
POST/v1/approval/request发起人工审批请求——返回 approval_id
GET/v1/approval/check/:approval_id轮询审批结果:pending / approved / denied / timeout
额度检查响应
{ "approved": true, "remaining_usd": 4.994, "operations_remaining": 18999 }
{ "approved": false, "remaining_usd": 0, "reason": "envelope_exceeded" }

拒绝原因:no_credits(操作额度已用尽) · no_envelope(Agent 没有额度包) · envelope_exceeded

状态码

拒绝不属于 HTTP 错误——它会以带标志的 200 响应返回,因此请检查响应正文,而非状态码:

情况HTTP正文
budget_clear / rate_check 允许 或 拒绝200{ approved/allowed: true | false, ... }
充值需要付款402x402 挑战(位于 payment-required 标头中;请参阅“计费”)
API 密钥缺失 / 无效401{ error }
按 IP 限制创建账户的频率429{ error: "rate_limited", retry_after_ms }
请求正文格式错误400{ error, hint }

计费——治理操作,而非你的令牌

Gvnr 按治理操作收费,而非按 LLM 用量收费。模型令牌由你的提供商计费;Gvnr 不会接触这些令牌。

充值采用按用量付费,1 美元兑换 1,000 次操作,使用 Base 主网上的 USDC——在 /pay 输入任意金额,经链上验证后,操作额度会按比例到账。无最低金额,也无订阅;以下金额只是可一键选择的预设:

金额治理操作次数链接
$1(试用)1,000/pay?usd=1
$1919,000/pay?usd=19
$3939,000/pay?usd=39
$7979,000/pay?usd=79

支持 Base MCP、AgentKit,以及任何 x402 客户端。402 挑战遵循 x402 v2——付款要求(网络、USDC 资产、金额、payTo)会通过 payment-required 响应标头返回(正文为空),因此 x402 客户端会自动完成结算;只有自行实现时才需要手动解析。


额度包窗口

  • daily — 每天 UTC 午夜重置
  • session — 永不重置(用于一次性任务;由调用方管理)

支持的模型

模型定价是在热路径上的静态查找,不会进行外部调用。从额度包中扣除的预估值为 rate(model) × estimated_tokens ÷ 1,000,000(聊天模型使用输出费率,嵌入模型使用输入费率),之后会按实际用量结算。以下是每百万令牌的费率(美元):

模型输入输出
claude-opus-4-8 / 4-7 / 4-6$5$25
claude-sonnet-4-6$3$15
claude-haiku-4-5$1$5
gpt-4o$2.50$10
gpt-4o-mini$0.15$0.60
gpt-4-turbo$10$30
text-embedding-3-small / -large$0.02 / $0.13仅输入
gemini-embedding-001 / -2$0.15 / $0.20仅输入

嵌入 / 仅输入模型按输入令牌计费——将输入令牌数作为 estimated_tokens 传给 budget_clear。未知模型会回退到较为保守的 $15 / $75 默认值。


网络

运行于 Base 主网(X402_NETWORK=eip155:8453),使用真实 USDC 结算。试用没有最低金额:只需充值 $1(1,000 次治理操作),即可端到端体验完整的实时支付流程——无需测试网。


许可证

MIT — 请参阅 LICENSE。

官方托管服务为 https://gvnr.dev。自托管实例与官方服务无关。


致谢

gvnr 由 mightbesaad 与 Claude Code(Anthropic)紧密合作设计并构建,主要使用 Claude Opus 4.8。从底层架构和计费模式,到此代码库中的代码,这都是真正的协作成果。感谢。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。