MCP server for auditing LLM API billing discrepancies and verifying token charges against actual usage
Single tool 'execute_skill_action' has critical definition gaps. Description is present (67 chars) but generic and lacks WHEN/WHY context. Input schema visible but severely incomplete: 'usage_records' and 'provider_rate_card' lack type specifications beyond 'array' and 'object', no nested field definitions, no constraints, no format guidance. No output schema documented despite returning complex audit results (discrepancies array, verdict enum, hash). No parameter descriptions explaining what fields usage_records should contain or what provider_rate_card structure is expected. Tool name 'execute_skill_action' is generic (verb_noun but lacks specificity, 'audit_api_billing' would be clearer). No error handling guidance. No idempotency or side-effect declaration despite modifying audit state.
Execute the LLM API cost audit and receipt verification skill
Input schema lacks nested field definitions. 'usage_records' declared as array but no itemSchema specifying required fields (model, calls, tokens, etc.). 'provider_rate_card' is bare object with no properties defined. LLM cannot infer what data structure to pass.
No output schema documented. Tool returns complex object with discrepancies array, audit_verdict enum, and audit_receipt_hash, but LLM has no specification of return structure. Cannot plan downstream tool calls or extract fields reliably.
Parameter descriptions missing entirely. 'usage_records' and 'provider_rate_card' have no descriptions explaining what fields they require, format, or constraints. LLM must guess structure from name alone.
Tool name 'execute_skill_action' is generic and vague. Does not clearly convey that it audits API billing. Baseline verb_noun pattern suggests 'audit_api_billing' or 'verify_api_charges' would be clearer and more discoverable.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 24 | 2026-07-28+ | v2 |
No error handling guidance. Tool description does not explain what happens on invalid input (malformed usage_records, missing rate card fields), whether operation is retryable, or what recovery steps LLM should take.