Back to MCP Verification Gate
Card snapshot
gate.horizonshield.dev
·
2026-10-21 17:49:51 UTC
·
6b1d4ea492475e2e3a414295dac67f6557d84ae5d46842fd029e6c80a2af1fa4
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"name": "MCP Verification Gate",
"description": "Checks whether an MCP server exists, publishes an agent card, discloses who pays it, and returns identical output for identical input. Free. Conformance and disclosure only; this gate does not verify that any price returned by a checked server is correct. Cloudflare in front of this gate refuses some default client signatures, such as Python urllib, with HTTP 403 and error code 1010 before the request reaches the gate: send an explicit User-Agent. A 403 with error code 1010 is not this gate's authentication answer.",
"supportedInterfaces": [
{
"url": "https://gate.horizonshield.dev/a2a",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
},
{
"url": "https://gate.horizonshield.dev/a2a",
"protocolBinding": "JSONRPC",
"protocolVersion": "0.3"
}
],
"url": "https://gate.horizonshield.dev/a2a",
"provider": {
"organization": "The HORIZ\u97f3s Co., Ltd.",
"url": "https://shield.the-horizons-innovation.com",
"legalEntity": {
"registry": "JP",
"scheme": "houjin-bango",
"id": "7021001075279",
"name": "The HORIZ\u97f3s Co., Ltd."
}
},
"version": "0.4.20",
"protocolVersion": "1.0",
"capabilities": {
"streaming": false,
"pushNotifications": false,
"extensions": [
{
"uri": "https://gate.horizonshield.dev/ext/conduct/v1",
"description": "Who pays this agent, where its measured conduct record lives, and where to file a witness walk. The specification is served at the URI.",
"required": false,
"params": {
"compensation": {
"paid_by": "buyer",
"referral_fee": false,
"listing_fee": false,
"success_fee_pct": 0,
"disclosure_url": "https://shield.the-horizons-innovation.com/yakumo/plans/"
},
"measured_endpoints": [
"https://gate.horizonshield.dev/mcp"
],
"conduct_record": "https://gate.horizonshield.dev/history?endpoint=https%3A%2F%2Fgate.horizonshield.dev%2Fmcp",
"verdict_recipe": "https://gate.horizonshield.dev/spec",
"witness_intake": "https://ledger.horizonshield.dev/witness",
"register": "https://gate.horizonshield.dev/register",
"identity": {
"kind": "did",
"ref": "did:web:gate.horizonshield.dev"
},
"witness_policy": {
"reciprocal": true
},
"witness_reply": {
"transport": "a2a",
"answers": "https://gate.horizonshield.dev/a2a",
"request_schema": "nenrin-witness-request-v1",
"reply_schema": "nenrin-witness-observation-v1",
"key_url": "https://gate.horizonshield.dev/keys/witness.json",
"surfaces": [
"health.gate_commit",
"agent-card.signature",
"well-known.jwks",
"well-known.openai-apps-challenge",
"ext.conduct-v1.spec",
"keys.agreement",
"keys.witness",
"keys.operator",
"well-known.did"
],
"note": "When drawn, this gate measures the listed public surfaces of the requested endpoint from its own vantage and returns one Ed25519-signed nenrin-witness-observation-v1 (the key served at key_url, conduct-v1.1 section 11.4). It refuses to witness itself (self_witness) and refuses non-public targets. reciprocal here means it answers a draw; it does not initiate an unprompted caller_card walk-back."
},
"rings": {
"spec": "https://github.com/ogasurfproject-jpg/horizon-shield/blob/main/workers/hs-ledger/nenrin/NENRIN_SPEC_v1.md",
"spec_sha256": "9ccba2e325fd2a555fcdb2dec519b8c6bf7a669064674846aea98ecfff824e3d",
"base": "https://raw.githubusercontent.com/ogasurfproject-jpg/mcp-conduct-register/main/rings/",
"path": "<slug>/<YYYY-MM>.json",
"slug": "endpoint URL without https://, lower case, every run of characters outside [a-z0-9] replaced by one hyphen, hyphens trimmed at both ends",
"ledger": "https://ledger.horizonshield.dev/ledger"
}
}
},
{
"uri": "https://gate.horizonshield.dev/ext/legal-entity/v1",
"description": "The legal entity that answers for this agent, declared inside the signed bytes. The specification is served at the URI.",
"required": false,
"params": {
"registry": "JP",
"scheme": "houjin-bango",
"id": "7021001075279",
"name": "The HORIZ\u97f3s Co., Ltd.",
"lookup_url": "https://www.houjin-bangou.nta.go.jp/henkorireki-johoto.html?selHouzinNo=7021001075279"
}
}
]
},
"defaultInputModes": [
"text/plain"
],
"defaultOutputModes": [
"application/json",
"text/plain"
],
"securitySchemes": {
"operator": {
"apiKeySecurityScheme": {
"location": "header",
"name": "x-sweep-token",
"description": "Operator-only routes (POST /sweep, POST /register/quarantine, POST /mould, DELETE /watch, the paid tier of POST /watch). No skill on this card requires it: the A2A interface at /a2a and the MCP interface at /mcp are public and unauthenticated."
}
}
},
"securityRequirements": [
{}
],
"compensation": {
"paid_by": "buyer",
"referral_fee": false,
"listing_fee": false,
"success_fee_pct": 0,
"disclosure_url": "https://shield.the-horizons-innovation.com/yakumo/plans/"
},
"preferredTransport": "JSONRPC",
"skills": [
{
"id": "check",
"name": "Conformance check",
"description": "POST /check with an MCP endpoint URL, or call the check_conformance tool over MCP at /mcp. Returns a verdict with a recomputable SHA-256. Over A2A (SendMessage at /a2a), a text part carrying an MCP endpoint URL returns this gate's current register reading for it (the same bytes as GET /is-verified): verified true only on a full pass, null otherwise, never false.",
"tags": [
"mcp",
"verification",
"conformance",
"disclosure"
],
"examples": [
"Check https://example.com/mcp for conformance",
"Does this server exist, publish an agent card, and return identical output for identical input?"
],
"inputModes": [
"text/plain",
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "verify",
"name": "Verdict verification",
"description": "Recompute the SHA-256 of a verdict this gate issued, so you do not have to trust the issuer. Served by the verify_verdict tool over MCP at /mcp. The A2A interface (SendMessage at /a2a) does not route by skill and does not perform this one: a text part carrying an https URL gets the register reading, anything else gets a usage note. Call verify_verdict over MCP.",
"tags": [
"verification",
"tamper-evident",
"recomputable"
],
"examples": [
"Verify this verdict hashes to its own record_sha256",
"Recompute the digest of a verdict returned by check"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "conditions",
"name": "Verification conditions",
"description": "Return the exact conditions this gate measures (MCP reachability, agent card, compensation disclosure, deterministic output) and how each verdict is recomputed. Served by GET /spec and by the get_conditions tool over MCP at /mcp. The A2A interface (SendMessage at /a2a) does not route by skill and does not perform this one: without an https URL in the text it returns a usage note. Read GET /spec.",
"tags": [
"methodology",
"transparency",
"spec"
],
"examples": [
"What does this gate actually check?",
"How is a verdict recomputed independently?"
],
"inputModes": [
"text/plain"
],
"outputModes": [
"application/json"
]
},
{
"id": "is-verified",
"name": "Verification status",
"description": "Report whether an endpoint's latest measurement passed all measured conditions. Returns true or null (state: verified, pending, held, watched, absent), never false. Served by GET /is-verified and the is_verified tool over MCP. Over A2A (SendMessage at /a2a), a text part carrying the endpoint URL returns the same reading.",
"tags": [
"verification",
"status",
"honest-null"
],
"examples": [
"Is https://example.com/mcp currently verified?",
"What is this endpoint's latest state on the register?"
],
"inputModes": [
"text/plain"
],
"outputModes": [
"application/json"
]
},
{
"id": "lookup",
"name": "Register lookup",
"description": "Look up an endpoint's record on the public register: its latest verdict, state, and record SHA-256, with a recompute URL. Served by the lookup_server tool over MCP at /mcp. Over A2A (SendMessage at /a2a) a text part carrying the endpoint URL returns only the register reading (state, record SHA-256 and recompute URL when measured, the same bytes as GET /is-verified), not the full record.",
"tags": [
"register",
"lookup",
"recomputable"
],
"examples": [
"Look up the record for https://example.com/mcp",
"Find the latest verdict hash for this endpoint"
],
"inputModes": [
"text/plain"
],
"outputModes": [
"application/json"
]
}
],
"signatures": [
{
"protected": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJraWQiOiJocy0yMDI2LTA5Iiwiamt1IjoiaHR0cHM6Ly9nYXRlLmhvcml6b25zaGllbGQuZGV2Ly53ZWxsLWtub3duL2p3a3MuanNvbiJ9",
"signature": "K17JKVkjdsxKzp3aSI3fAHHZfJTp77bpOKhRXQW22KYpctMe_fqguSCPpfqwDiv11RAZBpVMZ-h1xbJ4HEJD5Q"
},
{
"protected": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJraWQiOiJocy0yMDI2LTA5Iiwiamt1IjoiaHR0cHM6Ly9nYXRlLmhvcml6b25zaGllbGQuZGV2Ly53ZWxsLWtub3duL2p3a3MuanNvbiJ9",
"signature": "6LOCDIywNHU_78XTZqlJZpKSCtp94_eK9-D9XCnGvxzLM6_uHNlmFbzHtUEr5Gk66ImxfadRwC5N5T22XErALA"
}
]
}