MCP server that lets agents operate a self-hosted pretix instance without ever seeing the API credential
Two tools with clear naming (get_pending_action, execute_pending_action) and good descriptions (100+ chars each). Both have minimal input schemas (single string parameter). Descriptions explain state transitions and approval workflow well. However, output schemas are not documented in the visible code, the tool definitions show only input parameters. No parameter descriptions visible in the schema definitions. Error handling is mentioned in descriptions but not formalized. Risk annotations (READ_ONLY, IRREVERSIBLE) are present but not mapped to MCP tool annotations.
Execute a high-risk action that a human approved on the server. Fails while the action is still awaiting approval, and after it expired.
Check the state of a high-risk action you proposed earlier. Returns its state ('pending', 'approved', 'executed', 'rejected', 'expired'), the preview a human sees, and when it expires. A human must approve it on the server before execute_pending_action will run it.
Output schemas not documented. Tool descriptions mention return values ('state', 'preview', 'expires') but no formal schema is visible in code. LLMs cannot plan downstream operations without knowing response structure.
Input parameter 'pending_action_id' lacks a description in the schema. The tool description explains the parameter's role, but the schema itself has no 'description' field for the parameter.
Risk annotations (READ_ONLY, IRREVERSIBLE) are present in metadata but not mapped to MCP tool annotations (readOnlyHint, destructiveHint). Current spec supports these hints, they should be declared in tool registration.
Error handling guidance is implicit in descriptions ('Fails while the action is still awaiting approval') but not formalized. No structured error responses or recovery hints visible.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
No confirmation/dry-run pattern for execute_pending_action. Irreversible operations should support a confirmation step before execution to prevent accidental misuse.