MCP Runner
A Rust library for running and interacting with Model Context Protocol (MCP) servers locally.
Overview
MCP Runner provides a complete solution for managing Model Context Protocol servers in Rust applications. It enables:
- Starting and managing MCP server processes
- Configuring multiple servers through a unified interface
- Communicating with MCP servers using JSON-RPC
- Listing and calling tools exposed by MCP servers
- Accessing resources provided by MCP servers
Installation
Add this to your Cargo.toml
:
[]
= "0.1.0"
Quick Start
Here's a simple example of using MCP Runner to start a server and call a tool:
use ;
use ;
use json;
async
Observability
This library uses the tracing
crate for logging and diagnostics. To enable logging, ensure you have a tracing_subscriber
configured in your application and set the RUST_LOG
environment variable. For example:
# Show info level logs for all crates
RUST_LOG=info
# Show trace level logs specifically for mcp_runner
RUST_LOG=mcp_runner=trace
Configuration
MCP Runner uses JSON configuration to define MCP servers. Example:
You can load configurations in three different ways:
1. Load from a file
use McpRunner;
let runner = from_config_file?;
2. Load from a JSON string
use McpRunner;
let config_json = r#"{
"mcpServers": {
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
}"#;
let runner = from_config_str?;
3. Create programmatically
use ;
use HashMap;
let mut servers = new;
let server_config = ServerConfig ;
servers.insert;
let config = Config ;
// Initialize the runner
let runner = new;
Core Components
McpRunner
The main entry point for managing MCP servers:
let mut runner = from_config_file?;
let server_ids = runner.start_all_servers.await?;
McpClient
For interacting with MCP servers:
let client = runner.get_client?;
client.initialize.await?;
// Call tools
let result = client.call_tool.await?;
Error Handling
MCP Runner uses a custom error type that covers:
- Configuration errors
- Server lifecycle errors
- Communication errors
- Serialization errors
match result
Examples
Check the examples/
directory for more usage examples:
simple_client.rs
: Basic usage of the client API# Run with info level logging RUST_LOG=info
- more to come
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the terms in the LICENSE file.