Connect your AI Agents to Nooks in minutes

Available tools
list_accounts
List companies in the Nooks workspace, filterable by name, domain, CRM ID or last-updated time. Use this to find the accountid that listprospects, listtasks, listcalls and listemails accept, and to attach a note with createaccountnote. Page with pageinfo.cursor as page_after.
get_account
Retrieve one company by ID, including domain, headcount, description and linked CRM ID. Set includecrmcustomfields to also pull its CRM custom fields. Use listaccounts to find valid IDs. A 404 means the ID is wrong or belongs to another workspace.
list_calls
List dials made through Nooks, with duration, direction, recording URL and the outcome the rep logged. Filter server-side by prospectid, accountid, ownerid, calldispositionid or a time window (timegte/timelte). Use listcalldispositions for outcome IDs. Page with pageinfo.cursor as page_after.
get_call
Retrieve one call by ID, including duration, from/to numbers, recording URL and references to the prospect, rep and logged outcome. Set include to expand prospect, owner or callDisposition inline. Use list_calls to find valid IDs.
list_call_dispositions
List the call outcomes this workspace has configured, e.g. Connected, Voicemail, Meeting Booked. Call this to get the calldispositionid that list_calls filters on — the set is workspace-specific and cannot be guessed. Filter by name to narrow it.
get_call_disposition
Retrieve one call disposition by ID, including its label and the normalized outcome it rolls up to. Use listcalldispositions to find valid IDs, or to resolve the callDisposition reference on a call.
list_emails
List outreach emails with delivery and engagement data (deliveredat, openedat, repliedat, opencount). Filter server-side by prospectid, accountid, taskid or statuses. Use listprospects and listaccounts for those IDs. Page with pageinfo.cursor as page_after.
get_email
Retrieve one email by ID, including subject, HTML and text bodies, recipients and every engagement timestamp. Set include to expand prospect, sequence or sequenceStep inline. Use list_emails to find valid IDs.
create_email
Create a one-off email to a prospect, as a draft or sent immediately with send=true. Get prospectid from listprospects and ownerid from getcurrentuser or listusers; fromaddress must be one of the owner's mailboxes (listmailboxes). Nooks returns 422 if the prospect has unsubscribed or has no email and recipients is omitted. IMPORTANT: with send=true a 422 is raised AFTER the draft and its manualemail task are created, so calling again with corrected arguments leaves a second draft behind -- check listemails for the existing draft before retrying.
get_email_template
Retrieve one email template by ID, including its subject and HTML body with any {{merge}} tokens. Nooks exposes no list-templates route, so get templateid from a sequence step's template reference via listsequencesteps or getsequence_step.
sync_prospects
Pull 1-100 CRM records into Nooks as prospects and return the Nooks prospect_id for each. records takes CRM external IDs (Salesforce Contact/Lead or HubSpot contact IDs) obtained from the CRM, not from Nooks. This is a PARTIAL-success call: always read both results and errors.
list_mailboxes
List the sending mailboxes users have connected to Nooks, with which one is each user's default. Call this to get the mailboxid that createsequencestate accepts, or a valid fromaddress for createemail. Filter with userid (from getcurrentuser or list_users).
get_mailbox
Retrieve one mailbox by ID, including its address, whether it is the user's default and a reference to its owner. Set include to user to expand the owner inline. Use list_mailboxes to find valid IDs.
create_prospect_note
Write a note onto a prospect's record in the connected CRM and return it with the CRM's external ID. Use listprospects for prospectid. integration_type must match a CRM the workspace has connected, or Nooks returns 422. Nooks exposes no way to read notes back, so keep the returned IDs if you need them.
create_account_note
Write a note onto a company's record in the connected CRM and return it with the CRM's external ID. Use listaccounts for accountid, and createprospectnote to note an individual instead. integration_type must match a connected CRM, or Nooks returns 422.
list_prospects
List the people Nooks sequences outreach to, filterable by name, title, primary email, CRM ID, account or enrolled sequence. Use this to find the prospectid that createtask, createemail, createsequencestate and createprospectnote require. Page with pageinfo.cursor as page_after.
get_prospect
Retrieve one prospect by ID, including title, primary email, LinkedIn URL and a reference to their account. Set include to sequenceStates to expand their enrollments inline, or call listsequencestates with prospectid. Use listprospects to find valid IDs.
list_sequence_states
List sequence enrollments — which prospects are in which sequence and where they are. Filter by sequenceid, prospectid, accountid or states. This is the way to answer 'who is in this sequence' and 'what sequences is this prospect in'. Page with pageinfo.cursor as page_after.
get_sequence_state
Retrieve one enrollment by ID, including its state and references to the sequence, prospect, owner and the step it is currently on. Set include to expand sequence, prospect, creator or sequenceStep inline. Use listsequencestates to find valid IDs.
create_sequence_state
Enroll a prospect in a sequence and return the new enrollment ID. Get prospectid from listprospects, sequenceid from listsequences, ownerid from getcurrentuser or listusers, and mailboxid from listmailboxes. Nooks returns 422 if the prospect has no valid email or unsubscribed, 409 if already enrolled.
delete_sequence_state
Remove a prospect's enrollment from a sequence entirely, deleting its history and any pending tasks. Use finishsequencestate instead to stop outreach but keep the record. Use listsequencestates to find the ID. This cannot be undone.
finish_sequence_state
Mark an enrollment finished: outreach stops and pending steps are cancelled, but the enrollment and its history remain. Use deletesequencestate to remove it outright. Use listsequencestates to find the ID.
list_sequence_steps
List the steps of a sequence in order. Pass sequenceid (from listsequences) to scope it — a sequence's own record returns bare step references, not bodies. This is also how you get the complete stepids list that reordersequencesteps requires, and template IDs for getemail_template.
get_sequence_step
Retrieve one sequence step by ID, including its action, wait interval, order and any attached email template. Set include to analytics for per-step engagement counts. Use listsequencesteps with sequence_id to find valid IDs.
create_sequence_step
Add a step to a sequence and return it with its new ID. Use listsequences for sequenceid. interval is required (minutes to wait after the previous step; 0 for immediate). emailsubject and emailbody are valid only on the email actions and return 400 on any other. A 404 means sequence_id is wrong.
update_sequence_step
Change a sequence step's action, wait interval, name, note or email content. Pass at least one field. Nooks rejects a change that moves the step to a different channel, and rejects emailsubject/emailbody on non-email actions. Use reordersequencesteps to change position, not this tool. Omit any field you do not want to change -- passing name or note as null does not leave it alone, it ERASES the stored value (they are the only two that can be cleared).
delete_sequence_step
Permanently delete a sequence step. Prospects already enrolled skip the removed step. Use listsequencesteps to find step_id first — this cannot be undone. A 404 means the step is already gone or the ID is wrong.
list_sequences
List outreach sequences, filterable by name, scheduling type and last-updated time. Use this to find the sequenceid that createsequencestep, createsequencestate, listsequencesteps and the task/call/email filters take. Page with pageinfo.cursor as page_after.
get_sequence
Retrieve one sequence by ID, including its owner, scheduling type, enabled flag and privacy. Set include to analytics for lifetime engagement counts, or to owner to expand the owner inline. Use listsequencesteps with sequenceid for the step bodies. Use listsequences to find valid IDs.
create_sequence
Create an empty outreach sequence and return it with its new ID. Call getcurrentuser or listusers first for ownerid, which must be a Nooks Firebase UID. Add steps afterwards with createsequencestep, then enroll prospects with createsequencestate. A 404 means owner_id is not a real user.
update_sequence
Rename a sequence, or enable/archive it. Nooks accepts only name and enabled here; pass at least one. Use listsequences to find sequenceid, and updatesequencestep to change a step's content. Setting enabled to false archives the sequence and stops further outreach.
reorder_sequence_steps
Reorder a sequence's steps. stepids must be the COMPLETE ordered list of that sequence's step IDs in the new order — call listsequencesteps with sequenceid first and reorder what it returns. Omitting or inventing an ID returns 422. Returns the steps in their new order.
list_tasks
List rep tasks — the work queue. Filter server-side by ownerid, prospectid, sequenceid, actions, statuses, priorities, completed, or a dueat window (dueatgte/dueatlte) to answer 'what is due this week'. Use getcurrentuser for your own ownerid. Page with pageinfo.cursor as page_after.
get_task
Retrieve one task by ID, including its action, due date, priority, status and references to the owner, prospect and originating sequence step. Set include to expand owner, prospect, sequence, sequenceState or sequenceStep inline. Use list_tasks to find valid IDs.
create_task
Create a one-off task for a rep and return it with its new ID. Get ownerid from getcurrentuser or listusers, and prospectid from listprospects. action must be a manual action — automated ones exist only inside a sequence. Nooks returns 422 if ownerid or prospectid is not a real record.
update_task
Reschedule, reassign or reprioritize a task, or change its note. Nooks accepts only dueat, ownerid, priority and note here; pass at least one. Use completetask or skiptask to close a task out, not this tool. Use listusers for a valid ownerid. Omit any field you do not want to change -- passing note as null does not leave it alone, it ERASES the existing note (note is the only field here that can be cleared).
delete_task
Permanently delete a task. Use completetask or skiptask to close a task out and keep the activity record — deleting removes it entirely and cannot be undone. Nooks returns 422 for a task that cannot be deleted, e.g. one already in progress. Use listtasks to find taskid.
complete_task
Mark a task done and advance its sequence enrollment to the next step. This is the normal way to close a task; use skiptask to pass on it instead, or deletetask to remove it. Returns the updated task. Nooks returns 422 for a task that cannot be completed. Use listtasks to find taskid.
skip_task
Skip a task without doing it and advance its sequence enrollment past that step. Use completetask when the work was actually done, deletetask to remove the task entirely. Returns the updated task. Use listtasks to find taskid.
get_current_user
Identify the Nooks workspace and user behind the current credential, and return that user's Firebase UID. Call this first to get an ownerid for createsequence, createtask, createemail or createsequencestate without having to page listusers. Use listusers instead to look up someone else.
list_users
List users in the Nooks workspace, filterable by name, email or CRM ID. Use this to find the ownerid (a Firebase UID) that createsequence, createtask, createemail and createsequencestate require; use getcurrentuser for your own ID. Page with pageinfo.cursor as pageafter.
get_user
Retrieve one Nooks workspace user by their Firebase UID, including name, email and linked CRM ID. Use listusers to find valid IDs, or getcurrent_user for the credential's own user. A 404 means the ID is wrong or belongs to another workspace.
validate_credential
Validate the Nooks credential by reading the workspace it is scoped to.

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 Nooks MCP server
FAQs on using Merge's Nooks MCP server
Explore other MCP servers built and managed by Merge
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

























