feat: add MCP server for exposing compliance data to LLMs (#5)
Some checks failed
CI / Format (push) Successful in 3s
CI / Clippy (push) Successful in 4m4s
CI / Security Audit (push) Successful in 1m42s
CI / Tests (push) Successful in 4m38s
CI / Deploy Agent (push) Successful in 2s
CI / Deploy Dashboard (push) Successful in 1s
CI / Deploy MCP (push) Failing after 2s
CI / Detect Changes (push) Successful in 7s
CI / Deploy Docs (push) Successful in 2s
Some checks failed
CI / Format (push) Successful in 3s
CI / Clippy (push) Successful in 4m4s
CI / Security Audit (push) Successful in 1m42s
CI / Tests (push) Successful in 4m38s
CI / Deploy Agent (push) Successful in 2s
CI / Deploy Dashboard (push) Successful in 1s
CI / Deploy MCP (push) Failing after 2s
CI / Detect Changes (push) Successful in 7s
CI / Deploy Docs (push) Successful in 2s
New `compliance-mcp` crate providing a Model Context Protocol server with 7 tools: list/get/summarize findings, list SBOM packages, SBOM vulnerability report, list DAST findings, and DAST scan summary. Supports stdio (local dev) and Streamable HTTP (deployment via MCP_PORT). Includes Dockerfile, CI clippy check, and Coolify deploy job. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Sharang Parnerkar <parnerkarsharang@gmail.com> Reviewed-on: #5
This commit was merged in pull request #5.
This commit is contained in:
@@ -24,12 +24,13 @@ pub fn AppShell() -> Element {
|
||||
}
|
||||
}
|
||||
}
|
||||
Some(Ok(_)) => {
|
||||
rsx! { LoginPage {} }
|
||||
}
|
||||
Some(Err(e)) => {
|
||||
tracing::error!("Auth check failed: {e}");
|
||||
rsx! { LoginPage {} }
|
||||
Some(Ok(_)) | Some(Err(_)) => {
|
||||
// Not authenticated — redirect to Keycloak login
|
||||
rsx! {
|
||||
document::Script {
|
||||
dangerous_inner_html: "window.location.href = '/auth';"
|
||||
}
|
||||
}
|
||||
}
|
||||
None => {
|
||||
rsx! {
|
||||
@@ -40,73 +41,3 @@ pub fn AppShell() -> Element {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[component]
|
||||
fn LoginPage() -> Element {
|
||||
rsx! {
|
||||
div { class: "login-page",
|
||||
div { class: "login-bg-grid" }
|
||||
div { class: "login-bg-glow" }
|
||||
div { class: "login-container",
|
||||
div { class: "login-card",
|
||||
div { class: "login-logo",
|
||||
svg {
|
||||
width: "48",
|
||||
height: "48",
|
||||
view_box: "0 0 24 24",
|
||||
fill: "none",
|
||||
stroke: "currentColor",
|
||||
stroke_width: "1.5",
|
||||
stroke_linecap: "round",
|
||||
stroke_linejoin: "round",
|
||||
path { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }
|
||||
path { d: "M9 12l2 2 4-4" }
|
||||
}
|
||||
}
|
||||
h1 { class: "login-title", "Compliance Scanner" }
|
||||
p { class: "login-subtitle",
|
||||
"AI-powered security scanning, SBOM analysis, and compliance monitoring"
|
||||
}
|
||||
div { class: "login-features",
|
||||
div { class: "login-feature",
|
||||
span { class: "login-feature-icon", "\u{25C6}" }
|
||||
span { "SAST & CVE Detection" }
|
||||
}
|
||||
div { class: "login-feature",
|
||||
span { class: "login-feature-icon", "\u{25C6}" }
|
||||
span { "SBOM & License Compliance" }
|
||||
}
|
||||
div { class: "login-feature",
|
||||
span { class: "login-feature-icon", "\u{25C6}" }
|
||||
span { "Code Knowledge Graph" }
|
||||
}
|
||||
div { class: "login-feature",
|
||||
span { class: "login-feature-icon", "\u{25C6}" }
|
||||
span { "DAST & Impact Analysis" }
|
||||
}
|
||||
}
|
||||
a {
|
||||
href: "/auth",
|
||||
class: "login-button",
|
||||
svg {
|
||||
width: "20",
|
||||
height: "20",
|
||||
view_box: "0 0 24 24",
|
||||
fill: "none",
|
||||
stroke: "currentColor",
|
||||
stroke_width: "2",
|
||||
stroke_linecap: "round",
|
||||
stroke_linejoin: "round",
|
||||
rect { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }
|
||||
path { d: "M7 11V7a5 5 0 0 1 10 0v4" }
|
||||
}
|
||||
span { "Sign in to continue" }
|
||||
}
|
||||
p { class: "login-footer",
|
||||
"Secured with single sign-on"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,11 @@ pub fn Sidebar() -> Element {
|
||||
route: Route::DastOverviewPage {},
|
||||
icon: rsx! { Icon { icon: BsBug, width: 18, height: 18 } },
|
||||
},
|
||||
NavItem {
|
||||
label: "MCP Servers",
|
||||
route: Route::McpServersPage {},
|
||||
icon: rsx! { Icon { icon: BsPlug, width: 18, height: 18 } },
|
||||
},
|
||||
NavItem {
|
||||
label: "Settings",
|
||||
route: Route::SettingsPage {},
|
||||
|
||||
Reference in New Issue
Block a user