Expand description
§MCP Protocol Implementation
This crate provides a complete implementation of the Model Context Protocol (MCP) specification version 2025-06-18. It includes all protocol types, JSON-RPC integration, and capability negotiation.
§Features
§Core Protocol Support
- Complete MCP 2025-06-18 protocol implementation
- JSON-RPC 2.0 support with batching and notifications
- Type-safe capability negotiation and compatibility checking
- Protocol versioning with backward compatibility
- Fast serialization with SIMD acceleration
§Advanced Protocol Features (New in 1.0.3)
- Elicitation Protocol - Server-initiated user input requests with rich schema validation
- Sampling Support - Bidirectional LLM sampling message types
- Roots Protocol - Filesystem boundaries with
roots/list
support - Comprehensive Schema Builders - Type-safe builders for all schema types
§Validation & Security
- Comprehensive validation constraints (min/max, patterns, required fields)
- Type-safe schema builders with fluent API
- Protocol method validation and error handling
- Security-focused design with proper boundary checking
§Usage Examples
§Basic Protocol Types
use turbomcp_protocol::types::{Tool, ToolInputSchema, CallToolRequest, CallToolResult};
use std::collections::HashMap;
// Define a tool schema
let tool = Tool {
name: "calculate".to_string(),
title: Some("Calculator".to_string()),
description: Some("Perform mathematical calculations".to_string()),
input_schema: ToolInputSchema {
schema_type: "object".to_string(),
properties: Some({
let mut props = HashMap::new();
props.insert("operation".to_string(), serde_json::json!({
"type": "string",
"enum": ["add", "subtract", "multiply", "divide"]
}));
props
}),
required: Some(vec!["operation".to_string()]),
additional_properties: Some(false),
},
output_schema: None,
annotations: None,
meta: None,
};
§Elicitation Schema Building
use turbomcp_protocol::elicitation::{ElicitationSchema, EnumSchema, BooleanSchema, PrimitiveSchemaDefinition};
// Build an elicitation schema with validation
let schema = ElicitationSchema::new()
.add_property("theme".to_string(), PrimitiveSchemaDefinition::Enum(EnumSchema {
schema_type: "string".to_string(),
title: Some("Theme".to_string()),
description: Some("UI color theme".to_string()),
enum_values: vec!["light".to_string(), "dark".to_string(), "auto".to_string()],
enum_names: None,
}))
.add_property("notifications".to_string(), PrimitiveSchemaDefinition::Boolean(BooleanSchema {
schema_type: "boolean".to_string(),
title: Some("Notifications".to_string()),
description: Some("Enable push notifications".to_string()),
default: Some(true),
}))
.require(vec!["theme".to_string()]);
Re-exports§
pub use types::ArgumentInfo;
pub use types::CallToolRequest;
pub use types::CallToolResult;
pub use types::ClientCapabilities;
pub use types::ClientNotification;
pub use types::ClientRequest;
pub use types::CompleteRequestParams;
pub use types::CompletionReference;
pub use types::CompletionResponse;
pub use types::Content;
pub use types::CreateMessageRequest;
pub use types::CreateMessageResult;
pub use types::ElicitRequest;
pub use types::ElicitRequestParams;
pub use types::ElicitResult;
pub use types::ElicitationAction;
pub use types::ElicitationSchema;
pub use types::EmbeddedResource;
pub use types::GetPromptRequest;
pub use types::GetPromptResult;
pub use types::ImageContent;
pub use types::Implementation;
pub use types::InitializeRequest;
pub use types::InitializeResult;
pub use types::InitializedNotification;
pub use types::ListPromptsRequest;
pub use types::ListPromptsResult;
pub use types::ListResourceTemplatesRequest;
pub use types::ListResourceTemplatesResult;
pub use types::ListResourcesRequest;
pub use types::ListResourcesResult;
pub use types::ListRootsRequest;
pub use types::ListRootsResult;
pub use types::ListToolsRequest;
pub use types::ListToolsResult;
pub use types::LogLevel;
pub use types::LoggingNotification;
pub use types::PingParams;
pub use types::PingRequest;
pub use types::PingResult;
pub use types::ProgressNotification;
pub use types::ProgressToken;
pub use types::Prompt;
pub use types::PromptInput;
pub use types::ProtocolVersion;
pub use types::ReadResourceRequest;
pub use types::ReadResourceResult;
pub use types::RequestId;
pub use types::Resource;
pub use types::ResourceContents;
pub use types::ResourceTemplate;
pub use types::ResourceUpdatedNotification;
pub use types::Root;
pub use types::RootsListChangedNotification;
pub use types::SamplingMessage;
pub use types::ServerCapabilities;
pub use types::ServerNotification;
pub use types::ServerRequest;
pub use types::SetLevelRequest;
pub use types::SetLevelResult;
pub use types::SubscribeRequest;
pub use types::TextContent;
pub use types::Tool;
pub use types::ToolInputSchema;
pub use types::ToolOutputSchema;
pub use types::UnsubscribeRequest;
pub use jsonrpc::JsonRpcBatch;
pub use jsonrpc::JsonRpcError;
pub use jsonrpc::JsonRpcErrorCode;
pub use jsonrpc::JsonRpcNotification;
pub use jsonrpc::JsonRpcRequest;
pub use jsonrpc::JsonRpcResponse;
pub use jsonrpc::JsonRpcVersion;
pub use capabilities::CapabilityMatcher;
pub use capabilities::CapabilityNegotiator;
pub use capabilities::CapabilitySet;
pub use versioning::VersionCompatibility;
pub use versioning::VersionManager;
pub use versioning::VersionRequirement;
Modules§
- capabilities
- Capability Negotiation
- elicitation
- MCP Protocol Elicitation Types (Spec-Compliant)
- error_
codes - Protocol error codes (JSON-RPC standard + MCP extensions)
- features
- Protocol feature flags
- jsonrpc
- JSON-RPC 2.0 Implementation
- methods
- Protocol method names
- types
- MCP Protocol Types
- validation
- Protocol Validation
- versioning
- Protocol Versioning and Compatibility
Structs§
- Error
- Comprehensive error type with rich context information
Constants§
- PROTOCOL_
VERSION - Current MCP protocol version
- SUPPORTED_
VERSIONS - Supported MCP protocol versions
Type Aliases§
- Result
- Result type alias for MCP operations