DefectDojo Intelligence MCP Server
DefectDojo Intelligence MCP Server
Un servidor Model Context Protocol que preserva los permisos, sobre la API REST v2 de DefectDojo OSS v2.58.4. Alcanza paridad de capacidades 1:1 con el servidor MCP integrado oficial de DefectDojo Pro (12 herramientas de lectura + un prompt de Security Landscape) y añade un superset determinista de analítica/informes, implementdo como adaptador externo, porque el MCP integrado de Pro requere la edición Pro + una instancia v2.51.2+ y no está disonible en un host OSS 2.58.4.
Cada llamada usa el token de API de DefectDojo del propio llamador, por lo que DefectDojo decide quén ve qué. El token se mantiene solo en memérica, nunca se registran y nunca se envi al LLM.
Estado: fases 0–4 completas, enduras y dockerizadas 140 pruebas y síncilo para ruff.
Despliegue: ver deploy/DEPLOY.md para deploy config a
https://dojo.example.com/mcp/. Nota: ese despliegue habilla los groups de escritura y de historial de BD (ver Security model y DEPLOY.md). Especificación: PRD.md.
Herramientas
26 herramientas: 20 activas por defecto (14 de lectura + 6 analítica/informes), 6 desactivadas por defecto. Y además, una primitiva de prompt MCP.
Group | Herramientas | Por defecto |
Lectura principal (paridad con Pro + resoluSource) |
| ✅ activo |
Analítica / informes (superset) |
| ✅ activo |
Historial de BD (solo lectura, controlado por API) |
| desactivado ( |
Escrituras (controladas por confirmación) |
| desactivado ( |
Prompt |
| ✅ activo |
Las herramientas de analítica determinísticamente en el servidor (no LLM, no datos invents: cada ciura seza de una consulta de la API de hallazgos) y devuelven salida tipada y structurda. La SLA usa el filtro outside_of_sla propio de DefectDojo; la priorización usa señale reales de KEV/EPSS/SLA.
Related MCP server: mcp-vulbox-agent
Paridad de specos con Pro
Herramienta Pro | Este servidor |
|
|
|
|
|
|
|
|
|
|
|
|
(sin equivalente al Pro) |
|
📊 Security Scape (raport) |
|
️ SAST Review Report (prompt) | eliminado intencionalmente — bajo valor para datos de STA/pruebas intrussion |
Modelo de seguridad
Token:
Autentication: Token <token>(noBearer). HTTP lo lee por cada petición **de la cabera entrante (el token del propi llamador);stdin–leeDD_API_TOKEN. En streamable-table-http the **fallback.*** is **desactivado-request with no/alterada**Authorization` es rechaza, nunca se ejecuta en silencio con el token del entorno del servidor.Esación de tokens con pooling: el pool de conexiones compartido usa **no-storage
con cookie jar, por lo que unSet-Cookie` del upstream nunca se vuelve a reproduce entre los tokens de distinctos llamadores. La autenticación es solo‑por‑requestion.Caché de tokens: el token se valide una** vez por TTL (cacheado por huell de 128 bits, núnca el token; la cache é acouatada) antes de la primra llamada a una herramienta.
Redacción: se aplica de forma central en cada salida de herramienta cuando se configura
redact_secrets/treat_finding_text_as_untrusted—; los secretos se eliminan (incl. credenciales incrustads en URL), se quita PII whenomit_user_pii, y se trunca el texto libtomax_evidence_chars.Error: los fallos (401/403/404/timeo>/…) son notificado como errores de herramienta MCP (
isError), no como variantes de éxito, para que un cliente no confunda denegaación con datos.Writer: desactivados por defecto; cuando se activan, cada escritura exige una razón completisime non -empty y un
confit= **trueimplicit. De lo contrao, es una **no-op preview**, conauditoría` hash entes/después de estado. REST API only – nunca escibi en la DB.This historial de BD desactivado por defecto; cada herramienta autoriza primroa objeto vía REST y después lee una vista de solo lectura en list –list (nunca SQL arbitrary).
Transporte: stream able‑http recibe explícits
TransportSecuritySettings(protección DNS-rebinding/Origin) de enmcp.allowed_hosts/allowed_origins; loopback is always allow "for some renders.
Endpoints (depado ports (credentials, credential_mappings, stub_findings) estan bloqueados; se impone en el registro una list de herramientas no permitidas.
Auditoría: un** solo evento JSON per tool call**, to stderr (stdout es flujo MCP).
Hening
Retros con back-off acors para fallos Get transitorios (429/502/503/504/timeouts; respecta Retry-After, incluid date en formato HTTP; núnca retiraile escrituras ni 4xx) · Semaphore de concurrencia a nivel de proceso · cliente httpx pooled compartído (autenticación por call, cierre in la apagued del lifecycle) · caché de roles by por token roles_cache_TTL. Ver tests/test_hardening.py.
Despliegue en producción (dockeriza, /mcp/)
Gía completa: deploy/DEPLOY.md. En resumen:
cd deploy
# Optional: set DOJO_NETWORK / DD_URL / DD_MCP_REPORTING_DB_DSN in a deploy/.env
# (docker compose reads ${...} env defaults; there is no committed .env template —
# config lives in deploy/config.prod.yaml, bind-mounted at /app/config.yaml).
docker compose up -d --build
curl -s http://127.0.0.1:9900/healthz # -> {"status":"ok","transport":"streamable-http"}Después añade the block location ~ ^/(mcp|se|messages) de deploy/nginx-mcp.conf a la nginx de host y recarga. Los clientes conecta a https://dojo.example.com/mcp/ con su Token Authorization: Token <token> (vía mcp-remote). El contenedor vinculo 0.0.0.0:0.0 9000dentro del contenedor y se publica **solo** en el host como127.0.0.1:9900, y alc a DefectDojo de forma interna en http://nginx:8080`. La config de prod **habilita los groups enable_write_tools / `enable_db_tools`` of escriptura y historial de BD; las escrituras siguen esto controlada by confirmación y las herramientas de BD se autorizan por API antes de to use — ver DEPLOY.md.
Desarrollo local
Fase 0 — protoverifica el esquema real
DD_URL=https://dojo.internal DD_API_TOKEN=xxxx ./scripts/check_schema.shConfirma que existan los endpoints de la colección requeridos y señala los obsoletos. Los DRF filter lookups en src/defectdojo_mcp/tools/* se verifican contra la fuente of DefectDojo 2.58.4 — re-confirm a aqui contra su esquema live.
Instalación y ejecución
pip install -e ".[dev]"
cp config.example.yaml config.yaml # edit base_url
# stdio reads the token from the DD_API_TOKEN env var (and DD_URL) directly — no .env file.
# stdio (single user / desktop client)
DD_URL=https://dojo.internal DD_API_TOKEN=xxxx DD_MCP_CONFIG=config.yaml defectdojo-mcp
# streamable-http (multi-user; token per-request). Set mcp.allowed_hosts for a 0.0.0.0 bind.
DD_MCP_TRANSPORT=streamable-http DD_MCP_HOST=0.0.0.0 DD_MCP_PORT=9000 defectdojo-mcp
# endpoint: http://<host>:9000/mcp health: http://<host>:9000/healthzCludde Desktop (stdin)
{
"mcpServers": {
"defectdojo": {
"command": "defectdojo-mcp",
"env": {
"DD_URL": "https://dojo.internal",
"DD_API_TOKEN": "your-token",
"DD_MCP_CONFIG": "/path/to/config.yaml"
}
}
}
}Pruebas
pytest # 140 tests: redaction/sanitize, params, paging, auth+validator, context,
# server gating, intelligence scoring, source resolution, writes, history,
# hardening (retry/pool/semaphore/cache)
ruff check .Configuir
Principals runts de config.yaml (ver config.example.yaml / deploy/config.prod.yaml):
mcp.transport(stdo|streamable-http),mcp.host/portmcp.enable_write_tools,mcp.enable_db_tools: controlan los grupos off-by-default.mcp.share_dns_rebinding_protection,mcp.allowed_hosts,mcp.allowed_originssecurity.redact_secrets,omit_user_piiomit_user_pii,require_confirmations_for_writeslimits.max_multi(constraints.max_calls/requests),max_retries,max_evidence_chars,roles_cache_ttl_secondsdatabase.enabled,dsn_env,allowed_views(sase 3 BD de informes)
Discoverability & extensibility
Every tool carries
ToolAnnotations(readOnlyHint/idempotentHint/title; not read-only).Enumparams publish enum; list tools declaran una salida tipadaPage; el servidor anunciainctructions; el prompt portitle**and documented. The tools support(module, predicate)regists inserver.py(un default–off single gate bygroup);ServerContext.Execute()/tecute_db_p/Execute_write() are theirchokepointsfor token validation, centra egress transformoutput, audit, and error mapping.
License
GNU Affero General Public License v3.0 only (AGPL-3.0-only). Texto complete in LICENSE.
Copyright (C) 2026 Zeeshan Sultan.
Segur
Please report vulnerabilities privately: see SECURITY.md. Do not open a public issue.
Related
Built alongside ShadowDSO, an external platform security scanning that uses DefectDojo as system of record. This server is standalone and does not depend on it.
This server cannot be deployed
Maintenance
Related MCP Connectors
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
One MCP endpoint for your company's tools, with per-person sign-in, policy and audit.
Unified gateway exposing 150+ tools across all NexGenData MCP servers via one endpoint.
Read-only MCP security data: check catalogue, public scan status and your own scan reports.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables professional penetration testers to run reconnaissance, exploitation, brute-force, traffic-capture, and reporting workflows through MCP tools over STDIO/HTTP/SSE transports with bearer/OIDC authentication and Dockerized host tooling.298 npmGPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to carry out a compliant, non-destructive, auditable authorized security-testing workflow — project intake, scope reading, asset discovery, non-destructive verification, evidence collection, and report-draft generation with manual submission tracking — where every outbound action is gated by scope checks, one-time human confirmation tokens, rate limits, and append-only audit logging.MIT

lazco mcpofficial
AlicenseNot gradedqualityAmaintenanceEnables MCP clients to call Lazco Cloud API operations as tools with the same sign-in, defaulting to read-only tools and optionally adding non-spending write and delete tools when writes are allowed.403 npmMIT- AlicenseNot gradedqualityAmaintenanceEnables MCP-compatible clients to sign in, inspect workspace-scoped findings and hosted runs, and prepare or start/rerun existing hosted reviews after explicit user confirmation.2 npmMIT