MCP App Store
by KeenEthics

Overview

Bring Nooks into ChatGPT so your revenue team can act on real execution data without pulling exports or switching tools. Query tasks, prospects, sequences, email activity, call transcripts, and rep metadata. Nooks is a revenue agent platform where AI agents and reps work in the same system, giving teams a direct line from agent activity to meetings booked, pipeline generated, and revenue closed.

Tools

completeTask

ChatGPT
Complete a task Marks a task as completed. This triggers CRM sync and, for sequence tasks, automatically advances the prospect to the next step in the sequence.

createCall

ChatGPT
Create a call Creates a call that was made outside Nooks, for example from a different dialer. The call is for a prospect. The owner is the workspace user who made the call. Asynchronous processing. A 202 response means that the request is valid. Nooks logs the call in the background, usually in less than one minute. To get the result, poll GET /v1/calls/{id}: - While Nooks logs the call, the response is 202 with status pending. - When Nooks has logged the call, the response is 200 with the call. - If a step fails, Nooks retries the step for approximately 4 hours. If logging still fails, the response is 202 with status failed and an error. After a failure, the owner sees the call in the failed call logs in Nooks. The owner can retry the call there. A retry sets status to pending again. A new request with the same Idempotency-Key does not retry the call. Result. Nooks logs the call in the same way as a call made in Nooks. The call shows in call history and in reporting. If you send a task, Nooks completes the task. Nooks also logs the call to the Salesforce or HubSpot account of the workspace. You cannot disable this. If you already log the call to the CRM, do not also send it here. If you do, the CRM gets two activities for one call. Fields. - prospect: an id from GET /v1/prospects. The prospect must be linked to Salesforce or HubSpot. If you send a task, prospect is optional. The call is then for the prospect of the task. - owner: a user id from GET /v1/users. With an API key, the owner can be any user in the workspace. With OAuth, the role of the caller sets which users can be the owner. - callDisposition: an id from GET /v1/callDispositions. These are Nooks sequencing dispositions. The workspace must use Nooks sequencing. - task: optional. An id from GET /v1/tasks. The task must be a one-off task or a call step of a sequence. The task must belong to owner. If you send prospect, the task must also belong to that prospect. The task must not be complete. - to and from: Nooks changes these numbers to E.164 format. Include the country code if the number is not a US number. If the prospect does not have the to number, Nooks adds it to the phone numbers of the prospect. - time: not more than 5 minutes in the future. - duration: in whole seconds. Recording. recordingUrl is optional. Nooks does not copy the file. Nooks transcribes the file one time, when it logs the call. The app and the CRM activity link to the URL. The URL must: - Use https. - Download from the public internet without authentication, cookies or headers. - Not expire. - Continue to work when Nooks adds query parameters. - Point to a WAV or MP3 file. Nooks transcribes a stereo file as one channel and identifies the speakers by their voices. Nooks rejects a URL that has a port, credentials or an IP address. Nooks also rejects a URL that contains nooks.in, nooks.ai, twilio.com, salesloft or hubspot. Anyone with the URL can play the recording. If Nooks cannot download the file, Nooks logs the call without a transcript. You must have consent to record the call. Idempotency. To retry a request safely, send an Idempotency-Key header. All requests with the same key get the same call id, and Nooks logs the call one time. A key belongs to your workspace. Use each key for only one call. After Nooks logs the call, the key returns that call for any request body. If you do not send a key, each request creates a new call.

createCrmProspects

ChatGPT
Creates people in the signed-in user's CRM (Salesforce Leads or Contacts / HubSpot contacts) and in Nooks, as the user, on their own CRM connection, attached to one account: accountId (Nooks account id), externalAccountId (CRM account id), or accountToCreate for a company with no CRM account, whose existing account is reused when one is found and otherwise created first. People already in the CRM are matched, never duplicated. At most 25 people per call, each listed once. With dryRun true (the default) nothing is written: each person comes back will_create, will_update (already in the CRM, with the changes the write makes to the record), matched_existing (with prospectId), refused or failed (with reason), plus the account outcome for a company, and a previewId when there is something to write. The preview is what the user reviews before anything is written. With dryRun: false, the same people and account, and a previewId from the last 15 minutes, the people the preview marked will_create or will_update are written; each previewId works once, and a person added or changed since the preview is refused. Each person then comes back created, updated (its record changed as previewed) or matched_existing (with prospectId and crmId), refused or failed (with reason). Returned prospect ids are ready for sequence enrollment.

createEmail

ChatGPT
Create an email Creates a one-off email to a prospect on behalf of a workspace user (ownerId), and optionally sends it immediately. Nooks creates a manual_email task for the prospect with a draft email attached, writes the given content to the draft, and, when send: true, submits it through the owner's connected mailbox, applying the workspace's deliverability safeguards (unsubscribe checks, pre-bounce validation, tracking, send spacing). With send: false (the default) the email is left as a draft the owner can review and send from Nooks. Recipients default to the prospect's primary email; pass recipients to override them (required when the prospect has no primary email). The sender defaults to the owner's default mailbox alias; pass from to use another of the owner's aliases. Not transactional: the draft is created before the send. If a send: true request returns 422 for a send-time rejection, the draft email and its manual_email task already exist in the owner's Nooks task list. Fix and resend from Nooks rather than retrying this endpoint, which would create a second draft.

createSequence

ChatGPT
Create a sequence Creates a new, empty sequence owned by the given user. Steps are added and edited in the Nooks app. This endpoint creates the sequence container (name, type, owner, privacy, tags). OAuth callers with the user role can only create sequences owned by themselves; admin and manager roles can create sequences for any user in the workspace. When that check fails (or owner.id is not a workspace member), OAuth callers receive 403 INSUFFICIENT_PERMISSION; API-key callers receive 422 for an unknown owner. To enroll prospects into the new sequence, use POST /v1/sequenceStates.

createSequenceState

ChatGPT
Enroll a prospect in a sequence Enrolls a prospect into a sequence, creating a new sequence state. When enrolling on behalf of a user, respect the sequence's privacy (returned by GET /v1/sequences/{id}): enroll into private sequences only on behalf of their owner.

createTask

ChatGPT
Create a task Creates a one-off task (not associated with a sequence). The task is validated and synced to CRM automatically.

deleteSequenceState

ChatGPT
Remove prospect from sequence Removes a prospect from a sequence by deleting the sequence state. This unenrolls the prospect and cancels any pending tasks.

deleteTask

ChatGPT
Delete a task Permanently deletes a task. If the task belongs to an active sequence enrollment, the sequence is automatically advanced to the next step (or finished if it was the last step) before deletion.

finishSequenceState

ChatGPT
Finish a sequence state Marks a sequence state as finished (complete). This stops the prospect's progression through the sequence and performs cleanup of pending tasks. This endpoint is idempotent: returns 204 even if the sequence state is already finished.

getAccount

ChatGPT
Returns a single account by its unique identifier, regardless of source platform. Use this when you already have an account ID (e.g. from a call record) and need the full account record.

getCall

ChatGPT
Returns a single call by its unique identifier.

getCallDisposition

ChatGPT
Returns a single call disposition by its unique identifier.

getCallTranscript

ChatGPT
Returns the full transcript of a single call as speaker-labeled, timestamped turns, preceded by structured call metadata (rep, contact, duration, disposition, talk ratio). Use listCalls to discover call IDs. Only available for calls made by reps with an AI Coaching seat — calls made by unlicensed reps return an access-denied error. Very long transcripts are truncated, with a notice appended when that happens (truncated: true). Not every call has a transcript: when the recording was never transcribed, the response is hasTranscript: false with transcript: null (use listCalls with filter[hasTranscript]=true to list only calls that have one).

getDesktopNote

ChatGPT
Returns a single Nooks Desktop meeting note by its unique identifier. Only resolves notes belonging to the calling rep's own account. Also called "Nooks notes", "desktop notes", or plain "meeting notes" — these all refer to the same Nooks Desktop meeting notes.

getEmail

ChatGPT
Get email by ID Returns a single email by its unique identifier. Unlike GET /v1/emails, this endpoint also returns unsent drafts and queued sends (e.g. created via POST /v1/emails). Those come back with status: draft and type: null until the email actually sends.

getEmailTemplate

ChatGPT
Get email template by ID Returns the full content of a single email template by its unique identifier. Template IDs come from GET /v1/emailTemplates or the template reference on a sequence step (use GET /v1/sequenceSteps/{id}?include=template to inline the template DTO directly).

getMailbox

ChatGPT
Get mailbox by ID Returns a single mailbox by its unique identifier.

getMe

ChatGPT
Get the authenticated principal Returns the workspace and user for the current credential. A 200 confirms the credential is valid; 401 means it's expired, revoked, or malformed. - For OAuth callers, userId is the end user who authorized the token (JWT sub). - For API-key callers, userId is the Nooks user who generated the key on the API Keys page in Developer Settings. - userId is always populated. email and name are null if that user no longer has a seat in the workspace. - clientId and scopes are null for API-key callers (API keys have full workspace access). Response is intentionally flat as an introspection endpoint and doesn't follow the nested ReferenceObject shape the resource endpoints use. Available to any authenticated caller regardless of granted scopes.

getProspect

ChatGPT
Returns a single prospect by its unique identifier

getPublicIpList

ChatGPT
List Nooks egress IP addresses Returns the public IPv4 addresses Nooks connects from when it calls your systems: webhook deliveries, CRM syncs, and other outbound integrations. Allowlist these if your firewall or webhook receiver restricts inbound traffic by source IP. No authentication is required. The list is refreshed daily and new addresses may be added over time, so poll this endpoint daily to keep your allowlist current. Responses are cacheable for one hour.

getSequence

ChatGPT
Get sequence by ID Returns a single sequence by its unique identifier.

getSequenceState

ChatGPT
Get sequence state by ID Returns a single sequence state by its unique identifier.

getSequenceStep

ChatGPT
Get sequence step by ID Returns a single sequence step by its unique identifier.

getTask

ChatGPT
Get task by ID Returns a single task by its unique identifier.

getTeam

ChatGPT
Returns a single Nooks native team with its full member list (userId, name, email per member). Use this to inspect team composition — e.g. which reps roll up into a team — before filtering other tools by team.

getUser

ChatGPT
Get user by ID Returns a single user by their unique identifier. Returns 404 if the user does not exist or does not have a seat assignment in the workspace.

listAccounts

ChatGPT
Returns a paginated list of accounts (companies) in the workspace, across every source platform. Supports filtering by id, exact name (no substring match), exact domain, CRM ID, source platform, and updatedAt range. Account IDs also appear on call records (filter[account][id] on listCalls); use getAccount to resolve an account ID to its full record. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listCallDispositions

ChatGPT
Returns a paginated list of call dispositions for the workspace. Supports filtering by id, exact name, and source. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listCalls

ChatGPT
Data-export tool: returns a paginated list of every call in the workspace. Supports filtering by id, call time, prospect, account, disposition, owner, team, and transcript availability. This is not the right tool for searching through calls or any coaching/insight related use cases. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listDesktopNotes

ChatGPT
Returns the calling rep's own Nooks Desktop meeting notes, most recent first. With no filter, returns recent notes across all meetings. Filter by account or prospect to scope to a specific CRM record, and/or by filter[startedAt][gte]/[lte] to scope to a date range. Never returns another rep’s notes. Also called "Nooks notes", "desktop notes", or plain "meeting notes" — these all refer to the same Nooks Desktop meeting notes.

listEmailTemplates

ChatGPT
List email templates Returns the templates on the workspace's Templates page, ordered by id and paginated with cursors. Each item includes the full subject and body. To fetch a single template, call GET /v1/emailTemplate/{id}, which uses the singular emailTemplate. By default the list returns only active templates. filter[archived]=true returns only archived ones. The list does not include the copies of a template that sequence steps make. To read one of those, call GET /v1/sequenceSteps/{id}?include=template. There is no name search. Narrow the list with the owner or updatedAt filters, or page through it. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listEmails

ChatGPT
List emails Returns a paginated list of emails. Supports filtering by ID, prospect, task, status, and updatedAt range. Unsent drafts (e.g. created via POST /v1/emails with send: false) do not appear in this list until they are sent, including when filtering by id (filter[id] silently omits draft ids) or by filter[status]=draft. Fetch drafts by id via GET /v1/emails/{id}. filter[task][id] matches the sequence task that triggered the email. filter[account][id] joins through the email's prospect. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listMailboxes

ChatGPT
List mailboxes Returns a paginated list of mailboxes (email aliases). Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listProspects

ChatGPT
Returns a paginated list of prospects. Supports filtering by id, name, title, primary email, CRM ID, source platform (type), sequence enrollment, account, and updatedAt range. crmId is null for non-CRM prospects. When the same person exists as both a CRM-typed (salesforce/hubspot) record and an external-sequencing-platform record (outreach/salesloft/gong/apollo/groove), the CRM record is the canonical one — enrolling the other into a Nooks sequence resolves to the CRM record when it exists and is rejected when it does not. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listSequenceStates

ChatGPT
List sequence states Returns a paginated list of sequence states (enrollments). Supports filtering by sequence, prospect, account, and state. filter[account][id] joins through the prospect. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listSequenceSteps

ChatGPT
List sequence steps Returns a paginated list of sequence steps. Supports filtering by step IDs or by sequence. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listSequences

ChatGPT
List sequences Returns a paginated list of sequences. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listTasks

ChatGPT
List tasks Returns a paginated list of tasks. Tasks represent individual outreach activities (calls, emails, etc.) assigned to users. filter[account][id] joins through the task's prospect. The updatedAt range is half-open: gte is inclusive, lt is exclusive. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

listTeams

ChatGPT
Returns all active Nooks native teams in the workspace with their member counts. Use this to discover valid team IDs and names before filtering other tools by team — e.g. a team ID returned here can be passed to listCalls as filter[team][id], or to searchConversations as hostTeamIds / participantTeamIds.

listUsers

ChatGPT
List users Returns a paginated list of users in the workspace. Only users with active seat assignments are returned. Filter by CRM id. Looks up the Nooks user mapped to the given external id in the connected CRM (e.g. a Salesforce User.Id / OwnerId). filter[crmId] returns an empty list if no Nooks user is mapped to that id. Pagination: start with page[size]=25. Only request larger pages if you actually need more — responses above that threshold can be truncated or spilled to an attached file by MCP clients. Use the links.next cursor (page[after]) to page through results instead of increasing page[size].

searchCalls

ChatGPT
PREFERRED tool for finding and analyzing calls for coaching, QA, and review. Searches what was actually said: pass transcriptQuery to find calls containing a keyword or phrase anywhere in the transcript, and/or speakerQuery (optionally scoped to the rep or prospect) to find a phrase in a single speaking turn. Returns the matching calls (most recent first) with the matching transcript snippets, so you can pull up the right calls to analyze or coach on — e.g. how a rep handled an objection, talked about pricing, or ran discovery. The transcript and speaker keyword search is what sets this apart from listCalls, which cannot search transcript text. Transcript/speaker queries are optional, so this also serves as a fast, relevance-ranked call search even when you only filter by time, prospect, account, disposition, outcome, minimum duration, owner, or team. SCOPE: only covers calls placed by reps with an AI Coaching seat — for a complete export of every call in the workspace (including unlicensed reps), use listCalls instead. Results are cursor-paginated and capped at 10,000 (totalCount is a lower bound, shown as "N+", once that cap is reached).

searchDesktopNotes

ChatGPT
Fuzzy-searches the calling rep's own Nooks Desktop meeting notes by title and participant/company name (not note bodies, AI summaries, or transcripts). Also returns matching People and Companies derived from the notes' attendees — each carries noteIds (their own notes, most recent first) and a noteCount total, so fetch those with getDesktopNote rather than searching again, plus a prospectId/accountId when the attendee resolved to a CRM record (usable as listDesktopNotes filter[prospect][id]/filter[account][id]). Optionally scoped to a filter[startedAt][gte]/[lte] date range — omit q to just list notes in that range. Never returns another rep's notes. Also called "Nooks notes", "desktop notes", or plain "meeting notes" — these all refer to the same Nooks Desktop meeting notes.

skipTask

ChatGPT
Skip a task Skips a task without completing the associated action. For sequence tasks, skipping advances the prospect to the next step in the sequence. The task status will be updated to skipped.

syncProspects

ChatGPT
Sync prospects from CRM Syncs up to 100 CRM records (Salesforce or HubSpot) into Nooks prospects by externalId, creating them if they don't already exist. Per-record outcomes are returned in results and errors.

updateSequence

ChatGPT
Update a sequence Updates a sequence's name and/or enabled flag. Setting enabled to false archives the sequence; true reactivates it. At least one field must be provided. OAuth callers with the user role can only update sequences they own (403 INSUFFICIENT_PERMISSION otherwise); admin and manager roles can update any sequence in the workspace.

updateSequenceState

ChatGPT
Replace an enrollment's email overrides Replaces the per-step email content overrides of a prospect that is already enrolled, using the same emailOverrides shape as POST /sequenceStates. Use this to refresh personalized content on an in-flight enrollment instead of removing and re-enrolling the prospect. The request body is the complete set of overrides for the enrollment, not a merge: - A step in emailOverrides that already has an unsent email (the current step, or a step overridden earlier) has its subject and body rewritten in place. A field you omit (subject or body) reverts to the step's template, not to the previous override; on a step with no template it keeps its current value. - A step in emailOverrides with no email yet gets a pending email that is used when the enrollment reaches it. - An email step you leave out of `emailOverrides` loses any override it had: a not-yet-reached step goes back to sending the step's template, and the current step's unsent draft is reverted to the template's content. This includes edits a user made to that draft in the Nooks Outbox. Only email steps can be overridden, and only the current step or later ones. Already-sent emails and AI-generated Play emails are never touched. The request is all-or-nothing: if any step is rejected, nothing is changed. Listing the enrollment's tasks (GET /tasks?filter[prospect][id]=…&filter[sequence][id]=…) shows which not-yet-reached email steps already have a pending task, but not why: a pending task can come from an override or from an AI-generated Play email (which this request never touches), and unsent draft content is not returned by GET /emails (see that endpoint). Treat this request as declaring the full desired set of overrides rather than reading the current one back first. Returns 409 if the enrollment is finished, or if the email for a step in emailOverrides has already been sent.

updateTask

ChatGPT
Update a task Updates one or more fields on an existing task. Only the following fields can be changed: - dueAt reschedules the task to a new due date and time - ownerId reassigns the task to a different user - priority changes the task priority (low, normal, high, urgent) - note updates the task note (set to null to clear) At least one field must be provided. All other task fields (action, prospect, sequence, etc.) are immutable through this endpoint.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps