Expand description
Dual-era MCP protocol implementation.
This module contains the core protocol types and message handling for the Model Context Protocol revisions 2026-07-28 and 2025-11-25, including JSON-RPC serialization, validation, stateless request envelopes, safe revision selection, and typed protocol objects.
§Protocol Structure
The MCP protocol is built on JSON-RPC 2.0 with extensions for:
- Bidirectional Communication: Both client and server can send requests
- Capability Negotiation: Dynamic feature discovery
- Content Types: Rich content including text, images, and resources
- Batch Operations: Efficient bulk request processing
§Core Types
§JSON-RPC Messages
use prism_mcp_rs::protocol::{
JsonRpcRequest, JsonRpcResponse, JsonRpcError, JsonRpcMessage
};
use serde_json::json;
// Create a request
let request = JsonRpcRequest::new(
json!("1"),
"tools/list".to_string(),
None::<()>,
).unwrap();
// Create a success response
let response = JsonRpcResponse::success_unchecked(
json!("1"),
json!({"tools": []}),
);
// Create an error response
let error = JsonRpcError::method_not_found(json!("1"));§Error Handling
use prism_mcp_rs::protocol::{JsonRpcError, error_codes};
use serde_json::json;
// Standard JSON-RPC errors
let parse_err = JsonRpcError::parse_error(json!(null));
let method_err = JsonRpcError::method_not_found(json!("1"));
let invalid_params = JsonRpcError::invalid_params(json!("1"));
// MCP-specific errors
let tool_err = JsonRpcError::tool_not_found(json!("1"), "unknown-tool");
let resource_err = JsonRpcError::resource_not_found(json!("1"), "missing.txt");
// Custom errors with error codes
let custom_err = JsonRpcError::new(
json!("1"),
error_codes::INTERNAL_ERROR,
"Internal server error".to_string()
);§Protocol Flow
- 2026-07-28: the client sends
server/discover, then includes its revision, identity, and capabilities in every request_metaobject. - 2025-11-25: the client performs
initialize, retains negotiated connection state, and sends the initialized notification.
ProtocolMode::Auto prefers 2026 and permits a 2025 fallback only when
server/discover is explicitly rejected as an unknown method.
§Features
- Type Safety: Strongly typed protocol messages
- Validation: Request and response validation
- Extensibility: Support for custom methods and capabilities
- Batch Processing: Efficient bulk operations
- Metadata: Rich metadata for all protocol objects
Re-exports§
pub use error_helpers::IntoJsonRpcMessage;pub use metadata::MetadataBuilder;pub use metadata::ProtocolCapabilities;pub use roots_types::ListRootsRequest;pub use roots_types::RootsListChangedNotification;pub use types::error_codes;pub use types::AnnotationAudience;pub use types::Annotations;pub use types::AudioContent;pub use types::BaseMetadata;pub use types::CallToolResult;pub use types::ClientCapabilities;pub use types::ClientInfo;pub use types::CompletionsCapability;pub use types::Content;pub use types::ContentBlock;pub use types::CreateMessageResult;pub use types::Cursor;pub use types::DangerLevel;pub use types::ElicitationAction;pub use types::ElicitationCapability;pub use types::ElicitationSchema;pub use types::EmbeddedResource;pub use types::ErrorObject;pub use types::GetPromptResult;pub use types::Icon;pub use types::IconTheme;pub use types::ImageContent;pub use types::Implementation;pub use types::JsonRpcBatchRequest;pub use types::JsonRpcBatchResponse;pub use types::JsonRpcError;pub use types::JsonRpcId;pub use types::JsonRpcMessage;pub use types::JsonRpcNotification;pub use types::JsonRpcRequest;pub use types::JsonRpcRequestOrNotification;pub use types::JsonRpcResponse;pub use types::JsonRpcResponseOrError;pub use types::LoggingCapability;pub use types::LoggingLevel;pub use types::ModelHint;pub use types::ModelPreferences;pub use types::Notification;pub use types::NotificationParams;pub use types::PaginatedRequest;pub use types::PaginatedResult;pub use types::PrimitiveSchemaDefinition;pub use types::ProgressToken;pub use types::Prompt;pub use types::PromptArgument;pub use types::PromptInfo;pub use types::PromptMessage;pub use types::PromptResult;pub use types::PromptsCapability;pub use types::Request;pub use types::RequestId;pub use types::RequestMeta;pub use types::RequestParams;pub use types::Resource;pub use types::ResourceContents;pub use types::ResourceInfo;pub use types::ResourceLink;pub use types::ResourceTemplate;pub use types::ResourcesCapability;pub use types::Role;pub use types::RootsCapability;pub use types::SamplingCapability;pub use types::SamplingContent;pub use types::SamplingMessage;pub use types::SamplingToolChoice;pub use types::ServerCapabilities;pub use types::ServerInfo;pub use types::StopReason;pub use types::TextContent;pub use types::Tool;pub use types::ToolAnnotations;pub use types::ToolInfo;pub use types::ToolInputSchema;pub use types::ToolOutputSchema;pub use types::ToolResult;pub use types::ToolsCapability;pub use types::JSONRPC_VERSION;pub use types::LATEST_PROTOCOL_VERSION;pub use types::PROTOCOL_VERSION;pub use version::decode_http_header_value;pub use version::decorate_modern_request;pub use version::decorate_modern_result;pub use version::encode_http_header_value;pub use version::is_cacheable_method;pub use version::is_legacy_only_method;pub use version::is_method_not_found;pub use version::json_rpc_error_details;pub use version::modern_request_context;pub use version::request_protocol_version;pub use version::request_routing_name;pub use version::tool_call_headers;pub use version::tool_header_mappings;pub use version::validate_http_headers;pub use version::validate_tool_call_headers;pub use version::CacheScope;pub use version::ConnectResult;pub use version::DiscoverParams;pub use version::DiscoverResult as ModernDiscoverResult;pub use version::InputRequiredResult;pub use version::ModernRequestContext;pub use version::NegotiatedProtocol;pub use version::OperationResult;pub use version::ProtocolEra;pub use version::ProtocolMode;pub use version::RequestMetaObject;pub use version::ResultType;pub use version::ToolHeaderMapping;pub use version::CLIENT_CAPABILITIES_META_KEY;pub use version::CLIENT_INFO_META_KEY;pub use version::HEADER_MISMATCH;pub use version::LEGACY_PROTOCOL_VERSION;pub use version::MCP_METHOD_HEADER;pub use version::MCP_NAME_HEADER;pub use version::MCP_PROTOCOL_VERSION_HEADER;pub use version::MISSING_REQUIRED_CLIENT_CAPABILITY;pub use version::MODERN_PROTOCOL_VERSION;pub use version::PROTOCOL_VERSION_META_KEY;pub use version::SERVER_INFO_META_KEY;pub use version::SUPPORTED_PROTOCOL_VERSIONS;pub use version::UNSUPPORTED_PROTOCOL_VERSION;pub use methods::CANCELLED;pub use methods::COMPLETION_COMPLETE;pub use methods::ELICITATION_COMPLETE;pub use methods::INITIALIZE;pub use methods::INITIALIZED;pub use methods::LOGGING_MESSAGE;pub use methods::LOGGING_SET_LEVEL;pub use methods::PING;pub use methods::PROGRESS;pub use methods::PROMPTS_GET;pub use methods::PROMPTS_LIST;pub use methods::PROMPTS_LIST_CHANGED;pub use methods::RESOURCES_LIST;pub use methods::RESOURCES_LIST_CHANGED;pub use methods::RESOURCES_READ;pub use methods::RESOURCES_SUBSCRIBE;pub use methods::RESOURCES_TEMPLATES_LIST;pub use methods::RESOURCES_UNSUBSCRIBE;pub use methods::RESOURCES_UPDATED;pub use methods::ROOTS_LIST;pub use methods::ROOTS_LIST_CHANGED;pub use methods::RPC_DISCOVER;pub use methods::SAMPLING_CREATE_MESSAGE;pub use methods::SERVER_DISCOVER;pub use methods::SUBSCRIPTIONS_ACKNOWLEDGED;pub use methods::SUBSCRIPTIONS_LISTEN;pub use methods::TASKS_CANCEL;pub use methods::TASKS_GET;pub use methods::TASKS_SEND;pub use methods::TASKS_STATUS;pub use methods::TASKS_STATUS_UPDATE;pub use methods::TASKS_UPDATE;pub use methods::TOOLS_CALL;pub use methods::TOOLS_LIST;pub use methods::TOOLS_LIST_CHANGED;pub use batch::*;pub use discovery::*;pub use messages::*;pub use missing_types::*;pub use schema_introspection::*;pub use subscriptions::*;pub use tasks::*;pub use validation::*;
Modules§
- batch
- JSON-RPC Batch Request/Response Support (2025-11-25)
- discovery
- RPC Discovery Module for MCP Protocol
- error_
helpers - JSON-RPC error response helper functions
- messages
- MCP Protocol Messages
- metadata
- methods
- MCP Protocol Method Constants
- missing_
types - Missing Types Module for Test Compatibility
- roots_
types - Roots Types for MCP Protocol (2025-11-25)
- schema_
introspection - improved Schema Introspection for MCP Protocol (2025-11-25)
- subscriptions
- MCP 2026-07-28 notification subscription types.
- tasks
io.modelcontextprotocol/tasksextension types (SEP-2663).- types
- Shared MCP protocol types for the 2025-11-25 and 2026-07-28 revisions.
- validation
- MCP protocol validation utilities (2025-03-26)
- version
- Protocol revision negotiation and MCP 2026-07-28 wire envelopes.