MCP (Model Context Protocol) server library — transport-agnostic dispatch for exposing CAR capabilities to MCP-aware clients.
Two transports use this crate today:
- stdio —
car-mcp-serverbinary, one client per process. Suitable for Claude Desktop / Cursor / Claude Code's--mcp-configand any other client that follows the MCP spec's stdio framing. See [transport::stdio_loop]. - HTTP-streamable —
car-serverdaemon endpoint, many concurrent clients sharing the sameRuntime/ policy chain / eventlog. Implemented incar-server-coreagainst the same [Server::handle] entry point. (Phase 2 stage 4b — pending.)
Both share the same Server::handle(Request) -> Option<Response>
pure function, so transports stay separable from protocol logic.
Why a library crate
Originally this lived in car-mcp-server's main.rs as a
self-contained binary. v0.8 + the external-agent work made it
clear MCP needs to be a first-class daemon surface so every
external client (Claude Code, Codex, Gemini, custom GPTs) gets
CAR's tools through the same governance layer. Extracting the
dispatch logic into a library lets the daemon embed it without
shelling out to a subprocess. See
docs/proposals/external-agent-detection.md (Phase 2 stage 4b).