Connect your AI Agents to Clio in minutes

Merge lets you securely connect your agents to Clio and thousands of tools instantly

Available tools

list_activities

List or search time entries and expenses. Filter server-side by matter, user, type, billing status, or date range. Note that a TimeEntry's 'quantity' is in seconds; 'quantityinhours' gives the same value in hours.

get_activity

Get one time entry or expense by ID. Use list_activities to find activity IDs. A TimeEntry's 'quantity' is in seconds.

create_activity

Log a time entry or expense against a matter. type, date, and quantity are required — quantity is in SECONDS for a TimeEntry (3600 = one hour). Use listmatters for matterid, listactivitydescriptions for activitydescriptionid, and listexpensecategories for expensecategoryid.

update_activity

Update a time entry or expense. quantity is in SECONDS for a TimeEntry. An entry already billed may be rejected. Use list_activities to find activity IDs.

delete_activity

Delete a time entry or expense permanently. An entry already on a bill may be rejected. Use list_activities to find activity IDs.

list_activity_descriptions

List the firm's activity descriptions and their default rates. Call this before createactivity to get a valid activitydescription_id — descriptions are firm-defined and cannot be guessed.

list_expense_categories

List the firm's expense categories. Call this before createactivity with type='ExpenseEntry' to get a valid expensecategory_id — categories are firm-defined and cannot be guessed.

list_users

List the firm's Clio users. Call this to get the user IDs that creatematter (responsibleattorneyid, originatingattorneyid), createtask (assigneeid), and createactivity (user_id) require.

get_user

Get one Clio user by ID. Use listusers to find user IDs, or getcurrent_user for the signed-in user.

get_current_user

Get the Clio user the connection is authenticated as, including their firm account and notificationmethods. Use this to resolve 'me' or 'my matters', and to get the notificationmethodid that createreminder requires.

list_groups

List the firm's groups, which control matter permissions and rates. Use this to find the groupid that creatematter and update_matter accept.

get_group

Get one Clio group by ID, including its members. Use list_groups to find group IDs.

list_currencies

List the currencies available on the Clio account, with their codes and symbols.

list_webhooks

List the webhooks registered on this Clio connection. Check expiresat — webhooks lapse after at most 31 days unless extended with updatewebhook.

get_webhook

Get one Clio webhook by ID, including its status and expiry. Use list_webhooks to find webhook IDs.

create_webhook

Register a webhook so Clio posts events to your HTTPS URL. url, model, and events are required; non-HTTPS URLs are rejected. Webhooks expire after 3 days by default and 31 days at most — set expiresat and renew with updatewebhook.

update_webhook

Update a webhook's URL, events, payload fields, or expiry. Use this to renew a webhook before expiresat passes. Use listwebhooks to find webhook IDs.

delete_webhook

Delete a Clio webhook so it stops delivering events. Use list_webhooks to find webhook IDs.

list_calendar_entries

List or search Clio calendar entries (appointments and deadlines). Filter server-side by matter, calendar, or date range with datefrom/dateto. Set expanded=true with a date range to expand recurring events into instances. Use this to find calendar entry IDs.

get_calendar_entry

Get one Clio calendar entry by ID, including matter, attendees, and recurrence rule. Use listcalendarentries to find IDs. Check recurrence_rule before updating or deleting — a non-null value means the entry is part of a series.

create_calendar_entry

Create a Clio calendar entry. summary, startat, endat and calendarownerid are all required — call listcalendars with writeable=true first for a valid calendarownerid. Use listmatters for matterid and listcalendarentryeventtypes for eventtype_id.

update_calendar_entry

Update a Clio calendar entry. Only supplied fields change. Call getcalendarentry first and check recurrence_rule: if it is not null the entry is part of a series, and the change applies to the whole series.

delete_calendar_entry

Delete a Clio calendar entry permanently. Call getcalendarentry first and check recurrence_rule: if it is not null this deletes the whole series, not just one occurrence.

list_calendars

List the calendars visible to the authenticated user. Call this before createcalendarentry to get a valid calendarownerid. Set writeable=true to see only calendars entries can be created on.

get_calendar

Get one Clio calendar by ID. Use list_calendars to find calendar IDs.

list_calendar_entry_event_types

List the firm's calendar entry event types. Call this before createcalendarentry or updatecalendarentry to get a valid eventtypeid — event types are firm-defined and cannot be guessed.

get_calendar_entry_event_type

Get one calendar entry event type by ID. Use listcalendarentryeventtypes to find event type IDs.

list_reminders

List reminders set on calendar entries or tasks. Filter by subjecttype plus subjectid to see the reminders on one entry or task. Use listcalendarentries or list_tasks to find subject IDs.

get_reminder

Get one Clio reminder by ID. Use list_reminders to find reminder IDs.

create_reminder

Set a reminder on a calendar entry or task, firing durationvalue durationunits before it. Call getcurrentuser first for a notificationmethodid — Clio requires one. Use listcalendarentries or listtasks for subjectid, and set subject_type to match.

update_reminder

Change how long before its subject a reminder fires, or which notification method delivers it. Pass durationvalue and durationunit together. Use list_reminders to find reminder IDs.

delete_reminder

Delete a reminder. The calendar entry or task it belongs to is unaffected. Use list_reminders to find IDs.

list_contacts

List or search Clio contacts (people and companies). Pass query for free-text search across name, email, and phone, or filter server-side by type or clientonly. Use this to find contact IDs for creatematter and the other contact tools. Page forward with page_info.cursor.

get_contact

Get one Clio contact by ID. Use listcontacts to find contact IDs. Pass 'fields' to widen the response, e.g. to include addresses or customfield_values.

create_contact

Create a Clio contact. type is required: use 'Person' with firstname and lastname, or 'Company' with name. For customfieldvalues, call listcustomfields with parent_type='contact' first to get valid field IDs.

update_contact

Update fields on a Clio contact. Only supplied fields change. For nested lists such as emailaddresses, include an entry's 'id' to update it or 'destroy': true to remove it. Use list_contacts to find contact IDs.

delete_contact

Delete a Clio contact permanently. Fails if the contact is the client on a matter — reassign the matter first with updatematter. Use listcontacts to find contact IDs.

list_contact_email_addresses

List every email address on a contact, with its label and which one is the default. Use listcontacts to find contact IDs. getcontact returns only the primary address.

list_contact_phone_numbers

List every phone number on a contact, with its label and which one is the default. Use listcontacts to find contact IDs. getcontact returns only the primary number.

list_custom_fields

List the firm's custom fields on matters or contacts, with each picklist field's allowed options. Call this before creatematter, updatematter, createcontact, or updatecontact to get the field IDs and picklist option IDs those tools need for customfieldvalues.

get_custom_field

Get one custom field by ID, including its picklist options. Use listcustomfields to find custom field IDs.

create_custom_field

Create a custom field on matters or contacts. name, parenttype, and fieldtype are required. For fieldtype='picklist' also supply picklistoptions. Call listcustomfields first to avoid duplicating a field.

update_custom_field

Update a custom field's label, visibility, or picklist options. parenttype and fieldtype cannot be changed after creation. Use listcustomfields to find custom field IDs.

delete_custom_field

Delete a custom field. Values already recorded on matters or contacts are removed with it. To hide the field instead, call updatecustomfield with displayed=false. Use listcustomfields to find IDs.

list_custom_field_sets

List custom field sets, which group related custom fields on matters or contacts. Use listcustomfields for the individual fields and their picklist options.

get_custom_field_set

Get one custom field set by ID, including the fields it groups. Use listcustomfield_sets to find set IDs.

create_custom_field_set

Create a custom field set grouping existing custom fields. name and parenttype are required. Use listcustomfields to find the IDs for customfield_ids.

update_custom_field_set

Rename a custom field set or replace the fields it groups. Passing customfieldids replaces the whole membership. Use listcustomfield_sets to find set IDs.

delete_custom_field_set

Delete a custom field set. The custom fields it grouped are not deleted. Use listcustomfield_sets to find set IDs.

list_documents

List or search Clio documents by name, matter, contact, folder, or category. Returns metadata only — use downloaddocument for content. Use this to find document IDs. Page forward with pageinfo.cursor.

get_document

Get one Clio document's metadata by ID — name, size, category, and where it is filed. Returns no file content; use downloaddocument for that. Use listdocuments to find document IDs.

upload_document

Upload a new document into Clio, filed under a matter, folder, or contact. Pass the file as base64 in contentbase64, or as filereference from the file upload API (POST /api/v1/files/) for large files. Use listmatters, listfolders, or listcontacts for parentid, and listdocumentcategories for documentcategoryid. Returns the new document_id.

upload_document_version

Upload a new version of an existing Clio document, preserving its history. Pass the file as base64 in contentbase64, or as filereference from the file upload API (POST /api/v1/files/) for large files. Use listdocuments to find documentid. To create a new document instead, use upload_document.

download_document

Download a Clio document's content by ID. Text-like files come back as UTF-8 text; anything else as base64 — check the 'encoding' field before using 'content'. Files over maxbytes (10 MB by default) return truncated=true; set returndownloadurl=true instead for a short-lived download URL, which handles any size. Use listdocuments to find document IDs.

update_document

Update a Clio document's metadata — rename it, refile it under a different parent, or change its category. Does not change file content; use uploaddocumentversion for that. Set restore=true to recover a trashed document.

delete_document

Move a Clio document to the trash. Recover it with updatedocument and restore=true. Use listdocuments to find document IDs.

copy_document

Copy a Clio document into another matter, folder, or contact, leaving the original in place. Use listdocuments for documentid and listmatters or listfolders for parent_id.

list_document_versions

List the version history of a Clio document, highest versionnumber first. Use the returned version IDs with restoredocumentversion, and listdocuments to find document IDs.

restore_document_version

Promote an earlier version of a Clio document to be the latest. Returns only a success flag — call downloaddocument or listdocumentversions afterwards to confirm. Use listdocumentversions to find documentversion_id.

list_folders

List or search Clio folders by name, matter, contact, or parent folder. Use this to find folder IDs for uploaddocument and createfolder. For the mixed contents of one folder, use listfoldercontents.

list_folder_contents

List folders and documents together in one call. Pass matterid or contactid to list that record's contents, or parentid with a FOLDER id to list inside a folder. Use this to walk the document tree instead of calling listfolders and list_documents separately.

get_folder

Get one Clio folder by ID. Use list_folders to find folder IDs.

create_folder

Create a folder inside a matter, contact, or another folder. Use listmatters, listcontacts, or listfolders to find parentid, and set parent_type to match.

update_folder

Rename a Clio folder or move it under a different parent. Set restore=true to recover a trashed folder. Use list_folders to find folder IDs.

delete_folder

Move a Clio folder and its contents to the trash. Recover it with updatefolder and restore=true. Use listfolders to find folder IDs.

list_document_categories

List the firm's document categories. Call this before uploaddocument or updatedocument to get a valid documentcategoryid — categories are firm-defined and cannot be guessed.

get_document_category

Get one Clio document category by ID. Use listdocumentcategories to find category IDs.

create_document_category

Create a document category for filing documents. Call listdocumentcategories first to avoid duplicating an existing one.

update_document_category

Rename a Clio document category. Use listdocumentcategories to find category IDs.

delete_document_category

Delete a document category. Documents filed under it are not deleted but lose the category. Use listdocumentcategories to find category IDs.

list_matters

List or search Clio matters (cases). Filter server-side by status, client, practice area, or responsible attorney, or pass query for free-text search. Use this to find matter IDs for every other matter-scoped tool. Page forward by passing page_info.cursor back as 'cursor'.

get_matter

Get one Clio matter by ID, including client, practice area, stage, and responsible attorney. Use listmatters to find matter IDs. Pass 'fields' to widen the response, e.g. to include customfield_values.

create_matter

Create a Clio matter for an existing client contact. clientid and description are required — use listcontacts to find the client. For practiceareaid use listpracticeareas, for matterstageid use listmatterstages, for attorney IDs use listusers, and for customfieldvalues use listcustom_fields.

update_matter

Update fields on a Clio matter. Only supplied fields change; omitted fields are left alone. Use listmatters to find matter IDs, listmatterstages for stage IDs, and listcustom_fields for custom field IDs.

delete_matter

Delete a Clio matter permanently, along with its associated records. This cannot be undone — to close a matter instead, call updatematter with status='closed'. Use listmatters to find matter IDs.

list_matter_contacts

List every contact associated with a matter, including the client and all related contacts. Use listmatters to find matter IDs. For only the non-client related contacts, use listrelated_contacts instead.

list_related_contacts

List the related (non-client) contacts on a matter, such as opposing counsel or witnesses. Each entry's contactid is the contact's own ID — pass that, not id, to getcontact. Use listmattercontacts for all contacts including the client.

list_practice_areas

List the firm's practice areas. Call this before creatematter or updatematter to get a valid practiceareaid — these are firm-defined and cannot be guessed.

list_matter_stages

List the firm's matter stages, optionally filtered to one practice area. Call this before creatematter or updatematter to get a valid matterstageid — stages are firm-defined per practice area and cannot be guessed. Each stage's 'order' field gives its position in the workflow; Clio returns them unsorted.

list_relationships

List matter-to-contact relationships, optionally filtered by matter or contact. Each entry describes how a contact relates to a matter. Use listmatters and listcontacts to find the filter IDs.

get_relationship

Get one matter-to-contact relationship by ID. Use list_relationships to find IDs.

create_relationship

Relate an existing contact to a matter, e.g. as opposing counsel or a witness. Use listmatters for matterid and listcontacts for contactid. To set the matter's client instead, use update_matter.

update_relationship

Update the description on a matter-to-contact relationship. Use list_relationships to find relationship IDs.

delete_relationship

Remove a contact's relationship to a matter. The contact itself is not deleted. Use list_relationships to find relationship IDs.

list_notes

List or search Clio notes on matters and contacts. Filter server-side by matterid, contactid, or type, or pass query for free-text search. Use this to find note IDs. Page forward with page_info.cursor.

get_note

Get one Clio note by ID, including its full detail body. Use list_notes to find note IDs.

create_note

Create a note on a matter or a contact. Set type='Matter' with matterid, or type='Contact' with contactid — the two must match. Use listmatters or listcontacts to find the ID.

update_note

Update a Clio note's subject, detail, or date. The matter or contact it is filed against cannot be changed. Use list_notes to find note IDs.

delete_note

Delete a Clio note permanently. Use list_notes to find note IDs.

list_comments

List comments left on documents and folders. Pass itemid to see the comments on one of them — use listdocuments or listfolders to find IDs. For notes on a matter, use listnotes instead.

get_comment

Get one comment by ID. Use list_comments to find comment IDs.

create_comment

Comment on a document or folder. Pass its ID as itemid — use listdocuments or listfolders to find one. To add a note to a matter instead, use createnote.

update_comment

Edit the text of a comment. Use list_comments to find comment IDs.

delete_comment

Delete a comment from a document or folder. Use list_comments to find comment IDs.

list_communications

List or search logged phone calls and emails. Filter server-side by matter, contact, user, type, or received-date range. Use this to find communication IDs. Page forward with page_info.cursor.

get_communication

Get one logged phone call or email by ID, including its body and parties. Use list_communications to find communication IDs.

create_communication

Log a phone call or email against a matter. Set type to PhoneCommunication or EmailCommunication. Use listmatters for matterid and list_contacts for the IDs in senders and receivers. This records a communication; it does not send one.

update_communication

Update a logged phone call or email. Use list_communications to find communication IDs.

delete_communication

Delete a logged phone call or email. Use list_communications to find communication IDs.

list_log_entries

List Clio audit-log entries recording who accessed firm data and when. Read-only and account-wide; filter with created_since to bound the range.

list_tasks

List or search Clio tasks. Filter server-side by matter, assignee, status, priority, or due-date range, or pass query for free-text search on the name. Use this to find task IDs. Page forward with page_info.cursor.

get_task

Get one Clio task by ID, including matter, assignee, and due date. Use list_tasks to find task IDs.

create_task

Create a Clio task. name, assigneeid and assigneetype are all required — Clio rejects an unassigned task. Use listusers for a user assignee (set assigneetype='User') or listcontacts for a contact one. Use listmatters for matterid and listtasktypes for tasktype_id.

update_task

Update a Clio task. Only supplied fields change. Set status='complete' to close the task. Use listtasks to find task IDs and listusers for a new assigneeid (set assigneetype='User').

delete_task

Delete a Clio task permanently. To mark it done instead, call updatetask with status='complete'. Use listtasks to find task IDs.

list_task_types

List the firm's task types. Call this before createtask or updatetask to get a valid tasktypeid — task types are firm-defined and cannot be guessed. Retired types carry a deleted_at; pass enabled=true to exclude them.

get_task_type

Get one Clio task type by ID. Use listtasktypes to find task type IDs.

create_task_type

Create a task type the firm can assign to tasks. Use listtasktypes to check for an existing one first.

update_task_type

Rename or retire a Clio task type. Clio has no delete endpoint for task types: retire one by setting deletedat to a timestamp. Use listtask_types to find task type IDs.

validate_credential

Check that the Clio connection works by fetching the signed-in user.

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

In an mcp.json file, add the configuration below, and restart Cursor.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5      "headers": {
6        "Authorization": "Bearer yMt*****"
7      }
8    }
9  }
10}
11
Copy Code

Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.

Make sure Claude is using the Node v20+.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "mcp-remote@latest",
8        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9        "--header",
10        "Authorization: Bearer ${AUTH_TOKEN}"
11      ],
12      "env": {
13        "AUTH_TOKEN": "yMt*****"
14      }
15    }
16  }
17}
Copy Code
Copied!

Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.

Learn more in the official documentation ↗

1{
2    "mcpServers": {
3      "agent-handler": {
4        "command": "npx",
5        "args": [
6          "-y",
7          "mcp-remote@latest",
8          "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9          "--header",
10          "Authorization: Bearer ${AUTH_TOKEN}"
11        ],
12        "env": {
13          "AUTH_TOKEN": "<ah-production-access-key>"
14        }
15      }
16    }
17  }
Copy Code

In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".

You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.

Learn more in the official documentation ↗

1{
2  "inputs": [
3    {
4      "type": "promptString",
5      "id": "agent-handler-auth",
6      "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7      "password": true
8    }
9  ],
10  "servers": {
11    "agent-handler": {
12      "type": "stdio",
13      "command": "npx",
14      "args": [
15        "-y",
16        "mcp-remote@latest",
17        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18        "--header",
19        "Authorization: Bearer ${input:agent-handler-auth}"
20      ]
21    }
22  }
23}
Copy Code

FAQs on using Merge's Clio  MCP server

FAQs on using Merge's Clio  MCP server

Explore other MCP servers built and managed by Merge

calendly
Calendly
canva
Canva
casepeer
CasePeer
clay
Clay
clickup
ClickUp
clinicaltrials
ClinicalTrials.gov
cloudflare
Cloudflare
cms_coverage
CMS Coverage
coda
Coda
compliancequest
ComplianceQuest
concur
Concur
confluence
Confluence
contentful
Contentful
crustdata
Crustdata
databricks
Databricks
datadog
Datadog
deel
Deel
docrio
Docrio
docusign
DocuSign
doordash
DoorDash
dropbox
Dropbox
duffel
Duffel
dynamics365
Dynamics 365 Sales
exa
Exa

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now