Skip to main content
Glama
ZeeshanSultan

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)

dd_get_findings, dd_get_finding_by_id, dd_get_products, dd_get_product_by_id, dd_get_product_types, dd_get_engagements, dd_get_tests, dd_resolve_finding_source, dd_get_users, dd_get_user_by_id, dd_get_groups, dd_get_group_by_id, dd_get_dojo_group_members, dd_get_roles

✅ activo

Analítica / informes (superset)

dd_get_sla_breaches, dd_get_top... dd_prioritize_findinds, dd_generate_executive_report, dd_generate_engineering_report

✅ activo

Historial de BD (solo lectura, controlado por API)

dd_get_finding_histoy, dd_get_reno_..., dd_get_product_risk_trend

desactivado (enable_db_tools + BD de informes)

Escrituras (controladas por confirmación)

dd_add_finding_note, dd_mark_finding_false_positive, dd_close_finding

desactivado (enable_write_tools)

Prompt

security_landscape_report

✅ 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

get_findings, get_inding_by_id

dd_get_findings, dd_get_finding_by_id

get_products, get_product_types

dd_get_products, dd_get_products (+ dd_get_product_by_id)

get_engagements, get_tests

dd_get_engagements, dd_get_tests

get_users, get_user_by_id

dd_get_users, dd_get_user_by_id

get_groups, get_group_by_id, get_dojo_group_members

dd_get_groups, dd_get_group_by_id, dd_get_dojo_group_members

get_roles

dd_get_roles

(sin equivalente al Pro)

dd_blue – desde hallazgo → repositorio/rán/comit para clonar (superset)

📊 Security Scape (raport)

security_landscape_report (prompt MCP primitive)

️ SAST Review Report (prompt)

eliminado intencionalmente — bajo valor para datos de STA/pruebas intrussion

Modelo de seguridad

  • Token: Autentication: Token <token> (no Bearer). HTTP lo lee por cada petición **de la cabera entrante (el token del propi llamador); stdinlee DD_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-storagecon 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 when omit_user_pii, y se trunca el texto libto max_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 en mcp.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.sh

Confirma 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/healthz

Cludde 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/port

  • mcp.enable_write_tools, mcp.enable_db_tools: controlan los grupos off-by-default.

  • mcp.share_dns_rebinding_protection, mcp.allowed_hosts, mcp.allowed_origins

  • security.redact_secrets, omit_user_pii omit_user_pii, require_confirmations_for_writes

  • limits.max_multi (constraints.max_calls/requests), max_retries, max_evidence_chars, roles_cache_ttl_seconds

  • database.enabled, dsn_env, allowed_views (sase 3 BD de informes)

Discoverability & extensibility

  • Every tool carries ToolAnnotations (readOnlyHint/idempotentHint/title; not read-only). Enum params publish enum; list tools declaran una salida tipada Page; el servidor anuncia inctructions; el prompt por title** and documented. The tools support (module, predicate) regists in server.py (un default–off single gate by group); ServerContext.Execute() / tecute_db_p / Execute_write () are their chokepoints for token validation, centra egress transform output, 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.

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.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    10
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables authorized bug bounty automation via a scope-enforced MCP bridge, supporting web, secrets, mobile, and LLM red-team scanning, with reporting and advisory.
    MIT

View all related MCP servers

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.

View all MCP Connectors

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/ZeeshanSultan/DefectDojo-MCP-Server'

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