Mirror of https://github.com/modelcontextprotocol/rust-sdk — The official Rust SDK for the Model Context Protocol
  • Rust 99.2%
  • Shell 0.5%
  • JavaScript 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Andrew Harvard 7ba1ac4959
fix: use mimeType instead of mime_type for MCP specification compliance (#339)
- Fix ResourceContents enum to properly serialize with camelCase field names
- Add comprehensive tests to verify JSON serialization compliance
- Ensure all resource-related structs use mimeType as per MCP spec
- Add tests for RawResource, ResourceContents, RawImageContent, RawAudioContent
- Add test for prompt message image content serialization
- Update message schema files to reflect mimeType changes
- Fix import ordering to match project formatting standards

This change ensures the Rust SDK is fully compliant with the MCP specification
which requires mimeType (camelCase) for all resource content types.
2025-07-29 12:42:56 -04:00
.devcontainer Adopt Devcontainer for Development Environment (#81) 2025-04-02 12:16:49 +08:00
.github feat: set up release-plz integration for publishing to crates.io (#297) 2025-07-02 12:12:21 -04:00
crates fix: use mimeType instead of mime_type for MCP specification compliance (#339) 2025-07-29 12:42:56 -04:00
docs docs(README): update zh_cn README (#336) 2025-07-29 02:41:38 +08:00
examples chore(deps): update rig-core requirement from 0.14.0 to 0.15.1 (#327) 2025-07-22 09:08:04 +08:00
.gitignore example: add simpling example and test (#289) 2025-06-30 18:18:23 +08:00
Cargo.toml chore: release v0.3.0 (#307) 2025-07-16 16:28:56 -04:00
clippy.toml feat: add clippy config (#162) 2025-05-08 10:15:17 +08:00
justfile chore: cov settings, and fix serveral building warnings (#281) 2025-06-25 14:30:45 +08:00
LICENSE Initial commit 2025-02-18 10:55:26 +00:00
README.md Fix formatting in crate descriptions in README.md (#333) 2025-07-28 09:13:24 +08:00
rust-toolchain.toml Move whole rmcp crate to offcial rust sdk (#44) 2025-03-27 17:33:41 -04:00
rustfmt.toml style: fmt the project (#54) 2025-03-28 23:50:46 +08:00

RMCP

Crates.io Version

Coverage

An official Rust Model Context Protocol SDK implementation with tokio async runtime.

This repository contains the following crates:

  • rmcp: The core crate providing the RMCP protocol implementation (If you want to get more information, please visit rmcp)
  • rmcp-macros: A procedural macro crate for generating RMCP tool implementations (If you want to get more information, please visit rmcp-macros)

Usage

Import the crate

rmcp = { version = "0.2.0", features = ["server"] }
## or dev channel
rmcp = { git = "https://github.com/modelcontextprotocol/rust-sdk", branch = "main" }

Third Dependencies

Basic dependencies:

Build a Client

Start a client
use rmcp::{ServiceExt, transport::{TokioChildProcess, ConfigureCommandExt}};
use tokio::process::Command;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = ().serve(TokioChildProcess::new(Command::new("npx").configure(|cmd| {
        cmd.arg("-y").arg("@modelcontextprotocol/server-everything");
    }))?).await?;
    Ok(())
}

Build a Server

Build a transport
use tokio::io::{stdin, stdout};
let transport = (stdin(), stdout());
Build a service

You can easily build a service by using ServerHandler or ClientHandler.

let service = common::counter::Counter::new();
Start the server
// this call will finish the initialization process
let server = service.serve(transport).await?;
Interact with the server

Once the server is initialized, you can send requests or notifications:

// request
let roots = server.list_roots().await?;

// or send notification
server.notify_cancelled(...).await?;
Waiting for service shutdown
let quit_reason = server.waiting().await?;
// or cancel it
let quit_reason = server.cancel().await?;

Examples

See examples

OAuth Support

See oauth_support for details.

Development

Tips for Contributors

See docs/CONTRIBUTE.MD to get some tips for contributing.

Using Dev Container

If you want to use dev container, see docs/DEVCONTAINER.md for instructions on using Dev Container for development.