| 1 | [package] |
| 2 | name = "ed-mcp" |
| 3 | description = "MCP for Onde agents: server configuration, tool namespacing, timeouts, progress and cancellation over rmcp, the official Rust SDK." |
| 4 | keywords = ["mcp", "llm", "agent", "onde"] |
| 5 | categories = ["asynchronous"] |
| 6 | version.workspace = true |
| 7 | edition = "2024" |
| 8 | rust-version.workspace = true |
| 9 | license.workspace = true |
| 10 | authors.workspace = true |
| 11 | repository.workspace = true |
| 12 | homepage.workspace = true |
| 13 | |
| 14 | [dependencies] |
| 15 | agent-client-protocol = { workspace = true, optional = true } |
| 16 | ed-agent = { workspace = true, optional = true } |
| 17 | async-trait = { workspace = true, optional = true } |
| 18 | http = "1" |
| 19 | rmcp = { workspace = true, features = ["client", "transport-streamable-http-client-reqwest"] } |
| 20 | tokio = { workspace = true, features = ["sync", "time", "process", "macros", "io-std", "io-util", "rt"] } |
| 21 | tokio-util.workspace = true |
| 22 | futures.workspace = true |
| 23 | serde_json.workspace = true |
| 24 | anyhow.workspace = true |
| 25 | tracing.workspace = true |
| 26 | |
| 27 | # rmcp's `reqwest` feature turns on reqwest's aws-lc provider, which doesn't build for |
| 28 | # arm64_32; watchOS takes `reqwest-native-tls` (Security.framework) instead. |
| 29 | [target.'cfg(not(target_os = "watchos"))'.dependencies] |
| 30 | rmcp = { workspace = true, features = ["reqwest"] } |
| 31 | |
| 32 | [target.'cfg(target_os = "watchos")'.dependencies] |
| 33 | rmcp = { workspace = true, features = ["reqwest-native-tls"] } |
| 34 | |
| 35 | # Spawning an MCP server as a child process needs `exec`, which Apple hides on tvOS and |
| 36 | # watchOS (`libc` has no `execv` there, so `nix` under `process-wrap` doesn't compile). The |
| 37 | # stdio transport is everywhere else. |
| 38 | [target.'cfg(not(any(target_os = "tvos", target_os = "watchos")))'.dependencies] |
| 39 | rmcp = { workspace = true, features = ["transport-child-process"] } |
| 40 | |
| 41 | [features] |
| 42 | # Map ACP `session/new` MCP server lists (`McpToolset::connect`, `ServerSpec::from_acp`). |
| 43 | # Pulls in `agent-client-protocol`; `ed-acp` enables it. |
| 44 | acp = ["dep:agent-client-protocol"] |
| 45 | # `McpExecutor`: an `McpToolset` as Ed tools. Pulls in `ed-agent` (and with it `onde`). |
| 46 | agent = ["dep:ed-agent", "dep:async-trait"] |
| 47 | # A scriptable MCP server for tests: `echo`, `slow_progress`, `wait_for_cancel`, and the |
| 48 | # demucs-shaped `list_models` / `separate_stems`. |
| 49 | test-server = [] |
| 50 | |
| 51 | [dev-dependencies] |
| 52 | # `elicitation` adds the server peer's `create_elicitation`, so the in-process test server can |
| 53 | # ask the client for input and exercise the forwarding hook. |
| 54 | rmcp = { workspace = true, features = ["server", "transport-streamable-http-server", "elicitation"] } |
| 55 | axum = "0.8" |
| 56 | tokio = { workspace = true, features = ["net", "rt-multi-thread"] } |
| 57 | # Run the feature-gated code's tests under a plain `cargo test`. |
| 58 | ed-mcp = { path = ".", features = ["acp", "agent", "test-server"] } |