Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
MCP server for DefectDojo: 24 tools with RBAC, HMAC audit chain, and SIEM forwarding
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
DEFECTDOJO_URL, DEFECTDOJO_API_KEY, DEFECTDOJO_READ_API_KEY, DEFECTDOJO_WRITE_API_KEY, MCP_AUTH_TOKEN, AUDIT_HMAC_KEY「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"defectdojo": {
"command": "uvx",
"args": [
"mcp-defectdojo"
],
"env": {
"DEFECTDOJO_URL": "your-value",
"DEFECTDOJO_API_KEY": "your-value",
"DEFECTDOJO_READ_API_KEY": "your-value",
"DEFECTDOJO_WRITE_API_KEY": "your-value",
"MCP_AUTH_TOKEN": "your-value",
"AUDIT_HMAC_KEY": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add defectdojo --env DEFECTDOJO_URL=your-value --env DEFECTDOJO_API_KEY=your-value --env DEFECTDOJO_READ_API_KEY=your-value --env DEFECTDOJO_WRITE_API_KEY=your-value --env MCP_AUTH_TOKEN=your-value --env AUDIT_HMAC_KEY=your-value -- uvx mcp-defectdojo動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"defectdojo": {
"command": "uvx",
"args": [
"mcp-defectdojo"
],
"env": {
"DEFECTDOJO_URL": "your-value",
"DEFECTDOJO_API_KEY": "your-value",
"DEFECTDOJO_READ_API_KEY": "your-value",
"DEFECTDOJO_WRITE_API_KEY": "your-value",
"MCP_AUTH_TOKEN": "your-value",
"AUDIT_HMAC_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"defectdojo": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-defectdojo"
],
"env": {
"DEFECTDOJO_URL": "your-value",
"DEFECTDOJO_API_KEY": "your-value",
"DEFECTDOJO_READ_API_KEY": "your-value",
"DEFECTDOJO_WRITE_API_KEY": "your-value",
"MCP_AUTH_TOKEN": "your-value",
"AUDIT_HMAC_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント inspicere で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:DEFECTDOJO_URL, DEFECTDOJO_API_KEY, DEFECTDOJO_READ_API_KEY, DEFECTDOJO_WRITE_API_KEY, MCP_AUTH_TOKEN, AUDIT_HMAC_KEY
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(3.3.2)がレジストリに届いたのは5 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, 御府和田玉 在售作品查询
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Live in-stock Hetian jade from Yufu, Shanghai: prices, monthly price guide, book a viewing.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
MCP server for DefectDojo vulnerability management. Exposes 24 tools for managing products, engagements, tests, findings, scan imports, and finding lifecycle through the Model Context Protocol.
[Getting Started Guide](https://github.com/inspicere/mcp-defectdojo/blob/main/docs/getting-started.md) — step-by-step setup, from install through connecting your first MCP client.
git clone https://github.com/inspicere/mcp-defectdojo.git && cd mcp-defectdojo
cp .env.example .env
uv sync --frozen uv run mcp-defectdojo
Requires Python 3.12+, uv, and a running DefectDojo instance.
All configuration is via environment variables. Copy env.example to .env for local development.
| Variable | Description |
|---|---|
DEFECTDOJO_URL | Base URL of the DefectDojo instance (must use https:// unless overridden) |
DEFECTDOJO_API_KEY | API key for DefectDojo (generate at DefectDojo > API v2 > Your API Key) |
For least-privilege access, use separate read/write keys instead of DEFECTDOJO_API_KEY:
| Variable | Description |
|---|---|
DEFECTDOJO_READ_API_KEY | Read-only API key (used for GET requests) |
DEFECTDOJO_WRITE_API_KEY | Write API key (used for POST/PATCH requests) |
Token-role bindings using MCP_ROLE_* env vars (preferred):
| Variable | Description |
|---|---|
MCP_ROLE_ | Format: : . Binds a bearer token to a role. Name becomes the caller ID. |
Four roles are available, each inheriting from the one below:
| Role | Permissions |
|---|---|
admin | All permissions including product_mgmt |
writer | engagement_mgmt, finding_mgmt, scan_mgmt, metadata_read, system |
scanner | scan_mgmt, metadata_read, system |
reader | metadata_read, system |
Example: MCP_ROLE_CI=tok_abc123:scanner grants the token scanner-level access.
Legacy variables (mapped to RBAC roles for backward compatibility):
| Variable | Maps to |
|---|---|
MCP_AUTH_TOKEN | admin role |
MCP_READ_TOKEN | reader role |
| Variable | Default | Description |
|---|---|---|
FASTMCP_TRANSPORT | stdio | Transport mode: stdio, sse, streamable-http, http |
FASTMCP_HOST | 0.0.0.0 | Bind address for network transports |
FASTMCP_PORT | 8000 | Port for network transports |
| Variable | Default | Description |
|---|---|---|
ALLOW_INSECURE_HTTP | false | Allow http:// URLs (TLS required by default) |
MUTATION_RATE_LIMIT | 60 | Max mutations per rate window per authenticated caller (per-token bucket) |
OPEN_ACCESS_MUTATION_RATE_LIMIT | 10 | Max mutations per rate window across all unauthenticated traffic (one shared bucket — applies only when REQUIRE_AUTH=false) |
MUTATION_RATE_WINDOW | 60 | Rate window in seconds (applies to both buckets) |
UNTRUSTED_CONTENT_WRAPPING | on | F-002 read-side wrapping kill-switch. When on (default), title, description, tags, notes, and note entry fields are returned inside {"value": , "_warning": "untrusted-content: ..."}. Set to off only for legacy downstream consumers that cannot parse the wrapped shape. |
DEFECTDOJO_DEFAULT_FOUND_BY_ID | 1 | Finding type ID used in create_finding payloads. The default 1 corresponds to "API Test" on stock DefectDojo installs; set to the ID for your "Manual" or "Pen Test" type if the default is missing or incorrect. Validated at startup — must be a positive integer. |
| Variable | Default | Description |
|---|---|---|
LOG_LEVEL | INFO | DEBUG, INFO, WARNING, ERROR, CRITICAL |
AUDIT_HMAC_KEY | *(ephemeral)* | HMAC key for audit log integrity chain. Required for cross-restart log verification. Generate with: python3 -c "import secrets; print(secrets.token_hex(32))" |
AUDIT_LOG_FILE | *(stderr only)* | Path for dedicated audit log file (JSON-lines, logrotate-compatible) |
| Variable | Default | Description |
|---|---|---|
AUDIT_LOG_SYSLOG | *(disabled)* | Syslog destination. Format: [transport://]host[:port]. Transports: tcp, udp, tcp+tls (default). |
AUDIT_LOG_SYSLOG_CA | *(system CAs)* | Custom CA certificate for syslog TLS verification |
AUDIT_LOG_HTTPS_URL | *(disabled)* | HTTPS endpoint for log forwarding (JSON array POST) |
AUDIT_LOG_HTTPS_TOKEN | *(none)* | Bearer token for HTTPS endpoint authentication |
AUDIT_LOG_HTTPS_BATCH_SIZE | 10 | Number of log records per HTTPS batch |
AUDIT_LOG_HTTPS_FLUSH_SECS | 5 | Seconds before flushing a partial batch |
AUDIT_LOG_HTTPS_CA | *(system CAs)* | Custom CA certificate path for HTTPS TLS verification — required when forwarding to a SIEM signed by an internal PKI (e.g. Caddy + Vault PKI). |
The HTTPS forwarder retries each batch once on transient failure with a short backoff and opens a 30-second circuit breaker after 3 consecutive failures, matching the syslog forwarder's behavior. Batch and circuit-open failures are emitted as structured audit_forward_failure events with forwarder: "https" for SIEM correlation.
These traps bite first-time deployments most often. Each one is a fail-CLOSED guard by design — the server refuses to start rather than running in a silently-degraded state.
AUDIT_HMAC_KEYSymptom: Container exits immediately with:
ValueError: AUDIT_HMAC_KEY not set on network transport 'streamable-http' —
set REQUIRE_AUDIT_HMAC_KEY=false to opt out (not recommended).
Cause: On sse, streamable-http, or http transports, the server requires a persistent HMAC key for the audit-log integrity chain. Without it, the chain can't survive a process restart — a regulatory-grade audit log shouldn't run in that mode by accident.
Fix (recommended): Generate and set a real key:
export AUDIT_HMAC_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))")
Store it in a secret manager (Vault, AWS Secrets Manager, etc.) so it persists across deploys.
Fix (escape hatch): If you've consciously accepted the ephemeral-key posture (e.g., short-lived dev container), set REQUIRE_AUDIT_HMAC_KEY=false. The server starts and logs a CRITICAL warning at boot.
Note for stdio users: This guard only fires on network transports. Local stdio (Claude Desktop / Claude Code) is unaffected.
Symptom: Server refuses to start on sse/streamable-http/http with a missing-auth error.
Cause: Network transports require at least one MCP_ROLE_ = : binding (or the legacy MCP_AUTH_TOKEN). Open access on the network is opt-in only.
Fix: Set at least one role token:
export MCP_ROLE_CI="$(openssl rand -hex 32):scanner"
Or, for development only, opt out with REQUIRE_AUTH=false (warning: any caller on the network can use the server).
If you combine REQUIRE_AUTH=false with the default FASTMCP_HOST=0.0.0.0, you have an open mutation API on the LAN. The server emits a distinct CRITICAL audit event when both conditions hold so a SIEM rule can alert on the compound case. For workstation development, set FASTMCP_HOST=127.0.0.1 to bind only to localhost.
Symptom: Server refuses to start with:
DEFECTDOJO_URL must use https:// (set ALLOW_INSECURE_HTTP=true to override)
Cause: TLS is enforced by default. Local dev DefectDojo instances often run on http://localhost:8080 without TLS.
Fix: For local development against a non-TLS DefectDojo, set ALLOW_INSECURE_HTTP=true. Never set this in production — use a reverse proxy (Caddy, nginx, Traefik) to terminate TLS in front of DefectDojo instead.
create_product returns 403 with a valid API keySymptom: Read tools work; create_product returns Permission denied (HTTP 403) from DefectDojo.
Cause: This isn't an MCP server bug — the DefectDojo API key inherits its user's role. Product creation requires admin-level access in DefectDojo itself. Most scanner-style service accounts can create engagements, tests, and findings but not products.
Fix: Either (a) use an admin API key for the MCP server, or (b) pre-create products in DefectDojo and let the MCP server manage everything below the product level. The dual-key mode (DEFECTDOJO_READ_API_KEY + DEFECTDOJO_WRITE_API_KEY) helps here: scope the write key narrowly and accept that create_product will fail-fast.
Symptom: First ~60 imports succeed, then subsequent calls return ToolError: rate limit exceeded — retry after Ns with a Retry-After hint.
Cause: The default mutation rate limit is 60 mutations per 60-second sliding window per authenticated token. Bulk operations exceed it quickly.
Fix: For legitimate bulk-import workflows, either (a) raise MUTATION_RATE_LIMIT to a value matched to your batch size, (b) raise MUTATION_RATE_WINDOW to a longer window, or (c) use the scanner role with import_scan/reimport_scan — scan imports bundle many findings into a single mutation. Don't disable the rate limiter outright; it's the only defense against runaway agent loops.
Symptom: A downstream client that previously consumed note["entry"] as a bare string now sees {"value": "...", "_warning": "untrusted-content: ..."} and fails.
Cause: Read-side wrapping is on by default (F-002 / prompt-injection defense). Affected fields: title, description, tags, finding-note entry.
Fix (preferred): Update the consumer to look at field["value"] and surface field["_warning"] to the operator. This is the secure path — the wrapper signals the LLM not to interpret the contents as instructions.
Fix (legacy escape): Set UNTRUSTED_CONTENT_WRAPPING=off to disable wrapping globally. Only use this if you have an independent untrusted-content boundary downstream.
MCP_AUTH_TOKEN after switching to RBACSymptom: A token that previously worked now returns Permission denied: requires on every mutation.
Cause: MCP_AUTH_TOKEN (the legacy single-token env var) maps to the admin role for backwards compatibility. As soon as you add any MCP_ROLE_ =... env var, the legacy token still works as admin, but its caller identity becomes admin-legacy rather than the friendly name you might expect in audit logs. If you intended the legacy token to be scanner, the role assignment doesn't apply.
Fix: Migrate fully to MCP_ROLE_ bindings. The legacy var is a compatibility shim, not a configuration mechanism.
If you hit a failure mode not covered here, the audit log will tell you why — every refused request emits a structured JSON line with the rejection reason. Look for event_type=audit and outcome=denied.
metadata_read)| Tool | Permission | Description |
|---|---|---|
health_check | system | Check connectivity to DefectDojo |
list_products | metadata_read | List products with pagination |
get_product | metadata_read | Get a single product by ID |
list_product_types | metadata_read | List product types (for use in create_product) |
list_engagements | metadata_read | List engagements for a product |
| `get_enga
冒頭だけを表示しています。続きはリポジトリで読めます