osidb-mcp
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
osidb-mcp
Python Model Context Protocol (MCP) server for OSIDB, built on osidb-bindings. Use it from Cursor, Claude Desktop, or any MCP client over stdio. Forked from vdanen/osidb-mcp with added write/mutation tools.
Install
pip install -e .
# or
uv pip install -e .Related MCP server: Red Hat Lightspeed MCP
Configuration (environment)
Variable | Required | Description |
| yes | OSIDB root URL, e.g. |
| no |
|
| for | Basic auth for token obtain |
| no |
|
| no | Optional extra User-Agent suffix |
| no |
|
| no |
|
| no | Exploits tools are on by default only for |
| no | When set, registers AEGIS analysis tools. |
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.
Cursor / Claude MCP snippet
Using uvx (recommended — no pre-install required):
{
"mcpServers": {
"osidb": {
"command": "uvx",
"args": ["osidb-mcp"],
"env": {
"OSIDB_BASE_URL": "https://your-internal-osidb",
"OSIDB_AUTH": "kerberos",
"OSIDB_VERIFY_SSL": "true",
"OSIDB_MCP_ACCESS_MODE": "readonly"
}
}
}
}Or if osidb-mcp is already installed globally:
{
"mcpServers": {
"osidb": {
"command": "osidb-mcp",
"env": {
"OSIDB_BASE_URL": "https://your-internal-osidb",
"OSIDB_AUTH": "kerberos",
"OSIDB_VERIFY_SSL": "true",
"OSIDB_MCP_ACCESS_MODE": "readwrite",
"OSIDB_MCP_PROFILE": "lifecycle"
}
}
}
}Default is OSIDB_MCP_PROFILE=full with readonly. The snippet above is the token-saving write setup: fewer advertised tools, mutations still available.
Tools
All MCP tools require a working OSIDB session (env + Kerberos or basic auth). The table lists every registered tool, in the same order as server.py. For longer explanations, example prompts, and limitations, see TOOLS.md. If an LLM agent is calling these tools, read Using with AI agents first.
Read-only tools
Tool | Purpose |
| OSIDB API health / status payload (good connectivity check). |
| Current authenticated user / profile from |
| One flaw by CVE id or internal |
| High-level search: keyword and/or CVE ids, severity ( |
| Full flaw plus affects and trackers; |
| Executive rollups: counts by severity and by workflow plus total under shared filters ( |
| Raw list API: components, nested affects filters ( |
| Same filter surface as |
| Full-text search over flaws ( |
| Rows keyed by affect with |
| Tracker filings; scope by |
| Paginated discussion comments for a flaw id. |
| Paginated external references (URLs, advisory refs, etc.) for a flaw id. |
| Paginated CVSS score rows (issuer/version/vector) for a flaw id. |
| Paginated acknowledgments for a flaw id (CVE or |
| Paginated flaw collaborator labels for a flaw id. |
| Paginated package version rows for a flaw id. |
| Single affect by OSIDB uuid; optional field projection and |
| Single tracker filing by uuid; optional field projection / |
| Paginated global OSIDB labels ( |
| Paginated CVSS rows for one affect (by affect uuid); optional allowlisted |
| Paginated audit trail events ( |
| Single audit event by slug. |
| Flaws whose flaw-level components intersect |
| Affect rows by CVE ( |
| [EXPERIMENTAL] `GET /exploits/api/v1 |
limit (and analogous list limits) are capped at 100 per request unless noted otherwise on a tool.
Write tools (readwrite mode only)
These tools are only registered when OSIDB_MCP_ACCESS_MODE=readwrite.
Tool | Purpose |
Flaw CRUD | |
| Create a new flaw with optional sub-resources (acknowledgments, references, CVSS). Supports |
| Update fields on an existing flaw. Auto-fetches |
Affects | |
| Add one or more affects to a flaw. Auto-injects |
| Remove one or more affects by UUID. |
| Update fields on an existing affect (affectedness, resolution, justification). |
| Bulk-update multiple affects in one call. |
| Bulk-create affects in one API call. |
| Bulk-update affects in one API call. |
| Bulk-delete affects by UUID list. |
Trackers | |
| Create a single tracker for one or more affects. Use |
| Bulk-file trackers for a flaw (get suggestions, filter, file). Supports |
| Update tracker metadata. |
CVSS | |
| Add CVSS score(s) to a flaw. |
| Remove a CVSS score from a flaw. |
| Update a CVSS score on a flaw. |
| Add CVSS score(s) to an affect. |
| Update a CVSS score on an affect. |
| Delete a CVSS score from an affect. |
Labels (v2 API) | |
| Add a label to a flaw (v2 API). Supports |
| Update a label on a flaw (v2 API). Optional |
| Remove a label from a flaw (v2 API). |
Sub-resources | |
| Add acknowledgment(s) to a flaw. |
| Remove an acknowledgment. |
| Update an acknowledgment. |
| Add reference(s) to a flaw. |
| Remove a reference. |
| Update a reference. |
| Create a comment on a flaw. Supports internal Jira comments. |
| Create an incident request (MAJOR, MINOR, EXPLOITS_KEV). |
| Add package version info to a flaw. |
| Update a package version entry. |
| Delete a package version entry. |
All write tools return |
Workflow model (OSIDB >= 5.12)
Workflow state is auto-classified based on flaw data completeness. No manual promote/reject actions are needed.
Workflows: DEFAULT, MANUAL, EMBARGOED, REJECTED. MANUAL and EMBARGOED skip ANALYSIS.
State progression (DEFAULT): NEW -> TRIAGE -> ANALYSIS -> PRE_SECONDARY_ASSESSMENT -> SECONDARY_ASSESSMENT -> DONE
Each transition happens automatically when the flaw's data satisfies the state's requirements. Use workflow_get(flaw_id, verbose=True, next=True) to inspect requirements. Use history=true for classification change history.
To approve (reach DONE):
flaw_label_add(name='approved', label_type='workflow')To reject:
flaw_label_add(name='rejected', label_type='workflow')(auto-classifies intoREJECTED:DONE)
When to use which
Triage / natural language style:
search_flaws,get_flaw_details,get_cve_summary.Exact OpenAPI filters or rare query keys:
flaws_list/flaws_countwithextra_query(allowlisted keys only).Affect- or tracker-centric views:
affects_list,trackers_list, or the subresource tools under a known flaw id.
Flaw identifiers (CVE vs internal uuid)
OSIDB flaws always have an internal uuid. A cve_id may be missing until one is assigned — that is normal, not “no identifier.”
List/search responses include each flaw’s
uuidin JSON. Use thatuuidasflaw_idwhen there is no CVE.flaw_get/get_flaw_details: when there is no usable CVE string, the tool adds top-levelosidb_flaw_uuid(same value asflaw.uuid) so follow-up calls are obvious.get_flaw_details: ifcve_idis empty, affects and trackers are loaded usingflaw__uuid/affects__flaw__uuidautomatically.affects_list/query_affects: useflaw_uuid/flaw_uuid_into scope rows when there is no CVE.trackers_list: useaffects_flaw_uuid/affects_flaw_uuid_in.flaw_comments_list,flaw_references_list,flaw_cvss_scores_list,flaw_acknowledgments_list,flaw_labels_list,flaw_package_versions_list: theflaw_idargument is the same as forflaw_get— CVE string or internaluuid. If you useinclude_fieldsonflaw_get, includeuuidwhen you still need it downstream.
Analyst examples
Same idea as “search CVEs”: use
search_flawswithkeyword, or combinecve_ids,severity/severities,date_from/date_to, andproduct_modules/product_components.Critical open flaws touching
httpd:search_flawsorflaws_listwithimpact="CRITICAL",workflow_state_infor non-terminal states, andproduct_components=["httpd"]orcomponents_in/affects_ps_componentas your data model requires.Unowned important CVEs for a RHEL major:
search_flawswithowner_isempty=true,severities=["IMPORTANT"], andproduct_modules/product_componentsset to the exact PS strings your OSIDB uses for that major (confirm in your internal docs).Executive rollup:
get_cve_summarywith optional date range and product filters; tunegroup_byif you only need severity or only workflow buckets.
Using with AI agents
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.
Good default: A mid-tier model (e.g. Sonnet-class) is usually enough for reliable tool names, filters, and reading nested flaw / affect / tracker data.
Smaller / cheaper models: Reasonable for narrow tasks (one CVE, a known tool, counts only). Tight prompts help; ambiguous multi-step triage may need more retries or a larger model.
Largest models: Optional when the task is underspecified or you need unusually careful synthesis; for routine read-only chains they are often more than needed.
Saving tokens: Set
OSIDB_MCP_PROFILE=lifecycle(orcore) so Cursor does not inject unused tool names. Useinclude_fields/exclude_fieldswhere supported; preferflaws_countorget_cve_summaryover pulling many full list pages; keeplimitmodest; ask the agent to summarize instead of echoing entire tool payloads unless you are debugging.
Security
See SECURITY.md for the threat model, OWASP-oriented checklist, and access-mode behavior.
Outputs may include embargoed content; treat transcripts and logs according to your data classification policy (especially when using hosted LLMs).
Use two MCP entries (readonly vs readwrite) so mutations only happen when you intend them.
Never commit
OSIDB_PASSWORD; use IDE env or secret stores.
Development
uv venv .venv && source .venv/bin/activate
uv pip install -e ".[dev]"
python -m osidb_mcp
pytest tests
pip-auditWith Makefile: make dev (or make sync) installs dev dependencies with uv; make test, make audit, and make check run local checks. make install remains available for pip-based installs.
For PyPI Trusted Publishing setup and the shared make version VERSION=x.y.z / make brew release workflow, see RELEASING.md.
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. 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).
License
MIT — see LICENSE.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
ZEN SecDB MCP server for CVE intelligence, CVSS/EPSS scoring, advisories, SSVC, and package audits.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
An MCP server for search and retrieval over a local LanceDB database
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceFastMCP server that enables AI assistants to integrate with Red Hat Errata Tool, allowing access to product information and advisory details through authenticated API calls.-
- AlicenseBqualityBmaintenanceA lightweight, self-hosted MCP server that connects LLM-based agents to Red Hat Lightspeed services, enabling natural language querying of read-only (and optionally write) operations across Advisor, Image Builder, Inventory, Planning, Remediations, and Vulnerability services.5125Apache 2.0
- AlicenseAqualityDmaintenanceMCP server that connects Claude to Dependency-Track for natural language vulnerability triage, analysis, and management.14MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for querying live CISA KEV, EPSS, and enriched vulnerability feeds with full provenance. Enables natural-language access to auditable security-intelligence data from Claude Desktop and other MCP clients.MIT