MyCase MCP Server — Tool Catalog

This catalog documents the 74 tools the MyCase MCP Server exposes — the same name, description, parameter, and annotation data every MCP client receives from tools/list — organized by domain.

Connect Claude to MyCase

MyCase isn't listed in Claude's connector directory, so add it as a custom connector. The install links below open Claude's own dialog with the connector name and URL already filled in; the URL is spelled out further down if you'd rather enter it yourself. One connector covers everywhere you use Claude — the web app, Claude Desktop, and Cowork — because connectors are configured on your Claude account rather than per device.

Install link for your firm

If you administer your firm's Claude organization, this link prefills the connector for everyone in it. Claude flags that the values arrived from an external link and adds nothing until you review them and confirm.

As a Claude organization owner, open the prefilled install link for a Claude organization.

Install link for one person

If your Claude plan lets you add your own connectors, this link prefills the same dialog for your account alone. Where connectors are administered centrally, an organization owner adds the connector once and it then appears in your own connector settings for you to turn on.

For your own Claude account, open the prefilled install link for a single Claude account.

Connector URL

The links above only prefill Claude's dialog. If one doesn't open it, add this URL as a custom connector by hand instead:

https://mcp.mycase.com/mcp

You sign in with your own MyCase account, and every tool call runs as your MyCase user, held to that user's permissions.

For the steps in Claude, see Anthropic's guide to adding a custom connector.

Billing

get_case_billing_summary

Get Case Billing Summary read-only

Get a case's billing snapshot: fee_structure, totals (billed/collected/outstanding/overdue), balances (trust/credit funds held), aging, bills_by_status, unbilled work in progress, most_recent_payment, and most_recent_bill. Sections the user may not view are OMITTED, not zeroed: totals, balances, aging, bills_by_status, and most_recent_* require permissions.view_bills; unbilled is omitted only when the user has neither view_bills nor view_time_expenses (or the token lacks read_expenses). The permissions block is always present — use it to tell 'no access' from 'no billing on this case'. fee_structure (billing_type, agreed flat_fee, billing_contact) is the only source of the case's fee arrangement; unbilled.flat_fees is the flat-fee amount REMAINING to bill, distinct from the agreed fee_structure.flat_fee (itemized flat-fee line items come from list_case_billing_flat_fees). balances are client funds held, separate from the bill-side totals — a client can owe outstanding and still hold trust/credit; report both, never net them. credit is a per-contact, firm-wide snapshot with no provenance surface — do not sum a contact's credit across their cases, and do not claim where it came from. totals, aging, and bills_by_status exclude balance-forwarded bills, which list_case_invoices includes (status 'forwarded') — counts may legitimately differ. These billing tools do not surface retainer requests, payment plans or installment schedules, saved payment methods, failed or declined payment attempts, or write-off/discount line-item detail beyond get_case_invoice_line_items — direct the user to the MyCase app for those.

ParameterTypeRequiredDescription
case_idintegeryes

get_case_invoice_line_items

Get Case Invoice Line Items read-only

Get the line items that compose one invoice, grouped by kind — time_entries, expenses, flat_fees, discounts — plus balances_forwarded (prior invoices whose unpaid balance rolled into this one) and the invoice header. Reconciliation: total_amount = billable time_entries' total + billable expenses' total + billable flat_fees' amount + all SIGNED discount amounts + balances_forwarded amounts, clamped at zero; nonbillable items appear with billable false and contribute nothing, and some firms fold payment surcharges into total_amount that are not itemized here. discounts rows are not all reductions: type discount/write_off is stored NEGATIVE, interest/tax/addition POSITIVE — sum amounts as-is, never flip signs by label. flat_fees are the BILLED flat-fee line items, distinct from the agreed fee_structure.flat_fee and from summary unbilled.flat_fees (remaining to bill). Visibility is the invoice's: a user without billing permission gets not_found (the invoice is invisible), so cross-check get_case_billing_summary's permissions.view_bills before concluding the invoice does not exist; unlike the case billing time/expense feeds, no read_expenses scope is needed because items are read as parts of the invoice document. Not paginated — one response carries the invoice's full contents.

ParameterTypeRequiredDescription
case_idintegeryes
invoice_idintegeryes

list_case_billing_expenses

List Case Billing Expenses read-only

List a case's expenses with a server-computed total. filter_billed reflects actual invoice association (the same definition the billing summary uses); billed=false does NOT imply billable — also check the billable field when reconciling against summary.unbilled. Requires the read_expenses token scope (same as list_all_expenses) plus the time-entries-and-expenses OR billing user permission, and returns 403 without them — given the scope, a billing-permission-only user can use this tool even where list_all_expenses is denied.

ParameterTypeRequiredDescription
case_idintegeryes
filter_updated_afterstringnoOnly records updated strictly after this ISO8601 timestamp (exclusive bound, unlike the inclusive entry-date filters)
filter_entry_date_afterstringnoOnly expenses dated on or after this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_entry_date_beforestringnoOnly expenses dated on or before this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_billedbooleannotrue → only expenses already on an invoice; false → only expenses not yet invoiced
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_case_billing_flat_fees

List Case Billing Flat Fees read-only

List a case's flat-fee billing line items: fixed-amount charges with no activity, rate, or duration — the third line-item type alongside time entries and expenses. Flat fees never appear in the time-entry feed, and BILLED flat fees appear in get_case_invoice_line_items (its flat_fees group); but UNBILLED flat fees appear only here, so a work-in-progress total built without this tool misses unbilled flat-fee revenue. They are also distinct from flat-RATE time entries, which list_case_billing_time_entries does include. amount is the charge (total is the same value, for symmetry with the sibling feeds). filter_billed reflects actual invoice association, and billed=false does NOT imply billable — also check the billable field. Do not reconcile this feed against summary.unbilled.flat_fees: that rollup is the agreed fee_structure.flat_fee minus billed billable items, not a sum of the unbilled rows here. Requires the read_expenses token scope plus the time-entries-and-expenses OR billing user permission, and returns 403 without them — given the scope, a billing-permission-only user can use this tool even where list_all_time_entries is denied.

ParameterTypeRequiredDescription
case_idintegeryes
filter_updated_afterstringnoOnly records updated strictly after this ISO8601 timestamp (exclusive bound, unlike the inclusive entry-date filters)
filter_entry_date_afterstringnoOnly flat fees dated on or after this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_entry_date_beforestringnoOnly flat fees dated on or before this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_billedbooleannotrue → only flat fees already on an invoice; false → only flat fees not yet invoiced
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_case_billing_payments

List Case Billing Payments read-only

List successful payments applied to a case's bills. Bill payments only: retainer, subscription, and quick-bill receipts are excluded, and so are pending/failed transactions — never infer 'no failed charges' from this feed. For any of those (all payable types, all statuses) scoped to this same case, use list_all_payments with filter_case_id. amount is SIGNED: refunds/voids are negative with is_refund true, so summing the list gives the correct net — do not count refunds as income. client on each payment is the bill's billing contact, never the staff member who recorded it. Requires the caller's billing permission and returns 403 without it, so an empty list means the case genuinely has no matching payments.

ParameterTypeRequiredDescription
case_idintegeryes
filter_updated_afterstringnoOnly records updated strictly after this ISO8601 timestamp (exclusive bound)
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_case_billing_time_entries

List Case Billing Time Entries read-only

List a case's time entries with a server-computed total that prices flat-rate entries correctly — prefer it over summing rows. Flat-FEE billing line items are separate records that NEVER appear in any time-entry feed — include list_case_billing_flat_fees when totaling case billing (flat-RATE time entries, by contrast, are ordinary rows here). filter_billed reflects actual invoice association (the same definition the billing summary uses); billed=false does NOT imply billable — also check the billable field when reconciling against summary.unbilled. Requires the read_expenses token scope (same as list_all_time_entries) plus the time-entries-and-expenses OR billing user permission, and returns 403 without them — given the scope, a billing-permission-only user can use this tool even where list_all_time_entries is denied.

ParameterTypeRequiredDescription
case_idintegeryes
filter_updated_afterstringnoOnly records updated strictly after this ISO8601 timestamp (exclusive bound, unlike the inclusive entry-date filters)
filter_entry_date_afterstringnoOnly entries dated on or after this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_entry_date_beforestringnoOnly entries dated on or before this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_billedbooleannotrue → only entries already on an invoice; false → only entries not yet invoiced
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_case_invoices

List Case Invoices read-only

List a case's invoices (bills), scoped to the case server-side. On a case the caller can see, list_all_invoices with filter_case_id at its default only_allowed_online_payments=false returns the same rows for the same caller; on a case they cannot see, this tool 404s while that one applies no case check at all and returns whatever bills on it are shared with them. Each invoice carries balance_due, and its due_date is the bill's actual next payment due date (payment-plan aware, matching the UI's overdue math). Includes balance-forwarded bills (status 'forwarded'), which the billing summary's totals exclude — counts may legitimately differ. Requires the caller's billing permission and returns 403 without it, so an empty list is never a permission artifact — but it is still not proof the case has no invoices: a caller who cannot view all firm cases sees only the bills shared with them, and the billing summary's bill-side sections are narrowed by that same rule, so neither tool can reveal the rest. Send the user to the MyCase app when a bill they expect is missing.

ParameterTypeRequiredDescription
case_idintegeryes
filter_updated_afterstringnoOnly records updated strictly after this ISO8601 timestamp (exclusive bound)
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Calls

get_call

Get Call read-only

Get a specific call log entry by ID.

ParameterTypeRequiredDescription
call_idintegeryes

list_callers

List Callers read-only

List all callers (clients and leads that can appear in call logs).

ParameterTypeRequiredDescription
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_calls

List Calls read-only

List all call log entries.

ParameterTypeRequiredDescription
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Case Stages

get_case_stage

Get Case Stage read-only

Get a specific case stage by ID.

ParameterTypeRequiredDescription
case_stage_idintegeryes

list_case_stages

List Case Stages read-only

List all case stages.

ParameterTypeRequiredDescription
filter_updated_afterstringno
search_starts_withstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Cases

get_case

Get Case read-only

Get a specific case by ID. Includes the full staff roster (per-staff lead_lawyer, originating_lawyer, and rate details) and latest_status_update — the newest free-text status write-up firm staff keep on the matter, or null if there is none. Status updates are firm-internal: clients never see them, so do not quote one into client-facing text. Use list_case_status_updates for the full history. Note that outstanding_balance is NOT money owed despite its name — it carries the case's flat-fee amount; use get_case_billing_summary for what is actually outstanding.

ParameterTypeRequiredDescription
case_idintegeryes

get_case_folder

Get Case Folder read-only

Get the root document folder for a case.

ParameterTypeRequiredDescription
case_idintegeryes

list_case_documents

List Case Documents read-only

List documents for a case.

ParameterTypeRequiredDescription
case_idintegeryes
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_case_notes

List Case Notes read-only

List notes for a case. Case notes are a distinct record type from Status updates, with their own subject, date and archived state — use list_case_status_updates for the running status write-ups.

ParameterTypeRequiredDescription
case_idintegeryes
filter_statusstringnoOne of: active, archived.
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_case_roles

List Case Roles read-only

List all case roles.

ParameterTypeRequiredDescription
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_case_status_updates

List Case Status Updates read-only

List a case's Status update history, newest first. These are the short free-text write-ups firm staff keep on a matter — outreach attempts, investigator contact details, next steps. Each carries its author and timestamps; updated_by is null until an update is edited. Firm-internal: clients never see them. get_case returns only the newest one. Not an audit trail: any staffer who can edit the case can overwrite an entry in place, and deleted entries leave no trace.

ParameterTypeRequiredDescription
case_idintegeryes
page_sizeintegernoItems per page (default 25, max 100)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_cases

List Cases read-only

List all cases. Supports filtering by status, updated_after, and text search. Each case carries a staff summary (staff_count and lead_lawyer) instead of the full staff roster; use get_case for full staff assignments. Note that outstanding_balance is NOT money owed despite its name — it carries each case's flat-fee amount; use get_case_billing_summary for what is actually outstanding.

ParameterTypeRequiredDescription
filter_statusstringnoFilter by case status. One of: open, closed.
filter_updated_afterstringnoISO8601 datetime
search_starts_withstringnoText search on case name
page_sizeintegernoItems per page (default 25, max 200)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Clients

get_client

Get Client read-only

Get a specific client by ID.

ParameterTypeRequiredDescription
client_idintegeryes

list_client_cases

List Client Cases read-only

List cases for a specific client. Note that outstanding_balance is NOT money owed despite its name — it carries each case's flat-fee amount; use get_case_billing_summary for what is actually outstanding.

ParameterTypeRequiredDescription
client_idintegeryes
filter_statusstringnoOne of: open, closed.
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_client_message_threads

List Client Message Threads read-only

List message threads for a client.

ParameterTypeRequiredDescription
client_idintegeryes
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_client_notes

List Client Notes read-only

List notes for a client.

ParameterTypeRequiredDescription
client_idintegeryes
filter_statusstringnoOne of: active, archived.
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_clients

List Clients read-only

List all clients. Supports filtering by name, email, phone, and text search.

ParameterTypeRequiredDescription
filter_updated_afterstringno
filter_emailstringno
filter_first_namestringno
filter_last_namestringno
filter_cell_phone_numberstringno
filter_work_phone_numberstringno
filter_home_phone_numberstringno
filter_fax_phone_numberstringno
search_starts_withstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Companies

get_company

Get Company read-only

Get a specific company by ID.

ParameterTypeRequiredDescription
company_idintegeryes

list_companies

List Companies read-only

List all companies. Supports filtering by status, name, email, phone, and text search.

ParameterTypeRequiredDescription
filter_statusstringnoFilter by company status. One of: active, archived.
filter_updated_afterstringno
filter_emailstringno
filter_namestringno
filter_fax_phone_numberstringno
filter_main_phone_numberstringno
search_starts_withstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_company_notes

List Company Notes read-only

List notes for a company.

ParameterTypeRequiredDescription
company_idintegeryes
filter_statusstringnoOne of: active, archived.
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Contacts

list_contacts

List Contacts read-only

List all contacts (clients, companies, leads) across the firm.

ParameterTypeRequiredDescription
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Custom Fields

get_custom_field

Get Custom Field read-only

Get a specific custom field definition by ID.

ParameterTypeRequiredDescription
custom_field_idintegeryes

list_custom_field_options

List Custom Field Options read-only

List options for a list-type custom field.

ParameterTypeRequiredDescription
custom_field_idintegeryes
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_custom_fields

List Custom Fields read-only

List all custom field definitions.

ParameterTypeRequiredDescription
filter_parent_typestringnoOne of: case, client, company, expense, time, time_and_expense.
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Documents

download_document

Download Document read-only

Get a presigned download URL for the raw file content of a document. Returns a short-lived redirect URL to the raw file in storage. The file is returned as-is — for server-extracted text, use get_document_text instead.

ParameterTypeRequiredDescription
document_idintegeryes

download_document_version

Download Document Version read-only

Get a presigned download URL for the raw file content of a specific document version. Returns a short-lived redirect URL to the raw file in storage. The file is returned as-is — for server-extracted text of the latest parsed version, use get_document_text instead.

ParameterTypeRequiredDescription
document_idintegeryes
version_numberintegeryes

get_document

Get Document read-only

Get document metadata by ID. Returns metadata only — use download_document for the raw file or get_document_text for extracted text.

ParameterTypeRequiredDescription
document_idintegeryes

get_document_text

Get Document Text read-only

Get server-extracted plain text for a document. Returns a short-lived URL to the extracted text plus metadata (content_length, page_count, parsed_at). Fetch the URL promptly with your available tools — it expires in about 5 minutes and serves text/plain. For large documents, prefer downloading and searching locally over reading the whole text into context. Text reflects the document version current when it was parsed (see parsed_at); newly uploaded versions are not re-extracted. When no extracted text exists, returns not_found with a detail field — error 'no_parsed_text' plus a parsing_status: 'not_parsed' means extraction has not completed for the current version and may still be in progress for a recently uploaded document (retry later); other statuses (e.g. 'failed', 'unparseable', 'not_supported', 'scanned', 'ocr_disabled', 'large_document') are terminal for the current version. Detail error 'not_found' means the document itself does not exist.

ParameterTypeRequiredDescription
document_idintegeryes

list_document_versions

List Document Versions read-only

List all versions of a document.

ParameterTypeRequiredDescription
document_idintegeryes
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_document_versions_all

List Document Versions All read-only

List all document versions across the firm.

ParameterTypeRequiredDescription
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_documents

List Documents read-only

List all documents across the firm. Returns document metadata only — use get_document_text for extracted text or download_document for the raw file.

ParameterTypeRequiredDescription
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_folder_documents

List Folder Documents read-only

List documents within a folder.

ParameterTypeRequiredDescription
folder_idintegeryes
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_folder_subfolders

List Folder Subfolders read-only

List subfolders within a folder.

ParameterTypeRequiredDescription
folder_idintegeryes
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Events

get_event

Get Event read-only

Get a specific event by ID. When starting from a full_text_search result, pass its appointment_rule_id — an event search result's id identifies a single occurrence on the calendar, drawn from a different table, so passing it here usually 404s and can otherwise return an unrelated event.

ParameterTypeRequiredDescription
event_idintegeryes

list_events

List Events read-only

List all calendar events.

ParameterTypeRequiredDescription
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Expenses

get_expense

Get Expense read-only

Get a specific expense by ID.

ParameterTypeRequiredDescription
expense_idintegeryes

list_all_expenses

List All Expenses read-only

List all expenses across the firm. Optionally filter by case.

ParameterTypeRequiredDescription
filter_case_idintegernoFilter expenses to a specific case ID
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Feedback

report_feedback

Report Feedback write

Report a bug or request a feature for the MyCase MCP server itself. Call this when a tool fails repeatedly or behaves unexpectedly, or when the user wants a capability these tools don't provide. Confirm with the user before submitting. Do NOT include client names, case details, or document contents — describe the problem generically.

ParameterTypeRequiredDescription
feedback_typestringyesOne of: bug, feature_request.
summarystringyesOne-line description of the problem or request
detailsstringnoExpected vs. actual behavior, and exact error text if any
related_toolstringnoName of the MCP tool this feedback concerns

Firm

get_firm

Get Firm read-only

Get information about the current firm.

get_me

Get Me read-only

Get information about the currently authenticated user.

Invoices

get_invoice

Get Invoice read-only

Get a specific invoice by ID, including invoices that have online payments disabled: the by-id lookup uses the same wide invoice scope as list_all_invoices, so any invoice that appears there can also be fetched here.

ParameterTypeRequiredDescription
invoice_idintegeryes

list_all_invoices

List All Invoices read-only

List invoices (bills) across the firm, or scope to a single case with filter_case_id. At this tool's default only_allowed_online_payments=false, filter_case_id returns the same rows as list_case_invoices for the same caller, balance-forwarded bills (status 'forwarded') included. Requires the caller's billing permission and returns 403 without it. But unlike list_case_invoices, which 404s a case the caller cannot see, an unknown filter_case_id here returns an empty list — so an empty result is not proof that the case exists or that it has no invoices. Confirm the case with get_case before reporting either. Case visibility and bill visibility are separate rules: a caller without all-cases access still sees the bills shared with them, so this tool can return rows for a case list_case_invoices 404s.

ParameterTypeRequiredDescription
filter_case_idintegernoOnly invoices on this case — the server-side case scope, so one case's invoices need no client-side filtering. It composes with the caller's own authorization scope and never widens it: a caller who cannot view all firm cases still sees only the bills shared with them. Setting only_allowed_online_payments true alongside it drops invoices that have online payments disabled, narrowing below what list_case_invoices shows.
filter_updated_afterstringnoOnly records updated strictly after this ISO8601 timestamp (exclusive bound)
only_allowed_online_paymentsbooleannoWhen true, returns only invoices that allow online payments. Defaults to false so all invoices are listed.
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_all_payments

List All Payments read-only

List payment transactions across ALL payable types — bill, retainer, subscription, and quick-bill payments — including pending and failed rows (pass filter_status to narrow); each row's payable_type names its kind. amount is SIGNED: refunds/voids are negative with is_refund true, so they net out rather than inflate a total. To total true settled receipts, sum only status=success rows — pending and failed rows are returned here by default and never settled. Scope to one case with filter_case_id (spanning every payable type and status for that case) or to one invoice with filter_payable_id. For a case's SETTLED BILL receipts only — retainer, subscription, and quick-bill receipts and pending/failed transactions excluded — use list_case_billing_payments instead; the two feeds agree on amount sign and both report client as the payable's billing contact (never the staff member who recorded the payment), differing only in payable-type and status breadth. For incremental sync, pass filter_updated_after instead of re-paginating the full payment history.

ParameterTypeRequiredDescription
filter_payable_idintegernoFilter by invoice ID
filter_case_idintegernoFilter to payments whose payable (bill/retainer/subscription/quick-bill) is on this case — the server-side case scope for firm-wide payment analysis, so a single case's payments need no client-side assembly. Spans all payable types and statuses for the case; list_case_billing_payments is the bill-only, successful-only case feed.
filter_statusstringnoFilter by payment status. One of: pending, success, failure, error, timeout.
filter_updated_afterstringnoISO8601 datetime; returns only payments whose payment record's own updated_at is strictly after this bound (exclusive). Keys off the payment transaction itself — an update to the parent invoice/bill does not surface its payments.
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Leads

get_lead

Get Lead read-only

Get a specific lead by ID.

ParameterTypeRequiredDescription
lead_idintegeryes

list_leads

List Leads read-only

List all leads. Supports filtering by status, name, email, phone, and text search.

ParameterTypeRequiredDescription
filter_statusstringnoOne of: approved, unapproved.
filter_updated_afterstringno
filter_emailstringno
filter_first_namestringno
filter_last_namestringno
filter_cell_phone_numberstringno
filter_work_phone_numberstringno
filter_home_phone_numberstringno
search_starts_withstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Locations

get_location

Get Location read-only

Get a specific location by ID.

ParameterTypeRequiredDescription
location_idintegeryes

list_locations

List Locations read-only

List all locations.

ParameterTypeRequiredDescription
filter_updated_afterstringno
search_starts_withstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Messages

get_message_thread

Get Message Thread read-only

Get a message thread's metadata by ID: subject, sender, participants (clients and staff), related case, and the opening message body. Use list_thread_messages to read the full conversation.

ParameterTypeRequiredDescription
thread_idintegeryes

list_message_threads

List Message Threads read-only

List message threads the authorizing user can view, including staff-only threads (list_client_message_threads only covers threads with a specific client). Returns thread metadata plus the opening message; use list_thread_messages to read a full conversation.

ParameterTypeRequiredDescription
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_thread_messages

List Thread Messages read-only

List every message in a message thread — the opening message and all replies, oldest first — with each message's sender and timestamp.

ParameterTypeRequiredDescription
thread_idintegeryes
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Notes

get_note

Get Note read-only

Get a specific note by ID.

ParameterTypeRequiredDescription
note_idintegeryes

People Groups

get_people_group

Get People Group read-only

Get a specific people group by ID.

ParameterTypeRequiredDescription
people_group_idintegeryes

list_people_groups

List People Groups read-only

List all people groups (contact groups).

ParameterTypeRequiredDescription
filter_updated_afterstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Practice Areas

get_practice_area

Get Practice Area read-only

Get a specific practice area by ID.

ParameterTypeRequiredDescription
practice_area_idintegeryes

list_practice_areas

List Practice Areas read-only

List all practice areas.

ParameterTypeRequiredDescription
filter_updated_afterstringno
search_starts_withstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Referral Sources

get_referral_source

Get Referral Source read-only

Get a specific referral source by ID.

ParameterTypeRequiredDescription
referral_source_idintegeryes

list_referral_sources

List Referral Sources read-only

List all referral sources.

ParameterTypeRequiredDescription
filter_updated_afterstringno
search_starts_withstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Full Text Search read-only

Search across the firm's records by text query: cases, contacts, documents, notes, tasks, events, leads, messages, expenses, and call log entries. Matches names, descriptions, numbers, and notes, and returns matched-text highlights. Only record types the connection is authorized to read are searched; the response's requested_types field lists the types the search was submitted with, narrowed by scope and by case_id, and is not proof each one was searched — a type the firm has disabled is dropped upstream without being echoed back. Pass case_id to confine the search to a single case instead of the whole firm. Event results are keyed by appointment_rule_id, not by id — pass appointment_rule_id to get_event.

ParameterTypeRequiredDescription
querystringyesSearch text, 3-100 characters
typesarray[string]noRecord types to search. Defaults to every type the connection can read. Searching 'documents' alone also matches document file content where the firm has content search enabled. One of: calls, cases, contacts, documents, events, expenses, leads, messages, notes, tasks.
case_idintegernoScope the search to one case: only records associated with that case are returned. Firm-level documents — those filed outside any case — are excluded, so omit case_id to reach them. contacts and leads cannot be case-scoped: they are dropped from a case-scoped search and requested_types echoes the reduced list, and asking for only contacts or leads together with case_id is rejected. A message's case association can be stale, so message hits are best-effort. A case id that does not exist, or that this user cannot see, returns an empty result set rather than an error — indistinguishable from a case that simply has no matches, so do not read empty results as proof the case is empty. Where the firm's search index cannot apply the case filter, the scope is enforced after each upstream page is fetched, so a page may return fewer than page_size results — even zero — while later pages still hold matches. Judge that by the token and never by page length: a short page still carries pagination.next_page_token when more results remain.
page_sizeintegernoResults per page (default 10, max 50)
page_tokenstringnoToken from the previous response's pagination.next_page_token, to fetch the next page. Pass it back with the same query, types and case_id it was issued for; a token replayed against a different search is rejected rather than answered. page_size is not part of that match — it may be changed mid-sweep, and the new value applies from that page on. A response with no next_page_token is the last page.

Staff

get_staff

Get Staff read-only

Get a specific staff member by ID.

ParameterTypeRequiredDescription
staff_idintegeryes

list_staff

List Staff read-only

List all staff members.

ParameterTypeRequiredDescription
filter_statusstringnoOne of: active, inactive.
filter_updated_afterstringno
search_starts_withstringno
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Tasks

get_task

Get Task read-only

Get a specific task by ID.

ParameterTypeRequiredDescription
task_idintegeryes

list_tasks

List Tasks read-only

List all tasks. Optionally filter by case or updated_after (ISO8601).

ParameterTypeRequiredDescription
filter_case_idintegernoFilter tasks to a specific case ID
filter_updated_afterstringnoISO8601 datetime to filter tasks updated after this time
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Time Entries

get_time_entry

Get Time Entry read-only

Get a specific time entry by ID. Includes the server-computed total (always present); billing_status ('unbilled', 'on_draft_invoice', or 'invoiced') and the invoices list are included only with billing access (the caller's billing permission plus the read_invoices scope) and are withheld otherwise.

ParameterTypeRequiredDescription
time_entry_idintegeryes

list_all_time_entries

List All Time Entries read-only

List all time entries across the firm. Optionally filter by case. Each entry carries a server-computed total that prices flat-rate entries correctly — prefer it over hours x rate math; total is always present. With billing access (the caller's billing permission plus the read_invoices scope) each entry also carries a billing_status of 'unbilled', 'on_draft_invoice', or 'invoiced' and an invoices list reflecting actual invoice association including draft invoices; without that access those billing fields are withheld, so their absence does not mean an entry is unbilled. billed does NOT imply the entry was billable — check the billable field when reconciling. Flat-fee billing line items are separate records that never appear in time-entry results — use list_case_billing_flat_fees for a case's flat fees; billed flat fees also appear in get_case_invoice_line_items, but unbilled flat-fee revenue appears only via list_case_billing_flat_fees, so a work-in-progress total built without it misses that revenue.

ParameterTypeRequiredDescription
filter_case_idintegernoFilter time entries to a specific case ID
filter_updated_afterstringnoOnly entries updated strictly after this ISO8601 timestamp (exclusive bound, unlike the inclusive entry-date filters)
filter_entry_date_afterstringnoOnly entries dated on or after this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_entry_date_beforestringnoOnly entries dated on or before this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_billedbooleannotrue → only entries already on an invoice (draft or finalized — use billing_status to distinguish); false → only entries not yet invoiced
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

Trust

list_trust_account_balances

List Trust Account Balances read-only

Current per-client trust (IOLTA) holdings — the rows behind the MyCase Trust Account Summary report. Each row is one client's balance in one trust bank account, either allocated to a case or unallocated: unallocated=true rows (case is null) are client-wide trust funds not tied to any case. A client's total trust = the sum of their rows, which equals list_trust_ledger_entries net change summed over that client's ENTIRE unfiltered history — never a date-filtered ledger sum. A case's trust picture = its allocated rows PLUS its clients' unallocated rows, which get_case_billing_summary.balances.trust also reports; the two are independent reads that use different case-allocation predicates, so they usually agree but may legitimately differ — treat them as corroborating, not a guaranteed identity. Balances are current as of now (no as-of-date support); for changes over a period use list_trust_ledger_entries. Zero-balance rows are included unless filter_include_zero_balances=false. Trust money is client money, never firm revenue. Requires the billing user permission and returns 403 without it.

ParameterTypeRequiredDescription
filter_client_idintegernoOnly holdings of this client (contact) ID
filter_case_idintegernoOnly holdings ALLOCATED to this case — excludes the clients' unallocated (client-wide) rows, so this alone understates the case's available trust
filter_bank_account_idintegernoOnly holdings in this trust bank account ID
filter_include_zero_balancesbooleannofalse → omit zero-balance rows (clients whose trust is fully disbursed); default true
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_trust_bank_accounts

List Trust Bank Accounts read-only

List the firm's trust (IOLTA) bank accounts with the total client funds currently held in each. balance is CLIENT money the firm holds in trust — never firm revenue; do not mix it with billing totals (invoices, payments, collected). balance equals the sum of list_trust_account_balances rows for the account, and clients_with_balance counts distinct clients with a nonzero balance. Deleted accounts are excluded. Requires the billing user permission and returns 403 without it — an empty list really means the firm has no trust accounts.

ParameterTypeRequiredDescription
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.

list_trust_ledger_entries

List Trust Ledger Entries read-only

Trust (IOLTA) ledger activity — the rows of the MyCase Trust Account Activity report: deposits into trust and payments/withdrawals out of trust, including the incoming deposits that invoice-payment feeds never show. Each entry carries credit (client funds INTO trust) or debit (funds OUT of trust) as non-negative amounts with exactly one nonzero; net change over a set = sum(credit) - sum(debit). That net change equals a client's current trust balance ONLY when summing ALL of that client's entries with no date filter (their entire unfiltered history); a date-windowed sum is just the net change for that window, not the as-of-now balance — for current balances use list_trust_account_balances. No running balance is served. case is null for activity on a client's unallocated (client-wide) trust; related_to names the invoice, retainer request, or subscription the money was applied to, when any. Refunds and voided checks appear as opposite-side entries (a voided trust withdrawal shows as a credit), never as deletions. Results are ordered by id (creation order), not by date — use the inclusive filter_pay_date_after/_before bounds for date windows. Trust money is client money, never firm revenue — do not sum it into billing totals. Requires the billing user permission and returns 403 without it, so an empty list really means no matching trust activity.

ParameterTypeRequiredDescription
filter_client_idintegernoOnly entries for this client (contact) ID
filter_case_idintegernoOnly entries on trust buckets allocated to this case; excludes the clients' unallocated (client-wide) activity
filter_bank_account_idintegernoOnly entries touching this trust bank account ID
filter_pay_date_afterstringnoOnly entries dated on or after this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_pay_date_beforestringnoOnly entries dated on or before this date-only ISO8601 date (YYYY-MM-DD); the bound is inclusive
filter_updated_afterstringnoOnly records updated strictly after this ISO8601 timestamp (exclusive bound, unlike the inclusive pay-date filters)
page_sizeintegernoItems per page (default 25, max 1000)
page_tokenstringnoToken from the previous response's pagination.next_page_token. Re-send it together with every filter/search/field param used on the first page — the token carries only the cursor, so any param omitted here is dropped from the query and the results silently widen instead of erroring. A response with no next_page_token is the last page.