Skip to main content
Glama
ethanolivertroy

FedRAMP Docs MCP Server

analyze_control_coverage

Analyzes NIST control families to identify FedRAMP compliance coverage, generating reports on addressed controls and mapping counts.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The async execute function implementing the tool's core logic: fetches control mappings, groups by NIST control family (e.g., 'AC'), computes per-family and total coverage statistics (controls, mappings, sources), and returns structured report.
    execute: async () => {
      const mappings = getControlMappings();
    
      // Group by control family (first 2 characters, e.g., AC, SC, IA)
      const familyMap = new Map<
        string,
        { controls: Set<string>; mappings: number; sources: Set<string> }
      >();
    
      for (const mapping of mappings) {
        const family = mapping.control.split("-")[0];
        if (!familyMap.has(family)) {
          familyMap.set(family, {
            controls: new Set(),
            mappings: 0,
            sources: new Set(),
          });
        }
        const entry = familyMap.get(family)!;
        entry.controls.add(mapping.control);
        entry.mappings++;
        entry.sources.add(mapping.source);
      }
    
      const families: FamilyCoverage[] = [...familyMap.entries()]
        .map(([family, data]) => ({
          family,
          controlCount: data.controls.size,
          mappingCount: data.mappings,
          controls: [...data.controls].sort(),
          sources: [...data.sources].sort(),
        }))
        .sort((a, b) => b.mappingCount - a.mappingCount);
    
      const totalControls = new Set(mappings.map((m) => m.control)).size;
    
      return {
        totalFamilies: families.length,
        totalControls,
        totalMappings: mappings.length,
        families,
      };
    },
  • Defines FamilyCoverage interface for output, empty Zod input schema (z.object({})), and ToolDefinition type with input/output shapes.
    interface FamilyCoverage {
      family: string;
      controlCount: number;
      mappingCount: number;
      controls: string[];
      sources: string[];
    }
    
    const schema = z.object({});
    
    export const analyzeControlCoverageTool: ToolDefinition<
      typeof schema,
      {
        totalFamilies: number;
        totalControls: number;
        totalMappings: number;
        families: FamilyCoverage[];
      }
    > = {
  • Registers analyzeControlCoverageTool (imported from ./analyze_control_coverage.js) in the MCP server by including it in the tools array passed to registerToolDefs.
    export function registerTools(server: McpServer): void {
      registerToolDefs(server, [
        // Document discovery
        listFrmrDocumentsTool,
        getFrmrDocumentTool,
        listVersionsTool,
        // KSI tools
        listKsiTool,
        getKsiTool,
        filterByImpactTool,
        getThemeSummaryTool,
        getEvidenceExamplesTool,
        // Control mapping tools
        listControlsTool,
        getControlRequirementsTool,
        analyzeControlCoverageTool,
        // Search & lookup tools
        searchMarkdownTool,
        readMarkdownTool,
        searchDefinitionsTool,
        getRequirementByIdTool,
        // Analysis tools
        diffFrmrTool,
        grepControlsTool,
        significantChangeTool,
        // System tools
        healthCheckTool,
        updateRepositoryTool,
      ]);
    }
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.

Install Server

Other Tools

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/ethanolivertroy/fedramp-docs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server