FedRAMP Rules MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FedRAMP Rules MCP ServerWhat does rule FRC-CSO-FCP require?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
| BM25 full-text search across the whole corpus. Optional |
| Return the full markdown of one document by its repo-relative |
| Browse the corpus tree, optionally filtered to a section. |
| Retrieve a rule by ID ( |
| Look up a defined term by name, alias, or FRD ID ( |
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-mcpThen run the server over stdio with:
fedramp-rules-mcpOr 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-mcpPin 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-mcpClaude 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-mcpDevelopment
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 sourceUpdating 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.pydownloads the repo tarball and extracts every.mdfile intosrc/fedramp_rules_mcp/content/, writing_meta.jsonfor provenance.content.pyloads the corpus once, strips YAML frontmatter, and parses the two structured artifacts: the glossary indefinitions.md(FRD-*terms) and the??? abstract "<ID>"rule blocks throughout the corpus.search.pybuilds an in-memory Okapi BM25 index (no external services); the tokenizer preserves hyphenated IDs so rule-ID queries match.server.pywires 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 toolsfedramp_get_definitionARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_documentARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_ruleARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_documentsARead-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}]}
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
fedramp_searchARead-onlyIdempotent
Full-text search across the FedRAMP Consolidated Rules for 2026 corpus.
Ranks all bundled markdown documents (rules, definitions, control guidance,
agency/assessor/advisor guidance) by BM25 relevance to the query and returns
the best matches with a snippet and the document path. Use the returned
`path` with `fedramp_get_document` to read the full text, or use
`fedramp_get_rule` / `fedramp_get_definition` for a specific ID or term.
Args:
params (SearchInput):
- query (str): keywords or a rule ID to search for.
- section (Optional[str]): path-prefix filter (e.g. 'providers/20x').
- limit (int): max results, 1-30 (default 8).
- response_format (ResponseFormat): 'markdown' (default) or 'json'.
Returns:
str: Ranked results. JSON schema when response_format='json':
{
"query": str,
"count": int,
"results": [
{"path": str, "title": str, "section": str,
"score": float, "snippet": str}
]
}
Markdown otherwise. Returns a "No matches" message if nothing is found.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds details about BM25 ranking, output format, snippet generation, and the 'No matches' response, all consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with front-loaded purpose and usage, but slightly verbose with detailed args/returns. Could be trimmed slightly without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensively covers the search behavior, ranking, filtering, output formats, error handling, and links to sibling tools. Complete for a search tool with two output modes and multiple parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Though the schema has basic descriptions, the overall param description coverage is 0% for the top-level 'params' parameter. The description compensates by explaining each parameter's purpose, accepted formats (e.g., 'keywords or a rule ID'), and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool performs full-text search across the FedRAMP rules corpus, specifies the verb and resource, and distinguishes from siblings by mentioning follow-up tools like fedramp_get_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (initial search) and when to use alternatives (fedramp_get_rule, fedramp_get_document) for retrieving specific items, providing clear guidance on the workflow.
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.
5 tool updates
v0.1.0- First observed
fedramp_get_definition - First observed
fedramp_get_document - First observed
fedramp_get_rule - First observed
fedramp_list_documents - First observed
fedramp_search
TDQS
Scored across 5 tools
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.
All tools use the 'fedramp_verb_noun' pattern in snake_case (e.g., fedramp_get_definition, fedramp_list_documents). No deviations or mixed conventions.
Five tools cover the essential operations for a rules corpus (search, retrieve documents/rules/definitions, list documents). Well-scoped and not excessive.
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
Related MCP Connectors
EU compliance corpus across 8 frameworks (NIS2, DORA, AI Act, ISO 27001 + more) via MCP.
Guidance for answering vendor security questionnaires. Every result carries the page it came from.
Compliance frameworks (SOC 2, ISO 27001, CMMC, NIST, more) delivered to AI agents as MCP tools.
Cited, standards-aware compliance overlay for AI assistants (ISO, NIST, FedRAMP, IRAP), over MCP.
Related MCP Servers
- AlicenseBqualityFmaintenanceEnables querying and analysis of FedRAMP documentation, compliance requirements, and security controls through structured tools that search markdown guidance, analyze FRMR datasets, and track regulatory changes.2048 npm18MIT
- FlicenseAqualityDmaintenanceAn unofficial MCP server that exposes public FedRAMP 20x documentation as deterministic, citable lookup tools for AI assistants, with every response citing the exact upstream source.7-
- FlicenseNot gradedqualityDmaintenanceProvides search, detail lookup, and gap listing tools for a security control inventory, enabling natural language queries about control status and gaps.-

@aws/ftr-eval-mcpofficial
AlicenseNot gradedqualityAmaintenanceAutomates the AWS Foundational Technical Review (FTR) partner self-assessment by evaluating SOC 2 and WAFR reports against defined controls, returning structured PASS/FAIL decisions with reasoning.MIT No Attribution