A SQLite MCP server for law office filing, billing, and case management with tools for managing clients, matters, billing entries, and invoices
This server has 13 tools with basic schemas and descriptions, but significant quality gaps. Most tool descriptions are under 100 chars and lack context on WHEN to use them or WHAT they return. Parameter descriptions are sparse or missing entirely. No error handling guidance, no output schemas documented, and no tool annotations (readOnlyHint/destructiveHint). The domain-specific tools (record_case_entry, record_billable_time, create_invoice) have better structure than generic SQL tools, but still lack recovery guidance and field-level documentation. Naming is generally clear (verb_noun pattern), but parameter naming inconsistencies exist (e.g., 'script' vs 'query', 'substantiating_entry_id_1' is awkward). No evidence of input validation or constraint documentation in descriptions.
Add a billing entry to an invoice
Check if an invoice has any time conflicts
Create a new invoice for a matter
Create a new table in the database (for multiple statements at once, use execute_script tool instead)
Get structure of a specific table
Execute multiple SQL statements provided as a single script string. Use for batch operations like multiple INSERTS or complex transactions.
Get unbilled time entries for a client or matter
No output schemas documented. Tools return TextContent with unstructured text (e.g., 'Unbilled Time Entries:\n\n| ID | Client | Matter...'). LLMs cannot parse markdown tables reliably or extract structured data for downstream tool calls. Violates pattern:response-shaper.
No error handling guidance. Tools like write_query, create_table, and execute_script can fail (SQL syntax errors, constraint violations, permission denied) but provide no recovery hints. LLMs receive raw exceptions with no actionable next steps. Violates pattern:recovery-guide.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | <=2025-11-25 | v2 |
List all tables in the database
Execute a SELECT SQL query (for multiple statements at once, use execute_script tool instead)
Record billable time for a matter
Record a new case file entry for a matter
Submit an invoice (changes status from draft to submitted)
Execute a non-SELECT SQL query (INSERT, UPDATE, DELETE) (for multiple statements at once, use execute_script tool instead)
Missing parameter descriptions. record_billable_time has 7 parameters but only 'script' in execute_script has a description. Parameters like 'from_party', 'to_party', 'billing_category', 'billing_start', 'billing_stop' lack guidance on format (date format? enum? free text?). Violates pattern:tool-description.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe read-only tools from destructive writes without parsing descriptions. write_query, create_table, execute_script, and all invoice/billing writes should be marked destructiveHint=true. Violates current MCP spec (2026-07-28).
Awkward parameter naming. 'substantiating_entry_id_1' in record_billable_time is unclear, why '_1'? Does it accept multiple IDs? Should be 'case_entry_id' or 'supporting_entry_id'. 'script' vs 'query' naming inconsistency across SQL tools. Violates pattern:tool naming conventions.