Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Independent schema and rule check of AI agent output before you pay. Signed attestation and receipt.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
ウェブ、デスクトップ、モバイルのClaudeで使えます:
https://verify.sarnai.dev/mcpターミナルでこれを実行します
claude mcp add --transport http agent-output-verifier https://verify.sarnai.dev/mcpプロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"agent-output-verifier": {
"url": "https://verify.sarnai.dev/mcp"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"agent-output-verifier": {
"type": "http",
"url": "https://verify.sarnai.dev/mcp"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
ChatGPTがつなげるのは、インターネット上のサーバーだけです:
https://verify.sarnai.dev/mcpメニューの名前は、プランや時期によって少し違うことがあります。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
ツールの名前と説明は、サーバーが2026年11月6日に返したそのままの内容です。書いたのは作者で、私たちではありません。プレーンテキストとして表示しています。
verify_schemaIndependent check of AI agent output before you pay: verify and validate an AI agent's JSON against your JSON Schema and business rules, for example validate an invoice, check its total, or confirm a deliverable meets the agreed schema before you accept it. Checks structure, form
get_verification_recordAI agent reputation and trust score: check an AI agent's verification record before you hire it, rely on its output or pay it. Returns its signed verification history: verified, passed and failed counts, last seen, and a recency-weighted score with 95% confidence interval. Check
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名はドメイン sarnai.dev で確認済みです(レジストリがドメインの所有を確認しています)
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
181ミリ秒で応答(HTTP 200)
サインイン不要
2件のツールの説明を読み、AIへの隠れた指示は見つかりませんでした
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック3項目のうち3項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
作者のクラウドで動きます。インストール不要でインターネット経由でつながりますが、送った内容は作者のサーバーを通ります。
GitHubリポジトリの最終更新は–、最新バージョン(0.5.9)がレジストリに届いたのは7 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URLでつながるので、リモートMCPサーバーに対応したアプリ(開発者モードのChatGPTなど)でも使えます。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Claude Checkpoint MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
MCP server that checkpoints Claude Code session context to survive crashes and token limits
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Independent verification of AI agent output before you pay: check an AI agent's JSON against your JSON Schema and business rules (totals, unique IDs).
Independent, deterministic checks for invoices, deliverables and any structured output: structure, formats, ranges and cross-field rules, such as "line totals must equal the total," against your own requirements, written in standard JSON Schema plus optional rules. Returns pass/fail, the percentage of checks passed, fix hints, and an Ed25519-signed attestation and receipt that anyone can verify with our public key. Sellers: check your own output before you submit it, and deliver it with a signed attestation and receipt. No signup: pay per call with x402 v2, in USDC on Base or Solana. 1,000 free checks a day per caller, then $0.02 per check (x402, USDC on Base or Solana). The allowance is shared by MCP and REST; the live value is in /llms.txt. AI Agent Scores: $0.01 per lookup when there is a score; a lookup for an AI agent with no history is answered free, signed.
Agent Output Verifier is part of SarnAI, an ecosystem of products for AI agents that work with each other, with the Agent Discovery Board (https://board.sarnai.dev/guide) and AI Agent Scores.
SarnAI homepage: https://sarnai.dev
This repository is documentation and public metadata for the hosted service — there is no source code to install or run here. The service itself is a live API at https://verify.sarnai.dev. The original address, https://fastapi-service-5ag4.onrender.com, keeps working with the same responses and keys; attestations and receipts issued before the move point at it.
| Purpose | Endpoint |
|---|---|
| MCP (Streamable HTTP) | https://verify.sarnai.dev/mcp |
| Verify an output (REST) | POST https://verify.sarnai.dev/verify/schema |
| Verify a deliverable (REST; the same check under a second name) | POST https://verify.sarnai.dev/verify/deliverable |
| Look up an AI agent's trust score (REST) | GET https://score.sarnai.dev/score/{agent_id}, for example GET https://score.sarnai.dev/score/example-agent-001 |
| An AI agent's free pass/fail history (REST) | GET https://verify.sarnai.dev/reputation/{agent_id} |
| Liveness check | GET https://verify.sarnai.dev/health |
| Agent card (discovery) | GET https://verify.sarnai.dev/.well-known/agent-card.json |
| x402 discovery manifest | GET https://verify.sarnai.dev/.well-known/x402 |
llms.txt (and llms-full.txt with worked examples) | GET https://verify.sarnai.dev/llms.txt |
| Same agent card at the older A2A path | GET https://verify.sarnai.dev/.well-known/agent.json |
| API catalog (RFC 9727) | GET https://verify.sarnai.dev/.well-known/api-catalog |
| JSON index for a client that is not a browser | GET https://verify.sarnai.dev/ with Accept: application/json |
| Interactive API docs | GET https://verify.sarnai.dev/docs |
Two MCP tools are exposed over the same endpoint: verify_schema (POST /verify/schema) and get_verification_record (GET /score/{agent_id}).
After the free allowance, each call is paid with x402 v2 in USDC. AI Agent Scores: $0.01 per lookup when there is a score; a lookup for an AI agent with no history is answered free, signed. No account or signup is required.
| Route | Price | Networks |
|---|---|---|
POST /verify/schema | $0.02 USDC | Base (eip155:8453), Solana (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) |
POST /verify/deliverable | $0.02 USDC | Base (eip155:8453), Solana (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) |
GET /score/{agent_id} (for example /score/example-agent-001) | $0.01 USDC when there is a score; free (signed, no_data) for an AI agent with no history | Base (eip155:8453), Solana (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) |
/.well-known/x402 and the Payment-Required header of a live 402 response always carry the exact live prices, pay-to addresses and asset addresses — treat them as the source of truth, and this table as a quick reference.
Three headers carry the payment itself, by name: an unpaid request gets HTTP 402 with the price and payment requirements in the Payment-Required response header; a paid request carries its signed payment in the Payment-Signature request header; a settled response carries the settlement receipt in the Payment-Response response header. A fail result is a complete, valid answer to the question asked and is charged the same as a pass — the work (running every check) is identical either way.
Verification has a free allowance: 1,000 free checks a day per caller, then $0.02 per check (x402, USDC on Base or Solana). Each client, identified by request IP address (there is no sign-up or account), gets a daily allowance of checks, shared by the MCP tool verify_schema and the REST routes POST /verify/schema and POST /verify/deliverable. The allowance is a setting, not a constant: the live numbers are stated in one place, the "Free allowance" section of /llms.txt.
A valid unpaid REST request is served free while the allowance lasts, and the response says what is left in the Free-Allowance-Remaining, Free-Allowance-Limit and Free-Allowance-Resets headers. A request that is too large, one that carries a payment, and any request after the day's allowance is used up, goes to payment as usual (HTTP 402). An invalid request is never pointed at payment: it gets a validation error (HTTP 422, see "Errors" below). Free verifications count toward an AI agent's score and reputation exactly like paid ones.
Agent Scores: GET /score/{agent_id} and the MCP tool get_verification_record cost $0.01 per lookup when there is a score, with no free allowance; a lookup for an AI agent with no history (or a reserved test- id) is answered free, signed, with reason: no_data. The template is called with the id of a real AI agent, for example GET /score/example-agent-001; a request whose agent_id is the placeholder itself ({agent_id}, :agent_id, ) is refused with a 400 (placeholder_agent_id) before any payment is asked for, and nothing is charged.
An unpaid REST call's 402 body reports this caller's own real state, live: available, remaining_calls_today, and resets_at (the next UTC midnight). Once a client's allowance for the day is used up, available turns false and the body carries "code": "free_trial_exhausted":
{
"free_trial": { "available": false, "via": "mcp+rest", "transport": "streamable-http", "url": "https://verify.sarnai.dev/mcp", "tool": "verify_schema", "calls_per_client_per_day": " ", "remaining_calls_today": 0, "resets_at": " ", "client": "identified by request IP address; the same address's REST and MCP verification calls share one allowance", "rest_free": true, "message": "This client's free checks for today are used up (REST and MCP share them); they reset at . Payment applies until then.", "code": "free_trial_exhausted" } }
The same free_trial_exhausted code rides alongside the MCP tool's own payment-required result (in _meta) when a tool call is made after that client's allowance for the day is gone. After the allowance (or once it is used up for the day), a call requires an x402 payment carried in the MCP request's _meta under x402/payment, or a standard x402 payment header on REST.
The official package, sarnai, wraps the Agent Discovery Board and this verifier. No account or secrets needed.
pip install sarnai
from sarnai import SarnAIClient
with SarnAIClient() as sarnai: result = sarnai.verify_output({"type": "object", "required": ["total"]}, {"total": 42}) print(result.passed, result.hints)
Verification is free within the daily allowance above; beyond it the service answers 402 and the client raises PaymentRequiredError.
Every error other than a payment error has one shape, on REST and in MCP tool results:
{
"code": "invalid_request", "message": "The request is invalid: rules[0].type is not one of the allowed values. Nothing was charged; fix the field(s) and send it again.", "status": 422, "retryable": false, "charged": false, "next_actions": [{"action": "fix_request_fields", "fields": ["rules[0].type"]}], "fields": [{"field": "rules[0].type", "problem": "is not one of the allowed values", "fix": "Use one of: 'sum_equals', 'gte', 'lte', 'exists_in' or 'unique'."}] }
code is stable, retryable says whether the same request can succeed on a retry (a retryable error also has retry_after), and an error is never charged. Your input is never echoed back. An invalid request (bad JSON, a missing field, an unknown rule type, an id over 200 characters) is rejected with a 422 before payment, so it is never told "payment required"; a POST with no body at all is the x402 discovery probe and still gets the 402. A body over the size limit gets a 413 that states the limit. The full code table and the payment-error codes are in the /llms.txt "Errors" and "Payment errors" sections and in the OpenAPI description.
Every response from /verify/schema and /score/{agent_id} carries a signed verify section and an attestation block, for example:
"verify": {
"public_key_url": "https://verify.sarnai.dev/.well-known/agent-card.json", "key_version": "v1-2026-09c", "canonicalization": "RFC 8785 (JCS)", "hash_algorithm": "SHA-256", "service": "Agent Output Verifier", "mcp": "https://verify.sarnai.dev/mcp" }, "attestation": { "algorithm": "Ed25519", "key_version": "v1-2026-09c", "timestamp": "2026-10-01T01:01:09.606993+00:00", "signature": "8UexIObSAwQxjj8/rbEpLRgbYY6XO+wg5+b0D8I3BRfbOxl+ouwcKNPE/hp+9p37Tm2wwdmCqPjBgOMLGQtGAQ==" }
Nothing but the response itself and verify.public_key_url is needed:
GET the agent-card at verify.public_key_url. Its capabilities.extensions array has an entry whose uri starts with urn:json-schema-verifier:extension:attestation:; its params.publicKeys lists every key the service has ever signed with, each {keyVersion, algorithm, publicKey} (the raw 32-byte Ed25519 public key, base64-encoded). Pick the entry whose keyVersion equals response.attestation.key_version. The live agent-card is always the source of truth; this is a convenience copy of the current key, worth reconfirming against the live agent-card first: {
"keyVersion": "v1-2026-09c", "algorithm": "Ed25519", "publicKey": "d2IHH0/Xduci/5J8IewYmauUvgqf+gFIeCEXDwjHUhw=", "publicKeyEncoding": "base64 of the raw 32-byte Ed25519 public key" }
2. **Rebuild the signed document.** It's a JSON object with exactly these five keys:
{
"context": "json-schema-verifier/verify-schema-attestation/v1", "algorithm": "Ed25519", "key_version": " ", "attested_at": " ", "response": { "...": "the full response, with the attestation field removed" } }
`context` is `json-schema-verifier/verify-schema-attestation/v1` for `/verify/schema` responses **and for冒頭だけを表示しています。続きはリポジトリで読めます