FedRAMP Docs MCP Server
The FedRAMP Docs MCP Server provides structured, queryable access to FedRAMP compliance documentation through 20 specialized tools, enabling AI-powered analysis of Federal Risk and Authorization Management Program requirements.
Core Capabilities:
• Document Discovery & Access - List and retrieve 12 FRMR document types (KSI, MAS, VDR, SCN, FRD, ADS, CCM, FSI, ICP, PVA, RSC, UCM) with version tracking and structured diffing between versions
• Key Security Indicators (KSI) Analysis - Filter and inspect 72 KSI requirements by ID, impact level (low/moderate/high), category, or text; access comprehensive theme summaries for 11 themes (IAM, CNA, MLA, CMT, SVC, INR, RPL, TPR, AFR, PIY, CED) with related NIST controls
• Evidence Collection Support - Get community-suggested, automation-friendly evidence examples including API calls, CLI commands, and security tool integrations for KSI compliance
• NIST Control Mapping - Flatten FRMR→control mappings, find all FedRAMP requirements for specific NIST controls, analyze control family coverage, and search control references in documentation
• Documentation Search & Lookup - Full-text search across 62+ markdown files with Lunr indexing, read specific markdown contents, search FedRAMP definitions by term, and retrieve any requirement by ID
• Change Analysis - Compute structured diffs between document versions with per-item change detection and aggregate guidance on Significant Change notifications
• Repository Management - Auto-clones to ~/.cache/fedramp-docs, automatic updates every 24 hours (configurable), manual force updates, and health checks for indexing status
• AI Tool Integration - Compatible with Claude Desktop, Claude Code, LM Studio, OpenCode, Goose, and Kiro, offering slash commands, agent skills, and a specialized compliance analyst agent
• Deployment Options - Local development, global installation, or Docker containers with security hardening
Use Cases: Compliance analysis, control mapping, evidence planning, change tracking, documentation research, dashboard design, and authorization preparation.
Enables automatic cloning, updating, and management of the FedRAMP documentation repository for local analysis and querying
Provides access to the FedRAMP/docs repository for querying compliance documentation, FRMR datasets, and security guidance materials
Click on "Install 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 Docs MCP Serversearch for vulnerability detection requirements in the latest FRMR documents"
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 Docs MCP Server
⚠️ This project is sunsetting
This MCP server is no longer under active development. The FedRAMP search and FRMR parsing capabilities are being folded into GRC Clanker and myctrl.tools, where they live inside an actual GRC workflow instead of as a standalone subprocess.
The npm package and this repository remain available for existing users, but no new features will land here. For the reasoning and post-mortem, see the project writeup.
— Ethan (2026-04-15)
Disclaimer: This is an unofficial, community project and is not affiliated with, endorsed by, or associated with FedRAMP or the U.S. federal government. The author is not officially affiliated with FedRAMP. The FedRAMP name and any related marks are property of their respective owners.
Custom Model Context Protocol (MCP) server that makes the FedRAMP/docs repository queryable with FRMR-aware tooling. The server scans FRMR JSON datasets and supporting markdown guidance, exposes structured tools for analysis, and can optionally clone and cache the upstream repository for you.
Related MCP server: NIST MCP Server
Demo
See the FedRAMP Docs MCP Server in action with Claude Desktop:
https://github.com/user-attachments/assets/653c3956-0bfb-46c4-9e72-8a6d75e3a80d
Documentation
Resource | Description |
Get running in under 5 minutes | |
Complete guides and reference | |
Configure Claude Desktop, Cursor, VS Code | |
All 21 MCP tools with parameters | |
Common issues and solutions |
Additional resources:
Local Development - Build from source
Docker Setup - Container deployment
Security Hardening - Production configurations
Contributing - How to contribute
Prerequisites
Node.js 18 or higher
npm 8 or higher
Features
Auto-detects all 12 FRMR JSON document types and builds typed metadata.
Extracts KSI entries, flattened control mappings, and Significant Change references.
Fast markdown search via an inverted index backed by Lunr with snippets and line numbers.
Indexes 62+ markdown files from
tools/site/content/(Zensical static site content).Structured diffing between FRMR versions, including per-item change detection.
Health check, version listing, and curated Significant Change guidance aggregator.
Claude Plugin with slash commands, agent skills, and compliance analyst agent.
Docker support with security hardening following 2025 best practices.
Supported Document Types
Type | Full Name |
KSI | Key Security Indicators |
MAS | Minimum Assessment Scope |
VDR | Vulnerability Detection and Response |
SCN | Significant Change Notifications |
FRD | FedRAMP Definitions |
ADS | Authorization Data Sharing |
CCM | Collaborative Continuous Monitoring |
FSI | FedRAMP Security Inbox |
ICP | Incident Communications Procedures |
PVA | Persistent Validation and Assessment |
SCG | Secure Configuration Guide |
UCM | Using Cryptographic Modules |
Getting Started
Local Development
Install dependencies:
npm installBuild the project:
npm run buildRun the server:
node dist/index.jsGlobal Installation
To install globally and use the fedramp-docs-mcp command:
npm install -g .
fedramp-docs-mcpNote: Global installation is required if you want to use fedramp-docs-mcp as the command in MCP client configurations (Claude Desktop, Goose, etc.). Alternatively, you can use the full path to the built server: node /path/to/fedramp-docs-mcp/dist/index.js
CLI Commands
The package includes helpful CLI commands:
# Show help and usage information
npx fedramp-docs-mcp help
# Install Claude Code plugin
npx fedramp-docs-mcp setup
# Print MCP server configuration for Claude Desktop/Code
npx fedramp-docs-mcp mcp-config
# Start MCP server (used by MCP clients)
npx fedramp-docs-mcpDuring startup the server ensures a FedRAMP/docs repository is available, indexes FRMR JSON and markdown content, then begins serving requests on MCP stdio.
Configuration
Environment variables control repository discovery and indexing behaviour:
Variable | Default | Description |
|
| Path to an existing FedRAMP/docs checkout. |
|
| Remote used when cloning. |
|
| Branch to checkout when cloning. |
|
| Clone automatically when the path is missing. |
|
| Automatically check for and fetch repository updates. |
|
| Hours between automatic update checks (when auto-update is enabled). |
|
| Persist the in-memory index under |
Set FEDRAMP_DOCS_PATH if you maintain a local clone. Otherwise leave it unset and allow the server to create a shallow cached copy.
Keeping Data Up-to-Date
The server includes automatic update checking to keep the FedRAMP docs current:
Automatic Updates (Default Behavior):
Every 24 hours (configurable), the server checks if the cached repository needs updating
If updates are available, they're fetched automatically on server startup
This ensures you always have recent FedRAMP data without manual intervention
Manual Updates:
Use the
update_repositorytool to force an immediate updateExample query in Claude Desktop: "Update the FedRAMP docs repository"
Useful when you know new requirements or guidance has been published
Disabling Auto-Update:
{
"mcpServers": {
"fedramp-docs": {
"command": "fedramp-docs-mcp",
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "false"
}
}
}
}Custom Update Frequency (check every 6 hours):
{
"mcpServers": {
"fedramp-docs": {
"command": "fedramp-docs-mcp",
"env": {
"FEDRAMP_DOCS_UPDATE_CHECK_HOURS": "6"
}
}
}
}Available Tools
The server provides 21 tools organized into categories. All tools follow the error model and respond with JSON payloads.
Document Discovery
Tool | Description |
| Enumerate indexed FRMR JSON documents |
| Return full JSON and summary for a document |
| Collate version metadata by FRMR document type |
KSI (Key Security Indicators)
Tool | Description |
| Filter and inspect Key Security Indicators |
| Get a specific KSI item by ID |
| Filter KSI items by impact level (low/moderate/high) |
| Get comprehensive guidance for a KSI theme (IAM, CNA, etc.) |
| Get automation-friendly evidence suggestions for KSI compliance (community suggestions, not official FedRAMP) |
Control Mapping
Tool | Description |
| Flatten FRMR → control mappings |
| Get all requirements mapped to a specific control |
| Report which control families have FedRAMP requirements |
Search & Lookup
Tool | Description |
| Full-text search across documentation |
| Read specific markdown file contents |
| Search FedRAMP definitions (FRD) by term |
| Get any FRMR requirement by ID (KSI-, FRR-, FRD-*) |
Analysis
Tool | Description |
| Structured diff of two FRMR datasets |
| Locate control references in markdown |
| Curated Significant Change references |
System
Tool | Description |
| Search and discover available tools by keyword or category |
| Confirm the server indexed successfully |
| Force update the cached FedRAMP docs |
Evidence Collection Suggestions
The get_evidence_examples tool provides community-suggested evidence examples for each KSI. These are automation-friendly suggestions showing how to programmatically collect compliance evidence via APIs, CLI commands, and security tools.
Important: These are NOT official FedRAMP guidance. Always verify requirements with official FedRAMP documentation.
What's Included
For each of the 72 KSI indicators, we provide:
Evidence types: API calls, reports, scans, logs, configurations, documentation
Automation sources: AWS, Azure, GCP, Okta, Splunk, Terraform, GitHub Actions, etc.
Example commands: Ready-to-use CLI commands and API endpoints
Example Evidence Sources by Theme
Theme | Example Sources |
IAM | Okta/Entra MFA policies, AWS IAM credential reports, PAM tools (CyberArk, Vault) |
CNA | AWS Security Groups, VPC Flow Logs, Container scans (Trivy), CSPM (Wiz, Prisma) |
MLA | SIEM config (Splunk, Sentinel), CloudTrail, IaC scans (Checkov, tfsec) |
CMT | Git history, CI/CD pipelines (GitHub Actions), Change tickets (ServiceNow, Jira) |
SVC | TLS scans (SSL Labs), Secrets Manager rotation, Patch compliance (SSM) |
INR | PagerDuty incidents, Post-mortems (Blameless), ServiceNow tickets |
RPL | AWS Backup reports, DR test logs, Chaos engineering results |
TPR | Vendor ratings (SecurityScorecard), Dependency scans (Dependabot, Snyk) |
Usage Example
"What evidence do I need for KSI-IAM-01 (Phishing-Resistant MFA)?"
→ Returns suggested API calls, CLI commands, and artifacts to collect
"Get evidence checklist for the CNA theme"
→ Returns automation sources for all Cloud Native Architecture indicatorsSee src/tools/ for the precise schemas implemented with Zod. Each tool returns either a successful object or an error payload containing code, message, and optional hint.
Usage Examples
When using the MCP server with Claude Desktop or other MCP clients, here are some example queries:
Getting KSI Information:
"List all available FedRAMP documents"
→ Uses list_frmr_documents
"Show me all KSI items for moderate impact systems"
→ Uses filter_by_impact with impact='moderate'
"Give me a summary of the IAM theme requirements"
→ Uses get_theme_summary with theme='IAM'
"What evidence do I need for IAM compliance?"
→ Uses get_evidence_examples with theme='IAM'Searching Documentation:
"Search for information about continuous monitoring"
→ Uses search_markdown with query 'continuous monitoring'
"What does 'federal customer data' mean in FedRAMP?"
→ Uses search_definitions with term='federal customer data'
"Get the details for requirement KSI-IAM-01"
→ Uses get_requirement_by_id with id='KSI-IAM-01'Working with Controls:
"What FedRAMP requirements map to control AY-01?"
→ Uses get_control_requirements with control='AY-01'
"Which control families have the most FedRAMP coverage?"
→ Uses analyze_control_coverage
"Find all markdown files that reference AC-2"
→ Uses grep_controls_in_markdown with control='AC-2'Analyzing Changes:
"What's new in the latest KSI release?"
→ Uses list_versions then diff_frmr to compare versions
"Show significant change guidance"
→ Uses get_significant_change_guidanceAdvanced Queries: Dashboard & Architecture Insights
These prompts combine FedRAMP data with Claude's analytical capabilities to help you design compliance dashboards and features:
Dashboard Architecture:
"Using the FedRAMP KSI data, design a compliance dashboard architecture.
What components would I need? How should I structure the data for real-time monitoring?"
"Get all KSI themes and their indicators. Then recommend how to organize
them into a dashboard with drill-down navigation."Visualization Design:
"Analyze the FedRAMP control coverage data. What would be the best
chart types to visualize control family coverage? Suggest a color
scheme for compliance status."
"List the KSIs filtered by impact level. Design a risk heat map
visualization showing low/moderate/high impact requirements."Feature Planning:
"Get the evidence checklist from FedRAMP. How would you build a
feature that tracks evidence collection progress with percentage
completion per KSI theme?"
"What are the requirements for AC-2 (Account Management)? Design a
feature that helps users track their implementation status against
these requirements."Data Modeling:
"Analyze the structure of KSI indicators and their control mappings.
What database schema would you recommend for a compliance tracking app?"
"Get a theme summary for IAM. How would you model the relationship
between KSIs, NIST controls, and evidence in a graph database?"Executive Reporting:
"Using the control coverage analysis, design an executive summary
dashboard that shows compliance posture at a glance."
"Analyze all high-impact KSI requirements and create a prioritized
remediation roadmap template."Tool Search & Deferred Loading
With 21 tools, this MCP server is a great candidate for deferred tool loading (also known as tool search). Instead of loading all tools upfront, clients can load a small set of essential tools and discover the rest on demand via the search_tools tool.
The search_tools Tool
The search_tools tool lets clients discover available tools by keyword or category:
"What tools help with KSI compliance?"
→ search_tools(query="ksi compliance")
→ Returns: list_ksi, get_ksi, filter_by_impact, get_theme_summary, get_evidence_examples
"What analysis tools are available?"
→ search_tools(category="Analysis")
→ Returns: diff_frmr, grep_controls_in_markdown, get_significant_change_guidanceRecommended Non-Deferred Tools
When using deferred loading, keep these 5 tools always loaded:
Tool | Why Always Loaded |
| Required for discovering other tools |
| Most common entry point for documentation queries |
| Starting point for FRMR data exploration |
| Diagnostics and status verification |
| Universal ID lookup across all document types |
Claude API Configuration with Deferred Loading
When using the Claude API with mcp_toolset, you can configure deferred loading:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
mcp_servers=[
{
"type": "stdio",
"command": "fedramp-docs-mcp",
"name": "fedramp-docs",
}
],
messages=[{"role": "user", "content": "..."}],
)The Claude API will use tool annotations (readOnlyHint, destructiveHint, etc.) to make informed decisions about tool selection. All 21 tools include annotations.
MCP Client Configuration
The FedRAMP Docs MCP server works with any MCP-compatible client. Below are setup instructions for the most popular and reliable clients.
Recommended clients:
Claude Desktop - Most mature MCP integration, excellent tool discovery
Claude Code CLI - Official Anthropic CLI tool, great for terminal workflows
Cursor - AI-powered IDE with native MCP support
VS Code + GitHub Copilot - Native MCP support, no extensions required
Windsurf - AI-powered IDE with native MCP support
Codex (OpenAI) - Open-source coding agent with MCP support
Gemini CLI - Google's command-line AI agent with MCP support
LM Studio - Native MCP support, works with local models for privacy
OpenCode - Terminal-based coding agent with MCP support
Goose - Experimental support, may have tool discovery issues
Claude Desktop
Add the server to your Claude Desktop configuration file:
Location: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Option 1: Using npx (Recommended - no install required)
{
"mcpServers": {
"fedramp-docs": {
"command": "npx",
"args": ["fedramp-docs-mcp"],
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true"
}
}
}
}Option 2: Global installation
npm install -g fedramp-docs-mcp{
"mcpServers": {
"fedramp-docs": {
"command": "fedramp-docs-mcp",
"env": {
"FEDRAMP_DOCS_PATH": "/path/to/FedRAMP/docs"
}
}
}
}After updating the config, restart Claude Desktop. The FedRAMP Docs tools will appear in your conversations.
Claude Code CLI
Claude Code is Anthropic's official CLI tool with built-in MCP support.
Method 1: Using CLI (Recommended)
# Add the FedRAMP Docs MCP server
claude mcp add --transport stdio fedramp-docs fedramp-docs-mcp
# With full path
claude mcp add --transport stdio fedramp-docs /path/to/node/bin/fedramp-docs-mcp
# List configured servers
claude mcp list
# Remove if needed
claude mcp remove fedramp-docsMethod 2: Configuration File
Claude Code supports three configuration scopes:
Project-scoped (recommended for teams):
.mcp.jsonin project rootUser-scoped:
~/.claude/settings.local.jsonProject-local:
.claude/settings.local.jsonin project root
Example .mcp.json (project-scoped, can be version-controlled):
{
"mcpServers": {
"fedramp-docs": {
"command": "fedramp-docs-mcp",
"args": [],
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true"
}
}
}
}With environment variable expansion:
{
"mcpServers": {
"fedramp-docs": {
"command": "fedramp-docs-mcp",
"args": [],
"env": {
"FEDRAMP_DOCS_PATH": "${HOME}/fedramp-docs",
"FEDRAMP_DOCS_AUTO_UPDATE": "true"
}
}
}
}Testing:
Restart Claude Code after configuration changes
Use
/mcpcommand for interactive managementUse
--mcp-debugflag for troubleshooting:claude --mcp-debugVerify with:
claude mcp list
Note: Project-scoped configurations in .mcp.json enable team collaboration by ensuring all team members have access to the same MCP tools.
LM Studio
LM Studio (v0.3.17+) has native MCP support and works great with local models for privacy-focused workflows.
Setup Instructions
Open LM Studio and click the Program tab (terminal icon >_) in the right sidebar
Click "Edit mcp.json" under the Install section
Add the FedRAMP Docs configuration:
Config file location:
macOS/Linux:
~/.lmstudio/mcp.jsonWindows:
%USERPROFILE%\.lmstudio\mcp.json
Basic configuration:
{
"mcpServers": {
"fedramp-docs": {
"command": "fedramp-docs-mcp",
"args": [],
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true"
}
}
}
}Using full path (recommended if command not found):
{
"mcpServers": {
"fedramp-docs": {
"command": "/path/to/node/bin/fedramp-docs-mcp",
"args": [],
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true",
"FEDRAMP_DOCS_PATH": "/path/to/FedRAMP/docs"
}
}
}
}Save the file - LM Studio will automatically load the server
Start chatting - Open a chat with any local model
Test it - Ask: "List all FedRAMP FRMR documents"
Approve tool calls - LM Studio will show a confirmation dialog before executing each tool
Note: Requires global installation (npm install -g .) or use the full path to the executable. Find your path with: which fedramp-docs-mcp
OpenCode
OpenCode is a powerful AI coding agent built for the terminal with native MCP support.
Setup Instructions
Create or edit your OpenCode configuration file:
Config file location:
Global:
~/.config/opencode/opencode.jsonProject:
opencode.json(in your project root)
Add the FedRAMP Docs MCP server:
Basic configuration:
{
"mcp": {
"fedramp-docs": {
"type": "local",
"command": ["fedramp-docs-mcp"],
"enabled": true
}
}
}With full path:
{
"mcp": {
"fedramp-docs": {
"type": "local",
"command": ["/path/to/node/bin/fedramp-docs-mcp"],
"enabled": true
}
}
}With environment variables:
{
"mcp": {
"fedramp-docs": {
"type": "local",
"command": ["fedramp-docs-mcp"],
"enabled": true,
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true",
"FEDRAMP_DOCS_PATH": "/path/to/FedRAMP/docs"
}
}
}
}Restart OpenCode to load the MCP server
Test it - The FedRAMP tools will be automatically available alongside built-in tools
Note: MCP servers add to your context, so enable only the ones you need. Use "enabled": false to temporarily disable a server without removing it.
Goose
Goose is Block's open-source AI agent. You can add the FedRAMP Docs MCP server using any of these methods:
Method 1: Via Goose CLI (Recommended)
goose configureThen select:
Add ExtensionCommand-line ExtensionEnter the following details:
Name:
FedRAMP DocsCommand:
fedramp-docs-mcpTimeout:
300
Method 2: Via Goose Desktop App
Open Goose Desktop
Click Extensions in the sidebar
Click Add custom extension
Fill in the form:
Extension Name:
FedRAMP DocsType:
STDIOCommand:
fedramp-docs-mcpTimeout:
300Environment Variables: (optional)
FEDRAMP_DOCS_PATH:/path/to/FedRAMP/docsFEDRAMP_DOCS_AUTO_UPDATE:true
Method 3: Via Config File
Edit ~/.config/goose/config.yaml (Linux/macOS) or %USERPROFILE%\.config\goose\config.yaml (Windows):
extensions:
fedramp-docs:
name: FedRAMP Docs
cmd: fedramp-docs-mcp
enabled: true
type: stdio
timeout: 300
envs:
FEDRAMP_DOCS_PATH: "/path/to/FedRAMP/docs" # optional
FEDRAMP_DOCS_AUTO_UPDATE: "true" # optionalAfter configuration, restart Goose or reload extensions. You can test by asking: "What FedRAMP tools are available?"
Note: Goose's MCP support is still maturing and may have issues discovering tools from stdio servers. If you experience problems with tool discovery, consider using Claude Desktop, Claude Code CLI, LM Studio, or OpenCode instead.
Kiro
Kiro is AWS's spec-driven IDE with native MCP support.
Setup Instructions
Open Kiro MCP settings:
Global:
~/.kiro/settings/mcp.jsonProject:
.kiro/settings/mcp.json(takes precedence)
Add the FedRAMP Docs configuration:
{
"mcpServers": {
"fedramp-docs": {
"command": "npx",
"args": ["-y", "fedramp-docs-mcp"],
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true"
}
}
}
}With global installation:
{
"mcpServers": {
"fedramp-docs": {
"command": "fedramp-docs-mcp",
"args": [],
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true"
}
}
}
}Save the file - Kiro automatically loads MCP servers on config change
Test it - Ask Kiro: "List all FedRAMP FRMR documents"
Note: Requires global installation (npm install -g fedramp-docs-mcp) or use npx. Find your path with: which fedramp-docs-mcp
Cursor
Cursor supports MCP servers via project or global configuration.
Config file location: .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)
{
"mcpServers": {
"fedramp-docs": {
"command": "npx",
"args": ["-y", "fedramp-docs-mcp"],
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true"
}
}
}
}Restart Cursor after saving. You can also configure via Cursor Settings > MCP.
VS Code + GitHub Copilot
VS Code has native MCP support through GitHub Copilot (no extensions required).
Config file location: .vscode/mcp.json (workspace-scoped)
Note: VS Code uses servers (not mcpServers) and requires "type": "stdio".
{
"servers": {
"fedramp-docs": {
"type": "stdio",
"command": "npx",
"args": ["-y", "fedramp-docs-mcp"]
}
}
}After saving, Copilot will detect the new server automatically. Manage MCP servers from the Command Palette (Ctrl+Shift+P > "MCP: List Servers").
Windsurf
Windsurf is an AI-powered IDE with native MCP support.
Config file location: ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"fedramp-docs": {
"command": "npx",
"args": ["-y", "fedramp-docs-mcp"],
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true"
}
}
}
}Restart Windsurf after saving.
Codex (OpenAI)
Codex is OpenAI's open-source coding agent with MCP support via TOML configuration.
Config file location: ~/.codex/config.toml (global) or .codex/config.toml (project)
[mcp_servers.fedramp-docs]
command = "npx"
args = ["-y", "fedramp-docs-mcp"]
[mcp_servers.fedramp-docs.env]
FEDRAMP_DOCS_AUTO_UPDATE = "true"You can also manage MCP servers via codex mcp.
Gemini CLI
Gemini CLI is Google's command-line AI agent with MCP support.
Config file location: ~/.gemini/settings.json (global) or .gemini/settings.json (project)
{
"mcpServers": {
"fedramp-docs": {
"command": "npx",
"args": ["-y", "fedramp-docs-mcp"],
"env": {
"FEDRAMP_DOCS_AUTO_UPDATE": "true"
}
}
}
}Restart Gemini CLI after saving.
MCP Inspector (Debugging)
The MCP Inspector is an official tool for testing and debugging MCP servers. It provides a visual UI to interactively call tools and explore resources.
Requirements: Node.js 22.7.5 or later
Interactive UI:
# Start the inspector with fedramp-docs-mcp
npx @modelcontextprotocol/inspector node dist/index.js
# Or if installed globally
npx @modelcontextprotocol/inspector fedramp-docs-mcpOpen http://localhost:6274 to access the UI, then test tools like:
health_check- Verify the server is workinglist_frmr_documents- See all indexed FedRAMP documentslist_ksi- Browse Key Security Indicators
CLI Mode (Quick Testing):
# List all available tools
npx @modelcontextprotocol/inspector --cli node dist/index.js --method tools/list
# Call a specific tool
npx @modelcontextprotocol/inspector --cli node dist/index.js \
--method tools/call --tool-name health_checkExport Configuration: The Inspector UI includes buttons to copy server configurations for Claude Desktop, Cursor, and other MCP clients.
Claude Plugin
The repository includes a Claude Code plugin that provides slash commands, agent skills, and a specialized compliance analyst agent.
Quick Install
In Claude Code, run:
/plugin marketplace add hackIDLE/fedramp-docs-mcp
/plugin install fedramp-docsThat's it! The plugin is ready to use.
# One-command setup
npx fedramp-docs-mcp setup
# Then start Claude Code with the plugin
claude --plugin-dir ~/.fedramp-docs-mcp/pluginOr add an alias to your shell profile:
alias claude-fedramp='claude --plugin-dir ~/.fedramp-docs-mcp/plugin'Available Commands
Command | Description |
| Search FedRAMP documentation |
| Search FedRAMP definitions |
| List NIST controls |
| Get requirements for a NIST control |
| Analyze NIST control coverage |
| List Key Security Indicators |
| Filter KSI by impact level |
| Get theme guidance |
| Get evidence checklist |
| Get requirement by ID |
| List all FRMR documents |
| Compare document versions |
| Check MCP server status |
Agent Skills
frmr-analysis - Automatically invoked when analyzing FRMR documents or control mappings
control-mapping - Automatically invoked when mapping NIST controls to FedRAMP requirements
See plugin/README.md for full documentation.
Docker
Run the MCP server in a security-hardened Docker container.
Quick Start
# Build the image
docker build -t fedramp-docs-mcp .
# Run interactively (for MCP stdio)
docker run --rm -i \
--security-opt no-new-privileges:true \
--cap-drop ALL \
--read-only \
--memory 512m \
-v fedramp-cache:/home/mcpuser/.cache/fedramp-docs \
fedramp-docs-mcpDocker Compose
# Start with docker-compose (security hardening included)
docker compose up -dClaude Desktop with Docker
Configure Claude Desktop to use the Docker container:
{
"mcpServers": {
"fedramp-docs": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"--security-opt", "no-new-privileges:true",
"--cap-drop", "ALL",
"--read-only",
"--memory", "512m",
"-v", "fedramp-cache:/home/mcpuser/.cache/fedramp-docs",
"fedramp-docs-mcp:latest"
]
}
}
}Security Features
The Docker setup follows 2025 MCP security best practices:
Non-root user: Runs as
mcpuser(UID 1001)Read-only filesystem: Prevents unauthorized modifications
Dropped capabilities:
--cap-drop ALLremoves all Linux capabilitiesNo new privileges: Prevents privilege escalation
Resource limits: Memory and CPU constraints
Network isolation: Internal network with no external access by default
Development
Running in Development Mode
Use tsx for rapid iteration without building:
npm run devThis runs the TypeScript source directly, automatically recompiling on changes.
Running Tests
The repository includes Vitest-based unit and contract tests with small fixtures:
npm testTests set FEDRAMP_DOCS_PATH to tests/fixtures/repo, ensuring the indexer, search, and diff logic run deterministically without needing the real FedRAMP repo.
Integration tests validate the indexer against the real upstream FedRAMP/docs clone:
npm run test:integrationThese tests clone and index the actual upstream repository, verifying that the parser handles current upstream data correctly. Set FEDRAMP_DOCS_PATH to skip the clone and use an existing checkout. When using your own checkout, also set FEDRAMP_DOCS_AUTO_UPDATE=false to prevent the test from modifying it.
Code Structure
The codebase uses:
TypeScript 5.4+ with strict mode enabled
ES Modules (
"type": "module"in package.json)Node.js module resolution (
moduleResolution: "NodeNext")Zod for runtime schema validation
MCP SDK v1.24+ for server implementation
Project Structure
src/
index.ts # MCP bootstrap
repo.ts # repo discovery and cloning
indexer.ts # FRMR + markdown indexing logic
frmr.ts # FRMR-centric helpers
search.ts # markdown search + aggregations
diff.ts # structured FRMR diff engine
tools/ # individual MCP tool handlersFixtures live under tests/fixtures, while Vitest specs reside in tests/.
Version History
Tracks FedRAMP FRMR v0.9.2-beta documents. See CHANGELOG.md for full details.
Version | Date | Highlights |
v0.2.5 | 2026-02-15 | MCP client instructions for Codex, Cursor, Windsurf, VS Code + Copilot, Gemini CLI |
v0.2.4 | 2026-02-15 | Automated upstream sync workflow, integration test suite |
v0.2.3 | 2026-02-15 | MCP Security Scan CI with Cisco's MCP Scanner |
v0.2.1 | 2025-12-30 | Okta/Duo MFA evidence sources, enhanced |
v0.2.0 | 2025-12-28 | 7 new tools, Claude Code plugin, Docker support, 12 FRMR types |
v0.1.0 | 2025-10-10 | Initial release with 13 core MCP tools |
Troubleshooting
Build Errors
Error: Cannot find module '@modelcontextprotocol/sdk'
Ensure you have the correct SDK version installed:
npm install @modelcontextprotocol/sdk@^1.20.0Error: Module not found or import errors
The project uses ES modules with NodeNext resolution. Make sure you're using Node.js 18+ and that your TypeScript configuration matches:
{
"compilerOptions": {
"module": "NodeNext",
"moduleResolution": "NodeNext"
}
}Runtime Errors
Error: REPO_CLONE_FAILED
The server couldn't clone the FedRAMP docs repository. Check:
Network connectivity
Set
FEDRAMP_DOCS_PATHto an existing local clone, orEnsure
FEDRAMP_DOCS_ALLOW_AUTO_CLONE=true(default)
Server starts but no tools appear
Verify the build completed successfully:
npm run build
ls dist/ # Should contain index.js, tools/, etc.Development Issues
TypeScript errors about missing types
Install all development dependencies:
npm installRequired type packages:
@types/node@types/fs-extra@types/lunr@types/glob
Available Tools
20 toolsanalyze_control_coverageA
Analyze which NIST control families have FedRAMP requirements. Returns a coverage report showing which control families are addressed and how many controls/mappings exist for each.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns a coverage report with details on addressed control families and counts of controls/mappings, which is useful behavioral context. However, it lacks information on potential limitations, data sources, or performance characteristics (e.g., whether it's read-only, requires authentication, or has rate limits).
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 two sentences that are front-loaded with the core purpose and efficiently detail the return value. Every sentence adds value without redundancy, making it appropriately sized and easy to parse.
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 has 0 parameters, no annotations, and no output schema, the description provides sufficient context for a read-only analysis tool. It explains what the tool does and what it returns, though it could be more complete by specifying data sources or report format. The lack of output schema means the description must cover return values, which it does adequately.
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 has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately does not discuss parameters, focusing instead on the tool's purpose and output. This meets the baseline for tools with no parameters, as it avoids unnecessary details.
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 the specific action ('analyze which NIST control families have FedRAMP requirements') and the resource ('coverage report showing which control families are addressed and how many controls/mappings exist for each'). It distinguishes from siblings like 'list_controls' or 'get_control_requirements' by focusing on coverage analysis rather than listing or retrieving specific requirements.
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 implies usage when needing a coverage report of NIST control families with FedRAMP requirements, but does not explicitly state when to use this tool versus alternatives like 'get_control_requirements' or 'list_controls'. No exclusions or prerequisites are mentioned, leaving some ambiguity in context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_frmrC
Compute a structured diff between two FRMR documents by identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| left_path | Yes | ||
| right_path | Yes | ||
| id_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool computes a diff, implying a read-only comparison, but doesn't specify if it's destructive, requires authentication, has rate limits, or what the output format is. This leaves significant gaps in understanding the tool's behavior.
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 a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to grasp quickly.
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 complexity of a diff operation with 3 parameters, 0% schema coverage, no annotations, and no output schema, the description is incomplete. It lacks details on parameter meanings, behavioral traits, and output format, making it inadequate for full contextual understanding.
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 schema description coverage is 0%, so the description must compensate for three undocumented parameters. It mentions 'by identifier' which hints at 'id_key', but doesn't explain 'left_path' or 'right_path' (e.g., file paths or document IDs), nor does it clarify the diff structure. This adds minimal semantic 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 the action ('Compute a structured diff') and the resource ('between two FRMR documents by identifier'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'list_frmr_documents' or 'get_frmr_document', which might handle FRMR documents differently, so it misses full sibling distinction.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing existing FRMR documents, or compare to siblings like 'get_frmr_document' for retrieval, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_by_impactB
Filter Key Security Indicators (KSI) by impact level. Returns all KSI items that apply to the specified impact level (low, moderate, or high).
| Name | Required | Description | Default |
|---|---|---|---|
| impact | Yes | Filter KSI items by impact level | |
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool returns filtered items but lacks critical behavioral details: whether this is a read-only operation, if it requires authentication, rate limits, pagination behavior (implied by limit/offset but not explained), or error handling. The description is minimal and doesn't compensate for the absence of 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?
The description is concise and front-loaded: two sentences that directly state the purpose and result without unnecessary details. Every sentence earns its place by defining the action and outcome clearly.
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 no annotations and no output schema, the description is incomplete for a tool with 3 parameters. It doesn't explain return values, behavioral traits, or fully document parameters. For a filtering tool with pagination (limit/offset), more context on output format and usage is needed.
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?
Schema description coverage is 33% (only 'impact' has a description). The description adds some value by clarifying that 'impact' filters KSI items by level (low, moderate, high), but it doesn't explain the semantics of 'limit' or 'offset' parameters. With low schema coverage, the description partially compensates but leaves two parameters undocumented.
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 the tool's purpose: 'Filter Key Security Indicators (KSI) by impact level' with a specific verb ('filter') and resource ('KSI items'). It distinguishes from siblings like 'list_ksi' by specifying filtering by impact level rather than listing all. However, it doesn't explicitly contrast with other filtering tools if they exist.
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 implies usage context by stating 'Returns all KSI items that apply to the specified impact level', suggesting this tool is for retrieving filtered KSI data. However, it provides no explicit guidance on when to use this vs. alternatives like 'list_ksi' or 'get_ksi', nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_control_requirementsA
Get all FedRAMP requirements mapped to a specific NIST control. Returns KSI items and FRMR requirements that reference the control.
| Name | Required | Description | Default |
|---|---|---|---|
| control | Yes | NIST control ID (e.g., AC-2, SC-13, IA-5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it indicates this is a read operation ('Get'), it doesn't mention important behavioral aspects like whether it requires authentication, has rate limits, returns paginated results, or handles errors. The description provides basic function but lacks operational context needed for a tool with no annotation coverage.
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 perfectly concise with two sentences that each earn their place: the first states the core purpose, the second specifies the return types. There's zero waste, no redundant information, and it's front-loaded with the most important information first.
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 single-parameter read tool with no output schema, the description provides adequate basic information about what the tool does and returns. However, without annotations covering behavioral aspects and no output schema to describe return format, the description should ideally provide more operational context about authentication, error handling, or result structure to be truly complete.
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?
Schema description coverage is 100%, so the schema already fully documents the single 'control' parameter. The description adds marginal value by providing example values ('e.g., AC-2, SC-13, IA-5') which are helpful but essentially repeat what's in the schema. This meets the baseline for high schema coverage where the description doesn't need to compensate.
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 the specific action ('Get all FedRAMP requirements mapped to a specific NIST control') and distinguishes it from siblings by specifying the exact return types ('KSI items and FRMR requirements that reference the control'). It uses precise terminology that differentiates it from tools like 'get_ksi', 'get_frmr_document', or 'list_controls'.
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 implies usage context by mentioning what the tool returns (FedRAMP requirements mapped to NIST controls), but doesn't explicitly state when to use this tool versus alternatives like 'get_ksi', 'get_frmr_document', or 'analyze_control_coverage'. It provides some guidance through its specificity but lacks explicit comparison or exclusion statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evidence_examplesB
Get suggested evidence examples for KSI compliance. Returns automation-friendly evidence collection sources (APIs, CLI commands, artifacts) for each KSI. NOTE: These are community suggestions, not official FedRAMP guidance.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | Filter by KSI theme (e.g., IAM, CNA, AFR) | |
| id | No | Get evidence for a specific KSI item ID | |
| includeRetired | No | Include retired KSIs in results (default: true for backwards compatibility) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that the output includes 'automation-friendly evidence collection sources' and notes the community-sourced nature, but it lacks details on permissions, rate limits, pagination, or error handling. For a tool with no annotations, this leaves significant gaps in understanding its operational behavior.
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 concise and front-loaded, with two sentences that efficiently convey the tool's purpose and an important caveat. Every sentence adds value without redundancy, making it easy to parse quickly.
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 moderate complexity (3 parameters, no output schema, no annotations), the description is adequate but incomplete. It explains what the tool returns but lacks details on output format, error cases, or integration with sibling tools. Without annotations or output schema, more behavioral context would improve completeness.
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?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description does not add any parameter-specific semantics beyond what's in the schema, such as examples for 'theme' values or clarification on 'includeRetired'. This meets the baseline for high schema 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?
The description clearly states the tool's purpose: 'Get suggested evidence examples for KSI compliance' with specific details about what it returns ('automation-friendly evidence collection sources') and distinguishes it from official guidance. However, it doesn't explicitly differentiate from sibling tools like 'get_ksi' or 'list_ksi', which might also retrieve KSI-related information.
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 provides minimal usage guidance. It mentions that results are 'community suggestions, not official FedRAMP guidance,' which offers some context on reliability, but it doesn't specify when to use this tool versus alternatives like 'get_ksi' or 'list_ksi' for KSI-related queries, nor does it outline prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_frmr_documentA
Retrieve a FRMR document with metadata, raw JSON, and summary. Use this to get KSI categories (like KSI-IAM, KSI-CNA), MAS requirements, or other FRMR content. First use list_frmr_documents to find available documents, then use this tool with the path. For KSI, use path 'FRMR.KSI.key-security-indicators.json'.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It describes what the tool returns (metadata, raw JSON, summary) and mentions KSI categories and MAS requirements as examples of content. However, it doesn't disclose important behavioral aspects like error conditions, authentication requirements, rate limits, or response format details.
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 efficiently structured with three sentences that each add value: stating the tool's purpose, providing usage context, and giving a concrete example. There's no wasted text, and the most important information (what the tool does) comes first.
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 retrieval tool with 2 parameters, 0% schema coverage, and no output schema, the description does a good job explaining purpose and usage but lacks details about the return format, error handling, and authentication requirements. The absence of an output schema means the description should ideally explain what the response contains, which it only partially addresses.
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?
With 0% schema description coverage, the description compensates well by explaining the 'path' parameter's purpose and providing a concrete example ('FRMR.KSI.key-security-indicators.json'). It also mentions the 'type' parameter indirectly through the enum values (KSI, MAS, etc.) in the context of what content can be retrieved.
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 the verb 'retrieve' and resource 'FRMR document', specifying what content is returned (metadata, raw JSON, summary). It distinguishes from sibling tools like list_frmr_documents by indicating this is for retrieving specific documents rather than listing available ones.
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 provides explicit guidance on when to use this tool ('First use list_frmr_documents to find available documents, then use this tool with the path') and gives a specific example for KSI content. It clearly differentiates from the sibling list_frmr_documents tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ksiC
Retrieve a single KSI entry by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool retrieves data (implying read-only), but doesn't cover critical aspects like authentication needs, rate limits, error handling (e.g., what happens if ID doesn't exist), or response format. For a tool with zero annotation coverage, this is a significant gap in transparency.
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 a single, efficient sentence with zero wasted words. It front-loads the core purpose ('Retrieve a single KSI entry') and adds necessary qualification ('by id'). Every word earns its place, making it highly concise and well-structured.
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 (1 parameter, no output schema), the description is incomplete. It lacks context about what KSI entries are, their domain (likely compliance/controls based on sibling tools), error scenarios, and response structure. With no annotations and low schema coverage, the description doesn't provide enough information for reliable agent use.
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?
Schema description coverage is 0%, so the description must compensate. It mentions the 'id' parameter and specifies it's used to retrieve a single entry, adding some semantic context beyond the bare schema. However, it doesn't explain the ID format, constraints, or examples, leaving the parameter partially undocumented. This meets the baseline for minimal compensation.
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 the action ('Retrieve') and resource ('a single KSI entry'), making the purpose understandable. It distinguishes from sibling 'list_ksi' by specifying retrieval of a single entry by ID rather than listing multiple entries. However, it doesn't explain what 'KSI' stands for or the domain context, which slightly limits clarity.
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 provides no guidance on when to use this tool versus alternatives like 'list_ksi' or 'get_requirement_by_id'. It mentions retrieving by ID but doesn't specify prerequisites, error conditions, or typical use cases. This leaves the agent with insufficient context for optimal tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_requirement_by_idA
Get any FedRAMP requirement by its ID. Works with KSI indicators (KSI-), FRR requirements (FRR-), and FRD definitions (FRD-*).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Requirement ID (e.g., KSI-IAM-01, FRR-MAS-01, FRR-VDR-01) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the tool's scope (works with three ID types) but doesn't mention behavioral traits like error handling for invalid IDs, response format, or whether it's a read-only operation (implied by 'Get' but not explicit). It adds some context but lacks details on permissions, rate limits, or output structure.
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 two sentences, front-loaded with the core purpose and followed by specific details on ID formats. Every word earns its place with no redundancy or fluff, making it highly efficient and easy to parse.
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 low complexity (single parameter, no annotations, no output schema), the description is adequate but has gaps. It covers what the tool does and valid inputs, but without annotations or output schema, it should ideally mention that it's a read operation and hint at the return format (e.g., requirement details). It's minimally viable but could be more complete.
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?
Schema description coverage is 100%, so the schema already documents the single 'id' parameter with examples. The description adds value by specifying the semantic meaning of valid ID formats (KSI-*, FRR-*, FRD-*), which clarifies beyond the schema's generic examples. With 0 parameters beyond the single documented one, this exceeds the 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 states the verb 'Get' and the resource 'FedRAMP requirement by its ID', specifying it works with three distinct ID types (KSI indicators, FRR requirements, FRD definitions). This distinguishes it from siblings like get_ksi (which likely returns KSI data generally) or get_control_requirements (which might return requirements for controls).
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 provides clear context for when to use this tool: when you have a specific requirement ID from one of the three supported formats. It doesn't explicitly state when NOT to use it or name alternatives, but the specificity of ID-based retrieval implies it's not for listing or searching without IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_significant_change_guidanceC
Aggregate markdown sections and FRMR references related to Significant Change.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool aggregates content, implying a read-only operation, but doesn't cover critical aspects like whether it requires authentication, has rate limits, returns structured data, or handles errors. The description is minimal and lacks behavioral context beyond the basic action, making it inadequate for safe and effective use.
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 a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action ('Aggregate') and resource ('markdown sections and FRMR references'), making it easy to parse. There's no redundancy or fluff, earning its place as a concise definition.
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 complexity (aggregating content with one parameter), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what the output looks like (e.g., list, compiled text), how 'Significant Change' is defined, or any behavioral traits. For a tool that likely returns data, the absence of output details and minimal context makes it insufficient for reliable agent use.
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 has one parameter 'limit' with a default and range, but schema description coverage is 0%, meaning the schema provides no descriptive context. The description doesn't mention parameters at all, which is acceptable since there's only one parameter and the schema defines it clearly. However, it doesn't add any semantic meaning beyond the schema, such as explaining how 'limit' affects aggregation (e.g., number of results). Given 0% schema coverage and 0 parameters mentioned, the baseline is 4, as the description doesn't need to compensate heavily.
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 states the tool aggregates markdown sections and FRMR references related to Significant Change, which provides a basic purpose. However, it's somewhat vague about what 'aggregate' entails (e.g., list, compile, summarize) and doesn't clearly differentiate from siblings like 'search_markdown' or 'get_frmr_document', which might handle similar content. The verb 'aggregate' is specific but lacks detail on the output format or scope.
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?
No explicit guidance is provided on when to use this tool versus alternatives. It mentions 'Significant Change' as a topic, but doesn't specify contexts, prerequisites, or exclusions. Siblings like 'search_markdown' or 'get_frmr_document' might overlap, but the description offers no comparison or usage scenarios, leaving the agent to guess based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_theme_summaryA
Get comprehensive guidance for a KSI theme. Returns all indicators in the theme, impact breakdown, related NIST controls, and links to relevant documentation.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | Yes | KSI theme code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the tool's behavior by describing the return content (indicators, impact breakdown, etc.), which is helpful. However, it lacks details on potential limitations (e.g., data freshness, access permissions, error handling) or operational traits (e.g., response format, pagination). The description is informative but not comprehensive for behavioral transparency.
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 a single, well-structured sentence that front-loads the core action ('Get comprehensive guidance') and efficiently lists the return components. Every part earns its place by clarifying scope and output, with no redundant or vague language. It's appropriately sized for a tool with one parameter and clear functionality.
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 low complexity (one parameter, no output schema, no annotations), the description is largely complete. It explains the purpose, input context, and return content, which suffices for basic use. However, without an output schema, it could benefit from more detail on the return structure (e.g., format of 'impact breakdown'), but the provided information is adequate for the tool's scope.
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?
Schema description coverage is 100%, with the parameter 'theme' well-documented as a KSI theme code with an enum. The description adds value by contextualizing the parameter as the input for retrieving comprehensive guidance, implying it's the primary selector for the summary. Since there's only one parameter and the schema covers it fully, the description compensates adequately without needing to detail syntax or format.
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 the verb ('Get') and resource ('comprehensive guidance for a KSI theme'), specifying what the tool does. It distinguishes from siblings by focusing on theme-level summary rather than control-level analysis (e.g., get_control_requirements) or listing functions (e.g., list_ksi). The mention of specific return content (indicators, impact breakdown, NIST controls, documentation links) further clarifies its unique purpose.
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 implies usage when needing comprehensive theme guidance, but does not explicitly state when to use this tool versus alternatives like get_ksi (which might provide different KSI data) or get_control_requirements (which focuses on controls rather than themes). No exclusions or prerequisites are mentioned, leaving usage context somewhat open to interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grep_controls_in_markdownC
Search markdown files for occurrences of a control identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| control | Yes | ||
| with_enhancements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions searching but doesn't specify if this is a read-only operation, how results are returned (e.g., list of matches, counts), error handling, or performance considerations like rate limits. This leaves significant gaps for a tool with two parameters.
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 a single, direct sentence that efficiently conveys the core functionality without unnecessary words. It's front-loaded with the key action and resource, making it easy to parse quickly.
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 has 2 parameters with 0% schema coverage, no annotations, and no output schema, the description is incomplete. It doesn't explain return values, error cases, or the role of the boolean parameter, leaving the agent with insufficient information for reliable use.
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?
Schema description coverage is 0%, so the schema provides no parameter details. The description only implies the 'control' parameter is a search term, but doesn't explain its format or the meaning of 'with_enhancements' (e.g., what enhancements are). It adds minimal value beyond the schema, failing to compensate for the coverage gap.
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 the action ('Search') and target ('markdown files for occurrences of a control identifier'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'search_markdown' or 'search_definitions', which might have overlapping functionality, preventing a perfect score.
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 provides no guidance on when to use this tool versus alternatives like 'search_markdown' or 'search_definitions' from the sibling list. It lacks context on prerequisites, such as whether files need to be loaded first, or exclusions, leaving the agent to infer usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkB
Verify the index is ready and report status. Returns: indexed file count, repository path, FedRAMP docs commit hash and date, last update check time, and auto-update settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses what the tool returns (indexed file count, repository path, etc.), which is useful behavioral context. However, it doesn't mention error conditions, performance characteristics, or whether this is a read-only operation (though implied by 'verify' and 'report').
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 two sentences: one stating the purpose and one detailing the return values. It's appropriately sized and front-loaded with the core function. However, the second sentence is a bit dense with multiple return items listed, which slightly affects readability.
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 complexity (simple status check with 0 params), no annotations, and no output schema, the description is moderately complete. It explains what the tool does and what it returns, but lacks context on when to use it, error handling, or how it fits with siblings. For a zero-param tool, this is adequate but has 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 tool has 0 parameters, and schema description coverage is 100% (empty schema). The description doesn't need to add parameter semantics, so it meets the baseline of 4 for zero-parameter tools. No additional parameter information is required or provided.
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 the tool's purpose: 'Verify the index is ready and report status.' This is a specific verb ('verify' + 'report') with a clear resource ('the index'). However, it doesn't explicitly differentiate from sibling tools like 'update_repository' or 'list_versions' that might also relate to system status.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, timing (e.g., after updates), or how it differs from other status-related tools in the sibling list. The agent must infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_controlsC
Return flattened control mappings across FRMR sets.
| Name | Required | Description | Default |
|---|---|---|---|
| family | No | ||
| control | No | ||
| source | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'return' which implies a read operation, but doesn't specify whether this is a query, search, or list operation, nor does it describe output format, pagination, rate limits, or authentication requirements. For a tool with no annotations, this leaves significant behavioral gaps.
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 a single, efficient sentence that gets straight to the point without unnecessary words. It's appropriately sized for what it communicates, though what it communicates is limited. The structure is clear but could benefit from more detail given the tool's apparent complexity.
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 3 parameters with 0% schema coverage, no annotations, no output schema, and multiple sibling tools in the same domain, the description is insufficiently complete. It doesn't explain what 'FRMR sets' are, what 'flattened control mappings' look like, or how the parameters filter results. For a tool that appears to query a specialized compliance/control system, more context is needed.
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?
With 0% schema description coverage and 3 parameters (family, control, source), the description provides no information about what these parameters mean or how they affect the query. The schema shows 'source' has an enum with 13 values, but the description doesn't explain what these sources represent or how they relate to 'FRMR sets'. The description fails to compensate for the complete lack of schema documentation.
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 states the action ('Return') and target ('flattened control mappings across FRMR sets'), which gives a general purpose. However, it's somewhat vague about what 'flattened control mappings' means in practice and doesn't clearly distinguish this tool from siblings like 'get_control_requirements' or 'search_definitions' that might also retrieve control-related information.
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?
No guidance is provided on when to use this tool versus alternatives. With many sibling tools like 'get_control_requirements', 'search_definitions', and 'list_ksi', there's no indication of how this tool differs in context or when it's the appropriate choice. The description lacks any 'when-to-use' or 'when-not-to-use' information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_frmr_documentsA
List available FRMR JSON documents and metadata. This is usually the first tool to call to discover what FedRAMP data is available. Returns KSI (Key Security Indicators), MAS (Minimum Assessment Standard), VDR (Vulnerability Detection), SCN (Significant Change Notifications), FRD (Definitions), and ADS (Authorization Data Sharing) documents.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool's purpose and typical usage pattern but lacks details on behavioral traits like pagination, rate limits, authentication requirements, or error handling. The description is accurate but minimal on 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?
Two sentences with zero waste: first states purpose and typical usage, second specifies return types. Front-loaded with key information, appropriately sized for a simple listing tool.
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 zero-parameter listing tool with no output schema, the description provides sufficient context about what data is returned and when to use it. However, it could be more complete by mentioning format of returned metadata or any limitations, though not critical given the tool's simplicity.
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 has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately focuses on purpose and usage without redundant parameter details, meeting the baseline for zero-parameter tools.
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 the verb ('List') and resource ('FRMR JSON documents and metadata'), specifying the exact data types returned (KSI, MAS, VDR, SCN, FRD, ADS). It distinguishes from siblings like 'get_frmr_document' (retrieves specific document) and 'list_controls' (lists controls rather than documents).
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 states 'This is usually the first tool to call to discover what FedRAMP data is available,' providing clear when-to-use guidance. It positions this as a discovery tool, distinguishing it from analysis, filtering, or retrieval tools among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ksiB
List individual KSI requirement entries (like KSI-IAM-01, KSI-CNA-02) with optional filters. To see all KSI categories and their descriptions, use get_frmr_document with path 'FRMR.KSI.key-security-indicators.json' instead. This tool filters specific requirements within categories.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| text | No | ||
| category | No | ||
| status | No | ||
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions filtering capability and pagination-like parameters (limit/offset), but doesn't describe what the tool returns (e.g., format, structure), whether it's read-only or has side effects, authentication needs, rate limits, or error conditions. For a listing tool with 6 parameters, this leaves significant behavioral gaps.
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 appropriately concise with three sentences. The first sentence states the core purpose, the second provides alternative usage guidance, and the third adds clarifying context. Each sentence earns its place, though the structure could be slightly more front-loaded with parameter guidance.
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 6 parameters with 0% schema coverage, no annotations, and no output schema, the description is incomplete. It adequately explains the purpose and provides one usage alternative, but fails to address parameter meanings, return values, or behavioral aspects needed for a listing tool with multiple filtering options. The complexity warrants more comprehensive documentation.
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?
Schema description coverage is 0%, so the description must compensate. It mentions 'optional filters' and implies filtering by category, but doesn't explain any of the 6 parameters (id, text, category, status, limit, offset) beyond the generic mention. The description adds minimal value over the bare schema, failing to clarify what these parameters mean or how they work.
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 the tool's purpose: 'List individual KSI requirement entries' with examples like 'KSI-IAM-01, KSI-CNA-02' and mentions optional filtering. It specifies the resource (KSI requirement entries) and verb (list), but doesn't explicitly differentiate from all siblings beyond mentioning one alternative (get_frmr_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?
The description provides explicit guidance on when to use an alternative tool: 'To see all KSI categories and their descriptions, use get_frmr_document with path 'FRMR.KSI.key-security-indicators.json' instead.' This clearly distinguishes between listing specific requirements vs. viewing categories. However, it doesn't mention other potential alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_versionsB
List detected FRMR versions and associated metadata from documents.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'detected' versions and 'associated metadata', but doesn't disclose behavioral traits like whether this is a read-only operation, how results are formatted, if there are rate limits, or what 'detected' implies (e.g., from a scan vs. a database). This leaves significant gaps for a tool with no annotation coverage.
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 a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to understand at a glance.
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 has no parameters, no annotations, and no output schema, the description is minimal but covers the basic purpose. However, it lacks details on behavior, output format, and differentiation from siblings, which are important for completeness in this context with multiple similar tools.
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 tool has 0 parameters, and the input schema has 100% coverage (empty object). The description doesn't need to add parameter semantics, so a baseline of 4 is appropriate as it doesn't introduce confusion or redundancy.
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 the verb 'List' and the resource 'detected FRMR versions and associated metadata from documents', which is specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_frmr_documents' or 'list_controls', which would require a 5.
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 provides no guidance on when to use this tool versus alternatives. With multiple list-related siblings (e.g., list_frmr_documents, list_controls, list_ksi), there's no indication of context, prerequisites, or exclusions for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_markdownC
Read a markdown file and return its contents and digest.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It states the tool reads and returns content, but doesn't mention error handling (e.g., if the file doesn't exist), permissions needed, or what 'digest' entails (e.g., a summary or hash). This leaves significant gaps for a tool that interacts with files.
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 a single, efficient sentence that front-loads the core action and outcome with zero wasted words. It's appropriately sized for a simple read operation.
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 no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It doesn't explain the return format (what 'contents and digest' means), error conditions, or file access constraints, which are crucial for a file-reading tool in this context with multiple markdown-related siblings.
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 adds no parameter semantics beyond the input schema, which has 0% description coverage. However, with only one parameter ('path'), the baseline is 4, but it's reduced to 3 because the description doesn't clarify what 'path' represents (e.g., file path format, relative vs. absolute) or provide any context 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 the tool's purpose with a specific verb ('Read') and resource ('a markdown file'), and specifies what it returns ('contents and digest'). However, it doesn't differentiate from sibling tools like 'search_markdown' or 'grep_controls_in_markdown', which prevents a perfect score.
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 provides no guidance on when to use this tool versus alternatives. With sibling tools like 'search_markdown' and 'grep_controls_in_markdown' that might handle markdown files differently, there's no indication of when this specific read operation is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_definitionsB
Search FedRAMP definitions (FRD document) by term. Returns matching definitions with their full text and any alternate terms.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Search term to find in definitions | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return format ('matching definitions with their full text and any alternate terms'), which is helpful, but lacks details on permissions, rate limits, error handling, or pagination. For a search tool with zero annotation coverage, this is insufficient.
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 a single, well-structured sentence that efficiently conveys the tool's purpose and output. It's front-loaded with the core functionality and avoids unnecessary details, making it highly concise and easy to parse.
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 moderate complexity (2 parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and return format but lacks details on usage context, parameter behavior, and operational constraints. Without annotations or output schema, more completeness is needed for a higher score.
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?
Schema description coverage is 50% (only the 'term' parameter has a description). The description adds no additional parameter semantics beyond what's in the schema—it doesn't explain search behavior (e.g., exact match, partial match, case sensitivity) or the 'limit' parameter's effect. With moderate schema coverage, the baseline is 3, as the description doesn't compensate for gaps.
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 the tool's purpose: 'Search FedRAMP definitions (FRD document) by term.' It specifies the verb ('search'), resource ('FedRAMP definitions'), and scope ('FRD document'). However, it doesn't explicitly differentiate from sibling tools like 'search_markdown' or 'grep_controls_in_markdown', which limits it to a 4 rather than a 5.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'search_markdown' or 'grep_controls_in_markdown', nor does it specify prerequisites, exclusions, or contextual usage. This lack of comparative guidance results in a low score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_markdownA
Full-text search across FedRAMP markdown documentation and guidance. Use this to find information about policies, procedures, requirements, and guidance. Examples: 'continuous monitoring', 'incident response', 'significant change', 'authorization boundary'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes the tool's function but lacks details on behavioral traits such as rate limits, authentication requirements, error handling, or the format of search results. The mention of 'Full-text search' implies a read-only operation, but this is not explicitly stated.
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 concise and well-structured, with two sentences: the first states the purpose and usage, and the second provides examples. Every sentence adds value without redundancy, making it easy to understand quickly.
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 complexity (a search function with 3 parameters) and the lack of annotations and output schema, the description is incomplete. It covers the purpose and usage well but misses details on parameters, behavioral traits, and result format, which are essential for effective tool invocation.
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 schema description coverage is 0%, so the description must compensate for undocumented parameters. It does not mention any parameters explicitly, but the examples ('continuous monitoring', etc.) implicitly relate to the 'query' parameter. However, it provides no guidance on 'limit' or 'offset' parameters, leaving gaps in understanding their use.
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 the tool's purpose with a specific verb ('Full-text search') and resource ('FedRAMP markdown documentation and guidance'), and it distinguishes this from siblings by specifying the search domain. It provides concrete examples of search terms to illustrate its function.
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 explicitly states when to use this tool ('to find information about policies, procedures, requirements, and guidance') and provides examples of search queries. However, it does not mention when not to use it or name specific alternatives among the sibling tools, such as 'search_definitions' or 'grep_controls_in_markdown'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_repositoryA
Force update the cached FedRAMP docs repository to get the latest data. This fetches and resets to the latest version from GitHub. The server automatically checks for updates every 24 hours by default, but you can use this tool to update immediately. After updating, you may need to restart the MCP server or rebuild the index to see changes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining the tool's behavior: it's a forced update operation that fetches from GitHub, resets to latest version, and may require server restart or index rebuild. It doesn't mention error conditions or rate limits, but covers the main behavioral aspects adequately.
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 efficiently structured with three sentences that each add value: first states purpose, second explains timing context, third provides post-execution guidance. No wasted words or redundant information.
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 zero-parameter tool with no annotations or output schema, the description provides comprehensive context about what the tool does, when to use it, and post-execution considerations. It could mention potential side effects more explicitly, but covers the essential information well.
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 tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on the tool's behavior and usage context.
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 the specific action ('Force update'), target resource ('cached FedRAMP docs repository'), and purpose ('to get the latest data'). It distinguishes this tool from all sibling tools by focusing on repository maintenance rather than document analysis, filtering, or searching.
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 explicitly states when to use this tool ('to update immediately' instead of waiting for the automatic 24-hour check) and provides post-update guidance ('you may need to restart the MCP server or rebuild the index to see changes'). It clearly differentiates from the automatic background process.
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. Dates show when Glama detected each change.
8 tool updates
v1.0.0- Added
analyze_control_coverage - Added
filter_by_impact - Added
get_control_requirements - Added
get_evidence_examples - Added
get_requirement_by_id - Added
get_theme_summary - Changed
list_controls1 field changed- changed
Input schema / properties / source / enumPrevious value: -[ - "KSI", - "MAS", - "VDR", - "SCN", - "FRD", - "ADS", - "unknown" -]New value: +[ + "KSI", + "MAS", + "VDR", + "SCN", + "FRD", + "ADS", + "CCM", + "FSI", + "ICP", + "PVA", + "RSC", + "UCM", + "unknown" +]
- Added
search_definitions
13 tool updates
- First observed
diff_frmr - First observed
get_frmr_document - First observed
get_ksi - First observed
get_significant_change_guidance - First observed
grep_controls_in_markdown - First observed
health_check - First observed
list_controls - First observed
list_frmr_documents - First observed
list_ksi - First observed
list_versions - First observed
read_markdown - First observed
search_markdown - First observed
update_repository
TDQS
Most tools have clearly distinct purposes targeting specific FedRAMP resources like FRMR documents, KSI requirements, or markdown files. However, some overlap exists between get_frmr_document and list_ksi/list_frmr_documents for accessing KSI data, which could cause minor confusion. The descriptions help clarify the distinctions, but the boundaries aren't perfectly sharp.
Tool names follow a highly consistent verb_noun pattern throughout (e.g., analyze_control_coverage, get_control_requirements, list_frmr_documents). All tools use snake_case with clear, descriptive verbs like get, list, search, filter, and update, making the set predictable and readable.
With 20 tools, the count is slightly high but reasonable for the comprehensive FedRAMP documentation domain. It covers a wide range of operations from retrieval and listing to analysis and updates, though it might feel a bit heavy compared to more focused servers. Each tool appears to serve a specific purpose without obvious redundancy.
The tool set provides complete coverage for working with FedRAMP documentation, including CRUD-like operations (e.g., get, list, search, update), analysis tools (e.g., analyze_control_coverage, diff_frmr), and domain-specific features like filtering by impact and accessing guidance. There are no apparent gaps that would hinder an agent's ability to navigate and utilize the data effectively.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Compliance frameworks (SOC 2, ISO 27001, CMMC, NIST, more) delivered to AI agents as MCP tools.
1EU compliance corpus across 8 frameworks (NIS2, DORA, AI Act, ISO 27001 + more) via MCP.
Governance maturity assessment, compliance gap analysis, and evidence-linked briefs for AI agents.
Cited, standards-aware compliance overlay for AI assistants (ISO, NIST, FedRAMP, IRAP), over MCP.
Related MCP Servers
- FlicenseAqualityDmaintenanceProvides AI agents with access to a structured compliance dataset covering privacy and AI regulations across jurisdictions, enabling verifiable answers to regulatory questions via tools and resources.12-
- AlicenseNot gradedqualityDmaintenanceProvides comprehensive access to NIST cybersecurity frameworks and controls, enabling AI assistants and applications to query, analyze, and manage NIST security controls through a standardized interface.10MIT
- FlicenseNot gradedqualityDmaintenanceProvides search, detail lookup, and gap listing tools for a security control inventory, enabling natural language queries about control status and gaps.-
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to search and retrieve security, privacy, and AI-governance controls from multiple compliance frameworks (e.g., NIST, HIPAA, OWASP) with cross-references, providing authoritative cited control text.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hackIDLE/fedramp-docs-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server