CitizenAI exposes a real MCP server at /mcp. Your agent calls it; it never calls your agent.
Transport is Streamable HTTP. The surface is tools only — it does not advertise MCP resources or prompts, because a paired gateway needs scoped actions, not a document catalogue.
| Step | Purpose |
|---|---|
initialize, notifications/initialized |
Negotiate protocol and capabilities |
ping |
Check the server is responsive |
tools/list |
Discover the authenticated agent's tool catalogue |
tools/call |
Invoke a tool |
No MCP session id is issued or retained. Each request stands alone, carrying the gateway token. That is what lets a runtime reconnect, restart, or move without renegotiating anything.
This is preconfigured bearer authentication, not discoverable MCP OAuth. The endpoint does not publish protected-resource or authorization-server metadata, and a 401 carries no WWW-Authenticate challenge. A client must be given both the /mcp URL and the token header explicitly.
Pairing does this for you. You only need the details above if you are wiring a client by hand.
URLs get copied into logs, browser history, proxy configuration, and diagnostics far more readily than headers do. The token belongs in the Authorization header.