Skip to main content
Glama
clio-mcp

clio-mcp

clio-mcp

A standalone, firm-controlled MCP server that drives Clio matters and documents from Claude Desktop.

  1. Download ClioMCP.mcpb.

  2. In Claude Desktop: Settings → Extensions → Install Extension… → pick the file.

  3. Enter your Clio OAuth Client ID and Client Secret (region defaults to us) in the form. Secrets are stored in your OS keychain.

  4. Just ask Claude to use Clio — e.g. "find my open matters." The first request opens Clio's consent page in your browser; approve it and the request completes. No terminal, no separate login.

First-time auth: if approval takes more than ~55s, Claude will say "approve in your browser, then ask again" — the connection finishes in the background and your next request works.

Tool sets

Clio MCP ships ~46 tools across seven groups: core (matters/contacts/documents), billing (time/expense + bills), calendar, tasks, comms (communications + notes), fields (custom fields), and lookups (practice areas/users/activity descriptions).

By default all are enabled. To scope a deployment to a subset, set the Tool sets field (or CLIO_TOOLSETS) to a comma list, e.g. core,billing,calendar. Unknown names are ignored; an empty result falls back to core.

Related MCP server: Clio Manage MCP

Manual setup (dev / headless)

  1. Register one OAuth app in your firm's Clio developer account (US region). Note the client key and secret. Set the redirect URI to http://127.0.0.1:9991/callback (loopback login) — and additionally Clio's oauth/approval page if you use --manual.

  2. Create ~/.clio-mcp/config.json:

    { "region": "us", "clientId": "<clio app key>", "clientSecret": "<clio app secret>" }
  3. Install and build:

    npm install && npm run build
  4. Authorize as yourself:

    node dist/cli.js login          # opens a browser (loopback)
    # or, on a locked-down machine:
    node dist/cli.js login --manual # paste the code from Clio's approval page

Claude Desktop config

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "clio": {
      "command": "node",
      "args": ["/absolute/path/to/ClioMCP/dist/cli.js", "serve"]
    }
  }
}

What it can do (Phase 1)

Matters: find, get, create, update (incl. close), add note, create task. Contacts: find, get, create. Documents: browse, get, download, upload, create folder. Destructive ops (rename/new-version, move, delete document, delete folder) require a two-step confirmation.

Controls

  • Per-user OAuth; refresh token encrypted at rest (OS keychain or AES-256-GCM file).

  • Every tool call is recorded in ~/.clio-mcp/audit.log (JSONL) — never tokens or document contents.

  • Destructive actions return a preview + confirm_token first and only execute when the token is echoed back.

  • Rate-limit aware (serialized queue honoring Clio's headers).

Phase 2 (Delegant)

The governance seam (src/governance/seam.ts) is the swap point: replace localGuard with a delegant implementation to get firm-wide policy, human approval gates, and tamper-evident central audit — no tool rewrites.

Available Tools

46 tools
clio_add_matter_noteC

Append a note to a matter's timeline.

Inputs: detail (required), matter_id (required), subject.

clio_browseA

List folders and documents under a matter (or a parent folder).

Inputs: limit, matter_id, parent_folder_id.

clio_complete_taskB

Mark a task complete.

Inputs: id (required).

clio_create_calendar_entryC

Create a calendar entry on a calendar, optionally tied to a matter.

Inputs: end_at (required), summary (required), start_at (required), calendar_id (required), +4 more.

clio_create_contactA

Create a client or party. Use type=Person with first/last name, or type=Company with name.

Inputs: type (required), name, last_name, first_name.

clio_create_folderA

Create a folder under a matter or parent folder.

Inputs: name (required), matter_id, parent_folder_id.

clio_create_matterB

Create a new matter for a client.

Inputs: client_id (required), description (required), status, practice_area_id.

clio_create_taskB

Create a task tied to a matter.

Inputs: name (required), matter_id (required), due_at, description.

clio_delete_activityA

Delete a time/expense entry. Destructive: first call previews + returns confirm_token; call again with it to execute.

Inputs: id (required), confirm_token.

clio_delete_calendar_entryA

Delete a calendar entry. Destructive: first call previews + returns confirm_token; call again with it to execute.

Inputs: id (required), confirm_token.

clio_delete_documentA

Delete a document. Destructive: first call returns a preview + confirm_token; call again with the token to execute.

Inputs: id (required), confirm_token.

clio_delete_folderA

Delete a folder. Destructive: first call returns a preview + confirm_token; call again with the token to execute.

Inputs: id (required), confirm_token.

clio_download_documentA

Download a document's content to the local sandbox and return its path. Text/markdown is also returned inline.

Inputs: id (required).

clio_find_activitiesA

List time/expense entries, filtered by matter, user, type, or date range.

Inputs: to, from, type, limit, +2 more.

clio_find_billsB

List bills, filtered by matter, client, or state.

Inputs: limit, state, client_id, matter_id.

clio_find_calendar_entriesA

List calendar entries, filtered by calendar, matter, or date range.

Inputs: to, from, limit, matter_id, +1 more.

clio_find_communicationsB

List logged communications (calls/emails), filtered by matter, contact, or date range.

Inputs: to, from, limit, matter_id, +1 more.

clio_find_contactsB

Search contacts (clients and parties) by name or free text.

Inputs: type, limit, query.

clio_find_mattersB

Search matters by client, status, practice area, or free text. Returns concise fields, paginated.

Inputs: limit, query, status, client_id.

clio_find_notesC

Read notes. The type is required: 'Matter' (with matter_id) or 'Contact' (with contact_id).

Inputs: type (required), limit, matter_id, contact_id.

clio_find_tasksC

List tasks, filtered by matter, assignee, status, or due-date range.

Inputs: limit, due_to, status, due_from, +2 more.

clio_get_activityC

Full detail for one time/expense entry.

Inputs: id (required).

clio_get_billC

Full detail for one bill.

Inputs: id (required).

clio_get_calendar_entryC

Full detail for one calendar entry.

Inputs: id (required).

clio_get_communicationB

Full detail for one communication.

Inputs: id (required).

clio_get_contactC

Full detail for one contact.

Inputs: id (required).

clio_get_documentC

Document metadata plus version history.

Inputs: id (required).

clio_get_matterA

Full detail for one matter, including linked client and recent documents.

Inputs: id (required).

clio_get_noteB

Full detail for one note.

Inputs: id (required).

clio_get_taskC

Full detail for one task.

Inputs: id (required).

clio_list_activity_descriptionsB

List activity descriptions (preset rates/descriptions) to use when logging time/expenses.

Inputs: limit.

clio_list_calendarsB

List the firm/user calendars available to schedule on.

Inputs: limit.

clio_list_custom_fieldsA

List custom field definitions for a parent type, so you know the field ids and value formats.

Inputs: parent_type (required), limit.

clio_list_practice_areasA

List the firm's practice areas (for tagging matters).

Inputs: limit.

clio_list_usersA

List firm users (for assigning tasks/activities). Includes the current user.

Inputs: limit.

clio_log_communicationC

Record a phone call or email communication, optionally tied to a matter or contact.

Inputs: type (required), subject (required), received_at (required), body, +2 more.

clio_log_expenseC

Log an expense entry on a matter.

Inputs: date (required), price (required), quantity (required), matter_id (required), +2 more.

clio_log_timeA

Log a time entry on a matter (hours). Becomes a billable line unless non_billable is set.

Inputs: date (required), quantity (required), matter_id (required), note, +3 more.

clio_move_documentA

Move a document to a different folder. Destructive: requires confirm_token on the second call.

Inputs: id (required), parent_folder_id (required), confirm_token.

clio_set_custom_field_valuesA

Set custom field values on a matter or contact. Use clio_list_custom_fields to get field ids.

Inputs: values (required), parent_id (required), parent_type (required).

clio_update_activityB

Update a time/expense entry (e.g. fix hours, note, or date).

Inputs: id (required), date, note, price, +1 more.

clio_update_calendar_entryC

Update a calendar entry (reschedule, rename, relocate).

Inputs: id (required), end_at, summary, location, +2 more.

clio_update_documentA

Rename a document, or upload a new version (overwrite). Destructive: requires confirm_token on the second call.

Inputs: id (required), name, confirm_token, new_version_path.

clio_update_matterA

Update a matter, including status changes (closing a matter is a status update to 'closed').

Inputs: id (required), status, description.

clio_update_taskB

Update a task (rename, reschedule, reassign, change priority/description).

Inputs: id (required), name, due_at, priority, +2 more.

clio_upload_documentA

Upload a local file as a new document under a matter or folder. Handles Clio's multi-step storage upload atomically.

Inputs: file_path (required), name, matter_id, content_type, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 46 tools

    Disambiguation5/5

    Each tool has a clearly distinct resource and action. Find/get/create/update/delete pairs are perfectly separated, and specialized actions like log_time, move_document, or complete_task do not overlap with anything else.

    Naming Consistency5/5

    All tools follow the clio_verb_noun pattern. List/find use plural nouns while get/create/update/delete use singular, creating a predictable and consistent convention throughout.

    Tool Count2/5

    46 tools is well above the typical 3-15 range and even exceeds the 25+ threshold for 'too many'. Though each tool is purposeful, the large number makes the server heavy and potentially overwhelming for agents.

    Completeness3/5

    The server covers many modules (matters, contacts, documents, tasks, activities, bills, calendar, communications, custom fields), but notable gaps exist: contacts have no update/delete, communications lack update/delete, tasks have no delete, and contact notes cannot be added via the available tools.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      An MCP server for Clio Manage legal practice management software that enables Claude and other MCP clients to read and write Clio data including contacts, matters, and activities directly from chat.
      8
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      MCP server that connects Clio Manage to Claude via OAuth, enabling law firm management tasks like matter lookup, time tracking, billing, calendar, and document retrieval through natural language.
      41
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol server that enables Claude (or any MCP client) to read and write Clio Manage data—contacts, matters, activities—directly from chat, with flat-fee billing support in one call.
      -
    • A
      license
      Not graded
      quality
      B
      maintenance
      MCP server for Clio Manage that enables interaction with legal practice data including matters, contacts, activities, communications, tasks, documents, calendar entries, and bills via natural language.
      Apache 2.0