Skip to main content
Glama
inspicere

mcp-defectdojo

by inspicere

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LOG_LEVELNoLogging levelINFO
FASTMCP_HOSTNoBind address for network transports0.0.0.0
FASTMCP_PORTNoPort for network transports8000
REQUIRE_AUTHNoSet to false to allow unauthenticated network access
AUDIT_HMAC_KEYNoHMAC key for audit log integrity chain
AUDIT_LOG_FILENoPath for dedicated audit log file
DEFECTDOJO_URLYesBase URL of the DefectDojo instance (must use https:// unless overridden)
MCP_AUTH_TOKENNoLegacy auth token mapping to admin role
MCP_READ_TOKENNoLegacy read token mapping to reader role
AUDIT_LOG_SYSLOGNoSyslog destination. Format: [transport://]host[:port]
FASTMCP_TRANSPORTNoTransport mode: stdio, sse, streamable-http, httpstdio
AUDIT_LOG_HTTPS_CANoCustom CA certificate path for HTTPS TLS verification
DEFECTDOJO_API_KEYNoAPI key for DefectDojo (generate at DefectDojo > API v2 > Your API Key)
ALLOW_INSECURE_HTTPNoAllow http:// URLs (TLS required by default)false
AUDIT_LOG_HTTPS_URLNoHTTPS endpoint for log forwarding
AUDIT_LOG_SYSLOG_CANoCustom CA certificate for syslog TLS verification
MUTATION_RATE_LIMITNoMax mutations per rate window per authenticated caller60
MUTATION_RATE_WINDOWNoRate window in seconds60
AUDIT_LOG_HTTPS_TOKENNoBearer token for HTTPS endpoint authentication
DEFECTDOJO_READ_API_KEYNoRead-only API key (used for GET requests)
DEFECTDOJO_WRITE_API_KEYNoWrite API key (used for POST/PATCH requests)
AUDIT_LOG_HTTPS_BATCH_SIZENoNumber of log records per HTTPS batch10
AUDIT_LOG_HTTPS_FLUSH_SECSNoSeconds before flushing a partial batch5
UNTRUSTED_CONTENT_WRAPPINGNoRead-side wrapping kill-switch. on/offon
DEFECTDOJO_DEFAULT_FOUND_BY_IDNoFinding type ID used in create_finding payloads1
OPEN_ACCESS_MUTATION_RATE_LIMITNoMax mutations per rate window across all unauthenticated traffic10

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
health_checkA

Check connectivity to the DefectDojo instance. Returns JSON with status 'ok' or 'unhealthy' and a message.

list_productsB

List products in DefectDojo. Args: limit (1-100, default 20), offset (>= 0). Returns JSON with 'items' array and 'pagination' metadata.

get_productA

Get a single product by ID. Args: product_id (must be > 0). Returns JSON with id, name, description, prod_type fields.

create_productA

Create a new product. Requires write scope. Rate-limited. Args: name, description, prod_type_id (must be > 0). Returns JSON with created product.

list_product_typesA

List product types in DefectDojo. Use this to find valid prod_type_id values for create_product. Args: limit (1-100, default 20), offset (>= 0). Returns JSON with 'items' array and 'pagination' metadata.

list_engagementsA

List engagements for a product. Args: product_id (> 0), limit (1-100, default 20), offset (>= 0). Returns JSON with 'items' array and 'pagination' metadata.

get_engagementA

Get a single engagement by ID. Args: engagement_id (must be > 0). Returns JSON with engagement fields.

create_engagementA

Create a new engagement. Requires write scope. Rate-limited. Args: product_id (> 0), name, target_start (YYYY-MM-DD), target_end (YYYY-MM-DD). Returns JSON with created engagement.

list_testsA

List tests for an engagement. Args: engagement_id (> 0), limit (1-100, default 20), offset (>= 0). Returns JSON with 'items' array and 'pagination' metadata.

get_testA

Get a single test by ID. Args: test_id (must be > 0). Returns JSON with test fields.

create_testB

Create a new test. Requires write scope. Rate-limited. Args: engagement_id (> 0), test_type_id (> 0), target_start (YYYY-MM-DD), target_end (YYYY-MM-DD). Returns JSON with created test.

list_test_typesA

List test types in DefectDojo. Use this to find valid test_type_id values for create_test. Args: limit (1-100, default 20), offset (>= 0). Returns JSON with 'items' array and 'pagination' metadata.

list_findingsA

List findings with optional filters. Args: test_id, product_id, engagement_id (all optional, > 0); severity (Critical/High/Medium/Low/Info); active, verified, duplicate, false_p, out_of_scope, is_mitigated, risk_accepted, outside_of_sla (all optional booleans); tags (optional list); component_name, title (optional strings); limit (1-100, default 20), offset (>= 0). Returns JSON with 'items' array and 'pagination' metadata.

DOM-19 (Phase 14.2): the has_jira parameter was removed from the signature entirely. Prior to v3.2.6 it was accepted-then-rejected at runtime because DefectDojo silently ignored it (F-007). Inspect jira_issue_url on each finding to determine Jira linkage.

get_findingA

Get a single finding by ID. Args: finding_id (must be > 0). Returns JSON with finding fields.

create_findingA

Create a new finding. Requires write scope. Rate-limited. Args: test_id (> 0), title, severity (Critical/High/Medium/Low/Info), description, active (default true), verified (default false). Returns JSON with created finding.

update_findingA

Update an existing finding. Requires write scope. Rate-limited. Args: finding_id (> 0), plus optional: title, severity (Critical/High/Medium/Low/Info), description, active, verified, false_p, duplicate, out_of_scope, is_mitigated. At least one field required. Returns JSON with updated finding. State-transition gate (F-008/F-018): mitigated→unmitigated cascades (active=true, explicit is_mitigated=false, or false_p/duplicate/out_of_scope flips) are rejected with a redirect to reopen_finding unless the caller's role bears engagement_mgmt (writer/admin).

close_findingA

Close a finding with a reason. Requires write scope. Rate-limited. Args: finding_id (> 0), reason (mitigated/false_positive/out_of_scope/duplicate), note (optional closure note). Returns JSON with updated finding.

DOM-21 (Phase 14.2): when note is provided and the close succeeds but the inner note-attach fails, the response includes a structured _warning field of shape::

{"message": "<human-readable>", "note_attach_failed": true,
 "finding_id": <int>}

The note-attach failure is also emitted as a structured note_attach_failure audit event for SIEM correlation. The close itself succeeded — only the note attachment failed.

reopen_findingA

Reopen a previously mitigated finding. Requires engagement_mgmt permission — reopening signals remediation failure and is gated above finding_mgmt. Rate-limited. Args: finding_id (> 0), note (optional reason for reopening). Returns JSON with updated finding.

DOM-21 (Phase 14.2): when note is provided and the reopen succeeds but the inner note-attach fails, the response includes a structured _warning field of shape::

{"message": "<human-readable>", "note_attach_failed": true,
 "finding_id": <int>}

The note-attach failure is also emitted as a structured note_attach_failure audit event for SIEM correlation. The reopen itself succeeded — only the note attachment failed.

import_scanB

Import a scan report into DefectDojo. Requires write scope. Rate-limited.

add_finding_noteA

Add a note to a finding. Requires write scope. Rate-limited. Args: finding_id (> 0), entry (note text), private (default false). Returns JSON with created note — the entry field is F-002 wrapped ({"value": ..., "_warning": "untrusted-content: ..."}) since Phase 12; disable via UNTRUSTED_CONTENT_WRAPPING=off (see DEC-027).

list_finding_notesA

List notes for a finding. Args: finding_id (> 0). Returns universal envelope {"items": [...], "pagination": {...}} with note entry F-002 wrapped.

add_finding_tagsA

Add tags to a finding. Requires write scope. Rate-limited. Args: finding_id (> 0), tags (non-empty list of strings, each <= 200 chars). Returns JSON with tags array.

remove_finding_tagsA

Remove tags from a finding. Requires write scope. Rate-limited. Args: finding_id (> 0), tags (non-empty list of tag strings to remove). Returns JSON with tags array.

reimport_scanA

Re-import a scan report into an existing test in DefectDojo. Requires write scope. Rate-limited.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/inspicere/mcp-defectdojo'

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