| 1 | # ed-mcp |
| 2 | |
| 3 | MCP client glue over [`rmcp`](https://crates.io/crates/rmcp), the official Rust SDK, for |
| 4 | [Ed](https://crates.io/crates/ed-agent) agents. |
| 5 | |
| 6 | `rmcp` is the client. This crate owns what every agent was writing around it: server |
| 7 | configuration (stdio child processes and streamable HTTP with an optional bearer token), |
| 8 | `mcp__<server>__<tool>` namespacing, per-server timeouts, progress and cancellation, and read-only |
| 9 | gating from `readOnlyHint`. A server that fails to start is logged and left out. |
| 10 | |
| 11 | ```rust |
| 12 | use ed_mcp::{ClientInfo, McpToolset, ServerSpec, ToolsetConfig}; |
| 13 | |
| 14 | let spec = ServerSpec::http("mail", "https://api.example.com/v1/mcp").with_bearer(token); |
| 15 | let tools = McpToolset::connect_specs( |
| 16 | ToolsetConfig::new(ClientInfo::new("my-app", "1.0")), |
| 17 | &[spec], |
| 18 | &[], |
| 19 | ) |
| 20 | .await; |
| 21 | ``` |
| 22 | |
| 23 | ## Features |
| 24 | |
| 25 | - `acp`: map `McpServer` lists from an Agent Client Protocol `session/new` request. |
| 26 | - `agent`: `McpExecutor` serves a toolset to Ed as tools, with risk from `readOnlyHint` plus a |
| 27 | host override list, and optional unprefixed names for single-server apps. |
| 28 | - `test-server`: a scriptable MCP server for tests. |
| 29 | |
| 30 | ## Copyright |
| 31 | |
| 32 | © 2026 [Onde Inference](https://ondeinference.com). |
| 33 | Licensed under MIT or Apache-2.0. |