Skip to main content

batuta/serve/banco/
handlers_mcp.rs

1//! MCP (Model Context Protocol) HTTP handler.
2//!
3//! POST /api/v1/mcp — JSON-RPC 2.0 endpoint for MCP clients.
4//! GET /api/v1/mcp/info — MCP server metadata.
5
6use axum::{extract::State, response::Json};
7
8use super::mcp::{handle_mcp_request, McpRequest, McpResponse};
9use super::state::BancoState;
10
11/// POST /api/v1/mcp — handle MCP JSON-RPC request.
12pub async fn mcp_handler(
13    State(state): State<BancoState>,
14    Json(request): Json<McpRequest>,
15) -> Json<McpResponse> {
16    let response = handle_mcp_request(&request, &state.tools, &state.prompts);
17    Json(response)
18}
19
20/// GET /api/v1/mcp/info — MCP server info (for discovery).
21pub async fn mcp_info_handler() -> Json<McpInfoResponse> {
22    Json(McpInfoResponse {
23        protocol: "mcp".to_string(),
24        version: "2024-11-05".to_string(),
25        server: "banco".to_string(),
26        server_version: env!("CARGO_PKG_VERSION").to_string(),
27        transport: "http".to_string(),
28        endpoint: "/api/v1/mcp".to_string(),
29    })
30}
31
32/// MCP server info response.
33#[derive(Debug, serde::Serialize)]
34pub struct McpInfoResponse {
35    pub protocol: String,
36    pub version: String,
37    pub server: String,
38    pub server_version: String,
39    pub transport: String,
40    pub endpoint: String,
41}