Skip to main content
Glama

CodeGraph CLI MCP Server

by Jakedismo
routes.rsโ€ข7.99 kB
use crate::{ auth_middleware, enhanced_health, handlers, health, rest, service_registry, streaming_handlers, vector_handlers, versioning_handlers, AppState, RateLimitManager, }; use axum::response::Html; use axum::{ middleware, routing::{get, post}, Router, }; use http::header::{HeaderName, HeaderValue, CACHE_CONTROL, CONNECTION}; use std::str::FromStr; use std::time::Duration; use tower_http::{ compression::CompressionLayer, cors::CorsLayer, set_header::SetResponseHeaderLayer, trace::TraceLayer, }; #[cfg(feature = "openapi-ui")] use utoipa_swagger_ui::SwaggerUi; use utoipa::OpenApi; pub fn create_router(state: AppState) -> Router { // GraphQL schema disabled in this build let mut app = Router::new() // Health and readiness checks .route("/health", get(health::comprehensive_health_check)) .route( "/health/enhanced", get(enhanced_health::enhanced_health_check), ) .route("/health/live", get(health::liveness_check)) .route("/health/ready", get(health::readiness_check)) .route("/metrics", get(handlers::metrics_handler)) // GraphQL endpoint disabled in this build to avoid version conflicts // GraphiQL disabled in this build // Subscriptions disabled in this build to avoid axum version mismatch // Node operations .route("/nodes/:id", get(handlers::get_node)) .route("/nodes/:id/similar", get(handlers::find_similar)) // Parsing .route("/parse", post(handlers::parse_file)) // Search .route("/search", get(handlers::search_nodes)) // Streaming endpoints for large datasets .route( "/stream/search", get(streaming_handlers::stream_search_results), ) .route( "/stream/dataset", get(streaming_handlers::stream_large_dataset), ) .route("/stream/csv", get(streaming_handlers::stream_csv_results)) .route( "/stream/:id/metadata", get(streaming_handlers::get_stream_metadata), ) .route( "/stream/stats", get(streaming_handlers::get_flow_control_stats), ) // Advanced vector search .route("/vector/search", post(vector_handlers::vector_search)) .route( "/vector/batch-search", post(vector_handlers::batch_vector_search), ) .route("/vector/index/stats", get(vector_handlers::get_index_stats)) .route( "/vector/index/config", get(vector_handlers::get_index_config), ) .route( "/vector/index/rebuild", post(vector_handlers::rebuild_index), ) .route( "/vector/performance", get(vector_handlers::get_search_performance), ) // Batch operations .route( "/batch/operations", post(vector_handlers::submit_batch_operations), ) .route("/batch/status", get(vector_handlers::get_batch_status)) // Transaction Management .route( "/transactions", post(versioning_handlers::begin_transaction), ) .route( "/transactions/:id/commit", post(versioning_handlers::commit_transaction), ) .route( "/transactions/:id/rollback", post(versioning_handlers::rollback_transaction), ) // Version Management .route("/versions", post(versioning_handlers::create_version)) .route("/versions", get(versioning_handlers::list_versions)) .route("/versions/:id", get(versioning_handlers::get_version)) .route("/versions/:id/tag", post(versioning_handlers::tag_version)) .route( "/versions/:from/compare/:to", get(versioning_handlers::compare_versions), ) // Branch Management .route("/branches", post(versioning_handlers::create_branch)) .route("/branches", get(versioning_handlers::list_branches)) .route("/branches/:name", get(versioning_handlers::get_branch)) .route( "/branches/:name", axum::routing::delete(versioning_handlers::delete_branch), ) // Merge Operations .route("/merge", post(versioning_handlers::merge_branches)) .route( "/merge/:id/resolve", post(versioning_handlers::resolve_conflicts), ) // Snapshot Management .route( "/snapshots/:transaction_id", post(versioning_handlers::create_snapshot), ) .route("/snapshots/:id", get(versioning_handlers::get_snapshot)) // Statistics and Monitoring .route( "/stats/transactions", get(versioning_handlers::get_transaction_stats), ) .route( "/stats/recovery", get(versioning_handlers::get_recovery_stats), ) .route( "/integrity/check", post(versioning_handlers::run_integrity_check), ) // Backup and Recovery .route("/backup", post(versioning_handlers::create_backup)) .route( "/backup/:id/restore", post(versioning_handlers::restore_from_backup), ) // HTTP/2 routes disabled in this build // Service Discovery and Registration .route( "/services", post(service_registry::register_service_handler), ) .route("/services", get(service_registry::list_services_handler)) .route( "/services/discover", get(service_registry::discover_services_handler), ) .route("/services/:id", get(service_registry::get_service_handler)) .route( "/services/:id", axum::routing::delete(service_registry::deregister_service_handler), ) .route( "/services/heartbeat", post(service_registry::heartbeat_handler), ) // Add state .with_state(state.clone()) // Add middleware (order matters) .layer(middleware::from_fn(crate::metrics::http_metrics_middleware)) .layer( CorsLayer::new() .allow_origin(tower_http::cors::Any) .allow_methods(tower_http::cors::Any) .allow_headers(tower_http::cors::Any), ) // Adaptive response compression (gzip, deflate, brotli, zstd) .layer(CompressionLayer::new()) // Keep-alive and backpressure layers omitted in this build .layer(TraceLayer::new_for_http()); // Versioned REST API (v1) let v1_get = Router::new() .route("/search", get(rest::handlers::get_search)) .route("/node/:id", get(rest::handlers::get_node)) .route("/graph/neighbors", get(rest::handlers::get_neighbors)) // Add caching headers for GET endpoints .layer({ let value = HeaderValue::from_static("public, max-age=60"); SetResponseHeaderLayer::if_not_present(CACHE_CONTROL, value) }) .with_state(state.clone()); let v1_post = Router::new() .route("/index", post(rest::handlers::post_index)) .with_state(state.clone()); let v1_router = Router::new().merge(v1_get).merge(v1_post); app = app.nest("/v1", v1_router); #[cfg(feature = "openapi-ui")] { app = app.merge(SwaggerUi::new("/v1/docs").url( "/v1/openapi.json", crate::rest::ApiDoc::openapi(), )); } // Memory leak detection routes (only when feature enabled) #[cfg(feature = "leak-detect")] { let leak_routes = Router::new() .route("/memory/stats", get(handlers::memory_stats)) .route("/memory/leaks", get(handlers::export_leak_report)); app = app.merge(leak_routes); } app }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jakedismo/codegraph-rust'

If you have feedback or need assistance with the MCP directory API, please join our Discord server