Skip to main content

DefectDojo Community MCP Server

CI License Python

A read-only Model Context Protocol server for DefectDojo Community Edition — so an AI assistant can read your vulnerability findings, group the same vulnerability across every product, and draft issues for whatever tracker you use.

Unofficial. This is an independent open-source project. It is not affiliated with, endorsed by, or supported by DefectDojo Inc. or OWASP. "DefectDojo" is used only to describe what this server connects to.


Do you actually need this?

If you run DefectDojo Pro, you probably don't. Pro has a built-in MCP server — use that instead; it is maintained by the vendor and more capable.

DefectDojo Pro (built-in) This project
Edition Pro only — AI features are Pro-only Community Edition (works with Pro too)
Requires DefectDojo v2.51.2+, enabled by a superuser Any version with API v2
Runs Inside your instance, at /mcp On your machine, as a local MCP process
Transport Streamable HTTP stdio
Tools 18 in the read-only core toolset 7
Writes None in core; available in Pro add-on toolsets (hierarchy, reporting, dashboards, psirt) Never — see Safety model

This project exists because Community Edition has no MCP server at all. It talks to the ordinary REST API v2 with a normal API token, so it needs nothing enabled server-side and no particular DefectDojo version.

Not to be confused with the unrelated defectdojo-mcp package on PyPI, which is a different third-party project. This one is defectdojo-community-mcp.


Tools

Tool What it does
health_check Verify connectivity and auth; returns the instance URL and product count
list_products Every product, with its findings count
list_critical_findings Actionable criticals, optionally scoped to one product
list_findings_by_severity The same, for any severity
group_critical_by_vuln The useful one. Groups criticals across all products by CVE (else CWE+title), widest blast radius first
list_duplicate_findings Findings DefectDojo marked as duplicates
get_finding Full detail for one finding

"Actionable" means active and not false-positive, duplicate, risk-accepted, out-of-scope or mitigated — the set actually worth someone's time.

group_critical_by_vuln is the reason this exists. A monorepo-shaped scanner setup reports the same upstream CVE once per product; this collapses them into one group per vulnerability listing every affected product, which maps cleanly onto one tracker issue.


Install

Requires Python 3.10+.

pip install defectdojo-community-mcp

Or from source:

git clone https://github.com/systechgd/defectdojo-community-mcp.git
cd defectdojo-community-mcp
pip install -e .

Configure

Two environment variables are required.

Variable Required Default Notes
DEFECTDOJO_URL yes — Base URL, e.g. https://defectdojo.example.com. No trailing /api/v2.
DEFECTDOJO_API_KEY yes — API v2 token. See below for scoping it down.
DEFECTDOJO_VERIFY_TLS no true false disables certificate verification. See SECURITY.md.
DEFECTDOJO_TIMEOUT_SECONDS no 30 Per-request HTTP timeout.

Get a token from DefectDojo → your user → API v2 Key.

Create a dedicated read-only user for it. The token inherits that user's permissions, and nothing in this server needs write access. If the token leaks, a read-only one cannot be used to alter your findings.

Check it works before wiring up a client:

defectdojo-community-mcp --check
# ok: https://defectdojo.example.com reachable, 23 product(s) visible

Connect an MCP client

Claude Code

claude mcp add defectdojo \
  --env DEFECTDOJO_URL=https://defectdojo.example.com \
  --env DEFECTDOJO_API_KEY=your-token \
  -- defectdojo-community-mcp

Claude Desktop / generic JSON config

{
  "mcpServers": {
    "defectdojo": {
      "command": "defectdojo-community-mcp",
      "env": {
        "DEFECTDOJO_URL": "https://defectdojo.example.com",
        "DEFECTDOJO_API_KEY": "your-token"
      }
    }
  }
}

If the console script is not on your PATH, use "command": "python", "args": ["-m", "defectdojo_community_mcp"].

Docker

The server speaks MCP over stdio, so run it attached (-i), not detached:

{
  "mcpServers": {
    "defectdojo": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "DEFECTDOJO_URL",
        "-e", "DEFECTDOJO_API_KEY",
        "ghcr.io/systechgd/defectdojo-community-mcp:latest"
      ]
    }
  }
}

Example

Group every critical finding by vulnerability and show me the ones affecting more than three services.

The assistant calls group_critical_by_vuln and gets back, per vulnerability, the CVE, title, affected product list and a direct DefectDojo URL per finding — enough to write one issue covering all of them, instead of twelve near-identical ones.


Safety model

Read-only is a design invariant, not a default.

  • No tool issues a POST, PUT, PATCH or DELETE.
  • The HTTP client class exposes no method capable of doing so, so a mutating tool cannot be added by accident — only by deliberately changing that class.
  • A test asserts that every request made by every tool is a GET.

Adding write support would be a breaking change to this guarantee. If it ever happens it will be a separate server, so operators can keep granting read without granting write.

Findings data is attacker-influenced — scanner output can contain text from dependency metadata, file paths and commit messages. Treat tool results as data, never as instructions. See SECURITY.md for the full threat model and how to report a vulnerability.


Development

git clone https://github.com/systechgd/defectdojo-community-mcp.git
cd defectdojo-community-mcp
python -m venv .venv && . .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e ".[dev]"

pytest          # 57 tests, no network or live instance needed
ruff check .

The test suite runs entirely against httpx.MockTransport. CI additionally runs the suite on Python 3.10–3.13 and against both MCP SDK generations (mcp<2, which has FastMCP, and mcp>=2, which renamed it to MCPServer).

See CONTRIBUTING.md and CODE_OF_CONDUCT.md.


License

Apache-2.0. See NOTICE.

Metadata

Release files for defectdojo-community-mcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for defectdojo-community-mcp 0.1.1
File Size Uploaded Provenance Actions
defectdojo_community_mcp-0.1.1.tar.gz 23.3 kB With provenance Details for defectdojo_community_mcp-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for defectdojo-community-mcp 0.1.1
File Interpreter ABI Platform Actions
defectdojo_community_mcp-0.1.1-py3-none-any.whl Python 3 none any Details for defectdojo_community_mcp-0.1.1-py3-none-any.whl

Total release size: 41.5 kB

Release files / defectdojo_community_mcp-0.1.1.tar.gz

Download URL defectdojo_community_mcp-0.1.1.tar.gz
Size 23.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9a7f28b5503f71cb45c1a80b39050c15257790885e339bc6d64fa02c09e1994e
BLAKE2b-256 checksum
How to use checksums
3a0e7ecc46061f0330a3df72c8b2268723e65b2beba0083bbe853a572ba69c83
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / defectdojo_community_mcp-0.1.1-py3-none-any.whl

Download URL defectdojo_community_mcp-0.1.1-py3-none-any.whl
Size 18.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
925183e0d3851643e048cee91f79137949c98933213fb4b8f53f6fdd5feb780c
BLAKE2b-256 checksum
How to use checksums
bdd7b3045872af8f440ce7fbbcc0c3b04832126d5a19875932a1c99be81997e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Security for defectdojo-community-mcp 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for defectdojo_community_mcp-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page