1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
[]
= "imcp2"
= "0.2.0"
= "2021"
= "Minimal MCP server that bridges an LLM to the Internet Computer, speaking textual Candid."
= "Apache-2.0"
= "README.md"
= "https://github.com/dfinity/imcp2"
# The hosted deployment of this crate, not the repository: crates.io renders
# `homepage` and `repository` as separate links, so pointing both at GitHub
# wastes one. This is where a reader can actually connect an MCP client.
= "https://mcp.internetcomputer.org"
= ["mcp", "internet-computer", "icp", "candid", "axum"]
= [
"network-programming",
"web-programming::http-server",
"api-bindings",
"cryptography::cryptocurrencies",
]
# Everything the library and the bundled binary compile from ships; the
# deployment scaffolding (container, systemd/native deploy, dashboards, CI,
# submission docs) is repository-only and would just inflate the .crate.
# `src/assets` and `static` are NOT optional: both are pulled in at compile
# time with `include_str!`.
= [
".github/",
".dockerignore",
"Dockerfile",
"deploy/",
"docs/",
"monitoring/",
]
[]
= { = "1.7", = [
"server",
"macros",
"transport-streamable-http-server",
"auth",
] }
# The Agent is INJECTED by the embedding application (see McpServer::new), so a
# host shares one boundary-node client and one ic-agent across the process.
# Deliberately a direct dependency for now: sourcing ic-agent through ic-bn-lib
# (the shared boundary-node/gateway crate, the eventual goal so the version is
# pinned by the same crate the hosts use) is deferred until ic-bn-lib releases
# against this ic-agent line — its current release pins an older one, which
# would revert the read-only delegation-permissions support this depends on.
= "0.49"
# Floor at 0.10.31: earlier 0.10.x decode/encode large `Nat`/`Int` in O(n²), which
# a caller-influenced textual `Nat` under the 1 MiB guard turns into seconds of
# worker-blocking CPU (ICPBB-382); 0.10.31 made it O(n).
= { = "0.10.31", = ["value"] }
= "0.3.2"
= { = "1", = ["macros", "rt-multi-thread", "signal", "time"] }
= "0.8"
= "1"
= { = "1", = ["derive"] }
= "1"
= "0.1"
= { = "0.3", = ["env-filter"] }
= "0.7"
= { = "1", = ["v4"] }
= { = "0.7", = ["cors"] }
# Metrics exposition at /metrics. Pinned to the version dfinity/ic uses: these
# series are destined for the same Prometheus / Victoria Metrics clusters that
# scrape the IC, so matching the org's client keeps one exposition dialect in the
# estate. The `process` feature adds CPU / RSS / file-descriptor collectors on
# Linux, which is the deploy target.
= { = "0.14", = ["process"] }
= "0.11.0"
= "0.22.1"
= "0.4.3"
= "1"
= "1.12.4"
= { = "0.13", = false, = ["rustls"] }
= "0.3.4"
= "2.1.3"
= "2"
# Only for the PocketIC-backed end-to-end test (src/e2e_handshake.rs), behind
# the `e2e` feature so the default build never compiles it. Client library for a
# local Internet Identity canister; version tracks the `pocket-ic` server binary.
= { = "15", = true }
[]
# Compiles + enables the real II<>MCP handshake test against a live Internet
# Identity canister in PocketIC (needs II_WASM + POCKET_IC_BIN at runtime; see
# src/e2e_handshake.rs). Off by default: the standard `cargo test` neither
# builds `pocket-ic` nor touches the network.
= ["dep:pocket-ic"]
[]
# Router-level contract tests (tests/routers.rs) drive the composed app with
# tower::ServiceExt::oneshot and read bodies via http-body-util.
= { = "0.5", = ["util"] }
= "0.1"