Skip to content
AutomotiveMCP
← Test kit
Gateway test kit

The open gateway

What the gateway is, who runs it, how members plug in, the manifest an agent reads, how identity is handed along without personal data, and where a support ticket goes.


A gateway is one MCP endpoint in front of a dealership's tools. An agent connects once and reaches the store's inventory feed, offer providers, trade tool, payments desk, chat desk, CRM and anything else the dealer plugged in, each answered by the vendor that owns it.

The public demo runs at https://gateway.automotivemcp.ai/mcp. This demo runs on the open AutomotiveMCP gateway, hosted by PromptGraph.

Open, and optional

  • Open source. The gateway is Apache-2.0. Any website company, vendor, agent company or dealer group can host one and stay in control of it, and anyone can contribute to it. We would rather every host run the same open gateway than each company build a closed one. The public repository opens with the specification repository; until then, ask for access.
  • Optional. A gateway is a convenience, never a required middleman. Every member can still be called directly at its own endpoint.

Who is who

PartyDecidesIn the demo
OperatorHosts the gateway, keeps it up, answers support, routes ticketsPromptGraph
DealerWhich tools connect for its store, and what each may doCastle Kia of McHenry
MemberAnswers its own tools, verifies every token itselfEight simulated vendors, plus the in-house service scheduler a dealer can connect
AgentCalls tools for the shopperChatGPT, Claude, Cursor, any MCP client
ShopperWhether a vendor may contact them, and when to revokeA fictional persona on the consent page

One gateway serves many dealers. core.list_dealers lists them, dealer tools take an optional location_id (section 11.4), and each dealer chooses its own members. Scoping is an authorization boundary: every per-hop token names exactly one location and each member refuses any other.

Members

A member is a vendor's tool behind the gateway. It has its own canonical URI, which is also the audience of every token the gateway sends it, and a manifest that says what it answers and what it needs. The demo's members are role names (Website inventory feed, Specials provider, OEM offers provider, Trade appraisal, Payments desk, Chat and BDC desk, CRM, Store knowledge), not real vendor brands.

The dealer connects members itself. In the sandbox dealer view a dealer picks a member from the catalog or pastes its MCP endpoint, reads what it asks for, sees its member probe result, approves its scopes, and it is connected. Its tools appear on the gateway's next tools/list and it gets a lane on every session page. The operator is notified automatically; no ticket is needed, though the dealer can still open one. In the public sandbox the base members are locked, catalog connections revert after a few hours, and the gateway never calls an endpoint it does not host.

To build one, see Bring your own tool.

The manifest an agent reads

/.well-known/automotivemcp-gateway.json says who runs the gateway and how to reach every party:

FieldWhat it holds
operatorName, role, support URL and email, hours, status page, security contact
dealers[]Each store: location_id, address, phone, the members it connected, its alias endpoint, its dealer view
members[]Each member: member_id, role, manifest_uri, tools, active or available, which dealers use it, support contact
routesWhich members answer each tool, whether it fans out, whether a dealer connected it
supportHow to file a ticket, the fields to include, and the escalation path
sts, consentToken issuer and keys, the root delegation and per-hop token rules, receipts, status and disclosure URLs
spec_sectionsSection 9 normative; sections 11 and 12 draft

Each member's own manifest is at /members/<id>/manifest.json; the schema is at /test-kit/schemas/member-manifest.json. The server card is at /.well-known/mcp.json, an A2A card at /.well-known/agent-card.json, and a plain map at /llms.txt.

Identity handoff

The shopper is one pseudonymous principal from the first call. No tool takes a name, phone or email, and the agent never holds one.

  1. Root delegation. At a session's first call the gateway mints a root delegation it keeps: the shopper as a pairwise id, the agent as the actor (self-asserted), the most any hop may get, the dealers, 30 minutes.
  2. One token per hop. Every member call gets its own ES256 token exchanged from the root (RFC 8693): one member, one tool, one scope, one location, a different pairwise id per vendor, never outliving the root. Members verify it themselves and return a section 12.8 audit record.
  3. Step-up. A lead, a test drive, a service appointment or a text follow-up needs the shopper at contact_verified. The tool answers insufficient_scope with a one-time consent link.
  4. Consent receipts. On the consent page the shopper picks a persona, types a code shown on screen and ticks what to share. The gateway seals one receipt per vendor (section 9), addressed to that vendor alone.
  5. Contact by reference. The vendor verifies its receipt (signature, audience, disclosure hash, status) and asks the gateway for exactly the fields it covers. A vendor presenting another vendor's receipt is refused.
  6. Revoke. From the session page the shopper revokes: every token stops, every receipt reads revoked, and the agent's next call fails with "access revoked by the shopper".

Section 9 is normative. Sections 11 and 12 are draft proposals: the demo runs them in one trust domain to find the gaps, and does not claim conformance.

Support routing

StepWhoWhen
1The member vendorA member returns wrong data or errors
2The gateway operatorRouting, sessions, limits, availability, or no answer from a vendor
3The dealerThe store, its vehicles, or connecting a new member
4AutomotiveMCP securityA security or privacy flaw

An agent can file the ticket itself: testkit.create_support_ticket fills in the gateway, operator, dealer, member, tool, session, trace link, recent errors and client, and routes it per the manifest. In the demo the ticket is recorded on the session page, NOT SENT. Every session page shows who runs the gateway and where tickets go.

Run your own

The gateway is a standalone Node 22 package with one dependency, the official MCP server SDK. It runs its members on loopback, keeps sessions in SQLite outside the checkout, and refuses any outbound connection beyond loopback.

cd packages/testkit-gateway
npm ci
GATEWAY_PORT=3310 node server.mjs          # or: node bin/amcp-testkit.mjs up
curl http://127.0.0.1:3310/health

Dealers, members and the operator are config (config/gateway.json). Put a reverse proxy in front of /mcp with buffering off, and keep /internal/ off the public host.

AlsoBring your own tool →

Get agent-ready.

Dealers join free and find out which vendors are ready. Vendors ship an MCP and get listed. Builders get open tooling and a working demo to build against today.