A Model Context Protocol server for Gemara (GRC Engineering Model for Automated Risk Assessment). Provides tools for authoring, validating, and querying Gemara artifacts across Layers 1-4 (Guidance, Controls, Policies, Evaluations).
The Gemara MCP server demonstrates solid definition quality with 16 well-structured tools covering a multi-layer GRC model. All tools have clear, descriptive names following verb_noun patterns (list_, get_, search_, store_, find_, validate_). Descriptions are comprehensive (typically 100-250 chars) and explain purpose, input, and output. Input schemas are properly defined with types and descriptions for all parameters. However, there are notable gaps: output schemas are not documented in the visible code, error handling guidance is absent, and some optional parameter relationships lack clarity. Tool composition is excellent, each tool has a single responsibility, and the layered architecture (Layer 1-3 + authoring + info) creates natural chains. Parameter naming is consistent and clear (guidance_id, control_id, policy_id, layer). Missing features include tool annotations (readOnlyHint, destructiveHint, idempotentHint), detailed error recovery guides, and explicit per-tool scope declarations. The server uses modern Go patterns (mcp-go 0.43.2) and validates YAML inputs against CUE schemas before storage, which mitigates injection risks.
Find applicable Gemara artifacts (guidance, controls, policies) based on context (boundaries, technologies, providers, applicability).
Get comprehensive information about Gemara (GRC Engineering Model for Automated Risk Assessment). Use this tool when users ask 'What is Gemara?' or need an overview. Returns overview, architecture, layer model, schema information, and integration details.
Get detailed information about a specific Layer 1 Guidance document by its ID. Returns the full guidance document in YAML or JSON format.
Get detailed information about a specific Layer 2 Control by its ID. Returns the full control definition in YAML or JSON format.
Retrieve all Layer 1 guideline mappings for a Layer 2 control. Shows which Layer 1 guidance documents the control references and the specific guideline entries.
Get detailed information about a specific Layer 3 Policy document by its ID. Returns the full policy document in YAML or JSON format.
Output schemas not documented in visible source code. While tool descriptions mention return formats (YAML/JSON), the actual response structure (field names, types, nesting) is not specified in the tool definitions. LLMs cannot infer what fields will be returned, forcing them to make assumptions about downstream tool parameter matching.
Missing tool annotations. Tools lack readOnlyHint, destructiveHint, and idempotentHint metadata. This prevents agents from correctly classifying which tools are safe to retry (idempotent: all list_, get_, search_, validate_; destructive: store_* tools) and which modify state. Without annotations, agents cannot build correct retry strategies.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | A | 81 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 47 | - | v1 |
List all available Layer 1 Guidance documents. Returns a summary of all stored guidance documents with their IDs, titles, descriptions, and metadata.
List all available Layer 2 Controls with optional filtering by technology or Layer 1 reference. Returns controls grouped by catalog.
List all available Layer 3 Policy documents. Returns a summary of all stored policy documents with their IDs, titles, objectives, and metadata.
Search Layer 1 Guidance documents by name, description, or author. Can optionally filter by applicability scope (boundaries, technologies, providers).
Search Layer 2 Controls by name, objective, or ID. Can also filter by Layer 1 guidance reference, technology, or applicability scope.
Search Layer 3 Policy documents by title, objective, or other metadata.
Store a Layer 1 Guidance document from raw YAML content. This preserves all YAML content without data loss. The YAML is validated with CUE before storing.
Store a Layer 2 Control Catalog from raw YAML content. This preserves all YAML content without data loss. The YAML is validated with CUE before storing.
Store a Layer 3 Policy document from raw YAML content. This preserves all YAML content without data loss. The YAML is validated with CUE before storing.
Validate YAML content against a Gemara layer schema using CUE. Returns a detailed validation report with any errors found.
No error recovery guidance in tool descriptions. Tools provide no hints about what to do on failure. E.g., get_layer1_guidance says nothing about what happens if guidance_id is not found. A description should state: 'Returns error if guidance_id does not exist. Check available IDs with list_layer1_guidance() first.'
Optional parameter dependencies underdocumented. search_layer1_guidance accepts search_term as optional 'unless scoping filters are provided', but what are 'scoping filters'? Does one of (boundaries, technologies, providers) suffice, or must all three be supplied? This ambiguity forces LLM guessing.
No pagination guidance for list tools. list_layer1_guidance, list_layer2_controls, and list_layer3_policies have no limit or offset parameters and no description of what happens if there are hundreds of items. If results can be large, the tool should accept limit and offset to avoid context explosion.
YAML/JSON format selection via parameter rather than separate tools. All 13 retrieval tools accept 'output_format' with values 'yaml' (default) or 'json'. This is acceptable, but doubling the tool count (get_layer1_guidance_yaml + get_layer1_guidance_json) would be clearer for LLM selection. Current design requires the LLM to decide format at call time rather than at planning time.