This document describes how the Rust MCP SDK (rmcp, rmcp-macros) selects,
updates, and maintains its dependencies. It applies to all crates in the workspace.
- Keep dependencies current and secure without churn that destabilizes the public API.
- Minimize the dependency footprint we impose on downstream users.
- Make dependency updates reviewable and traceable.
Before adding a new dependency we consider:
- Necessity — whether the functionality is worth an added dependency, or is small enough to implement directly.
- Maintenance & trust — active maintenance, a healthy release history, and a
permissive, compatible license (the workspace is
Apache-2.0). - Footprint — transitive dependency count and compile-time cost.
- Optionality — anything not needed by every user should sit behind a Cargo
feature so downstream builds stay lean. The SDK is heavily feature-gated for this
reason (transports,
auth,schemars,reqwest, etc.).
Version requirements are specified with caret (^, the Cargo default) constraints so
compatible upgrades are picked up automatically.
Dependency updates are automated with Dependabot,
configured in .github/dependabot.yml:
| Ecosystem | Cadence | PR label |
|---|---|---|
| Cargo crates | Weekly | T-dependencies |
| GitHub Actions | Daily | T-CI |
Dependabot opens a limited number of PRs at a time (currently 3 per ecosystem) to keep the review queue manageable. Update PRs run the full CI suite (build, format, clippy, tests, and conformance) and must be green before merge.
- Patch and minor updates that pass CI are reviewed and merged promptly by maintainers.
- Major (breaking) updates are evaluated individually; they may require code changes and are scheduled deliberately rather than merged automatically.
- Any dependency change that affects the public API (for example a type re-exported
from a dependency) is treated as a potential breaking change and follows
VERSIONING.md.
- Security fixes take priority over routine updates and are expedited.
- Vulnerabilities in the SDK itself are handled per
SECURITY.mdvia GitHub's private Security Advisory process. - Advisories affecting our dependencies (e.g. via the RustSec Advisory Database) are addressed as soon as a fixed version is available; if a released version of the SDK is impacted, a patched release is published and, where warranted, the affected versions are yanked from crates.io.
Dependency upgrades must not raise the SDK's declared MSRV (rust-version in
Cargo.toml) without an explicit, documented MSRV bump — which is itself treated as a
breaking change per VERSIONING.md.