MCP server for GRC workflows — maps controls to code evidence and drafts compliance narratives
Server has 7 tools with basic descriptions and minimal parameter documentation. All tools are READ_ONLY and return JSON strings. Naming follows verb_noun convention (list_, map_, get_, draft_, query_). However, parameter descriptions are sparse or missing type constraints. No output schemas documented. Error handling is absent from visible code. Tool descriptions average ~80 chars, below the 194-char baseline for A+ tools. Parameters lack enums, ranges, and format constraints. No evidence of input validation or recovery guidance.
AI-draft a compliance narrative for an audit finding.
Get pass/fail status of a specific control.
Get compliance posture summary across all controls in a framework.
List all controls for a compliance framework (soc2, iso27001, pcidss).
List controls with insufficient or partial evidence.
Find code evidence for a specific control in the repository.
Query git history as a compliance audit trail.
No output schemas documented. Tools return JSON strings but LLMs cannot infer field structure, forcing manual parsing and risking extraction errors.
Parameter descriptions lack type constraints, ranges, and enums. 'framework' parameter accepts free-form strings (soc2, iso27001, pcidss) but no enum constraint visible. LLMs may hallucinate invalid framework names.
No error handling or recovery guidance visible. If a control_id is invalid or framework is unsupported, no indication of what the LLM should do next (retry, search, ask user).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Tool descriptions are generic and lack WHEN/WHY guidance. E.g., 'List all controls' does not explain when to call this vs. list_open_findings or get_framework_summary. LLMs cannot disambiguate.
No pagination or result limits documented. query_audit_trail has a hardcoded limit=50 in code but this is not exposed as a parameter or mentioned in the description. Large result sets risk context window exhaustion.