Skip to main content

Module protocol

Module protocol 

Source
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 _meta object.
  • 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::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/tasks extension 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.

Constants§

MCP_PROTOCOL_VERSION