generated: '2026-09-19' method: derived source: openapi/merchant-0-com-openapi.json inputs: - mcp/merchant-0-com-mcp-manifest.json (GET /api/mcp/manifest, probed 2026-09-19) - a2a/merchant-0-com-agent-card.json (four skills, each bound to a catalog SKU) summary: >- Binds the three tools in Merchant-0's REST-shaped MCP manifest and the four skills in its A2A agent card to the OpenAPI operations that actually implement them. Every binding is by the provider's own statements: the manifest's tool input schema is the spec's MCPInventoryQuery schema verbatim, and each card capability says which field to "submit in AP2 execute payload". There is no MCP-protocol endpoint and no A2A task engine, so the REST operations are the only callable form of any of these tools (see surfaces). surfaces: openapi: file: openapi/merchant-0-com-openapi.json url: https://api.merchant-0.com/openapi.json operations: 95 gated: false note: Public document; no securitySchemes declared. Operator-only routes are gated at runtime by an undocumented sandbox_token. mcp: url: null manifest: https://api.merchant-0.com/api/mcp/manifest tools: 3 gated: false note: Tool manifest only — JSON-RPC tools/list 404s at every advertised path (mcp/merchant-0-com-mcp.yml). a2a: url: https://api.merchant-0.com/message/send skills: 4 gated: false note: Fixed acknowledgement payload for every method; skills are executed over REST. graphql: null crosswalk: - tool: search_inventory surface: mcp category: catalog rest: [mcp_inventory_search_api_mcp_inventory_search_post] binding: POST /api/mcp/inventory/search with the MCPInventoryQuery body — the tool's input_schema IS this schema (title "MCPInventoryQuery"). Also reachable as the UCP twin search_catalog_api_ucp_catalog_search_post / _get. confidence: high - tool: get_product surface: mcp category: catalog rest: [get_product_details_api_ucp_catalog_details__sku__get] binding: GET /api/ucp/catalog/details/{sku}; tool input {sku} is the path parameter. confidence: high - tool: check_availability surface: mcp category: inventory rest: [check_inventory_api_ucp_inventory_check__sku__get, check_inventory_alias_api_ucp_inventory_check_get] binding: GET /api/ucp/inventory/check/{sku} (or the alias GET /api/ucp/inventory/check?sku=&quantity=); tool inputs {sku, quantity} map to path/query parameters. confidence: high - tool: sea-intelligence surface: a2a category: intelligence sku: merchant0-intel-001 rest: [ap2_negotiate_alias_api_ap2_negotiate_post, ap2_sign_alias_api_ap2_sign_post, ap2_execute_alias_api_ap2_execute_post, get_intel_result_api_intel__execution_id__get] binding: Negotiate item_id merchant0-intel-001 -> sign contract_id with buyer_signature -> execute with query -> read GET /api/intel/{execution_id}. Card capability text says "Submit 'query' field in AP2 execute payload. Max 8k tokens input." confidence: high - tool: sea-report surface: a2a category: intelligence sku: merchant0-report-001 rest: [ap2_negotiate_alias_api_ap2_negotiate_post, ap2_sign_alias_api_ap2_sign_post, ap2_execute_alias_api_ap2_execute_post, get_intel_result_api_intel__execution_id__get] binding: Same three-step flow with item_id merchant0-report-001; execute body takes query (required to dispatch) and optional report_type (trade_route | regulatory | arbitrage, advisory only per AP2ExecuteBody). confidence: high - tool: did-verification surface: a2a category: verification sku: merchant0-verify-001 rest: [ap2_negotiate_alias_api_ap2_negotiate_post, ap2_sign_alias_api_ap2_sign_post, ap2_execute_alias_api_ap2_execute_post] binding: Same flow with item_id merchant0-verify-001; execute body carries target_did ("The DID to be verified. NOT the buyer's DID."). Result persisted with status verify_delivered per the card. confidence: high - tool: subscription-proof surface: a2a category: attestation sku: merchant0-proof-001 rest: [ap2_negotiate_alias_api_ap2_negotiate_post, ap2_sign_alias_api_ap2_sign_post, ap2_execute_alias_api_ap2_execute_post] binding: Same flow with item_id merchant0-proof-001; execute body optionally carries subscription_id, else the buyer's most recent active subscription is used. Stateless per the card — not persisted. confidence: high mcp_only: [] a2a_only: [] rest_only: count: 84 note: >- Everything not listed above — the public discovery reads (get_service_catalog_api_catalog_get, get_publicist_catalog_api_publicist_catalog_get, get_ucp_manifest__well_known_ucp_manifest_json_get, list_capabilities_api_ucp_capabilities_get, get_identity_api_ucp_identity_get), the legacy three-step intent/cart flow (submit_intent_api_ap2_intent_post, sign_cart_api_ap2_sign__intent_id__post, execute_payment_api_ap2_execute__cart_id__post, get_cart_api_ap2_cart__cart_id__get), the free trial (post_trial_grant_api_ap2_trial_grant_post, post_trial_execute_api_ap2_trial_execute_post), disputes (ap2_dispute_file_api_ap2_dispute_post), subscription usage/delivery, the inbound Wise webhook receiver, and the operator control plane (emergency, config, scout, sentinel, strategist, treasurer, diplomat, advocate, publicist, settlement, outbound, discovery, harvest, bank, credit) — has no tool or skill. coverage: mcp_tools: 3 mcp_tools_bound: 3 a2a_skills: 4 a2a_skills_bound: 4 rest_operations: 95 rest_operations_with_tool_or_skill: 11