{
  "protocolVersion": "0.3.0",
  "name": "Robauto",
  "version": "0.7.2",
  "description": "Robauto MCP — Agent Intelligence & Brand Discovery Infrastructure. Agent intelligence: readiness scans, agent-traffic measurement and network AI-search data. Brand discovery: resolved brand profiles, contacts, policies, products and agent endpoints, plus durable agent identity and memory (Robot Soul).",
  "url": "https://robauto.ai",
  "documentationUrl": "https://robauto.ai/mcp-server",
  "provider": {
    "organization": "Robauto",
    "url": "https://robauto.ai"
  },
  "supportedInterfaces": [
    {
      "transport": "MCP_STREAMABLE_HTTP",
      "url": "https://mcp.robauto.ai",
      "description": "Robauto MCP server (no login required)"
    },
    {
      "transport": "MCP_STREAMABLE_HTTP",
      "url": "https://mcp.robauto.ai/auth",
      "description": "Robauto MCP server, owner-scoped (OAuth 2.1 with dynamic client registration)"
    },
    {
      "transport": "HTTP_JSON",
      "url": "https://robauto.ai/api/public",
      "description": "Public REST API (OpenAPI at /openapi.json)"
    },
    {
      "transport": "HTTP_JSON",
      "url": "https://robauto.ai/api/soul",
      "description": "Robot Soul identity and memory service"
    }
  ],
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "authenticatedExtendedCard": false,
    "extensions": [
      {
        "uri": "https://ap2-protocol.org/extensions/ap2/v0.1.0",
        "name": "ap2",
        "description": "Agent Payments Protocol (AP2). Robauto acts as a merchant: agents can purchase Signal scans, entity audits, llms.txt generation and featured placement using cryptographically-signed mandates.",
        "required": true,
        "params": {
          "roles": [
            "merchant"
          ],
          "paymentMethods": [
            "x402",
            "card"
          ],
          "supportedMandates": [
            "intent",
            "cart",
            "payment"
          ],
          "acpDiscovery": "https://robauto.ai/.well-known/acp.json",
          "x402Discovery": "https://robauto.ai/.well-known/x402.json",
          "catalog": "https://robauto.ai/api/public/catalog",
          "specs": [
            "https://github.com/google-agentic-commerce/AP2/tree/v0.1.0",
            "https://github.com/google-agentic-commerce/ap2"
          ]
        }
      },
      {
        "uri": "https://github.com/google-agentic-commerce/ap2/tree/v0.1.0",
        "name": "ap2",
        "description": "AP2 (Agent Payments Protocol) merchant extension — spec-repo alias of the canonical ap2 extension URI.",
        "required": false,
        "params": {
          "roles": [
            "merchant"
          ],
          "alias_of": "https://ap2-protocol.org/extensions/ap2/v0.1.0"
        }
      }
    ]
  },
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/plain"
  ],
  "skills": [
    {
      "id": "merchant_lookup",
      "name": "Merchant lookup",
      "description": "Identify the merchant behind a domain or card charge and return its capability object (A2A extension https://robauto.ai/schemas/merchant-capability/v1): resolution provider, endpoints by protocol, commerce actions and ranked resolution paths.",
      "tags": [
        "commerce",
        "discovery",
        "free"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "commerce_recovery",
      "name": "Commerce recovery",
      "description": "Post-purchase refunds, returns and disputes: lookup_card_charge or find_brands → get_site_agent_card → prepare_resolution → human approval → confirm_resolution → get_return_status { resolution_case_id }. Fraud Deflect resolves its featured brands; Robauto prepares and routes for every other merchant.",
      "tags": [
        "commerce",
        "post-purchase",
        "approval-required"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_site_agent_card",
      "name": "One canonical agent card for any website",
      "description": "Return one canonical machine-readable object for a domain: identity and category, description, declared products with checkout URLs, contact routes, policies, capabilities (llms.txt, MCP server card, A2A agent card, agent payments), agent and MCP endpoints, accepted payment methods, verification and freshness counts, and the stored Agent Readiness score. This is the single call to make before deciding whether and how to transact with a site — it replaces get_brand_profile plus get_brand_contacts plus get_brand_policies plus get_brand_products. Every contact and policy value carries the page it came from and the day it was last checked; nothing is withheld for age. Capability findings are a live read-only fetch of the site's own discovery files.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "ask_brand",
      "name": "Ask a plain question about a brand",
      "description": "Ask a plain-language question about a company and get an answer grounded strictly in that company's published agent card: what it sells, who to contact for support or disputes, its refund and shipping policy, which products fall under a price, how ready it is to deal with agents. Nothing outside the card is used, no fact is invented, and every value carries the day it was last checked. The full card and its source URLs are returned alongside the answer so you can verify every claim. Use this instead of chaining four lookup tools.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "compare_brands",
      "name": "Compare brands side by side",
      "description": "Compare two to five domains on the criteria you choose: products, pricing range, policies, agent readiness, contact routes and agent capabilities. Returns one structured row per domain plus a readiness ranking for the domains that have a score. A blank column means nothing is published for that domain yet, which is itself the finding — it is never filled in with a guess. Use this to choose between suppliers or vendors on evidence an agent can check.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_network_data",
      "name": "Robauto network data in one call",
      "description": "Fetch Robauto's public network data with one call. view='summary' (default) returns AI-search KPIs plus the top five sites and agents; 'top_sites' and 'top_agents' return the public leaderboards ranked by agent visits; 'boosts' returns the boosted-content feed; 'featured' returns the featured brand and active brand agents; 'ai_search' returns the full AI-search KPI block with the engine mix; 'readiness_index' returns the live Agent Readiness Index totals across the most-visited websites (attempted, scored, blocked, median, mean, min, max and the last run time) — the same numbers published on https://robauto.ai/agent-readiness-index. Network-wide aggregates only — no owner identity, contact details or private per-site analytics. This replaces get_top_sites, get_top_agents, get_boost_feed, get_featured_brands and get_ai_search_data.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "find_brands",
      "name": "Find a brand in the agent resolution index",
      "description": "Search Robauto's brand resolution index by name or domain and return the matching domains with category, agent readiness score, how many contact and policy details are currently published, and the canonical profile URL. Use this first when you only know a company's name.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_brand_profile",
      "name": "Full agent resolution profile for one domain",
      "description": "Return everything published for one brand domain: official website, category, agent readiness, whether the brand claimed the profile, freshness counts, and every contact and policy detail with its source page, last-checked date and method (crawled, submitted, verified or reported). Nothing is withheld for age; the source URL and last-checked date stay so you can re-check anything yourself.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_brand_contacts",
      "name": "Support, dispute, escalation, legal and unsubscribe routes",
      "description": "Return only the contact routes for a brand domain: support, dispute or chargeback, escalation, legal notices, and unsubscribe / opt-out (unsubscribe URL, email preferences, opt-out method, do-not-sell and data-deletion routes). Role mailboxes only, never a named individual. Every route carries its source page, last-checked date, provenance (`sources`), purpose, channel, escalation_order, a `reachability` block (did the route answer a machine probe: status, method, http_status, redirect_terminal, evidence, checked_at) and an `outcome` block (was a human reached: n, success_rate, median_hours_to_human, window_days, state). Reachability never implies outcome, and success rates stay `insufficient_data` below eight independent reports. Nothing is withheld for age.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_brand_policies",
      "name": "Returns, refunds, shipping, warranty, privacy and AI-agent policies",
      "description": "Return the published policy pages for a brand domain: returns and refunds (with the refund window in days when known), shipping, warranty, cancellation, privacy, terms and any stated AI-agent policy. Every policy carries its source page, last-checked date, provenance (`sources`), the page's `last_modified` date and `content_hash` when known, and an extracted `terms` object (window_days, restocking_fee_pct, condition_required, return_shipping_paid_by, refund_method, exceptions) when the policy text has been parsed. Read the policy before transacting on a human's behalf.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_brand_reachability",
      "name": "Will this contact route actually reach a human?",
      "description": "Answer in one call which of a brand's published contact routes are worth trying, ranked best-first. Every route returns two judgements that must never be conflated: `reachability` is a machine probe of the route itself (mailbox accepts mail, URL or form loads, HTTP status, where a redirect terminated, when it was checked), and `outcome` is the real-world result of using it, aggregated from independent agent reports (sample count, success rate, median hours to a human, reporting window). A live mailbox is not an answered one. Outcome rates stay null with state `insufficient_data` below eight independent reports, so a missing rate is never evidence a route is bad. Each route also carries its purpose, channel, escalation order, source page, last-checked date and provenance. Nothing is withheld for age. Use `recommended_route` first, then report back with report_contact_outcome.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_brand_agent_endpoints",
      "name": "MCP server and agent-to-agent endpoints for a domain",
      "description": "Return the machine-to-machine entry points a brand publishes for agents: its MCP server endpoint and MCP manifest, its agent card (A2A / .well-known/agent-card.json), any ChatGPT or OpenAI connector it exposes, its agent-facing API docs (OpenAPI), how an agent signs in (auth discovery), and its agent payments endpoint (x402 / ACP / AP2). Each value carries the page it came from and the day it was last checked; nothing is withheld for age. Prefer these endpoints over scraping the website.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "report_contact_outcome",
      "name": "Report whether a published contact route actually worked",
      "description": "Tell Robauto whether a route from get_brand_contacts or get_brand_policies actually worked. Reports are evidence, never truth: they are logged against your client id, counted, and a route several independent clients report broken is queued for a human verifier. Nothing you report overwrites a published value on its own.",
      "tags": [
        "write",
        "free",
        "T1"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "submit_brand",
      "name": "Add or update a brand in the index in one call",
      "description": "Add a brand to the resolution index, or fill in fields it is missing — identity plus every contact, opt-out and policy field in a single call. Built for crawling agents: read a company's own pages, then send what you found. Every field must arrive with the page you read it from, and that page must be on the brand's own domain — no source, no store. Values land with method 'submitted' and are queued for a human check; they never overwrite a human-verified value. Only role mailboxes are stored, never a named individual. Leave a field out rather than guessing it. Pass `brands` to submit up to 20 domains per call.",
      "tags": [
        "write",
        "free",
        "T1"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "lookup_card_charge",
      "name": "Fraud Deflect: what is this charge on my card?",
      "description": "Fraud Deflect Customer Service Agent. Pass the text exactly as it appears on a card statement (e.g. 'RIMAN' or 'AMZN MKTP') and get back the brand behind it, its official website, its Fraud Deflect brand page and a ready-to-send return/refund request. Matches on stored card statement descriptors first (confidence 'high'), then falls back to brand name or domain (confidence 'low' — confirm with the human before acting). Free, no key.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "start_return_request",
      "name": "Fraud Deflect: start a return or refund with any brand",
      "description": "Fraud Deflect Customer Service Agent. Step 1 of a return or refund: prepares the request with no external effect and returns a preview plus a single-use confirmation_token (10 minutes). Show the preview to the human, then call confirm_resolution with the token and the same details. Featured brands go to Fraud Deflect; for other brands the reply points to get_brand_contacts and prepare_resolution (merchant_message). Only send details the human gave you and agreed to share. Free, no key.",
      "tags": [
        "write",
        "free",
        "T2"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_return_status",
      "name": "Fraud Deflect: check a return or refund request",
      "description": "Fraud Deflect Customer Service Agent. Check the status of a return or refund request using the resolution_case_id from confirm_resolution (or an older request_id). Statuses: received, sent_to_brand, in_review, resolved, refunded, declined, closed. Returns no personal details. Free, no key.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "prepare_resolution",
      "name": "Prepare a post-purchase action for human approval",
      "description": "Routes a post-purchase issue to the merchant's resolution provider (fraud_deflect for Fraud Deflect featured brands, merchant_native when the merchant publishes its own agent endpoint, otherwise robauto) and prepares it without any external effect. kind: return_request (Fraud Deflect featured brands only; others get status not_handled with the ranked Robauto contacts), merchant_message (recipient must be one of the merchant's published contacts), merchant_handoff (merchant_native only). Returns a human-readable preview and a confirmation_token that expires in 10 minutes and is bound to these exact parameters. Show the preview to the human; never confirm without their approval. Never send full card numbers — last four digits only.",
      "tags": [
        "write",
        "free",
        "T1"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "confirm_resolution",
      "name": "Execute an approved post-purchase action",
      "description": "Executes an action from prepare_resolution after the human approved the preview. Pass confirmation_token plus exactly the same parameters; tokens are single-use, expire after 10 minutes and fail if any parameter changed. Fraud Deflect featured brands: opens the request with Fraud Deflect. Robauto path: Robauto can't verify purchases or issue refunds, so it returns the ready message (to, subject, body, mailto) for the human to send. Always returns a resolution_case_id to track with get_return_status.",
      "tags": [
        "write",
        "free",
        "T2"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_scan",
      "name": "Agent Scan — full agent-readiness audit",
      "description": "Run Robauto's Agent Scan on any public domain: 25 read-only checks across four levels (Signal Basics, Technical Groundwork, Agent Integration, Agentic Commerce) covering robots.txt, sitemap, llms.txt, structured data, Link response headers, API catalog, OpenAPI, markdown content negotiation, Auth.md and OAuth/OIDC discovery, A2A agent card, MCP server card, agent skills, Content Signals, WebMCP, DNS-AID, RFC 9421 signatures, x402, ACP, AP2, MPP and UCP. Returns a 0-100 readiness score, per-level scores, and for every gap an implementation fix plus a paste-ready agent prompt. Scores cap at 90 without a verified Robauto pixel, and the response carries a how_to_get_verified block with keyless endpoints an agent can call itself: POST https://robauto.ai/api/public/pixel-install { domain } for a pixel id and paste-ready snippet, then POST https://robauto.ai/api/public/account { email, domain } to claim it. Reads only public pages and discovery files and changes nothing on the target site.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "search_products",
      "name": "Search products across the network",
      "description": "Search products across every Robauto brand that has connected an approved product feed. Results are the brand's DECLARED layer — catalog data the brand publishes itself (Google Merchant Center feed, Schema.org Product/Offer JSON-LD, or /products.json) — never Robauto's observed scan data. Every row carries its layer label, fetched_at, the brand's /p/ agent page, a UTM-tagged checkout URL and which commerce protocols the brand supports (deep-link, prefilled checkout, x402, ACP, AP2, MPP, UCP). Price and availability are always returned with fetched_at attached; settle against the brand's checkout URL, never a cached number.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_brand_products",
      "name": "One brand's product catalog",
      "description": "Return the declared product catalog for a single domain: title, description, image, category, price, availability, UTM-tagged checkout URL, the brand's /p/ agent page and the commerce protocols the brand supports. Brand-submitted data, labelled 'declared', stamped with fetched_at; nothing is withheld for age.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_learn_content",
      "name": "Robauto Learn courses and lessons",
      "description": "List the Robauto Learn micro-courses (https://robauto.ai/learn) with their slug, title, estimated minutes and lesson count. Pass a course slug to get every lesson in order with its headline, body text, source name, source URL and canonical lesson URL, so an agent can cite or teach the material directly. Public educational content — no user data involved.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_repos",
      "name": "Robauto public source repositories",
      "description": "List Robauto's public git repositories with their clone URL, what each one contains, and the install command for the MCP server. Use this to fetch the authoritative tool contracts and client config instead of guessing them.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "register_site_for_human",
      "name": "Register a site for a human",
      "description": "Invite a human to create a Robauto account and start tracking their site. Emails the invite and creates no site record until the human registers. Always pass a real agent_id for attribution.",
      "tags": [
        "write",
        "free",
        "T2"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "soul_verify",
      "name": "Verify a Robot Soul",
      "description": "Request a one-time Robot Soul challenge, then submit the agent's Ed25519 public key and signature to receive a 90-day scoped bearer token.",
      "tags": [
        "write",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "soul_recall",
      "name": "Recall soul memory",
      "description": "Read an agent's persistent Robot Soul memory using the bearer token returned by soul_verify. Optionally return one semantic key.",
      "tags": [
        "read",
        "free",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "soul_remember",
      "name": "Write soul memory",
      "description": "Merge structured facts into an agent's durable Robot Soul memory. Requires the bearer token from soul_verify and costs $0.01 USDC over x402.",
      "tags": [
        "write",
        "metered",
        "T3"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "soul_pay",
      "name": "Soul payment",
      "description": "Return Robot Soul tiers, per-action USDC pricing, and x402 payment terms. Use this before calling a paid soul action.",
      "tags": [
        "read",
        "metered",
        "T0"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ],
  "dataPolicy": "Robauto never exposes user contact details, account identities, or a single site's proprietary analytics over MCP. Site- and agent-level traffic is published only where the site owner already publishes it (the public leaderboards), and everything else is returned as network aggregates.",
  "repositories": [
    "https://github.com/robauto-ai/mcp",
    "https://github.com/robauto-ai/dsh-growth"
  ]
}
