Osidb Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Osidb Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Python Model Context Protocol (MCP) server for OSIDB, built on osidb-bindings from PyPI. Use it from Cursor, Claude Desktop, or any MCP client over stdio. PyPI: pypi.org/project/osidb-mcp · Homebrew: vdanen/osidb-mcp · Source: github.com/vdanen/osidb-mcp.
brew tap vdanen/osidb-mcp
brew install osidb-mcpAfter the tap is installed, upgrades use brew upgrade osidb-mcp.
Published on PyPI as osidb-mcp:
pipx install osidb-mcp
# or
pip install osidb-mcpPrint the installed package version (no OSIDB env or credentials required):
osidb-mcp --version
# or: osidb-mcp -V| Variable | Required | Description |
|---|---|---|
OSIDB_BASE_URL | yes | OSIDB root URL, e.g. https://osidb.example.com |
OSIDB_AUTH | no | kerberos (default) or basic |
OSIDB_USERNAME / OSIDB_PASSWORD | for basic | Basic auth for token obtain |
OSIDB_VERIFY_SSL | no | true (default) or false (prefer REQUESTS_CA_BUNDLE for custom CAs) |
OSIDB_USER_AGENT | no | Optional extra User-Agent suffix |
OSIDB_MCP_ACCESS_MODE | no | `readonly` only (default). `readwrite` is rejected at startup until mutation tools exist. |
Kerberos: the process must have a valid ticket (kinit) for the OSIDB HTTP service.
Optional keys forwarded by bindings: BUGZILLA_API_KEY, JIRA_ACCESS_TOKEN, JIRA_API_EMAIL.
{
"mcpServers": {
"osidb": {
"command": "osidb-mcp",
"env": {
"OSIDB_BASE_URL": "https://your-internal-osidb",
"OSIDB_AUTH": "kerberos",
"OSIDB_VERIFY_SSL": "true",
"OSIDB_MCP_ACCESS_MODE": "readonly"
}
}
}
}All MCP tools require a working OSIDB session (env + Kerberos or basic auth). The CLI `osidb-mcp --version` / `-V` does not contact OSIDB (see Install). The table lists every registered tool, in the same order as server.py. For longer explanations, example prompts, and limitations, see [TOOLS.md](TOOLS.md). If an LLM agent is calling these tools, read [Using with AI agents](#using-with-ai-agents) first.
| Tool | Purpose | ||
|---|---|---|---|
osidb_status | OSIDB API health / status payload (good connectivity check). | ||
osidb_whoami | Current authenticated user / profile from GET /osidb/whoami. | ||
flaw_get | One flaw by CVE id or internal `uuid`; optional include_fields / exclude_fields. Adds `osidb_flaw_uuid` at top level when there is no CVE yet. | ||
search_flaws | High-level search: keyword and/or CVE ids, severity (severity / severities), changed-date range (date_from / date_to), PS product_modules / product_components, workflow, embargo, owner; keyword-only uses OSIDB full-text search. | ||
get_flaw_details | Full flaw plus affects and trackers; flaw_id is CVE or `uuid`. If no CVE, nested lists use `flaw__uuid` / `affects__flaw__uuid`. | ||
get_cve_summary | Executive rollups: counts by severity and by workflow plus total under shared filters (group_by: severity \ | workflow \ | both); multiple flaws_count calls; see partial_errors if a bucket fails. |
flaws_list | Raw list API: components, nested affects filters (affects_ps_*), workflow, impact, owner, embargo, dates, search, allowlisted extra_query (OSIDB v2 query keys); limit ≤ 100. Success responses include `identifier_hint` (CVE vs uuid). | ||
flaws_count | Same filter surface as flaws_list but returns count only (no flaw bodies). | ||
flaws_search | Full-text search over flaws (search parameter); paginated like list APIs. Success responses include `identifier_hint`. | ||
affects_list | Rows keyed by affect with flaw__* filters; scope flaw by `flaw_cve_id` / `flaw_cve_id_in` or `flaw_uuid` / `flaw_uuid_in` when there is no CVE. | ||
trackers_list | Tracker filings; scope by `affects_flaw_cve_id` (or _in) or `affects_flaw_uuid` (or _in) when there is no CVE; optional PS filters and tracker_type. | ||
flaw_comments_list | Paginated discussion comments for a flaw id. | ||
flaw_references_list | Paginated external references (URLs, advisory refs, etc.) for a flaw id. | ||
flaw_cvss_scores_list | Paginated CVSS score rows (issuer/version/vector) for a flaw id. | ||
flaw_acknowledgments_list | Paginated acknowledgments for a flaw id (CVE or uuid). | ||
flaw_labels_list | Paginated flaw collaborator labels for a flaw id. | ||
flaw_package_versions_list | Paginated package version rows for a flaw id. | ||
affect_get | Single affect by OSIDB uuid; optional field projection and include_history. | ||
tracker_get | Single tracker filing by uuid; optional field projection / include_meta_attr. | ||
labels_list | Paginated global OSIDB labels (GET /labels); optional allowlisted extra_query. | ||
affect_cvss_scores_list | Paginated CVSS rows for one affect (by affect uuid); optional allowlisted extra_query. | ||
search_component | Flaws whose flaw-level components intersect components_in (v2 flaws list); optional impact/workflow/date filters. | ||
query_affects | Affect rows by CVE (flaw_cve_id / flaw_cve_id_in) and/or flaw UUID (flaw_uuid / flaw_uuid_in); wrapper over affects_list. | ||
get_pending_exploit_actions | [EXPERIMENTAL] `GET /exploits/api/v1 | v2/report/pending` — pending exploit / IR actions; may 404 if exploits app is off. |
limit (and analogous list limits) are capped at 100 per request unless noted otherwise on a tool.
search_flaws, get_flaw_details, get_cve_summary.flaws_list / flaws_count with extra_query (allowlisted keys only).affects_list, trackers_list, or the subresource tools under a known flaw id.uuid)OSIDB flaws always have an internal `uuid`. A `cve_id` may be missing until one is assigned — that is normal, not “no identifier.”
flaw.uuid) so follow-up calls are obvious.cve_id is empty, affects and trackers are loaded using `flaw__uuid` / `affects__flaw__uuid` automatically.flaw_id argument is the same as for `flaw_get` — CVE string or internal `uuid`. If you use `include_fields` on `flaw_get`, include `uuid` when you still need it downstream.keyword, or combine cve_ids, severity / severities, date_from / date_to, and product_modules / product_components.search_flaws or flaws_list with impact="CRITICAL", workflow_state_in for non-terminal states, and product_components=["httpd"] or components_in / affects_ps_component as your data model requires.search_flaws with owner_isempty=true, severities=["IMPORTANT"], and product_modules / product_components set to the exact PS strings your OSIDB uses for that major (confirm in your internal docs).group_by if you only need severity or only workflow buckets.These tools return structured JSON (sometimes large). The MCP host (Cursor, Claude Desktop, API client) chooses the LLM — this server cannot select or downgrade a model for you.
See [SECURITY.md](SECURITY.md) for the threat model, OWASP-oriented checklist, and access-mode behavior.
OSIDB_PASSWORD; use IDE env or secret stores.uv venv .venv && source .venv/bin/activate
uv pip install -e ".[dev]"
python -m osidb_mcp
pytest tests
pip-auditWith Makefile: make install, make test, make audit, or make check (CI-equivalent). make build / make upload for releases (upload requires twine credentials).
Live integration tests: make livetest runs live_tests/ with `pytest -vv -s` (verbose + uncaptured stderr) when OSIDB_LIVE_TEST=1 and normal OSIDB_* credentials are set. Default assertions use `CVE-2014-0160`; optional *`OSIDB_LIVE_MIN_** env vars enforce minimum totals for your instance. Setup, count output, and .gitignore patterns for secrets are documented in **[live_tests/README.md](live_tests/README.md)**. Default **make test** / **pytest** only run **tests/`** (offline).
On Debian/Ubuntu (including local containers), install `libkrb5-dev` before pip install so the `gssapi` dependency can find krb5-config (Kerberos stack used with osidb-bindings).
MIT — see LICENSE.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.