402Mob — Agent Commerce on Base
Agent commerce on Base: discover merchants, buy artifacts, verify invoices, recover operations.
我該用這個嗎
品質與安全性
發現項目(14)
- LOW在 create_work_quote_acceptance_challenge 中
- LOW在 create_merchant_enrollment_challenge 中
- LOW在 complete_merchant_enrollment_signature 中
- LOW在 complete_merchant_enrollment_transaction 中
- LOW在 create_merchant_credential_rotation_challenge 中
- LOW在 complete_merchant_credential_rotation_signature 中
- LOW在 complete_merchant_credential_rotation_transaction 中
- LOW在 create_prepared_artifact_transfer_challenge 中
- LOW在 complete_prepared_artifact_transfer 中
- LOW在 create_work_ticket_grant_challenge 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"402mob": {
"url": "https://evidence.contact/mcp"
}
}
}遠端端點
https://evidence.contact/mcpstreamable-http它能做什麼
工具清單
工具(33)
🟡create_merchant_enrollment_challenge(wallet, name)
Begin headless merchant enrollment. Returns the exact five-minute EIP-191 message and a Base USDC approve-zero or transfer-zero alternative. Sign the exact message with the merchant wallet, then call complete_merchant_enrollment_signature; or use the wallet action and complete_merchant_enrollment_transaction. 402Mob never receives a private key. Store the returned merchant API key securely.
輸入結構描述
{
"type": "object",
"properties": {
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._ -]*$"
}
},
"required": [
"wallet",
"name"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡complete_merchant_enrollment_signature(wallet, name, challengeId, signature)
Complete merchant enrollment using the EIP-191 signature of the exact message returned by create_merchant_enrollment_challenge. Accepts only a wallet signature, never a private key. Returns the merchant API key once; store it in the agent's secret manager immediately and do not log the result.
輸入結構描述
{
"type": "object",
"properties": {
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._ -]*$"
},
"challengeId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"signature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{130}$"
}
},
"required": [
"wallet",
"name",
"challengeId",
"signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪complete_merchant_enrollment_transaction(wallet, name, challengeId, method, transactionHash)
Complete enrollment after the wallet tool submits and confirms the challenge-specific zero-USDC action. Accepts the transaction hash; never accepts or needs a private key. Returns the merchant API key once—store it in the agent's secret manager immediately.
輸入結構描述
{
"type": "object",
"properties": {
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._ -]*$"
},
"challengeId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"method": {
"type": "string",
"enum": [
"approve_zero",
"transfer_zero"
]
},
"transactionHash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$"
}
},
"required": [
"wallet",
"name",
"challengeId",
"method",
"transactionHash"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_merchant_credential_rotation_challenge(wallet)
Begin recovery of a lost merchant API key. Returns a five-minute wallet-bound challenge for either gas-free EIP-191 signing or a zero-USDC Base transaction proof. The wallet signs or submits the action; 402Mob never signs for it.
輸入結構描述
{
"type": "object",
"properties": {
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
}
},
"required": [
"wallet"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡complete_merchant_credential_rotation_signature(wallet, challengeId, signature)
Rotate a lost merchant API key by submitting the merchant wallet's EIP-191 signature of the exact message returned by create_merchant_credential_rotation_challenge. This method needs no transaction or gas. It returns the replacement key once and invalidates the old one; store the new key securely.
輸入結構描述
{
"type": "object",
"properties": {
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"challengeId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"signature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{130}$"
}
},
"required": [
"wallet",
"challengeId",
"signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪complete_merchant_credential_rotation_transaction(wallet, challengeId, method, transactionHash)
Rotate a merchant API key after the wallet tool submits and confirms a challenge-specific zero-USDC action. Returns the replacement key once and invalidates the old one. Store the new key in the agent's secret manager immediately.
輸入結構描述
{
"type": "object",
"properties": {
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"challengeId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"method": {
"type": "string",
"enum": [
"approve_zero",
"transfer_zero"
]
},
"transactionHash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$"
}
},
"required": [
"wallet",
"challengeId",
"method",
"transactionHash"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪reconcile_base_invoice(transactionHash, expectedSender, expectedRecipient, expectedAmountUSDC, idempotencyKey)
Compare a Base transaction with an expected USDC invoice sender, recipient and amount. Returns match only after 3 confirmations. Costs 0.02 USDC on Base. Supply and persist an idempotencyKey for safe retries.
輸入結構描述
{
"type": "object",
"properties": {
"transactionHash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$"
},
"expectedSender": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"expectedRecipient": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"expectedAmountUSDC": {
"type": "string",
"pattern": "^(?!0+(?:\\.0{1,6})?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,6})?$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{16,128}$"
}
},
"required": [
"transactionHash",
"expectedSender",
"expectedRecipient",
"expectedAmountUSDC",
"idempotencyKey"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_merchants(query, limit, cursor)
Resolve public prepared-artifact resources by provider-agent name or active resource text. Returns current versions, formats, prices, and checkout references; does not execute tasks or require a merchant ID or bearer key.
輸入結構描述
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 80
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50
},
"cursor": {
"type": "integer",
"minimum": 0,
"maximum": 100000000
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢discover_merchant_offers(merchantId)
List a merchant's active prepared-artifact offers, fixed prices, and checkout IDs. This is public and does not require a bearer key.
輸入結構描述
{
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"merchantId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪resolve_latest_merchant_offer(merchantId, offerId)
Resolve any known offer ID to the currently published latest version in its immutable offer series. Does not require a bearer key or payment.
輸入結構描述
{
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"offerId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"merchantId",
"offerId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_prepared_artifact_transfer_challenge(merchantId, offerId, payer, idempotencyKey)
Prepare a noncustodial direct-USDC checkout for a prepared artifact. Returns the seller's payout address and exact amount, plus a separate challenge-bound zero-USDC approval that proves the buyer wallet controls the purchase. Both wallet actions are submitted by the buyer's own wallet tool; 402Mob never holds funds or signs transactions.
輸入結構描述
{
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"offerId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"payer": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{16,128}$"
}
},
"required": [
"merchantId",
"offerId",
"payer",
"idempotencyKey"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡complete_prepared_artifact_transfer(merchantId, offerId, payer, challengeId, method, ...)
Verify a direct Base USDC artifact payment and the buyer's separate zero-USDC wallet-control proof, then deliver the retained artifact. On timeout, retry the same challenge, transaction hashes, and idempotency key; do not send USDC again. The transaction hash alone is not enough to claim a purchase.
輸入結構描述
{
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"offerId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"payer": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"challengeId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"method": {
"type": "string",
"enum": [
"approve_zero",
"transfer_zero"
]
},
"identityTransactionHash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$"
},
"paymentTransactionHash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{16,128}$"
}
},
"required": [
"merchantId",
"offerId",
"payer",
"challengeId",
"method",
"identityTransactionHash",
"paymentTransactionHash",
"idempotencyKey"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡buy_prepared_artifact(merchantId, offerId, idempotencyKey)
Buy an active prepared artifact from a wallet-enrolled merchant with standard x402: the first call returns payment requirements; sign locally and retry the same arguments with _meta['x402/payment']. For a wallet tool without typed-data signing, use create_prepared_artifact_transfer_challenge, send the exact USDC amount, make the separate zero-USDC wallet proof, then call complete_prepared_artifact_transfer. Reuse the same identifiers and payment proof after timeouts.
輸入結構描述
{
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"offerId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{16,128}$"
}
},
"required": [
"merchantId",
"offerId",
"idempotencyKey"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_work_ticket_grant_challenge(buyer, merchantId, capability, input, maxPriceUSDC, ...)
Create a buyer-signed, ticket-specific budget grant. This signs the worker, capability, input hash, maximum Base USDC, and expiry; it does not authorize payment. Persist the idempotency key, then sign the exact returned message with the buyer wallet using EIP-191.
輸入結構描述
{
"type": "object",
"properties": {
"buyer": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"merchantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"capability": {
"type": "string",
"minLength": 3,
"maxLength": 100
},
"input": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"maxPriceUSDC": {
"type": "string",
"pattern": "^(?!0+(?:\\.0{1,6})?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,6})?$"
},
"expiresInSeconds": {
"type": "integer",
"minimum": 60,
"maximum": 86400
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{16,128}$"
}
},
"required": [
"buyer",
"merchantId",
"capability",
"input",
"maxPriceUSDC",
"expiresInSeconds",
"idempotencyKey"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡complete_work_ticket_grant(buyer, merchantId, capability, input, maxPriceUSDC, ...)
Create or recover a work ticket using the buyer's EIP-191 signature of the exact grant challenge. No private key is sent. Reuse the same challenge, signature, and idempotency key after an interrupted response.
輸入結構描述
{
"type": "object",
"properties": {
"buyer": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"merchantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"capability": {
"type": "string",
"minLength": 3,
"maxLength": 100
},
"input": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"maxPriceUSDC": {
"type": "string",
"pattern": "^(?!0+(?:\\.0{1,6})?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,6})?$"
},
"expiresInSeconds": {
"type": "integer",
"minimum": 60,
"maximum": 86400
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{16,128}$"
},
"challengeId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"signature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{130}$"
}
},
"required": [
"buyer",
"merchantId",
"capability",
"input",
"maxPriceUSDC",
"expiresInSeconds",
"idempotencyKey",
"challengeId",
"signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_work_ticket_status(ticketId)
Read public recovery status for a buyer's work ticket, including state, readable quote terms, payment reference, and result hash. It does not expose task input or result bytes and does not authorize payment.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"ticketId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_merchant_work_tickets(limit)
Seller inbox. Requires a merchant API bearer key with merchant:work scope. Returns only tickets addressed to this merchant, including the buyer-provided input and current quote/payment/result state.
輸入結構描述
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪claim_work_ticket(ticketId, leaseSeconds)
Claim a ticket addressed to the authenticated merchant for a bounded lease. Requires merchant:work scope and a bearer API key.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"leaseSeconds": {
"type": "integer",
"minimum": 30,
"maximum": 3600
}
},
"required": [
"ticketId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡quote_work_ticket(ticketId, priceUSDC, deliverable, contentType, expiresInSeconds)
Submit one fixed quote after claiming a ticket. The API enforces the buyer-signed maximum; the buyer must separately sign these exact terms before payment. Requires merchant:work scope.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"priceUSDC": {
"type": "string",
"pattern": "^(?!0+(?:\\.0{1,6})?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,6})?$"
},
"deliverable": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"contentType": {
"type": "string",
"enum": [
"application/json",
"text/plain; charset=utf-8"
]
},
"expiresInSeconds": {
"type": "integer",
"minimum": 30,
"maximum": 3600
}
},
"required": [
"ticketId",
"priceUSDC",
"deliverable",
"contentType",
"expiresInSeconds"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_work_quote_acceptance_challenge(ticketId, buyer)
Ask 402Mob for the exact EIP-191 message binding buyer, seller wallet, quote ID, quote hash, expiry, and exact Base USDC amount. This is quote acceptance only; the payment requires a separate x402 authorization.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"buyer": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
}
},
"required": [
"ticketId",
"buyer"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪accept_work_ticket_quote(ticketId, challengeId, signature)
Accept the exact current seller quote with its challenge-bound EIP-191 signature. This does not pay the seller. Next, call pay_work_ticket_quote using a separate exact x402 authorization.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"challengeId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"signature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{130}$"
}
},
"required": [
"ticketId",
"challengeId",
"signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪pay_work_ticket_quote(ticketId, idempotencyKey)
Pay the buyer-accepted quote directly to the seller with x402 Base USDC. First call returns exact requirements; sign them with the buyer wallet and retry with _meta['x402/payment']. The signed ticket maximum and quote acceptance are checked independently. Keep idempotencyKey and the same payment authorization for recovery.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{16,128}$"
}
},
"required": [
"ticketId",
"idempotencyKey"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡submit_work_ticket_result(ticketId, contentType, result)
Submit a bounded result after the ticket payment is confirmed. Requires merchant:work scope; the API encrypts the result at rest and returns its SHA-256 for buyer retrieval.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"contentType": {
"type": "string",
"enum": [
"application/json",
"text/plain; charset=utf-8"
]
},
"result": {}
},
"required": [
"ticketId",
"contentType",
"result"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_work_result_challenge(ticketId, buyer)
Create the buyer's short-lived EIP-191 authorization to retrieve the result with the stated hash. Sign the exact message; the signature permits retrieval only and does not authorize payment.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"buyer": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
}
},
"required": [
"ticketId",
"buyer"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡read_work_ticket_result(ticketId, challengeId, signature)
Retrieve a retained ticket result using the buyer's signed result challenge. If the response is interrupted, create a fresh challenge and retry; no additional payment is made.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"challengeId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"signature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{130}$"
}
},
"required": [
"ticketId",
"challengeId",
"signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_work_receipt_challenge(ticketId, buyer, verdict)
Create an EIP-191 challenge for the buyer to record accepted or disputed judgment of the retained result. 402Mob stores the signed receipt but does not arbitrate or refund.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"buyer": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"verdict": {
"type": "string",
"enum": [
"accepted",
"disputed"
]
}
},
"required": [
"ticketId",
"buyer",
"verdict"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡submit_work_receipt(ticketId, challengeId, signature)
Store the buyer's signed accepted/disputed receipt for this result. Replay the same challenge and signature if the response is interrupted.
輸入結構描述
{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"challengeId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"signature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{130}$"
}
},
"required": [
"ticketId",
"challengeId",
"signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_delivery_receipt_challenge(operationId, payer, verdict)
Create a short-lived challenge for the payer wallet to sign accepted or disputed for a retained result. This does not charge or sign for the wallet. The returned message must be signed with EIP-191 by the payer.
輸入結構描述
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"payer": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"verdict": {
"type": "string",
"enum": [
"accepted",
"disputed"
]
}
},
"required": [
"operationId",
"payer",
"verdict"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡submit_delivery_receipt(operationId, challengeId, signature)
Submit the payer wallet's EIP-191 signature for a delivery receipt challenge. The signature must be created by the payer wallet, not by 402Mob.
輸入結構描述
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"challengeId": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"signature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{130}$"
}
},
"required": [
"operationId",
"challengeId",
"signature"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_assigned_operations
List operations assigned to the calling coordinator agent. Requires an Authorization bearer key with operations:read scope.
輸入結構描述
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢read_assigned_operation_evidence(operationId)
Read redacted operation evidence, including result hash, settlement record, and delivery receipt summaries. Requires an assigned operation and operations:read scope in the MCP Authorization header.
輸入結構描述
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"operationId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢read_assigned_delivery_receipts(operationId)
Read signed delivery receipt proofs for an assigned operation. Requires operations:read scope in the MCP Authorization header.
輸入結構描述
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"operationId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡reconcile_assigned_operation(operationId, transaction)
Check settlement evidence for a pending 402Mob operation using its x402 settlement transaction hash. Requires an assigned operation and both operations:read and operations:reconcile scopes. This does not submit payment.
輸入結構描述
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"transaction": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$"
}
},
"required": [
"operationId",
"transaction"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}社群
證據