Skip to content

MCP Server

The Model Context Protocol (MCP) server exposes compliance data to external LLMs and AI agents. Any MCP-compatible client — such as Claude, Cursor, or a custom agent — can connect and query findings, SBOM data, and DAST results without direct database access.

How It Works

The compliance-mcp crate runs as a standalone service that connects to the same MongoDB database as the agent and dashboard. It registers a set of tools that LLM clients can discover and call through the MCP protocol.

LLM Client  ──MCP──▶  compliance-mcp  ──MongoDB──▶  compliance_scanner DB

The server supports two transport modes:

TransportUse CaseHow to Enable
StdioLocal development, piped to a CLI toolDefault (no MCP_PORT set)
Streamable HTTPRemote deployment, multiple clientsSet MCP_PORT=8090

Available Tools

The MCP server exposes seven tools:

Findings

ToolDescription
list_findingsQuery findings with optional filters for repository, severity, status, and scan type. Returns up to 200 results (default 50).
get_findingRetrieve a single finding by its MongoDB ObjectId.
findings_summaryGet finding counts grouped by severity and status, optionally filtered by repository.

SBOM

ToolDescription
list_sbom_packagesList SBOM packages with filters for repository, vulnerabilities, package manager, and license.
sbom_vuln_reportGenerate a vulnerability report for a repository showing all packages with known CVEs.

DAST

ToolDescription
list_dast_findingsQuery DAST findings with filters for target, scan run, severity, exploitability, and vulnerability type.
dast_scan_summaryGet a summary of recent DAST scan runs and finding counts.

Running Locally

Stdio Mode

Run the MCP server directly — it reads from stdin and writes to stdout:

bash
cd compliance-mcp
cargo run

Configure your MCP client to launch it as a subprocess. For example, in a Claude Code mcp.json:

json
{
  "mcpServers": {
    "compliance": {
      "command": "cargo",
      "args": ["run", "-p", "compliance-mcp"],
      "cwd": "/path/to/compliance-scanner"
    }
  }
}

HTTP Mode

Set MCP_PORT to start the Streamable HTTP server:

bash
MCP_PORT=8090 cargo run -p compliance-mcp

The server listens on http://0.0.0.0:8090/mcp. Point your MCP client to this endpoint.

Configuration

VariableDescriptionDefault
MONGODB_URIMongoDB connection stringmongodb://localhost:27017
MONGODB_DATABASEDatabase namecompliance_scanner
MCP_PORTPort for HTTP transport (omit for stdio)
RUST_LOGLog level filtercompliance_mcp=info

Create a .env file in the project root or set these as environment variables.

Deploying with Docker

The Dockerfile.mcp builds and runs the MCP server in HTTP mode on port 8090.

bash
docker build -f Dockerfile.mcp -t compliance-mcp .
docker run -p 8090:8090 \
  -e MONGODB_URI=mongodb://mongo:27017 \
  -e MONGODB_DATABASE=compliance_scanner \
  -e MCP_PORT=8090 \
  compliance-mcp

Coolify Deployment

  1. Create a new service in your Coolify project
  2. Set the Dockerfile path to Dockerfile.mcp
  3. Set the exposed port to 8090
  4. Add environment variables: MONGODB_URI, MONGODB_DATABASE, MCP_PORT=8090
  5. The MCP endpoint will be available at your configured domain under /mcp

The CI pipeline automatically deploys on changes to compliance-core/, compliance-mcp/, Dockerfile.mcp, or Cargo.toml/Cargo.lock. Add the COOLIFY_WEBHOOK_MCP secret to your Gitea repository.

Managing MCP Servers in the Dashboard

Navigate to MCP Servers in the dashboard sidebar to:

  • Register MCP server instances with their endpoint URL, transport type, port, and database connection
  • View server configuration, enabled tools, and status
  • Manage access tokens — reveal, copy, or regenerate bearer tokens for authentication
  • Delete servers that are no longer needed

Each registered server is assigned a random access token on creation. Use this token in your MCP client configuration for authenticated access.

Example: Querying Findings from an LLM

Once connected, an LLM can call any of the registered tools. For example:

"Show me all critical findings" triggers list_findings with severity: "critical":

json
{
  "tool": "list_findings",
  "arguments": {
    "severity": "critical",
    "limit": 10
  }
}

"What vulnerable packages does repo X have?" triggers sbom_vuln_report:

json
{
  "tool": "sbom_vuln_report",
  "arguments": {
    "repo_id": "683abc..."
  }
}

TIP

The MCP server is read-only — it only queries data from MongoDB. It cannot modify findings, trigger scans, or change configuration. This makes it safe to expose to external LLM clients.

Compliance Scanner Documentation