The protocol layer that makes the platform optional.
An open way for AI agents to find, verify, and transact with each other directly — with no marketplace, no gateway, no company anyone has to trust beyond the math itself.
Every digital transaction today flows through a platform — Booking, Uber, OpenAI plugins, Anthropic MCP catalogs, Coinbase AgentKit. The platform decides who's visible, who's trusted, and how much they take. AI agents are inheriting this same model: discovery, ranking, and even API calls flow through a vendor gateway. If the vendor disappears, so does your access.
A way for two AI agents — one acting for a user, one acting for a merchant — to find each other, verify each other, and transact, with nothing in between except:
- A public registry anyone can read.
- A piece of cryptographic math anyone can run.
- The two parties' own servers.
No marketplace. No gateway API. No company you have to trust to stay online. The math itself is the trust.
This repository is the first falsifiable demonstration that AI-agent commerce can run without a platform in the operational critical path.
The claim: Pull the plug on every Concourse server. Take the company offline. A user agent should still be able to discover a merchant, verify the merchant hasn't been tampered with, and complete a real transaction.
The proof: Try it. The CLI below uses no Concourse-controlled infrastructure. If you can run it, the platform is operationally dispensable. That is the point.
# Find every merchant on the registry — no signup, no API key, no platform
npx -y @concourse-protocol/discover list
# Verify a merchant's listing hasn't been tampered with — math, not trust
npx -y @concourse-protocol/discover fetch 1
# Book directly — your agent talks to the merchant's agent, no one else
npx -y @concourse-protocol/discover invoke 1 check_availability \
-d '{"check_in":"2026-09-01","check_out":"2026-09-03","room_type":"mountain_view"}'If you finished that walkthrough, you just transacted with a merchant without touching any platform — including ours.
Add this to your MCP config:
{
"mcpServers": {
"concourse": {
"command": "npx",
"args": ["-y", "@concourse-protocol/discover", "concourse-mcp"]
}
}
}Your AI agent now has four new tools — list merchants, verify them, see their skills, book — all running over the open protocol. No vendor gateway in the loop.
| Path | What it gives you |
|---|---|
packages/discover-cli/ |
The CLI + MCP server you just ran. Install it anywhere, talk to any registered merchant. |
merchant-agent-template/ |
A merchant clones this to become an agent. They own the server, the keys, and the listing — no Concourse account exists. |
backend/skills/ |
Two SKILL files — protocol manuals an AI agent loads to learn the rules. Load them into any LLM and it doesn't need this repo anymore. |
contracts/erc8004/ |
The public registry the protocol relies on. Anyone can read it. Nobody can edit it after deployment. |
docs/architecture/ |
The design notes — why each piece exists, what it doesn't try to be. |
frontend/ |
A reference website showing the registry. It's optional — the protocol works fine without it. |
| Status | What it gets you |
|---|---|
| ✅ Live | A user can discover any merchant, verify they're real, and call their skills — without trusting any company. |
| ✅ Live | A merchant can self-host, get listed, and be reached by any AI agent — without paying a platform or asking for permission. |
| ✅ Live | A developer can install the protocol in one line (npx @concourse-protocol/discover) and run it from any machine. |
| 🟡 Building | Pay-per-call payments so merchants can charge for premium skills directly — no payment processor in the loop. |
| 📋 Planned | Held-funds escrow + reputation that's earned only by completing real transactions — no fake reviews possible by construction. |
| 📋 Planned | A managed hosting tier for merchants who don't want to run their own server — completely optional. |
# 1. Use a third-party RPC provider — not anything we control
export CONCOURSE_RPC_URL=https://base-sepolia.public.blastapi.io
# 2. Block our website at the DNS level (optional)
echo "0.0.0.0 concourse.paking.xyz" | sudo tee -a /etc/hosts
# 3. Run the full discover → verify → invoke loop. It should still work.
npx -y @concourse-protocol/discover list
npx -y @concourse-protocol/discover invoke 1 get_room_typesIf this ever stops working, the claim is falsified. Open an issue.
Under the hood (technical readers)
Concourse builds on three open standards:
- ERC-8004 — public on-chain identity registry. Anyone reads, owners write, no admin.
- A2A Agent Card — Google-published JSON descriptor at
/.well-known/agent-card.jsonper merchant. - x402 — Coinbase-published HTTP-native USDC micropayment scheme (planned for paid skills).
A merchant's listing is reduced to three things stored on chain: (owner_address, cardURI, sha256(card_bytes)). Discovery is a single eth_call; verification is one HTTP GET plus one SHA-256 computation; invocation is an HTTP POST to the merchant's own URL. No Concourse-operated server is in this loop.
Reference implementation choices: Foundry + Solidity 0.8.24 + evmVersion = cancun for the registry; Hono + Drizzle + better-sqlite3 + viem for the merchant agent template; EIP-191 challenge-response for session auth; canonical JSON serialization so the on-chain SHA-256 matches the served bytes byte-for-byte. Full design notes in docs/architecture/.
The registry currently lives on Base Sepolia at 0xBdE5A55D50d2062FF5529546d8c391f6a6eEA29f (73 tests at 100% coverage). Mainnet migration uses the shared canonical ERC-8004 address so the broader ecosystem indexes us automatically.
MIT — Copyright © 2026 Pak Hei Poon and Concourse Protocol contributors.
Because your next transaction should be between you and the merchant, not you and a platform.
