A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/paiml/pmcp below:

paiml/rust-mcp-sdk: Pragmatic AI Labs MCP SDK

PMCP - Pragmatic Model Context Protocol

A high-quality Rust implementation of the Model Context Protocol (MCP) SDK, maintaining full compatibility with the TypeScript SDK while leveraging Rust's performance and safety guarantees.

Code Name: Angel Rust

🎉 Version 1.2.1 - Toyota Way Quality Excellence & PMAT Integration!

Add to your Cargo.toml:

[dependencies]
pmcp = "1.2"

The SDK includes comprehensive examples for all major features:

# Client initialization and connection
cargo run --example 01_client_initialize

# Basic server with tools
cargo run --example 02_server_basic

# Client tool usage
cargo run --example 03_client_tools

# Server with resources
cargo run --example 04_server_resources

# Client resource access
cargo run --example 05_client_resources

# Server with prompts
cargo run --example 06_server_prompts

# Client prompts usage
cargo run --example 07_client_prompts

# Logging
cargo run --example 08_logging

# Authentication (OAuth, Bearer tokens)
cargo run --example 09_authentication

# Progress notifications
cargo run --example 10_progress_notifications

# Request cancellation
cargo run --example 11_request_cancellation

# Error handling patterns
cargo run --example 12_error_handling

# WebSocket transport
cargo run --example 13_websocket_transport

# LLM sampling operations
cargo run --example 14_sampling_llm

# Middleware and interceptors
cargo run --example 15_middleware

# OAuth server with authentication
cargo run --example 16_oauth_server

# Completable prompts
cargo run --example 17_completable_prompts

# Resource watching with file system monitoring
cargo run --example 18_resource_watcher

# Input elicitation
cargo run --example 19_elicit_input

# OIDC discovery and authentication
cargo run --example 20_oidc_discovery

# Procedural macros for tools
cargo run --example 21_macro_tools --features macros

# Streamable HTTP server (stateful with sessions)
cargo run --example 22_streamable_http_server_stateful --features streamable-http

# Streamable HTTP server (stateless for serverless)
cargo run --example 23_streamable_http_server_stateless --features streamable-http

# Streamable HTTP client
cargo run --example 24_streamable_http_client --features streamable-http

# WASM client (browser-based) - see examples/wasm-client/README.md
cd examples/wasm-client && bash build.sh

See the examples directory for detailed documentation.

What's New in v1.0 (In Development) 🔄 Streamable HTTP Transport 🚀 Enhanced Developer Experience 🔐 OIDC Discovery Support 🔒 Transport Response Isolation 📚 Enhanced Documentation 🆕 WebSocket Transport with Auto-Reconnection

Full WebSocket support with automatic reconnection, exponential backoff, and keepalive ping/pong.

HTTP transport with Server-Sent Events for real-time notifications and long-polling support.

Native support for model sampling operations with the createMessage API:

let result = client.create_message(CreateMessageRequest {
    messages: vec![SamplingMessage {
        role: Role::User,
        content: Content::Text { text: "Hello!".to_string() },
    }],
    ..Default::default()
}).await?;

Powerful middleware chain for request/response processing:

use pmcp::{MiddlewareChain, LoggingMiddleware, AuthMiddleware};

let mut chain = MiddlewareChain::new();
chain.add(Arc::new(LoggingMiddleware::default()));
chain.add(Arc::new(AuthMiddleware::new("token".to_string())));
🆕 Message Batching & Debouncing

Optimize notification delivery with batching and debouncing:

use pmcp::{MessageBatcher, BatchingConfig};

let batcher = MessageBatcher::new(BatchingConfig {
    max_batch_size: 10,
    max_wait_time: Duration::from_millis(100),
    ..Default::default()
});
use pmcp::{Client, StdioTransport, ClientCapabilities};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create client with stdio transport
    let transport = StdioTransport::new();
    let mut client = Client::new(transport);
    
    // Initialize connection
    let server_info = client.initialize(ClientCapabilities::default()).await?;
    println!("Connected to: {}", server_info.server_info.name);
    
    // List available tools
    let tools = client.list_tools(None).await?;
    for tool in tools.tools {
        println!("Tool: {} - {:?}", tool.name, tool.description);
    }
    
    // Call a tool
    let result = client.call_tool("get-weather", serde_json::json!({
        "location": "San Francisco"
    })).await?;
    
    Ok(())
}
use pmcp::{Server, ServerCapabilities, ToolHandler};
use async_trait::async_trait;
use serde_json::Value;

struct WeatherTool;

#[async_trait]
impl ToolHandler for WeatherTool {
    async fn handle(&self, args: Value) -> pmcp::Result<Value> {
        let location = args["location"].as_str()
            .ok_or_else(|| pmcp::Error::validation("location required"))?;
        
        // Implement weather fetching logic
        Ok(serde_json::json!({
            "temperature": 72,
            "condition": "sunny",
            "location": location
        }))
    }
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let server = Server::builder()
        .name("weather-server")
        .version("1.0.0")
        .capabilities(ServerCapabilities::tools_only())
        .tool("get-weather", WeatherTool)
        .build()?;
    
    // Run with stdio transport
    server.run_stdio().await?;
    Ok(())
}
let transport = StdioTransport::new();
Streamable HTTP (Stateful)
use pmcp::{StreamableHttpTransport, StreamableHttpTransportConfig};

let config = StreamableHttpTransportConfig {
    url: "http://localhost:3000".parse()?,
    enable_sse: true,  // Use SSE for real-time updates
    session_id: Some("my-session".to_string()),
    ..Default::default()
};
let transport = StreamableHttpTransport::new(config);
Streamable HTTP (Stateless/Serverless)
use pmcp::{StreamableHttpTransport, StreamableHttpTransportConfig};

let config = StreamableHttpTransportConfig {
    url: "http://localhost:8081".parse()?,
    enable_sse: false,  // Simple request/response
    session_id: None,   // No session management
    ..Default::default()
};
let transport = StreamableHttpTransport::new(config);
use pmcp::{WebSocketTransport, WebSocketConfig};

let config = WebSocketConfig {
    url: "ws://localhost:8080".parse()?,
    auto_reconnect: true,
    ..Default::default()
};
let transport = WebSocketTransport::new(config);
// For WebSocket in browser
use pmcp::{WasmWebSocketTransport};
let transport = WasmWebSocketTransport::connect("ws://localhost:8080").await?;

// For HTTP in browser
use pmcp::{WasmHttpTransport, WasmHttpConfig};
let config = WasmHttpConfig {
    url: "https://api.example.com/mcp".to_string(),
    extra_headers: vec![],
};
let transport = WasmHttpTransport::new(config);
# Clone the repository
git clone https://github.com/paiml/rust-pmcp
cd rust-pmcp

# Install development tools
make setup

# Run quality checks
make quality-gate

This project maintains Toyota Way and PMAT-level quality standards:

# Run all tests
make test-all

# Run property tests (slower, more thorough)
make test-property

# Generate coverage report
make coverage

# Run mutation tests
make mutants
  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Ensure all quality checks pass (make quality-gate)
  4. Commit your changes (following conventional commits)
  5. Push to the branch (git push origin feature/amazing-feature)
  6. Open a Pull Request
pmcp/
├── src/
│   ├── client/          # Client implementation
│   ├── server/          # Server implementation
│   ├── shared/          # Shared transport/protocol code
│   ├── types/           # Protocol type definitions
│   └── utils/           # Utility functions
├── tests/
│   ├── integration/     # Integration tests
│   └── property/        # Property-based tests
├── benches/             # Performance benchmarks
└── examples/            # Example implementations
Feature TypeScript SDK Rust SDK Protocol Versions 2024-10-07+ 2024-10-07+ Transports stdio, SSE, WebSocket stdio, SSE, WebSocket Authentication OAuth 2.0, Bearer OAuth 2.0, Bearer Tools ✓ ✓ Prompts ✓ ✓ Resources ✓ ✓ Sampling ✓ ✓

Benchmarks show 10x improvement over TypeScript SDK:

Run benchmarks:

This project is licensed under the MIT License - see the LICENSE file for details.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4