# mcp.rs
A Rust implementation of the Model Context Protocol (MCP), providing a standardized way for AI models to access external context and resources.
## Quickstart
For sse transport:
```rust
# Terminal 1 - Start server
cargo run --bin server -- -t sse -p 3000
# Terminal 2 - Run test client
cargo test test_sse_client -- --nocapture
```
For STDIO transport:
```rust
# Terminal 1 - Start server
cargo run --bin server -- -t stdio
# Terminal 2 - Run CLI client
cargo run --example cli_client
```
## Overview
mcp.rs is a high-performance, type-safe Rust implementation of the Model Context Protocol, designed to enable seamless communication between AI applications and their integrations. It provides a robust foundation for building MCP servers that can expose various types of resources (files, data, APIs) to AI models.
## Features
- **Multiple Transport Types**:
- Standard Input/Output (stdio) transport for CLI tools
- HTTP with Server-Sent Events (SSE) for web integrations
- Extensible transport system for custom implementations
- **Resource Management**:
- File system resource provider
- Resource templating support
- Real-time resource updates
- Resource subscription capabilities
- **Flexible Configuration**:
- YAML/JSON configuration files
- Environment variable overrides
- Command-line arguments
- Sensible defaults
- **Security**:
- Built-in access controls
- Path traversal protection
- Rate limiting
- CORS support
## Installation
Add mcp.rs to your project's `Cargo.toml`:
```toml
[dependencies]
mcp = "0.1.0"
```
## Quick Start
1. Create a basic MCP server:
```rust
use mcp::{McpServer, ServerConfig};
#[tokio::main]
async fn main() -> Result<(), mcp::error::McpError> {
// Create server with default configuration
let server = McpServer::new(ServerConfig::default());
// Run the server
server.run().await
}
```
2. Configure via command line:
```bash
# Run with stdio transport
mcp-server -t stdio
# Run with SSE transport on port 3000
mcp-server -t sse -p 3000
# Enable debug logging
mcp-server -l debug
```
3. Or use a configuration file:
```yaml
server:
name: "my-mcp-server"
version: "1.0.0"
transport: sse
port: 3000
resources:
root_path: "./resources"
allowed_schemes:
- file
max_file_size: 10485760
security:
enable_auth: false
allowed_origins:
- "*"
logging:
level: "info"
format: "pretty"
```
## Architecture
mcp.rs follows a modular architecture:
- **Transport Layer**: Handles communication between clients and servers
- **Protocol Layer**: Implements the MCP message format and routing
- **Resource Layer**: Manages access to external resources
- **Configuration**: Handles server settings and capabilities
## Configuration Options
| `transport` | Transport type (stdio, sse) | stdio |
| `port` | Server port for network transports | 3000 |
| `log_level` | Logging level | info |
| `resource_root` | Root directory for resources | ./resources |
## API Reference
For detailed API documentation, run:
```bash
cargo doc --open
```
## Examples (TODO)
Check out the `/examples` directory for:
- Basic server implementation
- Custom resource provider
- Configuration examples
- Integration patterns
## Contributing
Contributions are welcome! Please read our [Contributing Guidelines](CONTRIBUTING.md) before submitting pull requests.
### Development Requirements
- Rust 1.70 or higher
- Cargo
- Optional: Docker for containerized testing
### Running Tests
```bash
# Run all tests
cargo test
# Run with logging
RUST_LOG=debug cargo test
```
## License
This project is licensed under the [MIT License](LICENSE).
## Acknowledgments
This implementation is based on the Model Context Protocol specification and inspired by the reference implementation.
## Contact
- Issue Tracker: [GitHub Issues](https://github.com/EmilLindfors/mcp/issues)
- Source Code: [GitHub Repository](https://github.com/EmilLindfors/mcp)