Open-source Model Context Protocol (MCP) server that connects Claude to MyCase legal practice management. 18 tools covering cases, contacts, documents, tasks, calendar, calls, time entries, billing, and staff. Built for law firms with AES-256 encrypted OAuth token storage.
MyCase MCP demonstrates solid fundamentals: all 12 tools have descriptions (avg 95 chars), input schemas with types, and clear verb-noun naming. However, output schemas are undocumented, LLMs cannot predict response structure for downstream chaining. Parameter descriptions are present but often minimal (e.g., 'The MyCase case ID' lacks format hints). Error handling returns isError flags but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification. Pagination is implemented (page_size, page_token) but inconsistently (list-cases uses page_token; list-time-entries uses page/limit). Missing: documented return types, actionable error messages, and parameter relationship documentation (e.g., staff array structure in create-case).
Check whether the server is authenticated with MyCase and when the token expires.
Open the MyCase OAuth authorization page in the browser and store the resulting tokens encrypted on disk. Must be called before any other MyCase tools.
Create a new case in MyCase.
Get a billing summary for a MyCase case: total billed, outstanding, and invoices.
Get full details for a single MyCase case by its ID.
Get full details for a single client (person) by ID.
Output schemas undocumented. LLMs cannot predict response structure (fields, types, nested objects) for downstream tool chaining. E.g., list-cases returns what fields? Does get-case include contact_ids for chaining to get-contact?
Pagination inconsistency. list-cases uses (page_size, page_token); list-time-entries uses (limit, page). LLMs must learn two pagination styles for the same server, increasing error likelihood.
Error messages lack recovery guidance. authTools.ts returns 'Authentication failed: {msg}' and 'Error checking auth status: {msg}' without suggesting next steps (e.g., 'Check MYCASE_CLIENT_ID env var' or 'Retry with authenticate tool').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | <=2025-11-25 | v2 |
List calendar events from MyCase within an optional date range.
List cases from MyCase, optionally filtered by status.
List billable time entries from MyCase, optionally filtered by case or date range.
Log a phone call in MyCase, optionally linked to a case and contact.
Remove the stored MyCase tokens from disk.
Search for clients (people) in MyCase by name, email, or phone.
No tool annotations. create-case, log-call, and logout are destructive/write operations but lack readOnlyHint=false or destructiveHint=true. Agents cannot distinguish safe reads from risky writes without parsing descriptions.
Parameter descriptions lack format/constraint hints. E.g., 'opened_date' says 'YYYY-MM-DD' in description but no regex/format in schema. 'practice_area' and 'case_stage' say 'must match' but don't list valid values or suggest discovery tool.