Governed Model Context Protocol server with HITL approvals, audit logging, and compliance redaction (Java and Python implementations)
Server exposes 7 tools with complete input schemas and descriptions. All tools are properly registered in ToolRegistry with verb-noun naming (get_, search_, post_, propose_, lookup_). Schemas use correct JSON Schema format with type and required fields. However, parameter descriptions are entirely absent, the schema objects contain only type declarations, no descriptions for individual parameters. Tool descriptions are present but generic (avg ~80 chars, below the 194-char baseline). No output schemas documented. Error handling is minimal, no recovery guidance or actionable error messages visible. Sensitivity annotations present but not leveraged for permission gating. Overall: functional but underspecified for LLM reasoning.
Read the current balance of a ledger account.
Read effective-dated item unit cost for a club from the cost ledger (#5).
Read club/location site facts from the location reference cache (#2).
Resolve a legacy supplier id to the golden supplier record (retail MDM #1).
Move funds between two ledger accounts. WRITE: requires approval.
Propose a price change for a SKU. WRITE: requires approval.
Hybrid search over the enterprise knowledge base.
Parameter descriptions completely absent. All 7 tools define input schemas with only type declarations (e.g., {"type": "string"}) but no descriptions. LLMs cannot infer parameter semantics from names alone, 'amount' could be quantity, price, or fee; 'query' could be free-text or structured. This violates the baseline that 100% of A+ tools have parameter descriptions.
No output schemas documented. Tool descriptions state what they do but not what fields the response contains. Agents cannot plan downstream calls or extract required data (e.g., does search_docs return document IDs, URLs, or summaries?). This blocks tool chaining and forces agents to guess response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
No error handling or recovery guidance. Tool handlers return success responses but no visible error paths, validation, or actionable error messages. If post_payment fails (insufficient funds, invalid account), the agent receives no guidance on what to do next. Violates pattern:recovery-guide.
Sensitivity annotations present but not enforced. Tools declare Sensitivity.WRITE (post_payment, propose_price_change) but no visible permission checks, approval workflows, or HITL gates. Annotations are metadata only, no actual governance applied. Contradicts the 'governed' server premise.
Tool descriptions lack context for selection. Descriptions are 50 - 90 chars, below the 194-char baseline. They state WHAT (e.g., 'Read the current balance') but not WHEN to use it or prerequisites. 'lookup_supplier' mentions 'retail MDM #1' but does not explain when to call it vs other lookups. LLMs cannot disambiguate similar tools.