stig-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STIG_MCP_DATA | No | Override the data directory where the knowledge base is stored. The default differs between a source checkout and an installed copy. | |
| STIG_MCP_OVERRIDES | No | Override the path to the mapping overrides YAML file. The default differs between a source checkout and an installed copy. If set, the file must exist or ingestion refuses to run. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| mitigations_for_techniqueA | Return 800-53r5 controls and the DISA STIG findings that mitigate an ATT&CK technique. The answer opens with summary: rules found, rules per CAT, control_counts (how many controls map and how many have rules), cat_i (the CAT I V- ids with their count) and controls_with_rules. Use those counts rather than counting lists yourself. Then each control lists the rule ids of its findings, and findings lists each finding once. Findings carry no check or fix text: call finding_details with their rule ids or V- ids for DISA's exact steps. severity narrows findings to CAT levels, e.g. ["I"]. A technique id ATT&CK has revoked (e.g. T1562) is answered for its replacement, and the response reports the redirect in technique.redirected_from. Include the product build in system_description where one exists (e.g. 'ESXi 8.0 U3'): some products ship two STIG versions with different remediations, and the build selects the one that applies. stig_ids narrows to benchmarks you already know and accepts at most 200; to scope a system you cannot name, pass system_description instead and let the resolver do it. If the knowledge base is not built yet this returns {"status": "not_ready"} with the commands to run, rather than an error. |
| techniques_for_actorA | List an ATT&CK actor's techniques, optionally expanded with mitigations for given systems. actor is an ATT&CK group id, name or alias; case, spacing, punctuation and a trailing "Group" or "Team" are ignored, and actor.matched_as then names what matched. actor.also_matches, when present, lists other groups the same label loosely names. A misspelling is not corrected: the error names the closest groups, so call again with the group id of the one meant. The answer opens with summary, which counts the techniques; with include_mitigations it adds the same counts mitigations_for_technique gives, across every technique. Use those counts rather than counting lists yourself. controls lists each control once with its rule ids, and findings lists each finding once, without check or fix text (call finding_details for those). Each technique lists its control ids grouped by where the mapping came from ("ctid" or "override"). stig_ids accepts at most 200; it and severity (CAT levels, e.g. ["I"]) are validated always but only take effect with include_mitigations. To scope a system you cannot name, pass system_description instead. If the knowledge base is not built yet this returns {"status": "not_ready"} with the commands to run, rather than an error. |
| finding_detailsA | Return DISA's check and fix text for STIG findings, with each finding's benchmark, release and CCIs. ids takes up to 50 rule ids (SV-...r..._rule) or V- ids as listed under findings in a mitigations_for_technique or techniques_for_actor answer, in any case. Prefer the V- id: a rule id carries its release's revision and matches only that release. A V- id that two benchmarks or majors share returns every match, each labeled with its benchmark. not_found lists ids that matched nothing; if none match, the call is refused with an error instead. Quote check_text and fix_text as DISA wrote them, and label anything you add, such as commands or explanations, as your own rather than DISA's. If the knowledge base is not built yet this returns {"status": "not_ready"} with the commands to run, rather than an error. |
| resolve_systemA | Resolve a free-text system description to candidate DISA STIG(s). Returns 'candidates' and 'notes'. limit caps the number of distinct benchmarks returned, not rows: a benchmark holding more than one STIG major (for example vSphere 8.0) contributes every major as its own row, so a caller asking for limit=5 may receive more than 5 rows. Include the product build where one exists (e.g. 'ESXi 8.0 U3'); each candidate reports whether it applies to that build in the 'applicable' field. When the description names a product version this knowledge base does not hold, a note in 'notes' says so and names the versions it does hold. A description naming more than one system is split on 'and' and commas and each part judged separately, so it can carry one such note per part, each quoting the part it is about. When more benchmarks tie with the last benchmark shown than limit allows, a note in 'notes' says how many and suggests calling again with a higher limit. If the knowledge base is not built yet this returns {"status": "not_ready"} with the commands to run, rather than an error. |
| search_techniquesA | Search ATT&CK techniques by name or id. Ids and names ATT&CK has revoked also match, returning the replacement technique with redirected_from set to the old id. If the knowledge base is not built yet this returns {"status": "not_ready"} with the commands to run, rather than an error. |
| list_stigsA | List the STIGs in the knowledge base, optionally filtered by a substring of the title, the benchmark id (e.g. RHEL_9_STIG), or the product keywords. If the knowledge base is not built yet this returns {"status": "not_ready"} with the commands to run, rather than an error. |
| install_knowledge_baseA | Install the prebuilt knowledge base this server answers from. With no arguments, download the newest release for this server from this project's GitHub releases (github.com/jeneric/STIG-MCP), verify its SHA-256 and install it; this downloads and verifies about 5 MB and can take several seconds. It is the only tool besides check_sources that uses the network. release pins an exact kb-YYYY-MM-DD tag, for rollback. On a host without network access, pass path (a .sqlite.xz or .sqlite copied from a release) and sha256 (the value its SHA256SUMS lists); nothing is then requested. Call this when another tool returns {"status": "not_ready"}, or when check_sources reports "install". |
| check_sourcesA | Check whether a newer prebuilt knowledge base is published than the one installed. This contacts only this project's GitHub releases (github.com/jeneric/STIG-MCP). action is "install" (call install_knowledge_base), "upgrade_package" (a newer knowledge base needs a newer stig-mcp; upgrade_to says which), "build_locally" (nothing usable is installed and no release exists for this stig-mcp; build with stig-mcp-fetch and stig-mcp-ingest), or "none"; reason says why. It works even when the knowledge base is not built, and then not_ready says why and what to run. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Tools are largely distinct: search_techniques finds ATT&CK techniques, mitigations_for_technique maps a technique, techniques_for_actor maps an actor, and finding_details fetches check/fix text. Minor overlap exists between mitigations_for_technique and techniques_for_actor with include_mitigations, and resolve_system vs list_stigs both surface STIGs, but the descriptions differentiate them well.
All names use snake_case, but the set mixes verb_noun names (search_techniques, resolve_system, list_stigs, install_knowledge_base, check_sources) with noun_phrase names (mitigations_for_technique, techniques_for_actor, finding_details). The pattern is readable but not a single predictable convention.
Eight tools is well within the 3-15 range and each has a clear role: discovery, mapping, detail retrieval, system resolution, STIG listing, and knowledge-base lifecycle. No tool feels redundant or missing from a count perspective.
The surface covers the primary workflow: find technique or actor, get mapped controls/findings, then fetch DISA check/fix text, plus STIG discovery and KB install/check. Some reverse-lookup or bulk-finding operations are absent, such as control-to-technique lookup or all findings for a STIG, but agents can work around these via existing mapping and detail tools.