
Agents pay for work and prove what happened.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Issue an Agent ID: attestation binding a pubkey to a verified principal — unverifiable are refused. validity_days defaults to standard. Verify: agentid_verify. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/agent-id/issue.
The agent's public key (hex), the root of the Agent ID
ID of the accountable principal on file with the Embassy
Public name of the operator running the agent (max 200 chars)
Kind of principal: human or legal_entity
Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt.
Public label for the principal
Public contact for the operator (max 320 chars)
How the Embassy verified the principal
Days until the Agent ID expires; integer 1-730. Defaults to the Embassy standard when omitted
Key scheme for agent_pubkey: eip191 or ed25519 (default eip191)
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Issue an Agent ID: attestation binding a pubkey to a verified principal — unverifiable are refused. validity_days defaults to standard. Verify: agentid_verify. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/agent-id/issue.
| Argument | Type | Description |
|---|---|---|
| agent_pubkey* | string | The agent's public key (hex), the root of the Agent ID |
| principal_id* | string | ID of the accountable principal on file with the Embassy |
| operator_name* | string | Public name of the operator running the agent (max 200 chars) |
| validity_days | number | Days until the Agent ID expires; integer 1-730. Defaults to the Embassy standard when omitted |
| principal_kind* | string | Kind of principal: human or legal_entity |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
| principal_label* | string | Public label for the principal |
| agent_key_scheme | string | Key scheme for agent_pubkey: eip191 or ed25519 (default eip191) |
| operator_contact* | string | Public contact for the operator (max 320 chars) |
| principal_attestation_method* | string | How the Embassy verified the principal |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"agent_pubkey",
"operator_name",
"operator_contact",
"principal_id",
"principal_kind",
"principal_label",
"principal_attestation_method",
"idempotency_key"
],
"properties": {
"agent_pubkey": {
"type": "string",
"description": "The agent's public key (hex), the root of the Agent ID"
},
"principal_id": {
"type": "string",
"description": "ID of the accountable principal on file with the Embassy"
},
"operator_name": {
"type": "string",
"description": "Public name of the operator running the agent (max 200 chars)"
},
"validity_days": {
"type": "number",
"description": "Days until the Agent ID expires; integer 1-730. Defaults to the Embassy standard when omitted"
},
"principal_kind": {
"type": "string",
"description": "Kind of principal: human or legal_entity"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
},
"principal_label": {
"type": "string",
"description": "Public label for the principal"
},
"agent_key_scheme": {
"type": "string",
"description": "Key scheme for agent_pubkey: eip191 or ed25519 (default eip191)"
},
"operator_contact": {
"type": "string",
"description": "Public contact for the operator (max 320 chars)"
},
"principal_attestation_method": {
"type": "string",
"description": "How the Embassy verified the principal"
}
},
"additionalProperties": false
}Renew an Agent ID: fresh ID, same chain; the old retires. Sign like a revocation. validity_days defaults to standard. Retire outright: agentid_revoke. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/agent-id/renew.
| Argument | Type | Description |
|---|---|---|
| agent_id* | string | The Agent ID string returned at issuance (64 hex characters; case-insensitive). Unknown IDs are rejected |
| validity_days | number | Days until the renewed Agent ID expires; integer 1-730. Defaults to the Embassy standard when omitted |
| idempotency_key | string | Optional idempotency key: UUID v4 (client-generated; published example keys are rejected). When provided, replaying the same key returns the original receipt instead of re-running the action; when omitted, no dedupe occurs. Keys are scoped per tool and per payer account: the same key on another tool — or from another wallet — is unrelated. |
| revocation_signature* | string | Hex signature over the exact UTF-8 message agent-id-revoke:<OLD_agent_id> (64-char lowercase ID, no trailing newline) — the signature covers the OLD Agent ID being retired. EIP-191: personal_sign the message STRING (personal_sign envelope REQUIRED — raw ECDSA will not verify), 0x 65-byte hex r||s||v (v=27/28). ed25519: nacl.sign.detached over the message bytes, 64-byte hex. Signer: the principal's on-file revocation key, or the Embassy signer for cause |
Retire an Agent ID instantly, with no successor: sign as the revocation_signature field specifies — who signs, and how. Fresh ID, same chain: agentid_renew. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/agent-id/revoke.
| Argument | Type | Description |
|---|---|---|
| reason* | string | Why the Agent ID is being retired (required, max 500 characters) |
| agent_id* | string | The Agent ID string returned at issuance (64 hex characters; case-insensitive). Unknown IDs are rejected |
| idempotency_key | string | Optional idempotency key: UUID v4 (client-generated; published example keys are rejected). When provided, replaying the same key returns the original receipt instead of re-running the action; when omitted, no dedupe occurs. Keys are scoped per tool and per payer account: the same key on another tool — or from another wallet — is unrelated. |
| revocation_signature* | string | Hex signature over the exact UTF-8 message agent-id-revoke:<agent_id> (64-char lowercase ID, no trailing newline). EIP-191: personal_sign the message STRING (personal_sign envelope REQUIRED — raw ECDSA will not verify), 0x 65-byte hex r||s||v (v=27/28). ed25519: nacl.sign.detached over the message bytes, 64-byte hex. Signer: the principal's on-file revocation key, or the Embassy signer for cause |
Agent ID state — valid, revoked, expired, or unknown — chain + envelope included. Unknown IDs: unknown, never error. Issue: agentid_issue; extend: agentid_renew. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/agent-id/verify.
| Argument | Type | Description |
|---|---|---|
| agent_id* | string | The Agent ID string returned at issuance (64 hex characters; case-insensitive). Rate-limited: 30 checks/min per client IP, 429 on exhaustion |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"agent_id",
"idempotency_key"
],
"properties": {
"agent_id": {
"type": "string",
"description": "The Agent ID string returned at issuance (64 hex characters; case-insensitive). Rate-limited: 30 checks/min per client IP, 429 on exhaustion"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}Prove a document existed: send its SHA256 hash — we never see it — for a signed, hash-chained attestation. document_name is an optional label. Live URLs: check_url_custom. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/cert.
| Argument | Type | Description |
|---|---|---|
| document_hash* | string | SHA256 hash of your document as 64 lowercase hex characters |
| document_name | string | Optional label for your document (max 200 chars) |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"document_hash",
"idempotency_key"
],
"properties": {
"document_hash": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "SHA256 hash of your document as 64 lowercase hex characters"
},
"document_name": {
"type": "string",
"maxLength": 200,
"description": "Optional label for your document (max 200 chars)"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}Notarize work done anywhere: submit evidence; we verify it and mint a signed receipt. evidence_urls + evidence_hash optional. Document's existence: attest_document. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $1.00, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/attest.
| Argument | Type | Description |
|---|---|---|
| evidence_hash | string | SHA256 of work artifact |
| evidence_urls | array | URLs proving the work |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
| work_description* | string | What was done |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"work_description",
"idempotency_key"
],
"properties": {
"evidence_hash": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "SHA256 of work artifact"
},
"evidence_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 10,
"description": "URLs proving the work"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
},
"work_description": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "What was done"
}
},
"additionalProperties": false
}'Tell me when it changes': a standing URL check — receipt and charge only on change. check_interval_hours defaults to 24. One-time check: check_url_custom. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $1.00, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/watch.
| Argument | Type | Description |
|---|---|---|
| url* | string | HTTPS URL to watch |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
| check_interval_hours | number | Hours between checks |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"idempotency_key"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "HTTPS URL to watch"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
},
"check_interval_hours": {
"type": "number",
"default": 24,
"maximum": 168,
"minimum": 1,
"description": "Hours between checks"
}
},
"additionalProperties": false
}Your conditions, one fetch: status, substring, JSON value — signed pass/fail receipt. Default status 200. Public proof: check_url_sealed. Watch: check_url_changes. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.001, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/check/ping.
| Argument | Type | Description |
|---|---|---|
| url* | string | HTTPS URL to check (max 2000 chars; no credentials in URL). Fetched once; up to 3 redirects followed, 10s timeout, 1MB body cap |
| expect_status | number | Expected HTTP status code; truncated to an integer. Defaults to 200 when omitted |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
| expect_json_path | string | Dot-separated path into the JSON body, e.g. 'data.price' (max 500 chars). Only evaluated when set |
| expect_json_equals | any | Expected value at expect_json_path; compared by canonical JSON equality. Defaults to null when omitted |
| expect_body_contains | string |
Proof anyone can verify: one fetch, transcript sealed in a signed receipt — HTTP 200 at that moment, fixed at 200. Your own conditions instead: check_url_custom. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/check/prove.
| Argument | Type | Description |
|---|---|---|
| url* | string | HTTPS URL to prove live (max 2000 chars; no credentials in URL). Fetched once; up to 3 redirects followed, 10s timeout, 1MB body cap. Default expectation: HTTP 200 |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"idempotency_key"
],
"properties": {
"url": {
"type": "string",
"description": "HTTPS URL to prove live (max 2000 chars; no credentials in URL). Fetched once; up to 3 redirects followed, 10s timeout, 1MB body cap. Default expectation: HTTP 200"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}GPU price moves that matter: significant spot moves, in a signed receipt. limit defaults to 25. Live snapshot: compute_spot_prices. Past: compute_history. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/markets/compute/alerts.
| Argument | Type | Description |
|---|---|---|
| gpu | string | Optional GPU filter, e.g. 'H100 SXM' (max 64 chars). Omit for all GPUs |
| limit | number | Max alerts to return; integer 1-50. Defaults to 25 |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"idempotency_key"
],
"properties": {
"gpu": {
"type": "string",
"description": "Optional GPU filter, e.g. 'H100 SXM' (max 64 chars). Omit for all GPUs"
},
"limit": {
"type": "number",
"description": "Max alerts to return; integer 1-50. Defaults to 25"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}GPU market memory: cheapest and median asks per class, in a signed receipt. limit defaults to 50. Live: compute_spot_prices. Moves: compute_alerts. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/markets/compute/history.
| Argument | Type | Description |
|---|---|---|
| gpu | string | Optional GPU filter, e.g. 'H100 SXM' (max 64 chars). Omit for whole-market history |
| limit | number | Max history points to return; integer 1-200. Defaults to 50 |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"idempotency_key"
],
"properties": {
"gpu": {
"type": "string",
"description": "Optional GPU filter, e.g. 'H100 SXM' (max 64 chars). Omit for whole-market history"
},
"limit": {
"type": "number",
"description": "Max history points to return; integer 1-200. Defaults to 50"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}GPU asks, not quotes: one timestamped snapshot; asks may vanish. Observes only. Omit gpu = full snapshot; type defaults ondemand. Sealed: compute_spot_sealed. GET the paid_url with an x402 v2 PAYMENT-SIGNATURE header carrying the USDC authorization. Paid tool — $0.25 per snapshot, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/markets/compute/spot.
| Argument | Type | Description |
|---|---|---|
| gpu | string | Optional GPU model filter, e.g. 'H100 SXM' |
| type | string | Offer type: ondemand (fixed price), bid (interruptible auction — shown price is the bid floor), or reserved (longer commitment) |
| max_gpus | integer | Maximum GPU count per offer; integer 1..64 |
| min_gpus | integer | Minimum GPU count per offer; integer >= 1 |
| verified | boolean | When true, only verified hosts; when false, only unverified hosts |
| max_results | integer | Max offers to return; integer 1-25 |
| min_reliability | number | Minimum host reliability 0..1 (inclusive); hosts below it are excluded |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"gpu": {
"type": "string",
"description": "Optional GPU model filter, e.g. 'H100 SXM'"
},
"type": {
"enum": [
"ondemand",
"bid",
"reserved"
],
"type": "string",
"description": "Offer type: ondemand (fixed price), bid (interruptible auction — shown price is the bid floor), or reserved (longer commitment)"
},
"max_gpus": {
"type": "integer",
"maximum": 64,
"minimum": 1,
"description": "Maximum GPU count per offer; integer 1..64"
},
"min_gpus": {
"type": "integer",
"minimum": 1,
"description": "Minimum GPU count per offer; integer >= 1"
},
"verified": {
"type": "boolean",
"description": "When true, only verified hosts; when false, only unverified hosts"
},
"max_results": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Max offers to return; integer 1-25"
},
"min_reliability": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Minimum host reliability 0..1 (inclusive); hosts below it are excluded"
}
},
"additionalProperties": false
}GPU price, sealed proof: snapshot, cheapest ask/class, signed receipt. type defaults ondemand; omit gpu = all classes. Raw: compute_spot_prices. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/check/proveit-verified.
| Argument | Type | Description |
|---|---|---|
| gpu | string | Optional GPU class, e.g. 'H100 SXM' (max 64 chars). Omit for the per-class snapshot |
| type | string | Offer type: ondemand, bid, or reserved. Defaults to ondemand |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"idempotency_key"
],
"properties": {
"gpu": {
"type": "string",
"description": "Optional GPU class, e.g. 'H100 SXM' (max 64 chars). Omit for the per-class snapshot"
},
"type": {
"type": "string",
"description": "Offer type: ondemand, bid, or reserved. Defaults to ondemand"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}$1.00 correction pass on your draft: formatting, links verified live, terms confirmed, leaks scanned — corrected copy + signed report. register sets the voice. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $1.00, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/copy/correct.
| Argument | Type | Description |
|---|---|---|
| draft* | string | The raw draft copy to correct (1-20000 chars) |
| links | array | HTTPS URLs the copy references; each is verified alive via HEAD (fallback GET), 8s timeout, redirects never followed (max 20) |
| register* | string | Voice register: founder-notes, elite, force, or bright-soft-junior |
| required_terms | array | Terms that must appear in the final copy (max 20; each term max 100 chars; counted case-insensitively) |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"draft",
"register",
"idempotency_key"
],
"properties": {
"draft": {
"type": "string",
"maxLength": 20000,
"minLength": 1,
"description": "The raw draft copy to correct (1-20000 chars)"
},
"links": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 20,
"description": "HTTPS URLs the copy references; each is verified alive via HEAD (fallback GET), 8s timeout, redirects never followed (max 20)"
},
"register": {
"enum": [
"founder-notes",
"elite",
"force",
"bright-soft-junior"
],
"type": "string",
"description": "Voice register: founder-notes, elite, force, or bright-soft-junior"
},
"required_terms": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 20,
"description": "Terms that must appear in the final copy (max 20; each term max 100 chars; counted case-insensitively)"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}All checks, one call: liveness, content, TLS fingerprint, trust verdict, doc timestamp — one signed receipt. document_hash optional. One check: the tool alone. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $1.00, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/diligence/pack.
| Argument | Type | Description |
|---|---|---|
| url* | string | HTTPS URL to run the full suite against |
| document_hash | string | SHA256 of document to timestamp |
| document_name | string | Label for the document |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"idempotency_key"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "HTTPS URL to run the full suite against"
},
"document_hash": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "SHA256 of document to timestamp"
},
"document_name": {
"type": "string",
"maxLength": 200,
"description": "Label for the document"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}Farcaster from zero: first casts, frame spec, launch checklist in one fill-in template with a signed receipt. On Nostr instead: nostr_kit. agent_wallet optional, on the receipt. POST to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/kits/farcaster.
| Argument | Type | Description |
|---|---|---|
| idempotency_key* | string | Client-generated UUID v4, one per logical request. Replaying the same key on the same tool returns the original receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"idempotency_key"
],
"properties": {
"idempotency_key": {
"type": "string",
"description": "Client-generated UUID v4, one per logical request. Replaying the same key on the same tool returns the original receipt."
}
},
"additionalProperties": false
}Support the Embassy. Open-amount USDC gift, $0.01–$222. The signed quote binds your exact amount; receipt: patronage, never for work. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — open amount, buyer chooses $0.01–$222.00, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/give.
| Argument | Type | Description |
|---|---|---|
| amount_usd* | string | number | Exact gift amount in USD, caller-supplied: a plain decimal string like "5.00" ("$5.00" also accepted) or a number with at most 2 decimals. Canonical integer-cent parse: exponent, locale/grouping, sub-cent precision, negative, zero, below-$0.01 and above-$222.00 forms are rejected. The signed 402 quote binds this exact amount; you authorize exactly what you quoted. |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amount_usd",
"idempotency_key"
],
"properties": {
"amount_usd": {
"type": [
"string",
"number"
],
"description": "Exact gift amount in USD, caller-supplied: a plain decimal string like \"5.00\" (\"$5.00\" also accepted) or a number with at most 2 decimals. Canonical integer-cent parse: exponent, locale/grouping, sub-cent precision, negative, zero, below-$0.01 and above-$222.00 forms are rejected. The signed 402 quote binds this exact amount; you authorize exactly what you quoted."
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}Nostr from zero: first notes, profile, relays, launch checklist in one fill-in template with a signed receipt. On Farcaster instead: farcaster_kit. agent_wallet optional, on the receipt. POST to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/kits/nostr.
| Argument | Type | Description |
|---|---|---|
| idempotency_key* | string | Client-generated UUID v4, one per logical request. Replaying the same key on the same tool returns the original receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"idempotency_key"
],
"properties": {
"idempotency_key": {
"type": "string",
"description": "Client-generated UUID v4, one per logical request. Replaying the same key on the same tool returns the original receipt."
}
},
"additionalProperties": false
}Skip the sweep: the ranked directory of ranking surfaces — methods, integrity, freshness, our standing — in a signed receipt. Omit surface = full directory. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/directory/rankers.
| Argument | Type | Description |
|---|---|---|
| surface | string | Optional surface slug (e.g. 'x402-list', '8004scan', 'glama') to return only that entry. Omit for the full directory |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
| include_unverified | boolean | Include surfaces not yet verified by a live read (listed as unverified, never ranked). Defaults to true |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"idempotency_key"
],
"properties": {
"surface": {
"type": "string",
"description": "Optional surface slug (e.g. 'x402-list', '8004scan', 'glama') to return only that entry. Omit for the full directory"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
},
"include_unverified": {
"type": "boolean",
"description": "Include surfaces not yet verified by a live read (listed as unverified, never ranked). Defaults to true"
}
},
"additionalProperties": false
}Escrow an encrypted recovery blob: stored opaquely — we cannot decrypt it — for operator review, signed receipt proving its hash; quorum_rules govern release. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $1.00, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/recovery/register.
| Argument | Type | Description |
|---|---|---|
| contact_name* | string | Your name or operator handle, recorded with the escrow |
| quorum_rules* | string | The release rules for this blob, e.g. '2-of-3 named trustees must approve release' |
| recovery_blob* | string | Client-encrypted blob (ENC:v1:base64...). Stored opaquely; only its SHA-256 and byte count enter the signed receipt |
| contact_handle | string | Optional contact (email or handle) for the operator review |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"contact_name",
"quorum_rules",
"recovery_blob",
"idempotency_key"
],
"properties": {
"contact_name": {
"type": "string",
"description": "Your name or operator handle, recorded with the escrow"
},
"quorum_rules": {
"type": "string",
"description": "The release rules for this blob, e.g. '2-of-3 named trustees must approve release'"
},
"recovery_blob": {
"type": "string",
"description": "Client-encrypted blob (ENC:v1:base64...). Stored opaquely; only its SHA-256 and byte count enter the signed receipt"
},
"contact_handle": {
"type": "string",
"description": "Optional contact (email or handle) for the operator review"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}The research paper: $1.00; $2.00 with the provenance pack — paper plus its proof. bundle defaults to paper; prior receipt: $1.00 upgrade. Licensed to your wallet. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $1.00, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/research/paper.
| Argument | Type | Description |
|---|---|---|
| bundle | string | Delivery tier: 'paper' ($1.00) or 'paper+provenance' ($2.00, paper plus the corpus proof pack). Defaults to 'paper' |
| paper_id* | string | Catalog ID of the paper, e.g. 'the-discontinuity-20260922'. Unknown IDs are rejected |
| buyer_alias | string | Optional license display name (3-32 chars: letters, digits, . _ -). Defaults to the first 8 hex chars of the buyer wallet |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
| prior_receipt_id | string | Optional prior research_paper receipt id for receipt-carried tier pricing on the paper+provenance bundle |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"paper_id",
"idempotency_key"
],
"properties": {
"bundle": {
"type": "string",
"description": "Delivery tier: 'paper' ($1.00) or 'paper+provenance' ($2.00, paper plus the corpus proof pack). Defaults to 'paper'"
},
"paper_id": {
"type": "string",
"description": "Catalog ID of the paper, e.g. 'the-discontinuity-20260922'. Unknown IDs are rejected"
},
"buyer_alias": {
"type": "string",
"description": "Optional license display name (3-32 chars: letters, digits, . _ -). Defaults to the first 8 hex chars of the buyer wallet"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
},
"prior_receipt_id": {
"type": "string",
"description": "Optional prior research_paper receipt id for receipt-carried tier pricing on the paper+provenance bundle"
}
},
"additionalProperties": false
}Shop an idea: delayed scan — a ticker, two compared, or a theme — expressions fitting your budget, freshness-labeled, signed receipt. budget_usd omitted: uncapped. Ideas only — no orders placed. POST to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/shelf.
| Argument | Type | Description |
|---|---|---|
| query* | string | What to shop for: "a ticker", "a ticker, $5 budget", "COMPARE two tickers", "BEST a theme, $25 budget" (max 200 chars) |
| max_rows | number | Rows on the shelf, 3-10 (default 10) |
| objective | string | convexity (default), long-clock, fast-heat, tail, income, leveraged |
| budget_usd | number | Hard budget gate in USD (1/5/10/25/50/100 supported; omit for uncapped) |
| idempotency_key* | string | Client-generated UUID v4, one per logical request. Replaying the same key on the same tool returns the original receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query",
"idempotency_key"
],
"properties": {
"query": {
"type": "string",
"description": "What to shop for: \"a ticker\", \"a ticker, $5 budget\", \"COMPARE two tickers\", \"BEST a theme, $25 budget\" (max 200 chars)"
},
"max_rows": {
"type": "number",
"description": "Rows on the shelf, 3-10 (default 10)"
},
"objective": {
"type": "string",
"description": "convexity (default), long-clock, fast-heat, tail, income, leveraged"
},
"budget_usd": {
"type": "number",
"description": "Hard budget gate in USD (1/5/10/25/50/100 supported; omit for uncapped)"
},
"idempotency_key": {
"type": "string",
"description": "Client-generated UUID v4, one per logical request. Replaying the same key on the same tool returns the original receipt."
}
},
"additionalProperties": false
}Action gate: endpoint, action, amount, permissions probed unpaid — ALLOW, RESTRICT, ASK_HUMAN, or QUARANTINE. Verdict: trust_report. Terms: trust_preflight. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/assurance/check.
| Argument | Type | Description |
|---|---|---|
| action* | string | The action the agent intends to take, e.g. 'transfer' (required, max 200 chars) |
| context | string | Optional free-text context for the assessment (truncated to 2000 chars) |
| amount_usdc* | string | Amount at stake, as a positive decimal string, e.g. '0.25' |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
| provider_endpoint* | string | HTTPS URL of the provider to assess (max 2000 chars; no credentials in URL) |
| permissions_requested* | array | Permissions the action needs, e.g. ['spend']. Non-empty array, max 50 entries; each entry truncated to 200 chars |
Before paying: who is paid, what's delivered, what changed — signed verdict against your policies. Free quote: dry_run=true. Endpoint verdict: trust_report. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/preflight/check.
| Argument | Type | Description |
|---|---|---|
| intent* | object | The intended invocation: operation (required), params_summary (sha256 of canonical params), advertised_cost_usdc |
| policy | array | Policy strings (max 20) |
| context | object | principal_wallet + chain. Optional. |
| dry_run | boolean | true = free dry-run, intercepted before the payment gate |
| subject* | object | The spend target: server_id (required), artifact (mcpb:// | oci:// | https://), claimed_version |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
Buy/don't-buy verdict on an x402 endpoint: probed unpaid, signed PROCEED, VERIFY_FIRST, or DO_NOT_PAY. Terms: trust_preflight. Action gate: trust_assurance. POST the tool inputs as JSON to paid_url with an x402 v2 PAYMENT-SIGNATURE header. See https://docs.cdp.coinbase.com/x402 Paid tool — $0.25, USDC on Base or Arbitrum One. Paid URL: https://aemb.pro/v1/trust/report.
| Argument | Type | Description |
|---|---|---|
| url* | string | HTTPS URL of the candidate x402 endpoint to probe (max 2000 chars; no credentials in URL). Probed unpaid via GET, falling back to an empty-body POST when GET returns 404/405 |
| idempotency_key* | string | Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"idempotency_key"
],
"properties": {
"url": {
"type": "string",
"description": "HTTPS URL of the candidate x402 endpoint to probe (max 2000 chars; no credentials in URL). Probed unpaid via GET, falling back to an empty-body POST when GET returns 404/405"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"agent_id",
"revocation_signature"
],
"properties": {
"agent_id": {
"type": "string",
"description": "The Agent ID string returned at issuance (64 hex characters; case-insensitive). Unknown IDs are rejected"
},
"validity_days": {
"type": "number",
"description": "Days until the renewed Agent ID expires; integer 1-730. Defaults to the Embassy standard when omitted"
},
"idempotency_key": {
"type": "string",
"description": "Optional idempotency key: UUID v4 (client-generated; published example keys are rejected). When provided, replaying the same key returns the original receipt instead of re-running the action; when omitted, no dedupe occurs. Keys are scoped per tool and per payer account: the same key on another tool — or from another wallet — is unrelated."
},
"revocation_signature": {
"type": "string",
"description": "Hex signature over the exact UTF-8 message agent-id-revoke:<OLD_agent_id> (64-char lowercase ID, no trailing newline) — the signature covers the OLD Agent ID being retired. EIP-191: personal_sign the message STRING (personal_sign envelope REQUIRED — raw ECDSA will not verify), 0x 65-byte hex r||s||v (v=27/28). ed25519: nacl.sign.detached over the message bytes, 64-byte hex. Signer: the principal's on-file revocation key, or the Embassy signer for cause"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"agent_id",
"reason",
"revocation_signature"
],
"properties": {
"reason": {
"type": "string",
"description": "Why the Agent ID is being retired (required, max 500 characters)"
},
"agent_id": {
"type": "string",
"description": "The Agent ID string returned at issuance (64 hex characters; case-insensitive). Unknown IDs are rejected"
},
"idempotency_key": {
"type": "string",
"description": "Optional idempotency key: UUID v4 (client-generated; published example keys are rejected). When provided, replaying the same key returns the original receipt instead of re-running the action; when omitted, no dedupe occurs. Keys are scoped per tool and per payer account: the same key on another tool — or from another wallet — is unrelated."
},
"revocation_signature": {
"type": "string",
"description": "Hex signature over the exact UTF-8 message agent-id-revoke:<agent_id> (64-char lowercase ID, no trailing newline). EIP-191: personal_sign the message STRING (personal_sign envelope REQUIRED — raw ECDSA will not verify), 0x 65-byte hex r||s||v (v=27/28). ed25519: nacl.sign.detached over the message bytes, 64-byte hex. Signer: the principal's on-file revocation key, or the Embassy signer for cause"
}
},
"additionalProperties": false
}| Substring that must appear in the response body (max 5000 chars). Skipped when empty or omitted |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"idempotency_key"
],
"properties": {
"url": {
"type": "string",
"description": "HTTPS URL to check (max 2000 chars; no credentials in URL). Fetched once; up to 3 redirects followed, 10s timeout, 1MB body cap"
},
"expect_status": {
"type": "number",
"description": "Expected HTTP status code; truncated to an integer. Defaults to 200 when omitted"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
},
"expect_json_path": {
"type": "string",
"description": "Dot-separated path into the JSON body, e.g. 'data.price' (max 500 chars). Only evaluated when set"
},
"expect_json_equals": {
"description": "Expected value at expect_json_path; compared by canonical JSON equality. Defaults to null when omitted"
},
"expect_body_contains": {
"type": "string",
"description": "Substring that must appear in the response body (max 5000 chars). Skipped when empty or omitted"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"provider_endpoint",
"action",
"amount_usdc",
"permissions_requested",
"idempotency_key"
],
"properties": {
"action": {
"type": "string",
"description": "The action the agent intends to take, e.g. 'transfer' (required, max 200 chars)"
},
"context": {
"type": "string",
"description": "Optional free-text context for the assessment (truncated to 2000 chars)"
},
"amount_usdc": {
"type": "string",
"description": "Amount at stake, as a positive decimal string, e.g. '0.25'"
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
},
"provider_endpoint": {
"type": "string",
"description": "HTTPS URL of the provider to assess (max 2000 chars; no credentials in URL)"
},
"permissions_requested": {
"type": "array",
"items": {
"type": "string"
},
"description": "Permissions the action needs, e.g. ['spend']. Non-empty array, max 50 entries; each entry truncated to 200 chars"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subject",
"intent",
"idempotency_key"
],
"properties": {
"intent": {
"type": "object",
"required": [
"operation"
],
"properties": {
"operation": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"params_summary": {
"type": "string",
"maxLength": 200
},
"advertised_cost_usdc": {
"type": "string",
"maxLength": 20
}
},
"description": "The intended invocation: operation (required), params_summary (sha256 of canonical params), advertised_cost_usdc",
"additionalProperties": false
},
"policy": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 20,
"description": "Policy strings (max 20)"
},
"context": {
"type": "object",
"properties": {
"chain": {
"type": "string",
"maxLength": 30
},
"principal_wallet": {
"type": "string",
"maxLength": 100
}
},
"description": "principal_wallet + chain. Optional.",
"additionalProperties": false
},
"dry_run": {
"type": "boolean",
"description": "true = free dry-run, intercepted before the payment gate"
},
"subject": {
"type": "object",
"required": [
"server_id"
],
"properties": {
"artifact": {
"type": "string",
"maxLength": 2000
},
"server_id": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"claimed_version": {
"type": "string",
"maxLength": 100
}
},
"description": "The spend target: server_id (required), artifact (mcpb:// | oci:// | https://), claimed_version",
"additionalProperties": false
},
"idempotency_key": {
"type": "string",
"description": "Idempotency key: UUID v4, client-generated, one per logical request. Replaying the same key on this tool returns the original receipt — the action is not re-run, and the first request's receipt wins even if you resend different inputs. Published example keys are rejected. Keys are scoped per tool and per payer account: a key never returns another wallet's receipt."
}
},
"additionalProperties": false
}