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: Kuroko MCP Server
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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables triage of SAST findings by exposing a read-only MCP server with tools to access hash-verified source-to-sink code slices, unguarded sinks, and layered enrichment for local LLM analysis.10MIT
- AlicenseNot gradedqualityBmaintenanceEnables security agents to interact with the Kuroko web security testing platform through MCP, providing access to traffic history, site graph entities, findings, and scan jobs with read-only defaults and scoped, approved tools for testing operations.Apache 2.0
- AlicenseAqualityCmaintenanceEnables policy-first defensive security operations for MCP, providing repository and web-security analysis with controlled authorization, scoped execution, and auditability.9MIT
- AlicenseNot gradedqualityBmaintenanceEnables authorized bug bounty automation via a scope-enforced MCP bridge, supporting web, secrets, mobile, and LLM red-team scanning, with reporting and advisory.MIT
Related MCP Connectors
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
Remote MCP for A2A caller identity, scope policy, verdict receipts, and audit history.
34 production API tools over one hosted MCP endpoint.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ZeeshanSultan/DefectDojo-MCP-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server