{
  "$schema": "https://readbeforerun.ai/schema/entry.schema.json",
  "entry": {
    "id": "example-vuln-mcp",
    "name": "Example Vuln MCP",
    "summary": "MCP server that looks up CVEs and ranks findings by exploitability for vulnerability prioritisation.",
    "draft": "demo",
    "type": "mcp-server",
    "mission": [
      "defensive"
    ],
    "task": [
      "vuln-prioritization"
    ],
    "domain": [
      "vulnerability-management"
    ],
    "runtime": [
      "mcp-generic",
      "claude-code"
    ],
    "tier": "tried",
    "last_checked": "2026-10-07",
    "next_check": "2027-04-05",
    "freshness": "fresh",
    "superseded": false,
    "in_my_kit": null,
    "advice": null,
    "code_shows": "Approval: unknown",
    "source": {
      "repo": "https://github.com/example/vuln-mcp",
      "subpath": null,
      "commit": "7c1e9a0b2d4f6e8a1c3b5d7f9e0a2c4b6d8f0e1a",
      "version": "1.3.0",
      "license": "MIT"
    },
    "install": {
      "skills_cli": null,
      "claude_code": null,
      "upstream": "npx -y @example/vuln-mcp@1.3.0",
      "bundled": false
    },
    "scan": {
      "status": "static-scanned",
      "results": [
        {
          "tool": "mcp-scanner",
          "version": "4.2.0",
          "date": "2026-10-02",
          "result": "warn"
        }
      ]
    },
    "reach": {
      "method": "reach-v0.1",
      "level": 1,
      "level_source": "static",
      "level_label": "scoped",
      "unknown_axes": 1,
      "verdict": "beyond-declared",
      "badge": "reach ≥1 · beyond declared (1)",
      "long": "reach ≥1 from code (scoped, 1 right unknown); lab: beyond declared on 1 of 6 rights: network",
      "declared": {},
      "static": {
        "level": 1,
        "fs": 0,
        "net": 1,
        "exec": 0,
        "cred": 1,
        "persist": 1,
        "hitl": null,
        "unknown": [
          "hitl"
        ]
      },
      "observed": {
        "level": 2,
        "fs": 0,
        "net": 2,
        "exec": 0,
        "cred": 1,
        "persist": 1,
        "hitl": null,
        "unknown": [
          "hitl"
        ],
        "run": "2026-10-03"
      },
      "surplus": {
        "axes": {
          "fs": 0,
          "net": 1,
          "exec": 0,
          "cred": 0,
          "persist": 0,
          "hitl": null
        },
        "count": 1,
        "beyond_static": [
          "net"
        ],
        "headline": "Beyond declared on 1 of 6 rights: network (undeclared host api.example.net, blocked). Nothing is declared, so each right is measured against its task scope."
      },
      "fit": "partial",
      "exports": {
        "aivss": {
          "fs": 0,
          "net": 0.5,
          "exec": 0,
          "cred": 0.5,
          "persist": 0.5,
          "hitl": null
        },
        "usf_risk_tier": "L1"
      }
    },
    "profile": {
      "read_at": "7c1e9a0b2d4f6e8a1c3b5d7f9e0a2c4b6d8f0e1a",
      "read_on": "2026-10-25",
      "overview": "An MCP server that looks up CVE details and ranks a list of findings by exploitability.",
      "purpose": [
        "Looks up CVE details for your findings.",
        "Ranks a list of findings by exploitability."
      ],
      "use_cases": [
        {
          "text": "Rank the findings of a scan export before a patch meeting",
          "task": "vuln-prioritization"
        }
      ],
      "maturity": "beta",
      "capabilities": [
        {
          "name": "lookup_cve",
          "effects": [
            "reads"
          ],
          "enabled": "default"
        },
        {
          "name": "rank_findings",
          "effects": [
            "reads"
          ],
          "enabled": "default"
        }
      ],
      "effects": [
        "reads"
      ],
      "runs": "local-process",
      "listens": [],
      "sends_to": [
        {
          "to": "Vulnerability data service",
          "kind": "vendor-api",
          "when": "always"
        },
        {
          "to": "stats.example.org",
          "kind": "telemetry",
          "when": "default"
        }
      ],
      "model": "client",
      "needs": [
        {
          "kind": "credentials",
          "text": "An API token for the vulnerability data service, as a file or environment variable."
        },
        {
          "kind": "runtime",
          "text": "Python 3.11 or later."
        }
      ]
    },
    "urls": {
      "page": "/catalog/example-vuln-mcp/",
      "json": "/entries/example-vuln-mcp.json",
      "md": "/catalog/example-vuln-mcp.md",
      "badge": "/badge/example-vuln-mcp.svg"
    }
  },
  "data": {
    "schema_version": "0.5",
    "slug": "example-vuln-mcp",
    "name": "Example Vuln MCP",
    "summary": "MCP server that looks up CVEs and ranks findings by exploitability for vulnerability prioritisation.",
    "draft": "demo",
    "in_my_kit": null,
    "type": "mcp-server",
    "mission": [
      "defensive"
    ],
    "task": [
      "vuln-prioritization"
    ],
    "domain": [
      "vulnerability-management"
    ],
    "phase": [
      "def:identify"
    ],
    "role": [
      "soc",
      "appsec"
    ],
    "runtime": [
      "mcp-generic",
      "claude-code"
    ],
    "auth": "api-key",
    "autonomy": null,
    "addresses": [],
    "frameworks": {
      "owasp_ast": [],
      "owasp_asi": [],
      "attack_tactic": [],
      "atlas": []
    },
    "source": {
      "repo": "https://github.com/example/vuln-mcp",
      "commit": "7c1e9a0b2d4f6e8a1c3b5d7f9e0a2c4b6d8f0e1a",
      "version": "1.3.0",
      "license": "MIT",
      "manifest": "server.json",
      "also_listed": {}
    },
    "upstream": {
      "checked_at": "2026-10-17",
      "updated_at": "2026-09-30",
      "current_release": "1.3.0",
      "archived": false,
      "stars": 98,
      "commit_history": {
        "2026-08": 4,
        "2026-09": 7,
        "2026-10": 0
      },
      "releases_since_pin": 0
    },
    "install": {
      "upstream": "npx -y @example/vuln-mcp@1.3.0",
      "upstream_evidence": "README.md#L31",
      "bundled": false
    },
    "scan": [
      {
        "tool": "mcp-scanner",
        "version": "4.2.0",
        "llm_judge": false,
        "date": "2026-10-02",
        "result": "warn",
        "label": "static-scanned"
      }
    ],
    "privileges": {
      "method": "reach-v0.1",
      "static": {
        "level": 1,
        "axes": {
          "fs": 0,
          "net": 1,
          "exec": 0,
          "cred": 1,
          "persist": 1,
          "hitl": null
        },
        "evidence": {
          "fs": "none found: patterns fs-v0.1 in 14 files at 7c1e9a0",
          "net": "src/client.ts#L14 fixed base URL https://api.example.com/v2 (the tool's target API)",
          "exec": "none found: patterns exec-v0.1 in 14 files at 7c1e9a0",
          "cred": "src/config.ts#L8 reads only VULN_API_TOKEN for the declared service",
          "persist": "src/cache.ts#L5 cache under ~/.cache/vuln-mcp",
          "hitl": "no evidence: approval depends on the MCP client, not on the server code"
        },
        "unknown": [
          "hitl"
        ]
      },
      "observed": {
        "level": 2,
        "axes": {
          "fs": 0,
          "net": 2,
          "exec": 0,
          "cred": 1,
          "persist": 1,
          "hitl": null
        },
        "unknown": [
          "hitl"
        ],
        "run": "runs/2026-10-03",
        "valid_for": {
          "commit": "7c1e9a0b2d4f6e8a1c3b5d7f9e0a2c4b6d8f0e1a",
          "version": "1.3.0"
        }
      },
      "surplus": {
        "axes": {
          "fs": 0,
          "net": 1,
          "exec": 0,
          "cred": 0,
          "persist": 0,
          "hitl": null
        },
        "count": 1,
        "beyond_static": [
          "net"
        ],
        "headline": "Beyond declared on 1 of 6 rights: network (undeclared host api.example.net, blocked). Nothing is declared, so each right is measured against its task scope."
      },
      "fit": "partial",
      "min_config": {
        "status": "tested",
        "claude_code": "sandbox.network.strictAllowlist: [api.example.com]",
        "docker": "allowHosts: [api.example.com]"
      },
      "override": null,
      "reviews": []
    },
    "status": {
      "tier": "tried",
      "last_checked": "2026-10-07",
      "next_check": "2027-04-05",
      "freshness": "fresh",
      "superseded": false,
      "superseded_by": null,
      "added": "2026-09-30",
      "added_by": "scout"
    },
    "evidence": {
      "label": "observation",
      "runs": [
        "runs/2026-10-03"
      ],
      "badge": "/badge/example-vuln-mcp.svg"
    },
    "changes": []
  },
  "profile": {
    "schema_version": "0.1",
    "entry": "example-vuln-mcp",
    "draft": "demo",
    "commit": "7c1e9a0b2d4f6e8a1c3b5d7f9e0a2c4b6d8f0e1a",
    "read_on": "2026-10-25",
    "check": {
      "date": "2026-10-25",
      "facts": 17,
      "confirmed": 17,
      "verified": 17
    },
    "overview": {
      "text": "An MCP server that looks up CVE details and ranks a list of findings by exploitability.",
      "ev": "README.md#L3 the author's description"
    },
    "maturity": {
      "word": "beta",
      "text": "The author calls the server a beta.",
      "ev": "README.md#L4 beta note"
    },
    "purpose": [
      {
        "text": "Looks up CVE details for your findings.",
        "ev": "README.md#L6 purpose"
      },
      {
        "text": "Ranks a list of findings by exploitability.",
        "ev": "README.md#L7 purpose"
      }
    ],
    "use_cases": [
      {
        "text": "Rank the findings of a scan export before a patch meeting",
        "task": "vuln-prioritization",
        "ev": "README.md#L20 example"
      }
    ],
    "not_for": [],
    "capabilities": {
      "coverage": "complete",
      "count": {
        "n": 2,
        "unit": "tools",
        "by": "author",
        "text": "The author lists two tools.",
        "ev": "README.md#L12 tool list"
      },
      "groups": [
        {
          "name": "lookup_cve",
          "does": "Fetches the details of one CVE from the vulnerability data service.",
          "effects": [
            "reads"
          ],
          "enabled": "default",
          "ev": "server.py#L40 tool registration"
        },
        {
          "name": "rank_findings",
          "does": "Sorts a list of findings by exploitability score.",
          "effects": [
            "reads"
          ],
          "enabled": "default",
          "ev": "server.py#L58 tool registration"
        }
      ]
    },
    "architecture": {
      "summary": {
        "text": "A Python MCP server that your MCP client starts over stdio; it calls the vulnerability data service with your token.",
        "ev": "README.md#L30 how it runs"
      },
      "runs": {
        "where": "local-process",
        "text": "Your MCP client starts it and talks to it over stdio.",
        "ev": "server.py#L90 stdio transport"
      },
      "modes": [],
      "parts": [
        {
          "name": "vuln-mcp server",
          "zone": "machine",
          "does": "Python process with the two tools.",
          "ev": "server.py#L12 server setup"
        },
        {
          "name": "MCP client configuration",
          "zone": "client",
          "does": "Starts the server and passes the token.",
          "ev": "README.md#L34 client configuration"
        }
      ],
      "listens": [],
      "connections": [
        {
          "to": "Vulnerability data service",
          "kind": "vendor-api",
          "when": "always",
          "what": "CVE identifiers and your API token.",
          "ev": "client.py#L22 API request"
        },
        {
          "to": "stats.example.org",
          "kind": "telemetry",
          "when": "default",
          "what": "Usage statistics; the README does not name this host.",
          "ev": "telemetry.py#L8 usage report"
        }
      ],
      "model": {
        "who": "client",
        "derived": "mcp-server"
      }
    },
    "needs": [
      {
        "kind": "credentials",
        "text": "An API token for the vulnerability data service, as a file or environment variable.",
        "ev": "README.md#L16 token setup"
      },
      {
        "kind": "runtime",
        "text": "Python 3.11 or later.",
        "ev": "pyproject.toml#L6 python requirement"
      }
    ],
    "installer": [],
    "limits": [
      {
        "text": "The server declares no rights: no MCP tool annotations, no network statement in the README.",
        "ev": "server.json#L1 no annotations"
      }
    ],
    "not_found": []
  },
  "verdict": null,
  "runs": [
    {
      "schema_version": "0.5",
      "run_id": "2026-10-03-example-vuln-mcp-01",
      "entry": "example-vuln-mcp",
      "draft": "demo",
      "label": "observation",
      "method_version": "0.1",
      "reach_method": "reach-v0.1",
      "published": "2026-10-07",
      "run_by": "Ilja Schlak",
      "disclaimer": "One run is an observation, not a benchmark. Observed reach holds for exactly this configuration.",
      "tool": {
        "name": "Example Vuln MCP",
        "commit": "7c1e9a0b2d4f6e8a1c3b5d7f9e0a2c4b6d8f0e1a",
        "version": "1.3.0",
        "install_source": "package",
        "declared_file": "declared.json"
      },
      "runtime": {
        "client": "claude-code",
        "client_version": "2.1.3xx (demo)",
        "permission_mode": "dontAsk",
        "allow_list": [],
        "sandbox": {
          "enabled": true,
          "strictAllowlist": true,
          "allowUnsandboxedCommands": false
        },
        "user": "agent (no sudo)"
      },
      "model": {
        "id": "claude-sonnet-demo-20260901",
        "dated": "2026-09-01",
        "route": "litellm-gateway",
        "virtual_key": "tool",
        "inference_region": "eu"
      },
      "target": {
        "name": "Lab CVE list (10 items)",
        "version": "demo-1",
        "ground_truth": "prioritised list prepared before the run",
        "contamination": "synthetic list; no capability claim"
      },
      "access_mode": "white-box",
      "task_given": "Rank the CVEs in findings.csv by exploitability and explain the top three.",
      "timebox_minutes": 30,
      "overnight": false,
      "phases": {
        "install": {
          "start": "2026-10-03T19:00:30Z",
          "end": "2026-10-03T19:02:10Z",
          "egress_hosts": [
            "registry.npmjs.org"
          ]
        },
        "run": {
          "start": "2026-10-03T19:08:00Z",
          "end": "2026-10-03T19:29:50Z",
          "egress_hosts": [
            "gateway.lab",
            "api.example.com"
          ]
        }
      },
      "duration_seconds": 1310,
      "budget_cap_usd": 10,
      "cost": {
        "cost_source": "measured",
        "total_cost": 1.12,
        "input_tokens": 204000,
        "output_tokens": 14800,
        "duration_seconds": 1310,
        "cost_per_hour": 3.08,
        "file": "cost.json"
      },
      "result": {
        "score": "7 of 10 ranked as in the lab ground truth (fictional)",
        "findings_reported": 2,
        "sample_validated": 2,
        "true_positives": 2,
        "false_positives": 0,
        "scope_violations": [],
        "file": "findings.jsonl"
      },
      "reach_observed": {
        "level": 2,
        "axes": {
          "fs": {
            "value": 0,
            "evidence": "none found: no writes outside result paths in fs-diff.json and no reads outside the working directory in host-events.jsonl"
          },
          "net": {
            "value": 2,
            "evidence": "egress.jsonl#L3 api.example.com contacted (the tool's target API, in the run allowlist); egress.jsonl#L4 api.example.net contacted (not declared, blocked)"
          },
          "exec": {
            "value": 0,
            "evidence": "none found: no execve besides the server process in host-events.jsonl"
          },
          "cred": {
            "value": 1,
            "evidence": "host-events.jsonl#L2 read of the passed API token only (secrets 1)"
          },
          "persist": {
            "value": 1,
            "evidence": "fs-diff.json#L3 ~/.cache/vuln-mcp/ survives the run (cache, persistence 1)"
          },
          "hitl": {
            "value": null,
            "evidence": "no evidence: hitl-events.jsonl is empty; the MCP client emitted no tool_decision events for this server"
          }
        },
        "unknown": [
          "hitl"
        ]
      },
      "surplus": {
        "axes": {
          "fs": 0,
          "net": 1,
          "exec": 0,
          "cred": 0,
          "persist": 0,
          "hitl": null
        },
        "count": 1,
        "beyond_static": [
          "net"
        ],
        "headline": "Beyond declared on 1 of 6 rights: network (undeclared host api.example.net, blocked). Nothing is declared, so each right is measured against its task scope."
      },
      "fit": "partial",
      "verdict": {
        "use_again": "with-limits",
        "one_sentence": "Useful ranking; the usage statistics to an undeclared host should be opt-in.",
        "limits": "Run it with an egress allowlist; approval events are not observable with this client."
      },
      "min_config_tested": {
        "claude_code": "sandbox.network.strictAllowlist: [api.example.com]",
        "docker": "allowHosts: [api.example.com]"
      },
      "incidents": {
        "realtime_alerts": 1,
        "blocked": "blocked.jsonl#L1 api.example.net:443 DROP",
        "aborted": false
      },
      "artifacts": {
        "manifest": "manifest.json",
        "declared": "declared.json",
        "cost": "cost.json",
        "egress": "egress.jsonl",
        "blocked": "blocked.jsonl",
        "fs_diff": "fs-diff.json",
        "host_events": "host-events.jsonl",
        "hitl_events": "hitl-events.jsonl",
        "findings": "findings.jsonl",
        "score": "score.json",
        "cast": {
          "file": "session.cast",
          "size_bytes": 891,
          "markers": [
            "00:06 first egress",
            "00:09 blocked host",
            "00:33 first finding"
          ]
        },
        "transcript": "session.txt",
        "extra": [],
        "secret_scan": {
          "redact": "canary values replaced by [CANARY-<axis>-n] before scanning",
          "gitleaks": "8.30.1 clean",
          "date": "2026-10-03"
        },
        "private": [
          "agent-trace.jsonl"
        ]
      },
      "interests": "Private project, privately funded. The author is employed by an IT consultancy; the company is neither client nor sponsor of this measurement and had no influence on selection, execution or result. No business relationship with the maintainers of the tested tool; no credits, licences or payments accepted from tested vendors. Deviations are stated in this field.",
      "right_of_reply": "dispute-process",
      "replications": []
    }
  ]
}
