#ai #protocols #machine-learning #mcp #api-bindings #client

mcp_client_rs

Rust client SDK for the Model Context Protocol (MCP)

5 releases

0.1.5 Jan 5, 2025
0.1.4 Jan 5, 2025
0.1.3 Dec 21, 2024
0.1.2 Dec 21, 2024
0.1.1 Dec 14, 2024

#374 in Development tools

Download history 137/week @ 2024-12-10 248/week @ 2024-12-17 13/week @ 2024-12-24 216/week @ 2024-12-31 26/week @ 2025-01-07

512 downloads per month
Used in agentai

MIT/Apache

86KB
2K SLoC

Model Context Protocol (MCP) Rust SDK

A Rust implementation of the Client of the Model Context Protocol (MCP), designed for seamless communication between AI models and their runtime environments.

Usage

Spawning the Server

The ClientBuilder allows you to spawn a subprocess server easily, attaching to its stdin and stdout.

Minimal Working Example:

use mcp_rust_sdk::client::ClientBuilder;

#[tokio::main]
async fn main() -> Result<()> {
    let client = ClientBuilder::new("uvx")
        .arg("notes-simple")
        .spawn_and_initialize().await?;
    Ok(())
}

Note this won't work for any remote servers: they're not running locally.

Remote server support is unplanned.

Spec Compliance

Tool call responses error out if the wrong schema is used or the server returns an error.

Typed Convenience Methods

The Client provides typed methods to interact with the server:

  • list_resources() -> Result<ListResourcesResult, Error>
  • call_tool(name, arguments) -> Result<CallToolResult, Error>
  • read_resource(uri) -> Result<ReadResourceResult, Error>

This spares you the hassle of manually constructing JSON requests and parsing raw JSON responses.

For example:

let resources = client.list_resources().await?;
println!("Resources: {:?}", resources);

let tool_result = client.call_tool("add-note", serde_json::json!({
    "name": "my_first_note",
    "content": "This is some note content."
})).await?;
println!("Tool result: {:?}", tool_result);

let read_result = client.read_resource("note://internal/my_first_note").await?;
println!("Read resource: {:?}", read_result);

Contributing

Contributions are welcome! Please open an issue or submit a PR if you have improvements, bug fixes, or new features to propose.

  1. Fork the repo
  2. Create a new branch
  3. Add your changes and tests
  4. Submit a Pull Request

Credits

License

This project is licensed under the MIT License. See LICENSE for details.

Dependencies

~4–11MB
~112K SLoC