Connect your AI Agents to CasePeer in minutes

Available tools
list_case_notes
List case notes, newest first. Filter with caseid for one case's notes. Use listcases to find case IDs and createcasenote to add one.
get_case_note
Get one case note by ID. Use listcasenotes to find note IDs.
create_case_note
Add a note to a case. Use listcases for caseid, listcaseworkers for directedtoids, and listnotecategories for notecategoryids. To change a note afterwards use updatecase_note; a note cannot be moved between cases.
update_case_note
Update a case note's text, recipients, or categories. Only the fields supplied change, but directedtoids and notecategoryids replace the whole set rather than adding to it. Use listcasenotes for note_id.
list_case_tasks
List case tasks. Filter with caseid for one case or directedtoid for one assignee's workload; CasePeer offers no completion filter, so read the 'complete' field on each task. Use listcaseworkers for caseworker IDs.
get_case_task
Get one case task by ID. Use listcasetasks to find task IDs.
create_case_task
Create a task. createdbyid and directedtoid are both required caseworker IDs — call listcaseworkers first. caseid is optional and comes from listcases; priorityid comes from listpriorities. Use createreminder to have CasePeer remind someone about it.
list_reminders
List task reminders. Filter with directedtoid for one person's reminders or wassent to separate pending from delivered. CasePeer offers no per-task filter, so read the casetask link on each result.
get_reminder
Get one reminder by ID. Use list_reminders to find reminder IDs.
create_reminder
Add a reminder to an existing case task. Create the task first with createcasetask, then pass its ID as casetaskid. directedtoids are caseworker IDs from list_caseworkers. Date is YYYY-MM-DD and time is HH:MM:SS.
list_costs
List costs recorded against cases. Filter with caseid for one case's costs; CasePeer offers no payee filter, so read the contact link on each result. Use listcases to find case IDs.
get_cost
Get one cost by ID. Use list_costs to find cost IDs.
create_cost
Record a cost against a case. caseid, contactid, and amount are all required — use listcases for the case and listcontacts for the payee. The address override fields change the payee address for this cost only.
list_health_liens
List health liens — what medical providers are owed out of a settlement. Filter with caseid for one case; CasePeer offers no provider filter, so read the contact link on each result. Use listcases to find case IDs.
get_health_lien
Get one health lien by ID. Use listhealthliens to find lien IDs.
create_health_lien
Record a health lien against a case. caseid is required; use listcases. contactid must be a hospital-type contact, so call listcontacttypes for the hospital type and listcontacts filtered to it.
update_health_lien
Update a health lien's amounts, dates, or provider. Only the fields supplied change; the rest of the record is left alone. Use listhealthliens for healthlienid. A lien cannot be moved to a different case.
get_firm
Get the firm the connection is authorized against. Use this to confirm which CasePeer firm the connection points at before reading or writing case data.
list_cases
List the firm's cases, newest first. Filter with clientid, namecontains, or closed; sort with sort; narrow the payload with fields. Returns pageinfo.cursor for the next page. Use getcase for one case's full record.
get_case
Get one case by ID, including its client, status, type, staffing, and incident links. Use list_cases to find case IDs. Pass include to pull related records inline, e.g. ['caseclient'].
list_incidents
List incidents — the location, description, and client role behind each case. Filter with caseid to get the incident for one case. Use listcases to find case IDs.
get_incident
Get one incident by ID. Use list_incidents to find incident IDs.
list_injuries
List injuries recorded on cases. Filter with caseid for one case's injuries. Use listcases to find case IDs and update_injury to change whether an injury is current.
get_injury
Get one injury by ID. Use list_injuries to find injury IDs.
update_injury
Update an injury's current-state description. This is free text, not a picklist value, and it replaces whatever is recorded now rather than appending. Use list_injuries to find injury IDs.
list_case_documents
List case documents. Filter with caseid for one case, folderid for one folder, or rootlevelonly with caseid for documents filed outside any folder. Check downloadstatus before calling downloadcasedocument.
get_case_document
Get one case document by ID. Use this to poll downloadstatus after createcasedocument: the file is only downloadable once it reads Completed, and Failed means the transfer did not finish. Use listcase_documents for IDs.
create_case_document
File a document on a case. Pass the file as filereference from the file upload API, or as fileurl if you host it. CasePeer fetches it out of band: keep the source reachable until getcasedocument reports downloadstatus Completed or Failed. The firm's document storage must be connected. Use listcases for case_id; each optional ID field names its own lookup tool.
list_case_document_versions
List the stored versions of a case document. Use listcasedocuments for the document ID, and downloadcasedocument_version to fetch one version's bytes.
download_case_document
Download a case document's file content by ID. Returns UTF-8 text as text and anything else as base64 — check 'encoding' before use. Files over maxbytes (10 MB default) come back flagged truncated with no content; set returndownloadurl=true instead for a download URL, which handles any size. Only works once downloadstatus is Completed; check it with getcasedocument.
download_case_document_version
Download one stored version of a case document. Returns UTF-8 text as text and anything else as base64 — check 'encoding' before use. Files over maxbytes (10 MB default) come back flagged truncated with no content; set returndownloadurl=true instead for a download URL, which handles any size. Use listcasedocumentversions to find version IDs.
list_case_document_folders
List case document folders. Filter with caseid for one case's whole tree, parentfolderid for one folder's children, or rootlevelonly with caseid for top-level folders. Use listfolderdocuments for a folder's contents.
get_case_document_folder
Get one case document folder by ID. Use listcasedocument_folders to find folder IDs.
list_folder_documents
List the documents inside a folder, including those in its nested subfolders. Use listcasedocumentfolders to find folder IDs. To list a case's documents regardless of folder, use listcasedocuments with caseid.
create_case_document_folder
Create a document folder on a case. Pass parentfolderid to nest it, which must belong to the same case. Use listcases for caseid and listcasedocumentfolders for parentfolder_id.
list_document_categories
List the document categories the firm files documents under. Call this before createcasedocument for its category_ids.
get_document_category
Get one document category by ID. Use listdocumentcategories to find category IDs.
create_document_category
Create a document category for the firm. Check listdocumentcategories first so an existing category is reused rather than duplicated.
list_case_photos
List case photos. Filter with caseid for one case's photos. Use downloadcase_photo to fetch a photo's bytes.
get_case_photo
Get one case photo by ID. Use listcasephotos to find photo IDs.
create_case_photo
File a photo on a case. Pass the image as filereference from the file upload API, or as fileurl if you host it. CasePeer fetches it out of band: keep the source reachable until it has been fetched. Use listcases for caseid. For anything that is not a photo, use createcasedocument.
download_case_photo
Download a case photo's bytes by ID. Images come back base64-encoded — check 'encoding' before use. Files over maxbytes (10 MB default) come back flagged truncated with no content; set returndownloadurl=true instead for a download URL, which handles any size. Use listcase_photos to find photo IDs.
list_contact_types
List the contact types a contact can be created as, such as hospital, attorney, or court. Call this before createcontact for its contacttypeid, before listcontacts to filter by type, and before createhealthlien, which needs a hospital-type contact.
get_contact_type
Get one contact type by ID. Use listcontacttypes to find contact type IDs.
list_defendant_types
List the defendant types configured for the firm. listdefendants accepts no filters, so match these IDs against each defendant's returned defendanttype relationship rather than filtering the collection.
get_defendant_type
Get one defendant type by ID. Use listdefendanttypes to find defendant type IDs.
list_expert_witness_types
List the expert witness specialties configured for the firm. Call this before createcontact for its expertwitnesstypeids.
get_expert_witness_type
Get one expert witness type by ID. Use listexpertwitness_types to find these IDs.
list_languages
List the languages a client can be assigned. Call this before updateclient for its languageid.
get_language
Get one language by ID. Use list_languages to find language IDs.
list_note_categories
List the note categories configured for the firm. Call this before createcasenote or updatecasenote for their notecategoryids.
get_note_category
Get one note category by ID. Use listnotecategories to find note category IDs.
list_priorities
List the task priorities configured for the firm. Call this before createcasetask for its priority_id.
get_priority
Get one priority by ID. Use list_priorities to find priority IDs.
list_treatment_categories
List the treatment specialties configured for the firm. Call this before createcontact for its treatmentcategory_ids on a medical contact.
get_treatment_category
Get one treatment category by ID. Use listtreatmentcategories to find these IDs.
list_yes_no_maybe
List the yes/no/maybe values CasePeer uses for three-state fields. Call this before createcontact for its acceptslien_id, which is the only field that takes one.
get_yes_no_maybe
Get one yes/no/maybe value by ID. Use listyesno_maybe to find these IDs.
list_clients
List the firm's clients — the people cases belong to. Narrow the payload with fields, and use updateclient to change a client's contact details. Use listcases to see which cases a client has.
get_client
Get one client by ID. Use list_clients to find client IDs.
update_client
Update a client's details. Only the fields supplied change; the rest of the record is left alone. Use listclients for clientid and listlanguages for languageid.
list_contacts
List the firm's contacts — providers, attorneys, courts, experts, and companies. Filter with contacttypeid or contacttypename from listcontacttypes; filtering to one type also narrows each record to that type's own fields.
get_contact
Get one contact by ID. The fields returned depend on the contact's type — a hospital exposes different attributes than an attorney. Use list_contacts to find contact IDs; that tool also supports include, which this route does not.
create_contact
Create a firm contact. Call listcontacttypes first: contacttypeid decides which other fields CasePeer requires. Hospital and medical types require treatmentcategoryids (listtreatmentcategories) and acceptslienid (listyesno_maybe); person types such as attorney require firstname and lastname; police and court need neither. A rejection names the missing field.
update_contact
Update a contact's details. Only the fields supplied change; the rest of the record is left alone. Use listcontacts for contactid and listcontacttypes if changing contacttypeid.
list_defendants
List defendants across the firm's cases. Each defendant links to a contact record, a case and a defendant type. CasePeer accepts no filters here, so page through and narrow on the returned relationships.
get_defendant
Get one defendant by ID. Use list_defendants to find defendant IDs.
list_caseworkers
List the firm's users. Call this for the caseworker IDs createcasetask, createcasenote, createreminder and createcasedocument take. CasePeer accepts no filters here; read the isactive field to skip deactivated users.
get_caseworker
Get one caseworker by ID. Use list_caseworkers to find caseworker IDs.
list_client_insurances
List the insurance policies attached to clients' cases. Filter with caseid for one case, and pass include=['insurance'] to get the policy details inline rather than just the link. For the other side of a claim, use listdefendant_insurances.
get_client_insurance
Get one client insurance link by ID. Use listclientinsurances to find these IDs, and include=['insurance'] for the policy details.
list_defendant_insurances
List the insurance policies attached to defendants. Filter with defendantid for one defendant. Pass include=['insurance'] for the policy details. For the client's own coverage, use listclient_insurances.
get_defendant_insurance
Get one defendant insurance link by ID. Use listdefendantinsurances to find these IDs, and include=['insurance'] for the policy details.
validate_credential
Check that the CasePeer connection works by reading the authorized user's firm.

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}
11Open 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}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 }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}FAQs on using Merge's CasePeer MCP server
FAQs on using Merge's CasePeer MCP server
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

























