grounding: this repo's own 3 crates
What an MCP server actually is, here
The Model Context Protocol (MCP) defines a client-server pattern for giving an LLM tool access: a server declares a set of named, schema-typed tools; a client (an agent, an IDE, a chat surface) discovers and calls them. This repo builds MCP servers using rmcp, the official Rust SDK, with the #[tool_router] / #[tool] / #[tool_handler] macros doing the JSON-RPC and schema plumbing.
The 3 real servers
- subagentjobs-mcp (
crates/mcp-server) -- exposes this repo's own job-board data:search_jobs,get_job,get_skill_graph,crawl_board. Backed byDurableStore(Redis L2 → Postgres L3) and a Postgres-backed FSM (task-state-machine) tracking crawl state Pending → Crawling → Enriching → Active. - a2a-bridge (
crates/a2a-bridge) -- doesn't expose its own tools; instead it spawnssubagentjobs-mcpas a stdio child process per request and re-exposessearch_jobs/get_jobover the A2A protocol via an axum HTTP server, publishing an AgentCard atGET /.well-known/agent-card.json. - engineering-coworker (
crates/engineering-coworker) -- the one server that actually executes side effects:cargo_check,cargo_test,wrangler_deploy,d1_query(rejects DROP/ALTER automatically),git_status,git_commit_push. Runs on the developer's own Mac under themacos__desktop_cowork__engineering_coworkernaming-ontology profile.
Source: read directly from crates/mcp-server/{Cargo.toml,src/main.rs,src/server.rs,src/tools.rs}, crates/a2a-bridge/{Cargo.toml,src/main.rs}, and crates/engineering-coworker/{Cargo.toml,src/main.rs} in this repo.