745ad8a441
## Summary - Add HTTP response status checking to all Gitea tracker methods that were silently swallowing errors - Add fallback in create_pr_review: if inline comments fail, retry as plain PR comment ## Test plan - [ ] Deploy and trigger a PR review, check logs for actual error details - [ ] Verify fallback posts summary comment when inline comments fail Co-authored-by: Sharang Parnerkar <parnerkarsharang@gmail.com> Co-authored-by: Sharang Parnerkar <30073382+mighty840@users.noreply.github.com> Reviewed-on: #47
61 lines
2.0 KiB
Rust
61 lines
2.0 KiB
Rust
mod database;
|
|
mod server;
|
|
mod tools;
|
|
|
|
use std::sync::Arc;
|
|
|
|
use database::Database;
|
|
use rmcp::transport::{
|
|
streamable_http_server::session::local::LocalSessionManager, StreamableHttpServerConfig,
|
|
StreamableHttpService,
|
|
};
|
|
use server::ComplianceMcpServer;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
let _ = dotenvy::dotenv();
|
|
|
|
tracing_subscriber::fmt()
|
|
.with_env_filter(
|
|
tracing_subscriber::EnvFilter::from_default_env()
|
|
.add_directive("compliance_mcp=info".parse()?),
|
|
)
|
|
.init();
|
|
|
|
let mongo_uri =
|
|
std::env::var("MONGODB_URI").unwrap_or_else(|_| "mongodb://localhost:27017".to_string());
|
|
let db_name =
|
|
std::env::var("MONGODB_DATABASE").unwrap_or_else(|_| "compliance_scanner".to_string());
|
|
|
|
let db = Database::connect(&mongo_uri, &db_name).await?;
|
|
|
|
// If MCP_PORT is set, run as Streamable HTTP server; otherwise use stdio.
|
|
if let Ok(port_str) = std::env::var("MCP_PORT") {
|
|
let port: u16 = port_str.parse()?;
|
|
tracing::info!("Starting MCP server on HTTP port {port}");
|
|
|
|
let db_clone = db.clone();
|
|
let service = StreamableHttpService::new(
|
|
move || Ok(ComplianceMcpServer::new(db_clone.clone())),
|
|
Arc::new(LocalSessionManager::default()),
|
|
StreamableHttpServerConfig::default(),
|
|
);
|
|
|
|
let router = axum::Router::new()
|
|
.route("/health", axum::routing::get(|| async { "ok" }))
|
|
.nest_service("/mcp", service);
|
|
let listener = tokio::net::TcpListener::bind(("0.0.0.0", port)).await?;
|
|
tracing::info!("MCP HTTP server listening on 0.0.0.0:{port}");
|
|
axum::serve(listener, router).await?;
|
|
} else {
|
|
tracing::info!("Starting MCP server on stdio");
|
|
let server = ComplianceMcpServer::new(db);
|
|
let transport = rmcp::transport::stdio();
|
|
use rmcp::ServiceExt;
|
|
let handle = server.serve(transport).await?;
|
|
handle.waiting().await?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|