Agent Verification Utility
Deterministic JSON checks with signed evidence and x402-paid execution
사용해야 할까요
품질 및 안전성
발견 사항 (1)
- LOWprepare_verify_evidence_purchase에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"agent-verification-utility": {
"url": "https://agent-economy.kgninja.dev/mcp"
}
}
}원격 엔드포인트
https://agent-economy.kgninja.dev/mcpstreamable-http할 수 있는 일
도구 목록
도구 (5)
🟢describe_verify_evidence
Describe when deterministic verification is useful, when it is not, free request validation, recipes, limits, and the explicit paid MCP path.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_revenue_goal_status
Read the active revenue goal, measured funnel, contribution margin, and the next bounded improvement recommendation. This tool never changes price, spends funds, or sends messages.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡quote_verify_evidence(idempotency_key, intent)
Obtain a free bound quote for deterministic checks on supplied JSON before deciding to purchase. After a successful free precheck at POST /validate-request, supply the unchanged intent and its precheck_receipt.receipt_digest. Creates or reuses a persisted quote and records observability events; no payment, signing or paid verification is performed. The bound quote ties request/evidence digests, precheck digest, spend policy, quoted amount, network, asset, recipient and expiry together. Server availability, fresh cost basis and conservative contribution-margin thresholds must pass. Returns the quote as JSON text and structuredContent: quote_id, request_hash, price (atomic USDC, 6 decimals), expires_at, economic_guard, purchase instructions and paid_verification_binding in state quoted, not a paid receipt. Application failures return isError=true with JSON error.code, message, retryable and optional details (for example PRECHECK_STALE, PRICE_CAP_EXCEEDED, IDEMPOTENCY_KEY_CONFLICT, IDEMPOTENCY_KEY_EXPIRED or UNPROFITABLE_TRANSACTION); invalid argument shapes are rejected by MCP schema validation. Re-run precheck after request/policy changes; do not pay on refusal. Next use prepare_verify_evidence_purchase with the same key and intent for the HTTP purchase request, or explicitly authorize the separate paid verify_evidence flow.
입력 스키마
{
"type": "object",
"properties": {
"idempotency_key": {
"type": "string",
"minLength": 16,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Required 16-128 characters from A-Z, a-z, 0-9, underscore or hyphen. Reuse with the unchanged intent to reuse an unexpired quote; changed bindings return IDEMPOTENCY_KEY_CONFLICT. An expired key returns IDEMPOTENCY_KEY_EXPIRED; use a new key."
},
"intent": {
"type": "object",
"properties": {
"request": {
"type": "object",
"properties": {
"client_request_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9._:-]+$",
"description": "Required caller request identifier, 1-64 characters from A-Z, a-z, 0-9, dot, underscore, colon or hyphen; included in the request hash."
},
"evidence": {
"type": "object",
"properties": {
"media_type": {
"type": "string",
"const": "application/json",
"description": "Required literal application/json."
},
"content_base64": {
"type": "string",
"minLength": 4,
"maxLength": 87384,
"description": "Required strict standard Base64 of UTF-8 JSON; 4-87384 encoded characters and at most 65536 decoded bytes. JSON limits: depth 32, object keys 2048, values 8192; integers must be JavaScript safe integers."
}
},
"required": [
"media_type",
"content_base64"
],
"additionalProperties": false,
"description": "Required caller-supplied JSON bytes; no remote evidence is fetched."
},
"assertions": {
"minItems": 1,
"maxItems": 16,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "sha256_equals",
"description": "Compare SHA-256 of the raw decoded evidence bytes."
},
"expected_hex": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Required expected digest as exactly 64 lowercase hex characters, without sha256: prefix."
}
},
"required": [
"op",
"expected_hex"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "json_pointer_exists",
"description": "Check whether the JSON Pointer resolves."
},
"path": {
"type": "string",
"maxLength": 512,
"description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1."
}
},
"required": [
"op",
"path"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "json_pointer_equals",
"description": "Compare the selected JSON value with expected."
},
"path": {
"type": "string",
"maxLength": 512,
"description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1."
},
"expected": {
"description": "Required expected JSON value, including null; JSON depth/key/value and safe-integer limits apply."
}
},
"required": [
"op",
"path",
"expected"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "json_type_is",
"description": "Check the selected JSON value type."
},
"path": {
"type": "string",
"maxLength": 512,
"description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1."
},
"expected_type": {
"type": "string",
"enum": [
"null",
"boolean",
"number",
"string",
"array",
"object"
],
"description": "Required JSON type: null, boolean, number, string, array or object."
}
},
"required": [
"op",
"path",
"expected_type"
],
"additionalProperties": false
}
]
},
"description": "Required 1-16 deterministic assertions. Each operation accepts only its documented fields. Precheck validates input, not assertion truth."
}
},
"required": [
"client_request_id",
"evidence",
"assertions"
],
"additionalProperties": false,
"description": "Required complete bounded verification request, unchanged from precheck; no optional fields or defaults."
},
"spend_policy": {
"type": "object",
"properties": {
"policy_version": {
"type": "string",
"const": "agent-economy/precheck-policy/2.0",
"description": "Required literal agent-economy/precheck-policy/2.0."
},
"max_amount_atomic": {
"type": "string",
"description": "Required positive decimal integer string in atomic USDC units (1000000 = 1 USDC), at most 16 digits and within JavaScript safe-integer range. No leading zero; must cover the current quoted price."
},
"network": {
"type": "string",
"enum": [
"eip155:84532",
"eip155:8453"
],
"description": "Required eip155:8453 (Base) or eip155:84532 (Base Sepolia); must match current advertised terms."
},
"asset": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "Required USDC contract address, 0x plus 40 hex characters; must match current advertised asset."
},
"pay_to": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "Required allowed payment recipient, 0x plus 40 hex characters; must match current advertised payTo."
}
},
"required": [
"policy_version",
"max_amount_atomic",
"network",
"asset",
"pay_to"
],
"additionalProperties": false,
"description": "Required caller spending limits and allowed terms; preserve from precheck. All five fields required; no defaults."
},
"precheck_receipt_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$",
"description": "Required sha256: followed by 64 lowercase hex characters, copied from precheck_receipt.receipt_digest of the successful free precheck. Recomputed against request, policy and current discovery contract; mismatches return PRECHECK_STALE."
}
},
"required": [
"request",
"spend_policy",
"precheck_receipt_digest"
],
"additionalProperties": false,
"description": "Required prechecked purchase intent: request, spend_policy and precheck_receipt_digest are all required, with no defaults or optional fields. Preserve the request and policy used in the successful free POST /validate-request."
}
},
"required": [
"idempotency_key",
"intent"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡prepare_verify_evidence_purchase(idempotency_key, intent)
Prepare an HTTP purchase request for deterministic JSON verification after a successful free precheck; a prior quote tool call is optional. After a successful free precheck at POST /validate-request, supply the unchanged intent and its precheck_receipt.receipt_digest. Creates or reuses a persisted quote and records observability events; no payment, signing or paid verification is performed. The bound quote ties request/evidence digests, precheck digest, spend policy, quoted amount, network, asset, recipient and expiry together. Server availability, fresh cost basis and conservative contribution-margin thresholds must pass. Returns JSON text and structuredContent containing quote, request (POST /verify-evidence, content-type and X-Quote-ID headers, unchanged intent body), expected_first_status=402 and expected_payment_header=PAYMENT-REQUIRED. It does not send this request. Application failures return isError=true with JSON error.code, message, retryable and optional details (for example PRECHECK_STALE, PRICE_CAP_EXCEEDED, IDEMPOTENCY_KEY_CONFLICT, IDEMPOTENCY_KEY_EXPIRED or UNPROFITABLE_TRANSACTION); invalid argument shapes are rejected by MCP schema validation. Re-run precheck after request/policy changes; do not pay on refusal. Next send the returned request to obtain a challenge, check binding, amount, network, asset, payTo and expiry against local policy, then authorize payment separately. Use quote_verify_evidence when only quote terms are needed.
입력 스키마
{
"type": "object",
"properties": {
"idempotency_key": {
"type": "string",
"minLength": 16,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Required 16-128 characters from A-Z, a-z, 0-9, underscore or hyphen. Reuse with the unchanged intent to reuse an unexpired quote; changed bindings return IDEMPOTENCY_KEY_CONFLICT. An expired key returns IDEMPOTENCY_KEY_EXPIRED; use a new key."
},
"intent": {
"type": "object",
"properties": {
"request": {
"type": "object",
"properties": {
"client_request_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9._:-]+$",
"description": "Required caller request identifier, 1-64 characters from A-Z, a-z, 0-9, dot, underscore, colon or hyphen; included in the request hash."
},
"evidence": {
"type": "object",
"properties": {
"media_type": {
"type": "string",
"const": "application/json",
"description": "Required literal application/json."
},
"content_base64": {
"type": "string",
"minLength": 4,
"maxLength": 87384,
"description": "Required strict standard Base64 of UTF-8 JSON; 4-87384 encoded characters and at most 65536 decoded bytes. JSON limits: depth 32, object keys 2048, values 8192; integers must be JavaScript safe integers."
}
},
"required": [
"media_type",
"content_base64"
],
"additionalProperties": false,
"description": "Required caller-supplied JSON bytes; no remote evidence is fetched."
},
"assertions": {
"minItems": 1,
"maxItems": 16,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "sha256_equals",
"description": "Compare SHA-256 of the raw decoded evidence bytes."
},
"expected_hex": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Required expected digest as exactly 64 lowercase hex characters, without sha256: prefix."
}
},
"required": [
"op",
"expected_hex"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "json_pointer_exists",
"description": "Check whether the JSON Pointer resolves."
},
"path": {
"type": "string",
"maxLength": 512,
"description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1."
}
},
"required": [
"op",
"path"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "json_pointer_equals",
"description": "Compare the selected JSON value with expected."
},
"path": {
"type": "string",
"maxLength": 512,
"description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1."
},
"expected": {
"description": "Required expected JSON value, including null; JSON depth/key/value and safe-integer limits apply."
}
},
"required": [
"op",
"path",
"expected"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "json_type_is",
"description": "Check the selected JSON value type."
},
"path": {
"type": "string",
"maxLength": 512,
"description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1."
},
"expected_type": {
"type": "string",
"enum": [
"null",
"boolean",
"number",
"string",
"array",
"object"
],
"description": "Required JSON type: null, boolean, number, string, array or object."
}
},
"required": [
"op",
"path",
"expected_type"
],
"additionalProperties": false
}
]
},
"description": "Required 1-16 deterministic assertions. Each operation accepts only its documented fields. Precheck validates input, not assertion truth."
}
},
"required": [
"client_request_id",
"evidence",
"assertions"
],
"additionalProperties": false,
"description": "Required complete bounded verification request, unchanged from precheck; no optional fields or defaults."
},
"spend_policy": {
"type": "object",
"properties": {
"policy_version": {
"type": "string",
"const": "agent-economy/precheck-policy/2.0",
"description": "Required literal agent-economy/precheck-policy/2.0."
},
"max_amount_atomic": {
"type": "string",
"description": "Required positive decimal integer string in atomic USDC units (1000000 = 1 USDC), at most 16 digits and within JavaScript safe-integer range. No leading zero; must cover the current quoted price."
},
"network": {
"type": "string",
"enum": [
"eip155:84532",
"eip155:8453"
],
"description": "Required eip155:8453 (Base) or eip155:84532 (Base Sepolia); must match current advertised terms."
},
"asset": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "Required USDC contract address, 0x plus 40 hex characters; must match current advertised asset."
},
"pay_to": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "Required allowed payment recipient, 0x plus 40 hex characters; must match current advertised payTo."
}
},
"required": [
"policy_version",
"max_amount_atomic",
"network",
"asset",
"pay_to"
],
"additionalProperties": false,
"description": "Required caller spending limits and allowed terms; preserve from precheck. All five fields required; no defaults."
},
"precheck_receipt_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$",
"description": "Required sha256: followed by 64 lowercase hex characters, copied from precheck_receipt.receipt_digest of the successful free precheck. Recomputed against request, policy and current discovery contract; mismatches return PRECHECK_STALE."
}
},
"required": [
"request",
"spend_policy",
"precheck_receipt_digest"
],
"additionalProperties": false,
"description": "Required prechecked purchase intent: request, spend_policy and precheck_receipt_digest are all required, with no defaults or optional fields. Preserve the request and policy used in the successful free POST /validate-request."
}
},
"required": [
"idempotency_key",
"intent"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪verify_evidence(idempotency_key, intent)
Run deterministic checks and return Ed25519-signed evidence after one explicitly authorized x402 payment. A free precheck receipt and a matching bound payment requirement are required before signing.
입력 스키마
{
"type": "object",
"properties": {
"idempotency_key": {
"type": "string",
"minLength": 16,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$"
},
"intent": {
"type": "object",
"properties": {
"request": {
"type": "object",
"properties": {
"client_request_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9._:-]+$"
},
"evidence": {
"type": "object",
"properties": {
"media_type": {
"type": "string",
"const": "application/json"
},
"content_base64": {
"type": "string",
"minLength": 4,
"maxLength": 87384
}
},
"required": [
"media_type",
"content_base64"
],
"additionalProperties": false
},
"assertions": {
"minItems": 1,
"maxItems": 16,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "sha256_equals"
},
"expected_hex": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"op",
"expected_hex"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "json_pointer_exists"
},
"path": {
"type": "string",
"maxLength": 512
}
},
"required": [
"op",
"path"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "json_pointer_equals"
},
"path": {
"type": "string",
"maxLength": 512
},
"expected": {}
},
"required": [
"op",
"path",
"expected"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "json_type_is"
},
"path": {
"type": "string",
"maxLength": 512
},
"expected_type": {
"type": "string",
"enum": [
"null",
"boolean",
"number",
"string",
"array",
"object"
]
}
},
"required": [
"op",
"path",
"expected_type"
],
"additionalProperties": false
}
]
}
}
},
"required": [
"client_request_id",
"evidence",
"assertions"
],
"additionalProperties": false
},
"spend_policy": {
"type": "object",
"properties": {
"policy_version": {
"type": "string",
"const": "agent-economy/precheck-policy/2.0"
},
"max_amount_atomic": {
"type": "string"
},
"network": {
"type": "string",
"enum": [
"eip155:84532",
"eip155:8453"
]
},
"asset": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$"
},
"pay_to": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$"
}
},
"required": [
"policy_version",
"max_amount_atomic",
"network",
"asset",
"pay_to"
],
"additionalProperties": false
},
"precheck_receipt_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
}
},
"required": [
"request",
"spend_policy",
"precheck_receipt_digest"
],
"additionalProperties": false
}
},
"required": [
"idempotency_key",
"intent"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거