Skip to main content

brainwires_agent_network/middleware/
logging.rs

1use async_trait::async_trait;
2use brainwires_mcp::{JsonRpcRequest, JsonRpcResponse};
3
4use super::{Middleware, MiddlewareResult};
5use crate::connection::RequestContext;
6
7/// Middleware that logs all requests and responses.
8pub struct LoggingMiddleware;
9
10impl LoggingMiddleware {
11    /// Create a new logging middleware.
12    pub fn new() -> Self {
13        Self
14    }
15}
16
17impl Default for LoggingMiddleware {
18    fn default() -> Self {
19        Self::new()
20    }
21}
22
23#[async_trait]
24impl Middleware for LoggingMiddleware {
25    async fn process_request(
26        &self,
27        request: &JsonRpcRequest,
28        _ctx: &mut RequestContext,
29    ) -> MiddlewareResult {
30        tracing::debug!(
31            method = %request.method,
32            id = %request.id,
33            "MCP request received"
34        );
35        MiddlewareResult::Continue
36    }
37
38    async fn process_response(&self, response: &mut JsonRpcResponse, _ctx: &RequestContext) {
39        if response.error.is_some() {
40            tracing::warn!(
41                id = %response.id,
42                error = ?response.error,
43                "MCP response with error"
44            );
45        } else {
46            tracing::debug!(
47                id = %response.id,
48                "MCP response sent"
49            );
50        }
51    }
52}