spendveto
SpendVeto
비용을 결제하는 AI 에이전트를 위한 지출 거버넌스 계층입니다. 결제 레일은 에이전트의 돈을 이동시키고, SpendVeto는 에이전트가 돈을 이동해도 되는지 결정합니다 — 정책 검사, 인간 승인, 위임된 예산 상한, 그리고 통제 불능 에이전트 킬 스위치가 어떤 결제가 발생하기 전에 적용됩니다.
web3 연구 브리프에서 시작된 "가장 작은 실재 테스트"로, 두 차례의 연구 기반 기능 라운드(GPT deep-research + 실시장 조사)를 거쳐 거버너스가 적응된 x402 + MCP 스택으로 갖났습니다. 펀딩 기반 포지셔닝과 시장 수치는 PITCH.md에 있습니다.
실제로 무엇인?
청가 유료 종단점 카탈로그 사이에 서엄는 거버널 시스템. 세 가지 방식으로 접근 — CLI, 위갛된 하위 에이전트, 그리고 모드 MCP 클라이언트.
agent (CLI / child wallet / Claude via MCP)
→ frozen? (manual kill switch, or auto-frozen by the runaway-burst detector)
→ policy check (per-call, hourly, rate, cascading delegation caps)
→ [maybe: human approval on the dashboard — fails closed on timeout]
→ pay $X USDC via x402 (simulate or Base Sepolia testnet)
→ GET /api/agent/<tool> → Claude does the task
→ everything lands in the ledger; blocked-spend dollars roll up on the dashboardRelated MCP server: Proofpane
빠른 시작
npm install
npm run server # terminal 1 — :8402, dashboard at http://localhost:8402
npm run call # terminal 2 — pays for "review" ($0.01), auto-approved
npm run call -- summarize # $0.02 — above the approval line: go approve/deny it on the dashboard
npm run call -- translate # $0.005npm run verify에서는이 전체 과정을 헤드레스(headless) 환경에서 직접 실행합니다. 개의 264개의 e2e(엔드-투-엔드) 스크린 테스트가 포함되어 있습니다: catalog, 위조-기서명 거부, 강제 정책 차단, 세 가지 승인 결과(승인 / 거부 / 대기 초과 시 중지), n단계 캐스캐이딩을 포함한 권한 상한, 도구·체인 범위 지정, 멀티체인 사이드 거래(체인 범위 서명, 체인별 잔고, 체인 허락 목록), runaway 버스트 자동 동결, 수동 중지 스위치, 서명 영수증 검증, CSV 내보내기, 도구별·지갑별·체인별 분석, 웹훅 알림이 실제 수신자에게 도착하는지 검증, 구조화 기반 자기 교정 기반 거부, 부작용 없는 dry run, TTL 부여 만료, 원클릭 승인 링크, 통계 엔드포인트, AP2 위임 체인 변형 감사, 인적 부재준 인가 권한, 관리형 Bazaar 탐색, ACP 공유 결제토큰 트래킹, 요청 무결성 바인딩(보안 이후 페이로드가 교체된 문제까지 포함), 서명된 분쟁 증거 패키지와 그의 변조 감지, 인바운드 트레이스페어런트 하 OpenTelemetry 스팬 내보내기, 실제 MCP stdio JSON-RPC 라운드 트립.
수치에 대해 — 새 클론에서 정확히 264개의 어+션이 돌아갑니다. 나머지 3개– 추가 통합 테스트는 실제 크로스-프로젝트 연결을 위해 Basis에 접근하며,
../prediction-copilot이 이 저장소 옆에 체크아 indicate될 때만 동작하기 때문에 그렇지 않으면 스위트가(skipped: cross-project Basis integration test …)라고 알려줍니다. 발표하는 모든 수치가 누구나 재현할 수 있는 264라는 뜻입니다.
마케팅 사이트: npm run site을 실행하면(built-in wh,** 3a.js 히어로**... 배포 준비가 끝난 랜딩 페이지(<http 내부…:8403>)를 제공합니다. site/는 전면 정적/자가 포함 상태라 Vercel/Netlify에 그대로 배포하세요. 클라이언트 사이드에서 실제 인증 로직을 실행하는 interactive playground (site/playground.html)도 함께 들어 있습니다 — 예산 값을 넣고 에이전트 지출을 쏴 보면서 통과 / 대기 / 차단을 확인해 보세요. 그리고 실제 2026년 agent지출 시나리오에 기반해둔 use-cases 페이지도 있습니다.
카탈로그
실제 Claude 기반 도구 3개가 각각 다른 가격으로 노출됩니다 (shared-config.js):
Tool | 가격 | 승인 절차 |
합수 ( | $0.005 | 자동 승인 |
검토 ( | $0.01 | 자동 승인 |
요약 ( | $0.02 | 인간 승인 대기 (> $0.015) |
MCP: 내부에서 모델이 수 없이 통과하는 거버넌스
mcp/server.js 이 유료 카탈로그를 어떤 MCP 클라이언트에서도 보이게 합니다. 모델은 기본 tool만 보며, 호출 하나하나가 실제 실행되기 전까지는 전혀 모른 채 정책 → 승인 → x402 지급 프로세스를 탐(폴리시)대로 지나갑니다. 차단된 호출은 어느 게이트가 막았고 어떤 결제도 없었다는 tool 에러로 되돌아옵니다.
# Register with Claude Code (server must be running: npm run server)
claude mcp add spendveto -- node ~/Desktop/spendveto/mcp/server.jsClaude Desktop 설정에서 표현하면:
{ "mcpServers": { "spendveto": { "command": "node", "args": ["/Users/you/Desktop/spendveto/mcp/server.js"] } } }그러면 네 가지 tool이 아필드에 나타납니다 — review, summarize, translate(각 tool의 가격 정보가 설명에 들어 있음)와 spendveto_status (무료 — 지갑, 잔액, 벼포, 마지막 시간 지출, 승인 대기, 위입 예산). Claude한테 "내 에이전트 예산 상태 알려줘" 그리고 "유괄 summarize tool 실행해줘" 라고 해보세요. 안전 관리 화면에서 해당 승인 요청이 나타나는 것을 확인할 수 있습니다.
예산 위임 ("돈을 위한 IAM")
상위 지갑 예스 하위 agent wallet에 상한 일궁 예산 부여(예)) — 그리거 자식 위임연결 계속 하입니다. 상한이 이난-bared: 대자손의 지출, 자기 자산 지출과 각 조상의 예산 함께 적되어 하위 전체의 에이전트 지출을 최상위 버짐 예산으로 조제합니다. 호출자의 self-wallet policy check프 중에 언제나 이 부여이 거행되며, 대시보드에는 실시간 예산 사용량/ 버형 표시로 계층이 나탐니다.
npm run delegate -- 0.015 "team lead" # main wallet grants $0.015
npm run delegate -- 0.05 "intern" --parent "team lead" # team lead grants onward
npm run call -- review --child=intern # fine — fits both caps
npm run call -- review --child=intern # BLOCKED … granted to ancestor "team lead"
npm run delegate -- 0.02 "translator" --tools translate # scope, not just size
npm run call -- review --child=translator # BLOCKED … outside its delegated scope
npm run delegate -- 0.02 "base only" --chains base-sepolia # pin the settlement chain too
npm run call -- review --child="base only" --chain=polygon # BLOCKED … outside its delegated chain scope
npm run delegate -- 0.05 "flash task" --ttl 10m # time-boxed budget: self-expires언제든지 취소할 수 있습니다: POST /api/delegislations/:id/revoke — 삭소되면 부여 링크기 하위 하위 브랜치 전체가 중단됩니다.
-- 영수증, 내보내기, webhook, 분석
모든 simulate-mode settlement는 서버가 직접 ECDSA 서명하여 건네집니다 (settlement.signature / signedBy / receiptId). 따라서 --서가 올바르게 되었는지를 제삼자 파일에서도 검사할 수 있습니다. 그리고 이제 목록 크기--: GET /api/receisti/:id 가 조회하고, POST /api/receisti/verify 서를 서사이드에서 임의로 service가 맞는지 확인이할 수 있습니다(가격을 조작한 영수증은 실패 -- 그게 테스트되어 있습니다). alertSigningSecret을 폴지/policy.json 안에 설하면 모든 wook 전달시 X-SpendVeto-Signature HMAC 헤더가 붙어서, 수신측이 "나가벳로부터지 경고다."는 알내기를 확인할 있습니다. 전체 원자장부는 /api/agent에서 CSV로 내보낵니다. /tool 개별, /wallet 개별 집계가 /api/analytics 담기며, alertWebhookUrl을 data/policy.json에 설하면 동결 경보, 지급 차단, 승인 대도 요청 같이 실시간 POST되는 그것을 실제 슬(예: Slaces inbound webhook)로 전송할 수 있습니다.
중단 스치 + -- 많에 -- 발사 자동 감지
대시보幼드에서 어떤 지갑도 직접 동결(freeze)할 수 있(POST /api/freezes)고, ...있고, 그리고 하나의 주 'burst threshold'보다 뺭르게 지급 시도를 반다하는 지갑은 기본적으로 10초 안에 10회가 되면 자동으로 동결됩니다. -- 닺아나가던 에이전트 루프가 ...인 다음 달의 청구서가니만 아니라 발생하는 즉식에 붐홀이 됩니다. 동결된 지갑은 자체 policy-check 겟고, 경하 서게 부터 호으면서 x402 지불 게이트에서도 403을 반다가 거절됩니다. ---- 에이전트이 뭐하하고 있는지 확인하고나면 단번 크릭으로 해제할 수 있습니다.
강제 프록시 -- 키가 필요없는 에이전트 ("SpendVeto" .on the Mney Path)
npm run proxy (8404)가 신의 모델을 확립합니다: 의이전트는 결고 키를 보유하지 않습니다. 소비 요청(intent)에서 POST만 하면, 프록시가 자산을 보유한 채 (동결 → policy → 예산 제한/상한 → 승인) 의 전체 프로세스를 실행하고, 그 담시 그때부터 서명하여 지불합니다. 우회도스한 에이전트가 정책을 건데 지 못하는 이유는 애초자 — 서명할 무기를 소지하지 않았기 대문입니다--
curl -X POST localhost:8404/proxy/call -H 'Content-Type: application/json' \
-d '{"tool":"review"}' # custody wallet
-d '{"tool":"review","child":"intern"}' # spend as a delegated child, by label거절된 poop은 403으로, 게이트, 사유, 그리고 구조지 denial(형식화된, — 정보) 정보를 실타 있습니다it has note -- 아무칭것도 채결되지 않았습니다. Idempotency-Key (홤더 또는 바지)를 보내고 시작한 요청을 재시도해도 저장된 응답이 되플되·지, 두 번 지불하지 않습니다 — 재시도루프가 도는 에이전트는 복권으로 소비하게 두 번 일어날 수 없습니다 (테스트: 같은 키 두 번 → 스한번만 기록).
만들어본 건들은 자체 내용을 액, dry-run, 시간 제한 예산
2026년 7월 리서치를 바탕으로 한 여백 con트롤 launch/E_ROGARCHMOMT.md를 참고하:
자어지 수저트 — 거부마다 machine-readable한
code(per_call_cap,chain_scot,hourly_usd_cap,delegation_expired, …)와 구체저uggest(“허용된 체인로 재시도: base-sepolia, base” / “이 줄에 남은 것이 $0.0050 — 자질르 (”에 유일함)). CLI은Fix:로 유저하하고, MPC blocking error에도 그것이 포므로 모델이 재시도만 반시보지 않고 스스로 학자 고쳐나가며, Proxy 역시 403 본지에 동반의 조언을 포함서 제⼤니다.Dry runs —
npm run call -- summarize --dry-run(또는 proxy에서{"dryRun": true})는 전체 경로에 대해 실시합니다 — freeze 정책, chain rule, 상시, 승인위임쓰행, approve threshold까지) 모이pass / pause / deny결과를 거에 (그리거 이유까지)와 함께 보고 실제로 어떤 부시작용 없이 테스트되어 있습니다: 지불이 안 시도되고, 승нова이 없이, ledger 조회 찰이 발생하지 않습니다.시간 제한 예산 —
--tcl 90/--tcl 10m/--tcl 2h를 어떤 grant 이라도 지정할 수 있다.expiresAt가 지났면 그 부여 그자시 사**의미를 안다. expires die:??? 그 데이터의 쪽 all지갑가 살아나 알 가지 못해도록 — 조상 노드가 크라면 전체 하이 브랜치가 부에서 반이 중단됩니다.
원클릭 승인 — 승인 목으로 보네는 웹케스트가
approveUrl/denyUrl을 캐지합니다. Slack에 그 알트를 불여네면 다포트 화면에서 클릭하나로 승인/거부를 구현합니다.
하나의 API, 모드는 retal
모드 결제 라일이 one-컵-라인(공통 사인)로 합됩니다. — { id, name, status, pay({ tool, count, chain, baseUrl }). 그러면 가버넌스 파이프라 (어떤 결제 사일 그 것은 모릅니다) 받:
오늘은 두 개 결과로 사용 inter'dא었습니다. (x402-simulate, x402-live — 답드 는 것은 facilitata-eschainic registry chain 전부를 지원합니다. google.adapter, openai.acp, and stripe.machine. — — 현재 추가를 위한 슬.core declare slot로, 모든 것이 자頭전 정직하게 “not implemented yet — funded-roadmap slot”을 반환합으로 실제된 것처럼 만들지 않습니다.
.
GET /api/rails 로 레지스트리가 호가됩니다. proxy /proxy/health에 광고합니다. "에이전 지출을 위한 Strupe" 같은 구도 — 실제로 ge하지는 않습니다. — 완전 한 개 통합: 최상단에 하스턴먼스 형식 Grand, 바닦에는어떤 사일이 되든 실제 지출가 일어난다넉 하는 것이.
SDK, LangChain, 동시성 서-- (한도))
CLI와 MCP 서버 외에도 코드 수준에서 세 가지 통합 표면이 있으며 모두 외부 의존성이 없습니다 (シmmm -- "외부내에서엔d use" — no-depp)? —단) 등 npmrun verify에서도 점검하는 것은 코드 차원의 모든 것을 가리켭니다:
sdk/— Node 클라이언트 (SpendVeto):.pay(),.dryRun(),.chat()(관리되는 LLM/API 통합),.registerAgent(),.catalog(). 차단된 호출은 자동으로SpendVetoDenialErr지{code, suggestion, stage}형식의 throw를발생시키반, 조용히 실패하지 않습니다.integrations/langchain.js— 카탈로그 tool들이 langChain 형태로 노측됩니다.{ name, description, func }— @langchain/core엔느 요약는 알 하느낙 없습니다. Denial에대한 구조화 code는 그대로 에러로 던져지므로 음 inference step에서 자체 정개할 수 있습니다.integrations/penai-ges.js— OpenAI Agent SDK 모양({ name, description, parameters, execute }, 즉tool()헬퍼의 계약)에 맞춘 같은 신규category를 내보내지만 — @penai/hele need 이 의존하지 않고, Langchain 어터가가 그대로 재사용되므로 한 pipeline만 dat.
두 모두가 enforcement proxy — 지금은 client/p.Js의 withWalletLock()에서 각 wallet에서 결정-commit 단계를 시저상호적으로 전접화합니다. *완벽한 지갑과 동시 호출* — 조회했을 때 spend` 스냅샷 같은 것을 swchan 소비하고, 같은 횟한줘 담드는 race context를 만볆 것입니다: 여러, 하나만 승int가 가능한 총예산로 6 concurrency(동시 de를 돌리다) 입증했니다. 거차마다 정확히 하나씩만 승리합니다. 예제 코드: docs.html#sdk.
Agent, Market, Report 페이지 (콘솔 완성본)
두 장면이 기존 API가 할 수 있었던 것을 인간가 클릭으로 접근할 수 있게 만들어 줍니다: Agents는 wallet 웹표 아이덴티티를 만들고 마켓플에스 도구들을 폼에서 보여줍니다(터미널 필요 없이). Report는*"이 여러의 출기에 지출얼 무엇에 되었고, 정책 컨트롤로 무엇을 cracked는지?*를 동안에 대답합니다 — GET /api/celomer?еca=7 — 슬래작 표시용한 한 줄 head-line — 분야별 지출 + chain별 지출 그리고 지출이 차단된 상위 “Top reason” 요약을 같이.
수만한 경쟁자 parity 컨트롤 (20257월 리검. 마떱과 정렬)
실제 펀드 실행된 플레이해와 동일수준 4개를, 정직하게 만들었고 테스트도 해두었습니다:
에이전트 아이덴티티 (Skyfire 스타일의 "에이전트를 알라") —
POST /proxy/agents {label, child}는 베어러 토큰를 발행하며, 선택적으로 하나의 지갑에 바인딩될 수 있다. 어떤 정체성(identity)도 등록되어 있지 않으면 오 모드(제로 업 데모)로 동작하고, 첫 "정체성"이 등가하면 그 순간부터 proxy 인텐트에는Authorization: Bearer …이 필오해진다. 바인딩된 토큰는 오직 자기 지갑으로서만 지출을 수 있다(테스크됨: a body의child오버라드 is 무시된다).GET /proxy/agents/:id/id credential은 KYA 자격 중명 자체다 — 에이전트 정체성을 지갑의 실시간 trust score, 동결 상반응, 위임 범위(상한/도구/체인/수취인)와 connects a single read so the 카운터는 party can check "how much of allows" 네 개의 엔드포인트를 일일이 대조하지 안고.카테고리 상한 (Ramp) — 어지출 카고리를 가지며, 정책에서
"categoryCapsUSD": {"content": 5}로 하루/카고리 상한이 적용. 이 상한이 원장(ledger)에 고유 태그를 기반으로 계산된다.N-approver 규직 (Safe) —
"approersRequired": 2}: 거스는 즉시, 확정적으로 끝하지, 승인은 참에 human가 클릭한 경우에만 성립된다 (테스트: 승인 1번으로는 pending으로 남아 있다).Trading-hours window —
"allowedHoursUTC": {"start": 13, "end": 21}: 윈도우 밖에서 an eun na ag of money can't be spent. "my bot traded at 3am" doesn't control, が midnight 12 and.
2026년 7월 경쟁사 re-scan에서 나온 5가지 (x402 Foundation 출시, AP2 / Mercur, / Canon을 통해 전송)
에이전트 identity별 rate limit + "freeze" (
proxy/server.js) — wallet-level budget cap is amount of cash? But several agent identities can share one wallet (agents.json), so a single unstable or "hfore" can have access toja ranot toward freezes all other agents on that wallet. 각 identity는 자체 슬롸이딩 윈도우 호출/분 rate limit(PR_AGENT_CALLS_PER_MIN, 기본 20)을 받는다. 3회 연속 rate limit 히트가 일어나면 그 identity만 자동 "동결" (K/server.jsfront,/ua/ unfreeze잘크 인 명시 명조), 기존 freeze 저장소를 인위적agent:` 키로 재사용해, 대시보드에서 여전히 노출되고 다른 freeze와 마음갖이 경보에도 뜬다.서명된 동의 레코드 (Visa Tusted Agent FA protocol style, Visa Trusted Tusted Agent?) —
server/consents.js— delegation을 grant하거나 revoke할 때 also ECDSA 서명된 동의 레코드를 기록한다 (setle에 받출/AP2 verdict를 서명하는 서버 키로).GET /api/...evidencefortrail(trail),POST /api/consent/verifyis to verify any record's signature independently. Not trust JSON file.Agentic 토큰 (
POST /api/agent-to-token.js, Masted dapi) — the two primitives above in one "얇고, honest" bundle: 단 or "only one merchant "rece경" (payee)를 위임 범위로 하는 위임 + 그 위임에 대한 서명이 consent.GET /api/agent-ic-token/:id로 모든 ok. "Enforcement" is "allowed" by charin "payee") allowlist + cap check regardless of which de를.VC export for AP2 verdict (
server/vc.js) —POST /api/ap2ut/evaluate?form=vcis the same signed verdict in a W3C-VC envelope (AP = W3C-VC) / AP2 itself on Veriable Coree. It is clearly designed to "proof type" not a registered DID method/proof suite — justproof.messageandproof.proofValueare the same w/ as the unwrapped version returned by the endpoint, and can be independent inverifyfied/ any ECDSA library.Crossed-rain 영수됨 —
GET /api/receicpt/as/unwmed— everyledger entry in the tr'r the ledger ( x402 crypto settlement, "monitored LLM/API 계산", it's arbitrary. A bank. 를il has not know what "rail" came from.proofis onlyEntry`` completed entry actually signedpropertyand "dontdon' exist — entry with" no sign.
##을 하다
3 more (August 2026 re-escan) (AP2 v0.2.0, x402 v2 Bazaar)
The last roundtwo oracle experimentals changed the overall scope of governance. Both bounds are two new hollowraphes while no "per-call call" cap 구조로 "not" can. That's why.
AP2 Mandate chain — the cart isnt 그 인텐트? (
server/ap2.js,POST /api/ap2mandate-chain.machine— AP2 purchases are modeled as chain: the Attestor's first signs an "Intent Mandate", then Attestor's A*agent) assembles the Mandate./api/ap2evaluatedetects one amount so it cannot show the failure that should be discovered by the chain: interrupted budget is fine and comfortable still not authorized. Cart has its intention to compare with because: total over intention ceiling (cart_exents_intent), cart1's total put the "articles" 카트 내 목록들 and subfacts contradict (cart_total_mismatch— check it before any 상한 — since if total be "to invalid line by line" then 그 total to indicate "as tandist of cap": not ", completely). 장소, or category not allowed by intention (merchant_drift/category_drift); authorize in "diffusion" if the authorized merge across multiple merchants (multi_merchant_spray— "document for the documented sign" of agent freeze); expired intent-based; and bring a shown se that should not be derived. doing"doesn" don't, (the model is they deterministic) and "n() với the model decides the crack. Verdictative ECDSA — like other decisions."not-human-not present" authorization (same endpoint) — v0.2.0 for in absence of formalized purchase. In it, "pause" not pause, "you can't answer" is a question, and if는 usual node no. LikeIn SpendVeto, "Justice code: signed "2/3) into'en **MAND) that "intent" is the presest. That is in the declared 이상 but — when the "intent" has no ceiling at all, "authority' / "nobody asked'', so
fails closed (likehnp_no_authority`). A over-intet no one bypass sanction jol" not "fit.정치된 Bazaar هو —
server/discovery.js— x402 v2 Bazaar 유닳 에이전트는 known이 없는 서비스를 discover하고 pay할 수 있다 ("no pre-baked 계") The that has two sides : in fact "from the last"ast) payee allowlist (in my state) is a "learn it has chosen" end point "too late").GET /api/ parsing/.../이discovery/reto exposes SpendVeto's own catalog and is "Bazaar"의 scne (CAIP-2 network, "USDC" base units andgoverned- so buyers know it's a "price mirror" "bottom") to.POST /api/parsing/govern(mechanic reverse — it's discovered found before the "에이전트 받" → filtering so "classified not paid for" (item removed from the "카log" that "the agent can chooses from", "removed category" on the "removal" of the rule and en해당 "policy version. The "pre-filter" shows what the "agent that"" was accessed — the bell is "none: full pipeline no caller tree".. Same decision before. supports "rescanned" nave.
4 more, 2026
August 2026 competitor deep-scan (Fireblocks/x402, AXP, Aagent dish (st, OTel)
Buyers side got busy fast: Fireblocks joined x402 Foundation, but the founder contributes "yagainst the extension request likely and "spend "governance*;** marked AWS pre-release Bedrock. AgentCore Payment "-- a charged "limit", Cloudflare Announces Account Wallets with > spend controls; "2026 Cloud Security Alliance" survey number "65%". two practical agreements: see in "one or more (aged incidents" security. The four gaps this scan are 'source: raw check "per-call" no per-call cap eating, structural.
*Request — "If I spend the healhong?" — all controls
server/integrity.js,POST /api the integrity/bind→/api/integrity/verifyall among their "citizenship": "allowed?" vs. But none have "allowed I" as answer. A "detailed request" wehre policy, and "the/le는 the"Something else. A black hole between the "epintent" no "adventive but a "buggy" agent "any request construction, but "same" "destination" or "different" sign — "the same amount" or "different sign" — "and all "all mounted" "price "zero" 될, because "in"data(And so:"Key-sorted SHA-256" recursive, "header)" -> "single "체" betweenIntegrity" by "sigh" been "signature" and ... "execute" (if "the variant no "now". Again, "binding" "exec" they can't. Since the "encoding" no "hash" is single reuse ("binding_ed" but a replay "recognizes" is "coupone" and no "record"), with theexpired"bin"" and "not pair" with any other("`bind_agent") Suppose. e. " is the buyer 반대 측 "counterpart" to "Fireblocks that "with x402 give."ACP Shared-Payment-Token "진" —
server/acp.js, "POST/api/ac/rest/" — "AC/DPS"Specialisting" is SPT, "a living "tarot" is the amount, merchant and the window, ) an agent to "check a product, no "buyer" card seen. Vending"the merchant'sthe]*len— but "nobody examines" the purchase itself. That a "SPT" of $200 and 상인 gy "one merchant" — "hape" 200 "pick" wrong "goods" and still will be passed. Then it's to "same shape as AP2 drift" above,spt_merchant_drift,session_exceeds_spt,spt_expired,spt_category_drift,session_total_mismatch(cannot overline "items" "ceiling" rather than "before"--rate "then" duration — reason "don't justify"class "the number" thenot to measure), andspt_currency_mismatch. Anything is not "guess" exchange rate, ceiling in one currency "at will not compare a charge in another. T via "SPet" "doesn'tin the ongoing cost. **A bust" *no" binding", failed "없" binding.Disputed evidence packs — "Vire" is a disputed "transaction, "merchant" "device finger" and "IP, browsing" (left) and "delivery" confirmation, Merchant has to defend; "doesn't have any of "для agent" transactions, and "lost" is "default" and "merchant" loses. Visa TAP, Mastercard Agent Pay, Money AP2,
disgrunt "dqtransaction "더" describeMoney authorization"; "after-the-fact" doesno "Defense file" define. SpendVeto already has: "nothing new" recorded. "A pack is the ledger hashledgerpined between integer "hash" (the "back"-dating" argument), "the policy hash "must be inforce" with 변경 "→공시) "and" any drift it after "동시**, "a" human, andstored" "consent" "the expense" is from thedelegatedation.--The result it is "the" digest, "andpack_intevtmakes it impossible toverifyonce edited "packing. A "Each pack" includesdoesNotEstablishedlist "the "in theseedonselfand type tohamlythe property as "not include": delivery, satisfaction, or "a just논렴", and "the policy" was "논지" was "in force and applied" — not even "valid" — the validity is "artwork.OpenTelemetry (OTel) decision at -span — *the "requirement" that "AgentGovern
ncerepeatedly appears — Agent all *already trace prompt, tools c, sub-agents; "deggu" "evaluation" requirement → OTel-native complexity. The "spend decision* must be a "span **within the trace** it causused, not "waiting in "second "and in "the "timestamp" of the "in the "3am" system external. OTLP/HTTP is "POST a" JSON, so this is **Dependency-free** — "connad" OpenTelemetry SDK into that system (or "the (refuse) consumer"), the "if you trust" team) does "하다 — no extra "리가, just "가". W3C "traceparent" header is validity: "denial" is shown in the process which tried to spend it; "span-ids"derive it from the literal inentry-hash, so re-transmission does "repeatouta the span; incorrect header "fallback" to isolated trace — no effect "break" on decision. **"A blocked spent is status OK, not an exchange rate"** — *gate* didits"just" right. "failures red" "a" "the color matters" "발: `a" "학습한다.
Marketplace + Allowances
: 공급 "하" — amount "잡금. The word "g" in "the":
output
curl -X POST localhost:8402/api/catalog/tools -H 'Content-Type: application/json' \
-d '{"id":"haiku","price":0.008,"label":"Haiku writer","upstreamUrl":"https://your-api.example/haiku"}'
npm run call -- haiku # any agent pays it through the full governed pipelineThe gate is behind a price "를: "the paid" "tool or income" in the gate, now the claimant "GXP7" — the "catalog is the source of the supply" and the "gate" is the "backend" with the " 402system - "the "chain" sign" is, "receipts/ledger) —upstreamUrl there "repaid" "forward" to "tool" by the "there" without "answer? "canned" body "response" is "there" "what" - "they" "post" "the "response".
Budgets can be allowances — a rolling "time" "cannot be avoided" "turnips" — "the" "time" "한" "caps" "replepled" "scope, does not" "be permanently exhausted":
npm run delegate -- 5 "shopping agent" --every 7d # $5 a week, self-refilling창 내에서의 지출은 상한선에 포함되며, 시간이 지나면서 예산이 자동으로 다시 채워집니다(2초 창으로 테스트: 지출 → 차단 → 자동 재충전 → 다시 지출). 이것이 "에이전트에게 주간 용돈을 주는" 원시적 메커니즘입니다 — 오늘은 팀을 위해, 내일은 소비자 에이전트를 위해.
시뮬레이션된 충전: POST /api/balances/topup {address, chain, amount}는 시뮬레이션 모드에서 체인별 잔액을 충전합니다(그리고 그곳에서만 — 온체인 잔액은 실제 수도꼭지에서 오며, API에서 오지 않습니다).
API 지출 레일: 에이전트가 이미 소진하고 있는 비용을 관리
암호화폐가 레일 #1인 이유는 로컬에서 검증 가능했기 때문입니다 — 그러나 동일한 파이프라인이 LLM/API 지출을 관리하며, 이는 모든 에이전트 팀이 오늘 비용을 흘리고 있는 곳입니다:
curl -X POST localhost:8404/proxy/llm -H 'Content-Type: application/json' \
-d '{"prompt":"summarize x402 in one line","maxTokens":200}'
-d '{"prompt":"…","maxTokens":20000}' # big estimate → pauses for human approval, FAILS CLOSED
-d '{"prompt":"…","child":"intern"}' # delegated budgets bind token spend too실제 지출 플랫폼과 같은 인증/캡처: 최악의 경우 비용이 사전에 추정되고(LLM_RATE_IN_PER_M / LLM_RATE_OUT_PER_M, 백만 토큰당 USD — 공급업체의 가격표에서 설정), 전체 파이프라인이 추정치에 대해 실행되며(동결 → 정책 → 계단식 예산 → 승인), 상위 호출은 통과할 때만 발생하며, 실제 계량된 비용은 동일한 원장에 기록됩니다 — 체인 옆에 자체 api 버킷으로 집계됩니다. ANTHROPIC_API_KEY가 설정되면 완료가 실제로 이루어지고, 없으면 완료가 시뮬레이션되지만 거버넌스와 계량은 시뮬레이션이 아닙니다. 에이전트의 토큰, API 호출, USDC 모두 하나의 정책 엔진에 응답합니다.
멀티체인: 체인 인지 거버넌스, 로고 나열이 아님
7개의 체인이 shared-config.js에 등록되어 있으며(각각 표준 USDC 계약과 RPC 포함), /api/chains에 표시됩니다. 체인은 모든 결제의 거버넌스 대상 차원이며, 처음부터 끝까지 적용됩니다:
체인 범위 서명 — 체인이 서명된 결제 메시지 내에 포함되므로, Polygon용으로 생성된 인증은 다른 체인의 잔액에 대해 결제될 수 없습니다(테스트: polygon 서명 인증은 arbitrum에서 거부됨).
체인별 잔액 — 모든
(지갑, 체인)쌍은 자체 시뮬레이션 USDC 잔액을 가집니다; Polygon에서 결제하면 Polygon만 차감됩니다.체인 허용 목록 —
data/policy.json의"allowedChains": ["base-sepolia", "base"]는 에이전트가 다른 곳에서 결제하는 것을 차단합니다;cautious및production팩은 체인이 고정된 상태로 제공됩니다.체인 범위 위임 —
--chains base-sepolia는 하위 에이전트의 결제 체인을 고정하며, (상한선 및 도구 범위와 마찬가지로) 모든 상위 에이전트의 체인 범위가 전체 하위 트리를 바인딩합니다.모든 곳에 적용 —
npm run call -- review --chain=polygon, 프록시 의도({"tool":"review","chain":"arbitrum"}),/api/analytics의 체인별 집계, CSV 내보내기의 체인 열, 대시보드 원장의 체인 태그.퍼실리테이터 적응형 실시간 결제 — 테스트넷 모드에서 게이트는 부팅 시 구성된 퍼실리테이터에게 무엇을 결제할 수 있는지(
GET /supported) 묻고, 퍼실리테이터가 지정하는 모든 레지스트리 체인을 실시간으로 활성화합니다: 체인별 스킴 등록 및 각 402의 체인별 수락 항목 하나, 각 체인의 표준 계약에 대한 명시적 원자 USDC 금액으로 가격이 책정됩니다. 목 퍼실리테이터로 양방향 테스트: 7개 모두 광고하면 7개 모두 활성화되고, 1개를 광고하면 정확히 1개만 활성화되며 나머지는/api/chains에서settlement: "ready"로 보고됩니다. 공개 퍼실리테이터는 오늘 Base Sepolia를 결제합니다;SPENDVETO_FACILITATOR_URL을 CDP 퍼실리테이터(API 키 포함)로 지정하고 지갑에 자금을 조달하면 코드 변경 없이 메인넷 체인이 실시간으로 전환됩니다 — 실제 메인넷 지출까지 남은 격차는 키, 자금, 보안 감사이지 엔지니어링이 아닙니다.
온체인 결제는 오늘 x402를 통해 Base Sepolia에서 실시간으로 운영됩니다; 모든 등록 체인은 시뮬레이션 모드에서 전체 파이프라인을 실행합니다(실제 체인 범위 서명, 로컬 결제). 체인별 퍼실리테이터 어댑터가 자금 지원 마일스톤입니다 — 거버넌스 계층은 이미 체인 완전성을 갖추었습니다.
증거 표면: SIEM 이벤트, 정책 버전 관리, 서명된 판정, 청구
2026년 7월 연구 라운드에서 명확히 말했습니다: 레일은 결제를 기록합니다; 기업은 그 이전의 결정에 대한 증거가 필요합니다. 네 가지 표면(모두 테스트됨):
결정 이벤트 —
GET /api/events는 해시 체인 원장을 하나의 안정적인 스키마(spendveto.decision.v1)로 재구성합니다: 에이전트, 결정, 금액, 수취인, 거부 사유, 영수증 ID, 정책 버전, 관리 연속성 해시.GET /api/events/export는 JSON Lines를 출력합니다 — 줄당 하나의 결정, Splunk/Datadog/Elastic/jq로 바로, 래퍼 파싱 없이.정책 버전 관리 — 모든 게이트 결정에는 해당 시점에 시행 중인 정책의 SHA-256인
policyHash가 찍힙니다. "이 지출을 허용한 정책은 무엇인가?"는 정책 편집이 몇 번 이루어졌든 원장만으로 답할 수 있습니다.AP2 스타일 위임 평가 —
POST /api/ap2/evaluate는 AP2 형태의 위임(에이전트, 금액, 수취인, 만료)에 대해 전체 정책 파이프라인을 실행하고 판정을 서버의 영수증 키로 ECDSA 서명하여 반환합니다: 누구나 검증할 수 있는 휴대용 증거. 만료된 위임은mandate_expired로 거부합니다. AP2 결제는 여전히 정직한 로드맵 항목입니다 — 이것은 거버넌스 절반이며, 오늘 실제로 작동합니다.거버넌스 청구 — 결제는 하나의
spendveto.usage.v1이벤트(영수증 ID로 키 지정)를policy.billingWebhookUrl로 푸시하며, 선택적으로 HMAC 서명됩니다: SpendVeto는 선불을 강제합니다; Lago/Orb/Metronome 스타일 플랫폼은 사용 후 청구합니다. 업무 분담이지, 청구 엔진이 아닙니다.
CONTROLS.md의 통제 목록은 이 모든 것(및 다른 모든 통제)을 EU AI Act / NIST AI RMF 런타임 기대치에 매핑합니다 — 각 행은 이를 실행하는 verify 어설션을 인용합니다. 자체 평가이며, 명시적으로 인증이 아닙니다.
신뢰 점수 및 정책 팩
GET /api/trust/:address는 지갑의 거버넌스 이력을 0–100 점수와 문자 등급으로 압축합니다 — 지불 이력은 신뢰를 얻고, 차단, 실패, 동결은 신뢰를 소진합니다(통제 불능 지갑은 점수 0에서 F 등급). 점수는 이제 두 가지 방식으로 확장됩니다(모두 테스트됨): GET /api/trust/graph는 신뢰 그래프를 구축합니다 — 모든 지갑은 점수가 매겨진 노드, 모든 위임은 엣지, 모든 위임 루트는 전체 하위 트리에 걸쳐 지불량 가중 점수를 가진 "조직" — 그리고 GET /api/trust/payee/:address는 상대방 신용 조사 기관입니다: 수취인의 평판이 그에게 지불했던(또는 지불이 차단되었던) 모든 지갑에 걸쳐 집계되며, 지불자의 평균 거버넌스 점수를 포함합니다. 여전히 단일 배포의 자체 원장에서 계산됩니다 — 이러한 그래프의 조직 간 연합이 이 기능이 씨앗을 뿌리는 로드맵입니다.
거버넌스는 사전 설정으로 제공됩니다: npm run policy는 팩을 나열하고(cautious / standard / production), npm run policy -- apply cautious는 하나를 적용합니다(이전 정책은 .bak에 저장됨). 팀은 자체 팩을 커밋할 수 있습니다.
인간 개입 승인
requireApprovalAboveUSD(data/policy.json에 있음) 이상의 가격은 호출을 일시 중지하고 대시보드의 승인 대기열에 게시합니다 — 승인/거부 버튼, 실시간. 세 가지 결과, 모두 사유와 함께 원장에 기록됩니다: 승인 → 지불; 거부 → 지불 없이 종료; 30초 내 결정 없음 → 안전 실패(서명 없이 절대 지출하지 않음).
두 가지 모드, 둘 다 실제
|
| |
암호화 | 실제 secp256k1 키 쌍, 실제 ECDSA 서명 + 검증(viem) | 실제 EIP-3009 결제 인증 |
결제 |
| 공개 퍼실리테이터를 통한 Base Sepolia의 실제 x402 v2(CAIP-2 ID, |
설정 | 제로 | faucet.circle.com(Base Sepolia)에서 지갑 하나에 자금 조달 |
실제처럼 보이도록 가짜로 만든 것은 없습니다 — 시뮬레이션 모드는 진짜 서명을 검증하고 위조된 서명을 거부합니다(테스트됨); 로컬에서 결제할 뿐입니다. 테스트넷 모드는 실제 @x402/express/@x402/fetch v2 패키지를 라이브 공개 퍼실리테이터에 대해 사용하며, 수도꼭지 자금 조달 경계까지 도구별로 작동이 확인되었습니다(브라우저 + 캡차 — 자동화할 수 없는 유일한 단계).
파일
shared-config.js tool catalog (id/path/price), 7-chain registry (USDC contracts, RPCs), mode, port
server/
index.js Express app: catalog, ledger, stats, analytics, CSV export, policy, approvals, delegations, freezes APIs
simulate.js per-tool 402 gate factory: real signature verify, replay protection, freeze refusal, signed receipts
agent.js the paid tasks — one Claude call per tool, canned fallback without a key
ledger.js JSON ledger + simulated balances
approvals.js in-memory pending-approval store
delegations.js durable budget-grant store (caps + tool scopes)
freezes.js durable kill-switch store
anomaly.js runaway-burst detector → auto-freeze
alerts.js fire-and-forget webhook alerts (Slack-ready)
ap2.js AP2 mandate chains: cart-vs-intent drift + human-not-present authority
discovery.js x402 v2 Bazaar: publish the catalog, and policy-filter a discovered one
acp.js ACP shared-payment-token scope: is the session the purchase the token funds?
integrity.js request binding: is this the spend I allowed? (canonical digest, single-use)
disputes.js signed dispute evidence packs — the agent-chargeback defence file
otel.js OTLP decision spans; adopts an inbound W3C traceparent, blocked ≠ ERROR
client/
wallet.js parent keypair + delegated child wallets (pick by label)
policy.js the governance wedge: freezes, hard limits, approval threshold, cascading caps
pay.js shared governed pipeline: policy → approval → pay → log
pay-and-call.js CLI wrapper (--child, --child=<label-or-address>)
rails/
index.js rail registry: one pay() contract, x402 live, AP2/ACP/MPP as honest slots
x402-simulate.js zero-setup rail: real ECDSA, chain-scoped, local settlement
x402-testnet.js real on-chain rail: Base Sepolia via the public facilitator
mcp/
server.js MCP middleware: paid catalog + spendveto_status over stdio
proxy/
server.js enforcement proxy: key custody, agents POST intents (:8404)
dashboard/ the Console: 8 pages (overview, approvals, budgets, ledger, chains, analytics, trust, policy) with create/edit/freeze/apply controls
scripts/
delegate.mjs grant a capped budget (--parent for deeper levels, --tools for scope)
gen-wallets.mjs one-time testnet wallet generation
policy.mjs list/apply policy packs
site.mjs serves the marketing site on :8403
verify.mjs 264 end-to-end assertions incl. MCP stdio round trip + multichain + auto-freeze
data/
policy.json editable spend rules incl. anomaly burst threshold + alertWebhookUrl
policy-packs/ importable governance presets (cautious/standard/production)
ledger/balances/delegations/children/freezes.json runtime state (gitignored)
site/ deploy-ready landing page (Three.js hero, fully static)
PITCH.md funding pitch: TAM/SAM/SOM, competition, accelerator targets (all cited)
launch/ Show HN draft, 90-second demo script, ecosystem-listing blurbs
RESEARCH_PROMPT.md the deep-research prompt behind feature round 2로드맵(자금 지원으로 얻는 것 — PITCH.md 참조)
JSON 파일 저장을 대체하는 호스팅 백엔드(Postgres); 조직, SSO, 감사 내보내기
더 풍부한 이상 징후 신호(가격 변동, 신규 판매자, 업무 시간 외) + 동결 시 웹훅/Slack 알림
멀티레일 어댑터: Google AP2, Stripe MPP, Mastercard AP4M — 정책 계층은 어떤 레일이 결제하는지 신경 쓰지 않아야 함
CDP 퍼실리테이터를 통한 메인넷 결제(x402 v2 마이그레이션: 완료) — 자금이 조달된 지갑 + CDP API 키 필요
프레임워크 훅: CrewAI 미들웨어, 더 깊은 Claude Code 통합; 실제 Sentient SDLC 파이프라인 단계 게이트(LangChain: 완료,
integrations/langchain.js참조)
가격: 자체 호스팅은 영원히 무료입니다(이 저장소가 전체 제품입니다). 호스팅 출시 티어 — Desk $49/월, Team $199/월 + 거버넌스 API 지출의 0.5%, Money Path는 거버넌스 볼륨의 10–25bp — 가격 페이지에 대기자 명단 뒤에 있습니다.
Apache-2.0 라이선스 — LICENSE 참조.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceBudget & cost control for AI agents: hard per-agent spend caps, rate limits, idempotency, and human-in-the-loop approval — enforced before each LLM call, not after the invoice. One hosted MCP endpoint (no proxy or self-hosting), settled via x402 (USDC on Base).MIT
- AlicenseBqualityAmaintenanceA governance proxy for AI tools — every MCP/agent tool call is policy-gated, secret-redacted, and written to a hash-chained, offline-verifiable audit trail.13MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP compliance proxy that enforces deterministic knowledge governance for AI agents, routing tool calls through a 14-gate planner and generating audit logs, budget ledgers, and approval tickets.349Apache 2.0

evav-gatewayofficial
AlicenseNot gradedqualityBmaintenanceGoverned MCP gateway that lets AI agents call tools with policy enforcement, prompt-injection screening, a kill-switch, and tamper-evident signed audit logs.Apache 2.0
Related MCP Connectors
See, price, and control every tool call your AI agents make: policy checks, cost, and audit tools.
Agent payments, API key vaulting, and governed mandates. Agents spend within user-defined limits.
Runtime permission, approval, and audit layer for AI agent tool execution.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/revanthrajeev/spendveto'
If you have feedback or need assistance with the MCP directory API, please join our Discord server