mcpkit
A Rust SDK for the Model Context Protocol (MCP) that simplifies server development through a unified #[mcp_server] macro.
Features
- Reduced boilerplate via unified
#[mcp_server]macro - Runtime-agnostic async support (Tokio, async-std, smol)
- Type-safe state machines via typestate pattern for connection lifecycle
- Rich error handling with context chains
- Full MCP 2025-11-25 protocol coverage including Tasks
- First-class middleware via Tower-compatible Layer pattern
Why mcpkit?
mcpkit implements MCP 2025-11-25 — the latest protocol specification — while the official rmcp SDK still uses 2024-11-05. This means mcpkit supports features not available in the official SDK:
| Feature | Added In | Description |
|---|---|---|
| Tasks | 2025-11-25 | Long-running operations with progress tracking and cancellation |
| Elicitation | 2025-06-18 | Server-initiated requests for user input |
| OAuth 2.1 | 2025-03-26 | Modern authentication with mandatory PKCE |
| Tool Annotations | 2025-03-26 | readOnly, destructive, idempotent hints for tools |
| Structured Output | 2025-06-18 | Type-safe JSON responses with schema validation |
If you need these features in Rust, mcpkit is currently the most complete implementation.
Quick Start
Add the dependency to your Cargo.toml:
[]
= "0.2"
= { = "1", = ["full"] }
= "1"
Create a simple MCP server:
use *;
use StdioTransport;
;
async
Note: This SDK is runtime-agnostic. You provide the transport, which lets you use Tokio, async-std, smol, or any other async runtime. The examples use Tokio, but the SDK itself doesn't depend on any specific runtime.
Comparison with rmcp
| Aspect | rmcp | This SDK |
|---|---|---|
| Protocol Version | 2024-11-05 | 2025-11-25 (latest) |
| Macros | 4 interdependent | 1 unified #[mcp_server] |
| Boilerplate | Manual router wiring | Automatic wiring |
| Parameters | Parameters<T> wrapper |
Direct from signature |
| Error types | 3 nested layers | 1 unified McpError |
| Tasks | Not in 2024-11-05 | Full support |
| Elicitation | Not in 2024-11-05 | Full support |
| OAuth 2.1 | Not in 2024-11-05 | Full support |
| WebSocket | Custom implementation | Built-in |
| Middleware | Manual/Tower separate | Built-in Layer system |
| Runtime | Tokio-only | Runtime-agnostic |
Crate Structure
mcpkit/
├── mcpkit/ # Facade crate (use this)
├── crates/
│ ├── mcpkit-core/ # Protocol types, traits
│ ├── mcpkit-transport/ # Transport abstractions
│ │ ├── stdio # Standard I/O transport
│ │ ├── http # Streamable HTTP transport
│ │ ├── websocket # WebSocket transport
│ │ └── unix # Unix domain sockets
│ ├── mcpkit-server/ # Server implementation
│ ├── mcpkit-client/ # Client implementation
│ ├── mcpkit-macros/ # Procedural macros
│ ├── mcpkit-testing/ # Test utilities
│ ├── mcpkit-axum/ # Axum web framework integration
│ └── mcpkit-actix/ # Actix-web framework integration
└── examples/ # Example servers
Examples
Minimal Server
use *;
;
With Resources
use *;
;
With Prompts
use *;
;
Transports
The SDK is runtime-agnostic. You choose the transport and the async runtime.
Standard I/O
use StdioTransport;
let transport = new;
HTTP (Streamable)
use HttpTransport;
let transport = new;
WebSocket
use WebSocketTransport;
let transport = new;
Unix Domain Socket (Unix only)
use UnixTransport;
let transport = new;
Middleware
use StdioTransport;
use ;
use Duration;
use Level;
let transport = new;
let stack = new
.with
.with;
Error Handling
use *;
Protocol Version
This SDK implements MCP protocol version 2025-11-25.
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT License (LICENSE-MIT)
at your option.
Documentation
- Getting Started
- Working with Tools
- Working with Resources
- Working with Prompts
- Error Handling
- Using Middleware
- Transport Options
- Architecture Decision Records
Contributing
Contributions are welcome! Please read our Contributing Guide before submitting a Pull Request.
Security
For security issues, please see our Security Policy.