Skip to main content
Glama

FedRAMP Rules MCP Server

An MCP server that answers questions about the FedRAMP Consolidated Rules for 2026. It bundles the official markdown corpus from fedramp/2026-markdown and exposes it to LLM agents through search and retrieval tools, so answers come from the authoritative source text — with citations to file paths and rule IDs.

The content is vendored at a pinned commit (see scripts/sync_content.py), so the server works offline, responds instantly, and gives stable, reproducible answers. Re-run the sync script to update.

Tools

Tool

Description

fedramp_search

BM25 full-text search across the whole corpus. Optional section prefix filter; returns ranked snippets with paths. Identical-content hits (the reference/ a/b/c/d tracks) are merged.

fedramp_get_document

Return the full markdown of one document by its repo-relative path.

fedramp_list_documents

Browse the corpus tree, optionally filtered to a section.

fedramp_get_rule

Retrieve a rule by ID (FRC-CSO-FCP, VDR-CSO-CVE, KSI-IAM-01, …) or a NIST control ID (AC-20, SI-4), with every location it appears. Case-insensitive.

fedramp_get_definition

Look up a defined term by name, alias, or FRD ID (FRD-SGC). Case-insensitive.

There is also a fedramp://source resource exposing the source repo, pinned commit, and sync timestamp for provenance.

Related MCP server: fedramp-docs-mcp

Install

Requires uv and Python 3.12+. The rules corpus is bundled in the package, so no clone or extra download is needed — install straight from GitHub:

uv tool install git+https://github.com/dan-fedramp/fedramp-rules-mcp

Then run the server over stdio with:

fedramp-rules-mcp

Or run it without installing (uv fetches, builds, and runs in one step):

uvx --from git+https://github.com/dan-fedramp/fedramp-rules-mcp fedramp-rules-mcp

Pin to a specific version by appending a ref, e.g. git+https://github.com/dan-fedramp/fedramp-rules-mcp@main.

Connecting a client

Claude Code

claude mcp add fedramp-rules -- uvx --from git+https://github.com/dan-fedramp/fedramp-rules-mcp fedramp-rules-mcp

Claude Desktop / other stdio clients

Add to the client's MCP server config (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "fedramp-rules": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/dan-fedramp/fedramp-rules-mcp",
        "fedramp-rules-mcp"
      ]
    }
  }
}

If you installed with uv tool install, you can instead set "command": "fedramp-rules-mcp" with no args.

MCP Inspector

npx @modelcontextprotocol/inspector uvx --from git+https://github.com/dan-fedramp/fedramp-rules-mcp fedramp-rules-mcp

Development

To work on the server from a local clone:

git clone https://github.com/dan-fedramp/fedramp-rules-mcp
cd fedramp-rules-mcp
uv sync                          # install dependencies
uv run python -m pytest -q       # run the smoke tests
uv run fedramp-rules-mcp         # run the server from source

Updating the bundled rules

# vendor a specific commit or branch, then commit the result
uv run python scripts/sync_content.py --ref <commit-sha-or-branch>

How it works

  • scripts/sync_content.py downloads the repo tarball and extracts every .md file into src/fedramp_rules_mcp/content/, writing _meta.json for provenance.

  • content.py loads the corpus once, strips YAML frontmatter, and parses the two structured artifacts: the glossary in definitions.md (FRD-* terms) and the ??? abstract "<ID>" rule blocks throughout the corpus.

  • search.py builds an in-memory Okapi BM25 index (no external services); the tokenizer preserves hyphenated IDs so rule-ID queries match.

  • server.py wires the five tools with Pydantic-validated inputs and markdown/JSON output.

Notes

This is an unofficial tool built on public FedRAMP content. It is not affiliated with or endorsed by FedRAMP or the GSA. Always confirm against the official source for authoritative guidance.

Available Tools

5 tools
fedramp_get_definitionA
Read-onlyIdempotent

Look up a FedRAMP defined term by name, alias, or FRD ID.

Definitions are authoritative: when a defined term appears in a rule, the
definition is part of that rule and must be followed precisely.

Args:
    params (GetDefinitionInput):
        - term (str): a term, alias, or FRD ID (e.g. 'Significant Change',
          'adaptive changes', 'FRD-SGC'). Case-insensitive.

Returns:
    str: The definition, its ID, aliases, and related-terms group. Returns an
    actionable error with suggestions if the term is not defined.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and description adds that it returns actionable error with suggestions if term not found, and case-insensitive matching. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise paragraphs with front-loaded purpose, followed by authoritative context and parameter/return details. Every sentence is necessary and informative without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple lookup tool with one parameter and an output schema present, the description fully covers input format, authoritative nature, return structure (definition, ID, aliases, related terms), and error handling. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has a clear description for the 'term' parameter (e.g., examples and case-insensitivity), so the tool description adds only marginal extra context (e.g., 'FRD ID', 'alias'). Schema description coverage is reported as 0% but property descriptions exist; assuming actual coverage is higher.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it looks up a FedRAMP defined term by name, alias, or FRD ID. It distinguishes from siblings like 'fedramp_get_document' (for documents) and 'fedramp_get_rule' (for rules) by focusing solely on definitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly notes that definitions are authoritative and part of the rule, giving context for when to use. Provides example inputs and explains return behavior, though does not explicitly list alternatives for when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fedramp_get_documentA
Read-onlyIdempotent

Return the full markdown of one FedRAMP corpus document by its path.

Use a `path` returned by `fedramp_search` or `fedramp_list_documents`.

Args:
    params (GetDocumentInput):
        - path (str): repo-relative markdown path, e.g.
          'agencies/rules/agency-use.md'.

Returns:
    str: The document's markdown (frontmatter stripped), prefixed with its
    title and path. Returns an actionable error if the path is unknown.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds that it returns markdown with frontmatter stripped and an actionable error for unknown paths, providing useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise and well-structured. The first sentence states the purpose, followed by usage guidance and parameter details. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately covers input, output format, and error handling. Given the presence of an output schema and clear annotations, the description is complete for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains the parameter path with type, format, and example in the Args section. The input schema also contains a description, so this adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns the full markdown of one FedRAMP document by its path. It distinguishes itself from sibling tools like fedramp_search and fedramp_list_documents by specifying the action and input.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: use a path from fedramp_search or fedramp_list_documents. Does not explicitly mention when not to use it, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fedramp_get_ruleA
Read-onlyIdempotent

Retrieve a rule (or NIST control) by its ID, with every place it appears.

FedRAMP rule IDs look like 'FRC-CSO-FCP', 'VDR-CSO-CVE', 'KSI-IAM-01'; NIST
control IDs look like 'AC-20' or 'SI-4'. The same rule ID often appears in
several documents (e.g. the provider view and the `reference/` rulesets); all
occurrences are returned so you can cite the right context.

Args:
    params (GetRuleInput):
        - rule_id (str): the rule or control ID (case-insensitive).

Returns:
    str: The rule text plus its locations. Markdown by default. Returns an
    actionable error, with close ID suggestions, if the ID is unknown.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by specifying that all occurrences are returned, the format is Markdown, and errors include close ID suggestions. This goes beyond the annotations, though it doesn't discuss other behaviors like rate limits or authentication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief but information-dense: a one-sentence purpose, followed by examples of ID formats, and clear return/error behavior. It is well-structured and front-loaded, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter), complete annotations, and the presence of an output schema, the description covers all essential aspects: what the tool does, ID formats, return content, and error handling. It is fully sufficient for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides a description for rule_id (including case-insensitivity and examples), and the tool description repeats similar info. With 100% schema coverage (the schema description is non-empty), the description adds marginal value beyond the schema, warranting a baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies 'Retrieve a rule (or NIST control) by its ID, with every place it appears.' It contrasts with sibling tools (e.g., fedramp_search) by focusing on retrieval by known ID and returning all occurrences, making its purpose distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use: when you have a known FedRAMP or NIST control ID and need all occurrences across documents. Examples of IDs are given, but it doesn't explicitly state when not to use (e.g., for searching unknown IDs) or mention alternatives like fedramp_search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fedramp_list_documentsA
Read-onlyIdempotent

List documents in the corpus, optionally filtered to a section prefix.

Useful for browsing the structure before drilling in. Sections include
'advisors', 'agencies', 'assessors', 'authority', 'providers', 'reference',
'responsibilities', plus top-level files (definitions.md, rules.md, ...).

Args:
    params (ListDocumentsInput):
        - section (Optional[str]): path-prefix filter (e.g. 'reference/controls').
        - response_format (ResponseFormat): 'markdown' (default) or 'json'.

Returns:
    str: List of {path, title}. JSON schema when response_format='json':
    {"section": str|null, "count": int,
     "documents": [{"path": str, "title": str}]}
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior. Description adds context on optional filtering and return format, which goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with a summary sentence, usage context, section list, and clear Args/Returns sections. Slightly verbose with the section list but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers input parameters and output format thoroughly. Lacks mention of pagination or limits, but for a browsing tool this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description explicitly explains both parameters (section and response_format) with types and defaults, compensating for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'List' and resource 'documents in the corpus', with optional filtering by section. Distinguishes from sibling tools that get specific documents or search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a hint on when to use ('browsing the structure before drilling in') and lists sections, but does not explicitly state when not to use or compare to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedfedramp_get_definition
    • First observedfedramp_get_document
    • First observedfedramp_get_rule
    • First observedfedramp_list_documents
    • First observedfedramp_search

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct operation: term definition lookup, full document retrieval, rule/control lookup, document listing, and full-text search. No overlap in functionality.

Naming Consistency5/5

All tools use the 'fedramp_verb_noun' pattern in snake_case (e.g., fedramp_get_definition, fedramp_list_documents). No deviations or mixed conventions.

Tool Count5/5

Five tools cover the essential operations for a rules corpus (search, retrieve documents/rules/definitions, list documents). Well-scoped and not excessive.

Completeness4/5

Covers CRUD-like operations for reading (get, list, search). Missing bulk listing of all rules or definitions, but list_documents and search can compensate. Minor gap.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers