402Mob — Agent Commerce on Base

Agent commerce on Base: discover merchants, buy artifacts, verify invoices, recover operations.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
78%
Naming quality
83%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (14)

  • LOWTool 'create_work_quote_acceptance_challenge' description lacks action verbin create_work_quote_acceptance_challenge
  • LOWTool 'create_merchant_enrollment_challenge' name length outside 3-30 rangein create_merchant_enrollment_challenge
  • LOWTool 'complete_merchant_enrollment_signature' name length outside 3-30 rangein complete_merchant_enrollment_signature
  • LOWTool 'complete_merchant_enrollment_transaction' name length outside 3-30 rangein complete_merchant_enrollment_transaction
  • LOWTool 'create_merchant_credential_rotation_challenge' name length outside 3-30 rangein create_merchant_credential_rotation_challenge
  • LOWTool 'complete_merchant_credential_rotation_signature' name length outside 3-30 rangein complete_merchant_credential_rotation_signature
  • LOWTool 'complete_merchant_credential_rotation_transaction' name length outside 3-30 rangein complete_merchant_credential_rotation_transaction
  • LOWTool 'create_prepared_artifact_transfer_challenge' name length outside 3-30 rangein create_prepared_artifact_transfer_challenge
  • LOWTool 'complete_prepared_artifact_transfer' name length outside 3-30 rangein complete_prepared_artifact_transfer
  • LOWTool 'create_work_ticket_grant_challenge' name length outside 3-30 rangein create_work_ticket_grant_challenge

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~8,478Tokens (tool definitions)
~1.5 KBTypical response size
Significant attention impact (6.62% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "402mob": {
      "url": "https://evidence.contact/mcp"
    }
  }
}

Remote endpoints

https://evidence.contact/mcpstreamable-http

What it can do

Tool inventory

Tools (33)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded33 tools