Expand description
Middleware system for MCP servers
This module provides a trait-based middleware architecture that allows intercepting and modifying MCP requests and responses. Middleware can be used for authentication, logging, rate limiting, and custom business logic.
§Overview
The middleware system consists of:
McpMiddleware
- Core trait for implementing middlewareRequestContext
- Normalized request context across transportsSessionInjection
- Write-only mechanism for populating session stateMiddlewareStack
- Ordered execution of multiple middleware layers
§Examples
use turul_http_mcp_server::middleware::{McpMiddleware, RequestContext, SessionInjection, MiddlewareError};
use turul_mcp_session_storage::SessionView;
use async_trait::async_trait;
// Define custom middleware
struct LoggingMiddleware;
#[async_trait]
impl McpMiddleware for LoggingMiddleware {
async fn before_dispatch(
&self,
ctx: &mut RequestContext<'_>,
_session: Option<&dyn SessionView>,
_injection: &mut SessionInjection,
) -> Result<(), MiddlewareError> {
println!("Request: {}", ctx.method());
Ok(())
}
}
Re-exports§
pub use traits::McpMiddleware;
pub use context::RequestContext;
pub use context::SessionInjection;
pub use context::DispatcherResult;
pub use error::MiddlewareError;
pub use error::error_codes;
pub use stack::MiddlewareStack;
pub use session_view_adapter::StorageBackedSessionView;