
List ClearFeed customers (accounts your team supports) newest first, filterable by creation time, cursor-paginated. Use searchcustomers to find a customer by email domain. Returns customer IDs and versions for getcustomer and update_customer.
Search ClearFeed customers by email domains (any or all), filterable by creation time, cursor-paginated. Filtering by external CRM ID is not currently supported by the ClearFeed API. Use list_customers to browse everything instead.
Get one ClearFeed customer by ID: domains, channels, owner, portal settings, custom field values, CRM link and current version (needed by updatecustomer). Use listcustomers or search_customers for IDs.
Create a ClearFeed customer with name and optional owner, domains, channels, collection (listcollections), portal access and custom field values (IDs from listcustomfields with entitytype='customer'). Returns the customer with its ID.
Update a ClearFeed customer; only fields you pass change, and lists replace the old ones. Requires the current version from getcustomer (a stale version fails with a conflict: re-fetch and retry). Custom field IDs come from listcustomfields with entitytype='customer'.
Turn an existing Slack message (channelid + messagets) into a ClearFeed announcement and send it now or schedule it to Slack channels and/or collections (IDs from listcollections). A channel recipient must already be monitored by a collection. Returns the announcement ID for getannouncement, getannouncementmetrics and resync_announcement.
Get a ClearFeed announcement's status (pending, scheduled, sent) and per-channel delivery results, with collection recipients expanded to channels. The ID comes from createannouncement. For reactions and replies use getannouncement_metrics.
Get engagement for a sent ClearFeed announcement: reactions, replies and per-channel top reactions, reply timestamps and linked request IDs. Metrics are available only after delivery finishes. After createannouncement(action='sendnow'), wait a few seconds and retry if the API returns 400 'Metrics are only available for sent announcements' (delivery may take a few seconds to finish).
Push the current text of a sent ClearFeed announcement's source Slack message to every delivered copy (edits them in place; does not resend). Use after editing the source message. At least one channel must have received the announcement; if every recipient failed, ClearFeed returns 406 'Only sent announcements can be resynced'.
List all ClearFeed Quick Replies (saved HTML responses) with the collections each is available in.
Create a ClearFeed Quick Reply (saved HTML response) with a unique name, available in all collections or in specific ones (IDs from list_collections). Call once per reply to import many.
List ClearFeed SLA policies with their response/resolution targets and the collections using them. Returns the slapolicyid that clone_collection accepts.
Get one ClearFeed SLA policy's targets, conditions and collections. Use listslapolicies for IDs.
Create a ClearFeed SLA policy (admin token required) with conditional first-response/resolution targets in minutes (exactly one default) and/or per-priority one-touch targets. It is not applied to any collection; apply it via clonecollection's slapolicy_id.
Query ClearFeed reporting metrics on requests: measures (counts, first response/resolution times and percentiles, SLA breaches, CSAT, virtual agent) over a time dimension and date range, grouped by dimensions (priority, state, collection, assignee, customer, custom field) with filters.
List ClearFeed audit log entries (admin token required): who did what to which resource, from where, filterable by system, actor email, operation, resource type, source and time window. Newest first, cursor-paginated via pageinfo.nextcursor.
List ClearFeed requests (support conversations/tickets) with filters: collection, channel, states, requester emails, created/updated time window, sort order. Cursor-paginated: pass pageinfo.nextcursor for the next page. Use searchrequests for full-text search. Returns request IDs for getrequest and update_request.
Search ClearFeed request messages by full text (e.g. 'login error'), best match first, with optional collection and created-date filters. Filtering by customer is not currently supported by the ClearFeed API. Returns request IDs, titles, states and a matching snippet; use getrequest for details or listrequests to browse by state or date.
Get one ClearFeed request by ID: state, priority, assignee, customer, linked tickets, SLA metrics, custom field values; optionally its messages and parent/child request IDs. Use listrequests or searchrequests to find IDs, or getrequestbyslackmessage when you only have a Slack thread.
Find the ClearFeed request for a Slack thread or message, given the Slack workspace ID, request channel ID and any non-private message timestamp in the thread. Use when you have a Slack link but no ClearFeed request ID. Returns the same request object as get_request.
Create a ClearFeed request in the account's API collection using the default form. Description is HTML; title and priority are AI-generated when omitted. Requires an API collection in the account. To use a specific form or route to a collection, use create_ticket. Returns the new request ID.
Post a reply on an existing ClearFeed request's thread, as yourself or as the ClearFeed bot, or add a private internal note (isprivate=true) visible only to the support team. Use listrequests or search_requests to find the request ID.
Update a ClearFeed request: state, priority, title, assignee (user ID; use listusers to resolve an email), custom field values (IDs from listcustomfields), or mark it as not a request (alone). Closed requests cannot change. Use listrequests or search_requests for the ID.
Merge a source ClearFeed request into a target: moves its messages and participants to the target and DELETES the source. Both must share account, collection and channel (Slack or Telegram). ClearFeed may refuse a merge with 422 'Cannot merge requests that have external tickets.'; this is surfaced as a validation error. Use list_requests for IDs.
Bulk-import 1-50 historical requests (with full message history, requester, assignee, state, priority) into ClearFeed's API collection, e.g. when migrating from another helpdesk. external_id deduplicates for 2 weeks. Returns a per-item status (created/duplicate/failed) and the new request IDs.
List ClearFeed ticket forms, filterable by enabled state and integration type, newest first, cursor-paginated. Call this first to get the formid that createticket requires (use integration_type='clearfeed', enabled=true).
Get one ClearFeed ticket form by ID with its integration type and field definitions (which keys and custom field IDs are required on create). Use listticketforms to find form IDs; use before create_ticket.
Create a ClearFeed ticket via an enabled ClearFeed-type form. Use listticketforms for formid and getticketform/listcustomfields for required custom field IDs. Omit ishidden fields; the API rejects them. Assignee/contributors are emails; assignedteam is a team sourceid from list_teams. ClearFeed returns only the new ticket ID; no ClearFeed tool takes a ticket ID.
Link an existing Zendesk ticket or ClickUp task to a ClearFeed request, identified either by requestid (from listrequests) or by Slack messagets + channelid, not both. ClickUp links can be tasks (istask). Optional syncconfig overrides comment sync and the link alert for this link only.
Check that the ClearFeed API token works by listing collections. Returns success and a message. Run this first if other tools fail with a permission error.
List all ClearFeed collections (groups of monitored channels sharing one support config) with their IDs, owners, ticketing/CSAT config and SLA policy. Set includechannels=true to also get each collection's monitored channel IDs, needed by movechannel, removechannel and listrequests.
Start monitoring Slack channels by adding them to a ClearFeed collection (collection ID from listcollections). On Customer-Centric Inbox accounts each channel can link an existing customer (from listcustomers) or create a new one. Channel IDs come from Slack (ClearFeed cannot list unmonitored channels). All-or-nothing: one bad channel fails the call. Undo with remove_channel.
Create a new Slack collection by copying an existing one's configuration (ticketing, responders, assignment, SLA, emojis). Source ID from listcollections; optionally add request channels, a triage channel (existing ID or a new name) and an SLA policy (from listsla_policies). Returns the new collection.
Move a monitored Slack channel to another ClearFeed collection. Channel IDs come from listcollections with includechannels=true; the destination collection ID from list_collections (not the web-app URL ID).
Stop monitoring a Slack channel: removes it from its ClearFeed collection (the Slack channel itself is not deleted). Inverse of addcollectionchannels. Channel IDs come from listcollections with includechannels=true.
List ClearFeed custom fields for requests (default) or customers, with IDs, types, versions and select options (option IDs). Call this before setting customfieldvalues in updaterequest, createticket or updatecustomer, and to get the version that updatecustom_field requires.
Create a ClearFeed custom field for requests or customers: select, multiselect (with options), text, date, number, userselect or attachment. Type and entity type are fixed once created. Returns the field with its ID and option IDs. Remove with deletecustomfield.
Update a ClearFeed custom field's name or config (select options, text length). Call listcustomfields first for its ID, type and current version; send the full option list for selects (existing options keep their id). A stale version fails with a conflict.
Delete a ClearFeed custom field and its values. Use listcustomfields to find the field ID.
List ClearFeed teams (synced from Slack user groups) with IDs, active flag and Slack user-group sourceid (used as assignedteam in createticket). Set includemembers=true to get member user IDs.
Get one ClearFeed team by ID, optionally with its member user IDs. Use list_teams to find team IDs.
Look up users of the connected Slack workspace by Slack user IDs or by emails (exactly one, up to 100). Use it to turn an email into the user ID that update_request's assignee needs, or to name the user IDs in requests and teams.

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}Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now