
List RingCentral chats. Filter server-side by type (Everyone, Team, Group, Direct, Personal). Use this to find chat IDs. Page forward with pageinfo.nextpage_token.
Get one RingCentral chat by ID, including its members. Use list_chats to find chat IDs.
List the authenticated person's recent RingCentral chats, most recent first. Filter by type. Raise record_count for more results; this route returns a single page and does not support cursor paging.
List the authenticated person's favorite RingCentral chats. Use favoritechat to add and unfavoritechat to remove. Raise record_count for more results; this route returns a single page and does not support cursor paging.
Add a RingCentral chat to the authenticated person's favorites. Reverse with unfavoritechat. Use listchats to find chat IDs.
Remove a RingCentral chat from the authenticated person's favorites. Reverse with favoritechat. Use listfavorite_chats to find chat IDs.
List the authenticated person's RingCentral conversations. Use this to find conversation IDs. Page forward with pageinfo.nextpage_token.
Open or create a RingCentral conversation with the given member person IDs. Returns the existing conversation if one already exists for those members. Use a chat's members field or getcurrentperson for person IDs; get_person only resolves a known id. Returns the conversation with its id.
Get one RingCentral conversation by ID, including its members. Use list_conversations to find conversation IDs.
List notes in a RingCentral chat. Filter server-side by status (Active, Draft), creatorid, and creation time range. Use listchats to find chat IDs. Page forward with pageinfo.nextpage_token.
Create a note in a RingCentral chat. title is required. Use list_chats to find chat IDs. Returns the created note with its id.
Get one RingCentral note by ID, including its body. Use listchatnotes to find note IDs.
Update a RingCentral note's title or body. Only supplied fields change. Set releaselock true to release the edit lock after saving. Use listchat_notes to find note IDs.
Delete a RingCentral note permanently. Use listchatnotes to find note IDs.
Publish a RingCentral note (move it from Draft to Active). Use listchatnotes to find note IDs.
Lock a RingCentral note for editing so others cannot change it. Reverse with unlocknote. Use listchat_notes to find note IDs.
Unlock a RingCentral note so it can be edited by others. Reverse with locknote. Use listchat_notes to find note IDs.
Get the profile of the currently authenticated RingCentral person (the '~' account).
Get a RingCentral person by ID. Person IDs appear in the members, creator, and assignees fields of chats, notes, and tasks.
List posts (messages) in a RingCentral chat. Use listchats to find chat IDs. Page forward with pageinfo.nextpagetoken.
Post a message to a RingCentral chat. text is required. Use list_chats to find chat IDs. Returns the created post with its id.
Get one RingCentral post by ID within a chat. Use list_posts to find post IDs.
Edit the text of a RingCentral post. Only the post author can edit. Use list_posts to find post IDs.
Delete a RingCentral post permanently. Use list_posts to find post IDs.
List tasks in a RingCentral chat. Filter server-side by status (Pending, InProgress, Completed), creatorid, assigneeid, assignmentstatus, assigneestatus, and creation time range. Use listchats to find chat IDs. Page forward with pageinfo.nextpagetoken.
Create a task in a RingCentral chat. subject and assignees are required — a task cannot be unassigned. Assignee IDs come from a chat's members field or getcurrentperson; list_chats finds chat IDs. Returns the created task with its id.
Get one RingCentral task by ID, including assignees and due date. Use listchattasks to find task IDs.
Update a RingCentral task. Only supplied fields change. To close it, use completetask. New assignee IDs come from a chat's members field or getcurrentperson; listchat_tasks finds task IDs.
Delete a RingCentral task permanently. To mark it done instead, use completetask. Use listchat_tasks to find task IDs.
Complete or reopen a RingCentral task. Check completenessCondition with gettask first. Simple: pass status. AllAssignees: also pass assignees (IDs from gettask) to complete; reopen with status='Incomplete' and assignees=[]. Percentage: pass completenesspercentage, which alone sets progress (100 completes; status is ignored). Use listchat_tasks to find task IDs.
List RingCentral teams the authenticated person can see. Use this to find team IDs. Page forward with pageinfo.nextpage_token.
Create a RingCentral team. name is required. Pass member person IDs to seed it. Person IDs come from a chat's members field or getcurrentperson for your own. Returns the created team with its id.
Get one RingCentral team by ID. Use list_teams to find team IDs.
Update a RingCentral team's name, description, or visibility. Only supplied fields change. Use list_teams to find team IDs.
Delete a RingCentral team permanently. Use list_teams to find team IDs.
Join a public RingCentral team as the authenticated person. Reverse with leaveteam. Use listteams to find team IDs.
Leave a RingCentral team as the authenticated person. Reverse with jointeam. Use listteams to find team IDs.
Archive a RingCentral team (make it read-only). Reverse with unarchiveteam. Use listteams to find team IDs.
Unarchive a RingCentral team (restore write access). Reverse with archiveteam. Use listteams to find team IDs.
Add members to a RingCentral team by person ID. Reverse with removeteammembers. Person IDs come from a chat's members field or getcurrentperson; list_teams finds team IDs.
Remove members from a RingCentral team by person ID. Reverse with addteammembers. Current member IDs come from getchat(chatid).members (getteam returns members as null). Use listteams to find team IDs.
Check that the RingCentral connection works by fetching the signed-in person.

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