Data Flow Architecture
Message Flow Patterns
Client β Server Request Flow
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Client β β Transport β β Protocol β β Server β
β API β β Layer β β State β β Handler β
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β β β β
β send_request() β β β
ββββββββββββββββββββΊβ β β
β β validate_phase() β β
β ββββββββββββββββββββΊβ β
β β β route_message() β
β β ββββββββββββββββββββΊβ
β β β β
β β β βββββββββββββββββββ€
β β βββββββββββββββββββ€ response β
β βββββββββββββββββββ€ response β β
Server β Client Request Flow (Sampling)
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Server β β Protocol β β Transport β β Client β
β Handler β β State β β Layer β β Handler β
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β β β β
β request_sampling() β β β
ββββββββββββββββββββΊ β β β
β β validate_capabilityβ β
β β β send_request() β
β ββββββββββββββββββββΊβ β
β β ββββββββββββββββββββΊβ
β β β β
β β β βββββββββββββββββββ€
β β βββββββββββββββββββ€ approval_flow β
β ββββββββββββββββββ β€ β β
Error Propagation Flow
// Hierarchical error handling with context preservation
#[derive(Debug, thiserror::Error)]
pub enum McpError {
#[error("Transport error: {0}")]
Transport(#[from] TransportError),
#[error("Protocol error: {0}")]
Protocol(#[from] ProtocolError),
#[error("Security error: {0}")]
Security(#[from] SecurityError),
#[error("Feature error: {0}")]
Feature(#[from] FeatureError),
}
// Error context preservation through the stack
impl From<ValidationError> for ProtocolError {
fn from(err: ValidationError) -> Self {
ProtocolError::InvalidMessage {
reason: err.to_string(),
phase: err.context.phase,
method: err.context.method,
}
}
}