Skip to main content
Glama
hackIDLE

FedRAMP Docs MCP Server

by hackIDLE

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)


MCP Security Scan

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

Quick Start Guide

Get running in under 5 minutes

Full Documentation

Complete guides and reference

MCP Client Setup

Configure Claude Desktop, Cursor, VS Code

Tools Reference

All 21 MCP tools with parameters

Troubleshooting

Common issues and solutions

Additional resources:

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

  1. Install dependencies:

npm install
  1. Build the project:

npm run build
  1. Run the server:

node dist/index.js

Global Installation

To install globally and use the fedramp-docs-mcp command:

npm install -g .
fedramp-docs-mcp

Note: 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-mcp

During 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

FEDRAMP_DOCS_PATH

~/.cache/fedramp-docs

Path to an existing FedRAMP/docs checkout.

FEDRAMP_DOCS_REMOTE

https://github.com/FedRAMP/docs

Remote used when cloning.

FEDRAMP_DOCS_BRANCH

main

Branch to checkout when cloning.

FEDRAMP_DOCS_ALLOW_AUTO_CLONE

true

Clone automatically when the path is missing.

FEDRAMP_DOCS_AUTO_UPDATE

true

Automatically check for and fetch repository updates.

FEDRAMP_DOCS_UPDATE_CHECK_HOURS

24

Hours between automatic update checks (when auto-update is enabled).

FEDRAMP_DOCS_INDEX_PERSIST

true

Persist the in-memory index under ~/.cache/fedramp-docs/index-v1.json.

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_repository tool to force an immediate update

  • Example 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

list_frmr_documents

Enumerate indexed FRMR JSON documents

get_frmr_document

Return full JSON and summary for a document

list_versions

Collate version metadata by FRMR document type

KSI (Key Security Indicators)

Tool

Description

list_ksi

Filter and inspect Key Security Indicators

get_ksi

Get a specific KSI item by ID

filter_by_impact

Filter KSI items by impact level (low/moderate/high)

get_theme_summary

Get comprehensive guidance for a KSI theme (IAM, CNA, etc.)

get_evidence_examples

Get automation-friendly evidence suggestions for KSI compliance (community suggestions, not official FedRAMP)

Control Mapping

Tool

Description

list_controls

Flatten FRMR → control mappings

get_control_requirements

Get all requirements mapped to a specific control

analyze_control_coverage

Report which control families have FedRAMP requirements

Search & Lookup

Tool

Description

search_markdown

Full-text search across documentation

read_markdown

Read specific markdown file contents

search_definitions

Search FedRAMP definitions (FRD) by term

get_requirement_by_id

Get any FRMR requirement by ID (KSI-, FRR-, FRD-*)

Analysis

Tool

Description

diff_frmr

Structured diff of two FRMR datasets

grep_controls_in_markdown

Locate control references in markdown

get_significant_change_guidance

Curated Significant Change references

System

Tool

Description

search_tools

Search and discover available tools by keyword or category

health_check

Confirm the server indexed successfully

update_repository

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 indicators

See 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_guidance

Advanced 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_guidance

When using deferred loading, keep these 5 tools always loaded:

Tool

Why Always Loaded

search_tools

Required for discovering other tools

search_markdown

Most common entry point for documentation queries

list_frmr_documents

Starting point for FRMR data exploration

health_check

Diagnostics and status verification

get_requirement_by_id

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.

# 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-docs

Method 2: Configuration File

Claude Code supports three configuration scopes:

  1. Project-scoped (recommended for teams): .mcp.json in project root

  2. User-scoped: ~/.claude/settings.local.json

  3. Project-local: .claude/settings.local.json in 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 /mcp command for interactive management

  • Use --mcp-debug flag for troubleshooting: claude --mcp-debug

  • Verify 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

  1. Open LM Studio and click the Program tab (terminal icon >_) in the right sidebar

  2. Click "Edit mcp.json" under the Install section

  3. Add the FedRAMP Docs configuration:

Config file location:

  • macOS/Linux: ~/.lmstudio/mcp.json

  • Windows: %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"
      }
    }
  }
}
  1. Save the file - LM Studio will automatically load the server

  2. Start chatting - Open a chat with any local model

  3. Test it - Ask: "List all FedRAMP FRMR documents"

  4. 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

  1. Create or edit your OpenCode configuration file:

Config file location:

  • Global: ~/.config/opencode/opencode.json

  • Project: opencode.json (in your project root)

  1. 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"
      }
    }
  }
}
  1. Restart OpenCode to load the MCP server

  2. 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:

goose configure

Then select:

  1. Add Extension

  2. Command-line Extension

  3. Enter the following details:

    • Name: FedRAMP Docs

    • Command: fedramp-docs-mcp

    • Timeout: 300

Method 2: Via Goose Desktop App

  1. Open Goose Desktop

  2. Click Extensions in the sidebar

  3. Click Add custom extension

  4. Fill in the form:

    • Extension Name: FedRAMP Docs

    • Type: STDIO

    • Command: fedramp-docs-mcp

    • Timeout: 300

    • Environment Variables: (optional)

      • FEDRAMP_DOCS_PATH: /path/to/FedRAMP/docs

      • FEDRAMP_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"            # optional

After 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

  1. Open Kiro MCP settings:

    • Global: ~/.kiro/settings/mcp.json

    • Project: .kiro/settings/mcp.json (takes precedence)

  2. 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"
      }
    }
  }
}
  1. Save the file - Kiro automatically loads MCP servers on config change

  2. 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-mcp

Open http://localhost:6274 to access the UI, then test tools like:

  • health_check - Verify the server is working

  • list_frmr_documents - See all indexed FedRAMP documents

  • list_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_check

Export 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-docs

That'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/plugin

Or add an alias to your shell profile:

alias claude-fedramp='claude --plugin-dir ~/.fedramp-docs-mcp/plugin'

Available Commands

Command

Description

/fedramp-docs:search <query>

Search FedRAMP documentation

/fedramp-docs:search-definitions <term>

Search FedRAMP definitions

/fedramp-docs:list-controls [family]

List NIST controls

/fedramp-docs:control-requirements <control>

Get requirements for a NIST control

/fedramp-docs:control-coverage

Analyze NIST control coverage

/fedramp-docs:list-ksi [filter]

List Key Security Indicators

/fedramp-docs:filter-impact <level>

Filter KSI by impact level

/fedramp-docs:theme-summary <theme>

Get theme guidance

/fedramp-docs:evidence-checklist [theme]

Get evidence checklist

/fedramp-docs:get-requirement <id>

Get requirement by ID

/fedramp-docs:list-documents

List all FRMR documents

/fedramp-docs:compare <doc1> <doc2>

Compare document versions

/fedramp-docs:health

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-mcp

Docker Compose

# Start with docker-compose (security hardening included)
docker compose up -d

Claude 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 ALL removes all Linux capabilities

  • No 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 dev

This runs the TypeScript source directly, automatically recompiling on changes.

Running Tests

The repository includes Vitest-based unit and contract tests with small fixtures:

npm test

Tests 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:integration

These 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 handlers

Fixtures 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 health_check

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.0

Error: 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_PATH to an existing local clone, or

  • Ensure 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 install

Required type packages:

  • @types/node

  • @types/fs-extra

  • @types/lunr

  • @types/glob

Available Tools

20 tools
analyze_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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
left_pathYes
right_pathYes
id_keyNo

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
impactYesFilter KSI items by impact level
limitNo
offsetNo

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
controlYesNIST control ID (e.g., AC-2, SC-13, IA-5)

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNoFilter by KSI theme (e.g., IAM, CNA, AFR)
idNoGet evidence for a specific KSI item ID
includeRetiredNoInclude retired KSIs in results (default: true for backwards compatibility)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
pathYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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-*).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRequirement ID (e.g., KSI-IAM-01, FRR-MAS-01, FRR-VDR-01)

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeYesKSI theme code

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
controlYes
with_enhancementsNo

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
familyNo
controlNo
sourceNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
textNo
categoryNo
statusNo
limitNo
offsetNo

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYesSearch term to find in definitions
limitNo

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo
offsetNo

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 8 tool updatesv1.0.0
    • Addedanalyze_control_coverage
    • Addedfilter_by_impact
    • Addedget_control_requirements
    • Addedget_evidence_examples
    • Addedget_requirement_by_id
    • Addedget_theme_summary
    • Changedlist_controls1 field changed
      • changedInput schema / properties / source / enum
        Previous value: -[
        -  "KSI",
        -  "MAS",
        -  "VDR",
        -  "SCN",
        -  "FRD",
        -  "ADS",
        -  "unknown"
        -]New value: +[
        +  "KSI",
        +  "MAS",
        +  "VDR",
        +  "SCN",
        +  "FRD",
        +  "ADS",
        +  "CCM",
        +  "FSI",
        +  "ICP",
        +  "PVA",
        +  "RSC",
        +  "UCM",
        +  "unknown"
        +]
    • Addedsearch_definitions
  2. 13 tool updates
    • First observeddiff_frmr
    • First observedget_frmr_document
    • First observedget_ksi
    • First observedget_significant_change_guidance
    • First observedgrep_controls_in_markdown
    • First observedhealth_check
    • First observedlist_controls
    • First observedlist_frmr_documents
    • First observedlist_ksi
    • First observedlist_versions
    • First observedread_markdown
    • First observedsearch_markdown
    • First observedupdate_repository

TDQS

B3.4/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 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.
    10
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides search, detail lookup, and gap listing tools for a security control inventory, enabling natural language queries about control status and gaps.
    -

Latest Blog Posts

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