mcp_stdio_proxy/server/
router_layer.rs1use axum::{
2 Router,
3 extract::DefaultBodyLimit,
4 routing::{delete, get, post},
5};
6use http::Method;
7use tower_http::cors::{self, CorsLayer};
8
9use crate::{
10 AppError, AppState, DynamicRouterService,
11 model::{GLOBAL_SSE_MCP_ROUTES_PREFIX, GLOBAL_STREAM_MCP_ROUTES_PREFIX, McpProtocol},
12 server::handlers::check_mcp_is_status_handler,
13};
14
15use super::{
16 get_health, get_ready,
17 handlers::{
18 add_route_handler, check_mcp_status_handler_sse, check_mcp_status_handler_stream,
19 delete_route_handler, run_code_handler,
20 },
21 set_layer,
22};
23
24pub async fn get_router(state: AppState) -> Result<Router, AppError> {
26 let health = Router::new()
27 .route("/health", get(get_health))
28 .route("/ready", get(get_ready));
29
30 let cors = CorsLayer::new()
31 .allow_methods([
33 Method::GET,
34 Method::POST,
35 Method::PATCH,
36 Method::DELETE,
37 Method::PUT,
38 ])
39 .allow_origin(cors::Any)
40 .allow_headers(cors::Any);
41
42 let api = Router::new()
43 .route_service(
46 &format!("{GLOBAL_SSE_MCP_ROUTES_PREFIX}/proxy/{{*path}}"),
47 DynamicRouterService(McpProtocol::Sse),
48 )
49 .route(
50 &format!("{GLOBAL_SSE_MCP_ROUTES_PREFIX}/add"),
51 post(add_route_handler),
52 )
53 .route("/mcp/config/delete/{mcp_id}", delete(delete_route_handler))
54 .route(
55 "/mcp/check/status/{mcp_id}",
56 get(check_mcp_is_status_handler),
57 )
58 .route(
59 &format!("{GLOBAL_SSE_MCP_ROUTES_PREFIX}/check_status"),
60 post(check_mcp_status_handler_sse),
61 )
62 .route_service(
64 &format!("{GLOBAL_STREAM_MCP_ROUTES_PREFIX}/proxy/{{*path}}"),
65 DynamicRouterService(McpProtocol::Stream),
66 )
67 .route(
68 &format!("{GLOBAL_STREAM_MCP_ROUTES_PREFIX}/check_status"),
69 post(check_mcp_status_handler_stream),
70 )
71 .route("/api/run_code_with_log", post(run_code_handler))
72 .layer(DefaultBodyLimit::max(20 * 1024 * 1024))
73 .layer(cors);
74
75 let app: Router<AppState> = Router::new().merge(health).merge(api);
77
78 let app = app.with_state(state.clone());
80 let router = set_layer(app, state);
81 Ok(router)
82}