Tool reference
Every tool the MCP server exposes, what it does, and the permissions a key needs to reach it.
Every tool the MCP server exposes. A key that lacks a tool's permissions cannot reach it, and a tool that gathers several things returns the parts the key is allowed to see rather than failing outright.
| Tool | What it does | Effect | Permissions |
|---|---|---|---|
mailmoo_inbox_list_unread | Conversations with unread messages | Read | Read inbox |
mailmoo_triage_list | What needs attention, in priority order | Read | Read inbox |
mailmoo_inbox_read_conversation | Read the messages exchanged with a lead | Read | Read inbox |
mailmoo_inbox_read_conversations | Read conversations with several leads | Read | Read inbox |
mailmoo_campaigns_search | Find campaigns | Read | Read campaigns |
mailmoo_campaign_get_context | Get everything about one campaign | Read | Read analytics, Read campaigns |
mailmoo_campaigns_compare | Compare campaign performance and messaging | Read | Read analytics, Read campaigns |
mailmoo_workspace_get_summary | Summarize workspace performance | Read | Read analytics |
mailmoo_campaign_set_state | Start or pause a campaign | Reaches a person | Turn on campaigns |
mailmoo_campaign_update_message | Edit a campaign's outreach copy | Write | Write campaigns |
mailmoo_leads_search | Search leads | Read | Read CRM, Read leads |
mailmoo_leads_set_sequence_state | Pause or resume leads in a sequence | Write | Write campaigns |
mailmoo_lead_get_context | Get everything known about a lead | Read | Read CRM, Read inbox, Read leads |
mailmoo_lead_update | Update a lead's pipeline position | Write | Change tags, Read CRM, Read leads, Update pipeline status |
mailmoo_lead_manage_note | Write, edit, or remove a note on a person | Write | Manage notes |
mailmoo_lead_manage_task | Create or change a task on a lead | Write | Manage tasks |
mailmoo_person_search | Search people | Read | Read CRM |
mailmoo_person_get_context | Get everything known about a person | Read | Read CRM |
mailmoo_company_search | Search companies | Read | Read CRM |
mailmoo_company_get_context | Get everything known about a company | Read | Read CRM |
mailmoo_blocklist_list | List the blocklist | Read | Read CRM |
mailmoo_blocklist_add | Add to the blocklist | Write | Manage blocklist |
mailmoo_blocklist_remove | Remove blocklist entries | Write | Manage blocklist |
mailmoo_blocklist_add_record | Block a person or company | Write | Manage blocklist |
mailmoo_prospects_search | Find new people who are not in the workspace yet | Read | Read leads |
mailmoo_prospects_add_to_campaign | Add new prospects to a campaign | Write | Write campaigns |
mailmoo_social_get_limits | Check a sender profile's daily limits | Read | Read inbox |
mailmoo_social_get_post | Read a social post, and optionally the people who engaged with it | Read, spends allowance | Read inbox |
mailmoo_social_list_user_posts | List a profile's recent posts | Read | Read inbox |
mailmoo_inbox_send_message | Send a message to a lead | Reaches a person | Send messages |
Effects
Read costs nothing and changes nothing. Well-behaved clients run these without asking.
Read, spends allowance changes nothing in your workspace but uses part of a connected account's daily search budget, which does not refill until the next day. Annotated as not read-only for that reason.
Write changes something in your workspace and can be undone.
Reaches a person sends a message or starts a campaign that will. Nothing takes those back. Clients are told these are destructive, and should confirm before running one.
What each tool needs
mailmoo_inbox_list_unread
Conversations containing messages nobody has opened yet, newest first, with the unique unread-lead count. This is the 'what came in' view. For deciding what to work on next, prefer triage_queue, which ranks by what actually needs doing rather than by what is unopened.
Needs: Read inbox.
mailmoo_triage_list
The triage queue: every lead that needs something from you, already ranked. Deals stalled mid-evaluation come first (existing deals are the most important to protect), then due tasks, then leads waiting on a reply, then dates you set, then leads that have gone quiet. Start here when deciding what to work on. Each item says which bucket it is in and why.
Needs: Read inbox.
mailmoo_inbox_read_conversation
The full message history with one lead, oldest first. Read this before replying, so the response follows the conversation rather than starting cold.
Needs: Read inbox.
mailmoo_inbox_read_conversations
Message history for several leads at once (up to 15), truncated to the most recent messages. Use this to compare how conversations actually go, rather than opening them one by one. A lead with no conversation is returned as an error on that row instead of failing the whole call.
Needs: Read inbox.
mailmoo_campaigns_search
List campaigns in the workspace, newest first, optionally filtered by name or by whether they are currently sending. Use this before any tool that needs a campaignId.
Needs: Read campaigns.
mailmoo_campaign_get_context
The campaign's settings, the sequence inside it, and how it is performing, in one call. Use this to answer questions about a campaign rather than fetching the pieces separately. Also returns mergeFields: the personalization variables this campaign's messages may use, which campaign_update_message validates against.
Needs: Read analytics, Read campaigns.
mailmoo_campaigns_compare
Metrics and outreach copy for several campaigns in one call, so you can compare what the top performers say and how they convert. Omit campaignIds to take the highest-reply-rate campaigns. Copy is truncated; this does not return per-lead rows.
Needs: Read analytics, Read campaigns.
mailmoo_workspace_get_summary
How the workspace did over a time window, in one call. Returns connection requests and acceptance rate, leads contacted, replies and reply rate, meetings booked, and video views when the workspace has rendered a video. Lists every campaign that sent, was replied to, or booked a meeting in the window (quiet campaigns are omitted). Also returns how many conversations are unread and how many need a reply. Defaults to the last 7 days and includes the previous window of the same length. Pass nextCursor back as cursor when truncated is true. Counts only: no lead names and no message text. Use this instead of opening campaigns one by one when asked how the workspace or the week went.
Needs: Read analytics.
mailmoo_campaign_set_state
Starts a campaign's sequence, or pauses it. STARTING A CAMPAIGN BEGINS MESSAGING REAL PEOPLE and cannot be undone for messages already sent. Confirm with the user before starting one. Pausing is always safe. Starting requires an active subscription and a sequence that passes its readiness checks; if it does not, the error says what to fix.
Needs: Turn on campaigns.
mailmoo_campaign_update_message
Rewrites the message on one step of a campaign's sequence, and the variants under it. Get the step id from campaign_get_context, which returns the sequence. THE CAMPAIGN MUST BE PAUSED: editing a running one is refused, so pause it first with campaign_set_state and confirm with the user before turning it back on. Only the fields you send change; the step's send condition, attachments and timing are untouched. 'variants' is the exception: it replaces the whole list, so include every variant you want to keep. To personalize, use a merge field: {{First Name | ""}}, with the variable's exact display name and a fallback. campaign_get_context returns mergeFields, the names this campaign accepts. Use one from that list, because a name that is not on it is rejected. Never write a placeholder as [first name] or <first name>; those are not merge fields and send to the lead literally.
Needs: Write campaigns.
mailmoo_leads_search
Search leads that already exist in the workspace (CRM), or list/search the leads in one campaign. Omit campaignId for the whole workspace; pass campaignId to stay inside that campaign. This does not find new people and does not enrich them. query is a search box: it matches first name, last name, full name, email, company, phone, or social profile URL, not industry, job title, or sequence status. For those, use the named field filters (firstName, lastName, company, jobTitle, industry, sequenceStatus), which compile to the same advanced filters as the lead table (at most 4 of those at once). pipelineStage and tag are separate and do not count toward that limit. Each page returns identity fields, job title, Oracle score, lead-fit score, sequence status, the assigned sender on leadSequence.sdrProfile, pipeline stage, timestamps, and nextCursor when more remain. Pass nextCursor back as cursor to fetch the next page. The full variables list is omitted unless includeVariables is true, because a lead can have fifty variables, some of them long text. Use this before any tool that needs a leadId.
Needs: Read CRM, Read leads.
mailmoo_leads_set_sequence_state
Pauses or resumes the sequence for specific leads, one or many (up to 100). Pausing stops further automated steps for those leads without cancelling pending work or completing the sequence, so they keep their place. Resuming puts paused leads back in the sending queue. This does not start a campaign and does not message anyone who was not already enrolled. Confirm which leads before pausing many.
Needs: Write campaigns.
mailmoo_lead_get_context
The lead's details, what has happened with them, and whether a conversation is already open. Call this before writing to a lead, so the message reflects the history rather than starting cold. A lead is one campaign's enrollment of a person, and the same person may be enrolled in several. person carries their other campaigns, so you can tell 'never contacted' apart from 'already talking to us somewhere else'.
Needs: Read CRM, Read inbox, Read leads.
mailmoo_lead_update
Move a lead to a different pipeline stage, change its tag, or set when to follow up. Stages and tags are given by name, not by ID. Only the fields you supply are changed.
Needs: Change tags, Read CRM, Read leads, Update pipeline status.
mailmoo_lead_manage_note
Notes are free text about the human, not one campaign enrollment. Creating with a leadId still works: the note is stored on that lead's person. Use 'update' and 'delete' with the noteId returned when it was created.
Needs: Manage notes.
mailmoo_lead_manage_task
Tasks are things a person still needs to do about a lead, with an optional due date. Use 'create' with a leadId, or the other actions with the taskId returned when it was created.
Needs: Manage tasks.
mailmoo_person_search
Find people in the workspace. A person is a human, not a campaign membership: one row however many campaigns they are enrolled in, with enrollments listing those campaigns and company naming where they work. Use this when the question is about a human ('have we spoken to anyone at Acme', 'who is Dana'), and use mailmoo_leads_search when the question is about a campaign's list. Returns nextCursor when more remain.
Needs: Read CRM.
mailmoo_person_get_context
One human: their fields, the companies they are attached to, every campaign they are enrolled in, and their notes and tasks. Prefer this over reading each enrollment separately: the campaigns disagree about nothing here, because the stage, the follow-up date and the close reason all belong to the person rather than to any one campaign.
Needs: Read CRM.
mailmoo_company_search
Find companies in the workspace, with how many people are attached to each. Use this to answer questions about an account rather than a contact ('are we working Acme', 'who owns that account'). For the people inside one company, follow up with mailmoo_company_get_context.
Needs: Read CRM.
mailmoo_company_get_context
One account: its fields, every campaign enrollment that targeted it, and notes recorded against the company itself rather than against one contact. Read this before messaging anyone there, so a second approach to the same account knows what the first one did.
Needs: Read CRM.
mailmoo_blocklist_list
Who must never be contacted. Each entry is a social profile URL, an email, a company page, or a domain. A domain blocks everyone there, including people not imported yet. blockedPeople and blockedCompanies count records in the workspace that currently match. Returns nextCursor when more remain. Categories are competitor, customer, partner, do_not_contact, or a label this workspace made up.
Needs: Read CRM.
mailmoo_blocklist_add
Block social profile URLs, emails, company pages, or domains so they are never contacted. A domain blocks everyone at it, including people imported later. Names are refused and returned in invalid instead of failing the request. Matching people and companies are blocked immediately and their running sequences stop. Removing the entry is the only way to unblock. Repeating a value already on the list does not duplicate it.
Needs: Manage blocklist.
mailmoo_blocklist_remove
Remove entries. People and companies they were the only match for can be contacted again. Another entry may still block the same record. Pass ids from blocklist_list.
Needs: Manage blocklist.
mailmoo_blocklist_add_record
Block someone already in the workspace. Pass exactly one of personId or companyId. A person is matched by their social profile, or by email when they have none. A company is matched by its website domain, or by its company page. The entry also blocks that identity if it is imported again. Fails when the record has nothing to match on. Running sequences for matches stop.
Needs: Manage blocklist.
mailmoo_prospects_search
Free people preview, from the professional network, for an audience the workspace does not have yet. Returns no contact details and no social profile URLs. Prefer query (e.g. 'fintech founders in the Nordics'): the server maps that to a short keyword plus places, not a stack of seniority/function/industry filters. Company-shaped audiences may run as companies_then_people; check appliedFilters.intent. Returns searchId, appliedFilters, matchCount (people on this preview page, not a total market size), and a small sample. Judge fit from names/titles/companies, then import with prospects_add_to_campaign using that searchId. Use leads_search / person_search for people already in the workspace.
Needs: Read leads.
mailmoo_prospects_add_to_campaign
Sources people from the professional network matching the audience and adds them to a campaign. THIS SPENDS WORKSPACE CREDITS per person (search + profile enrichment + fit scoring) and cannot be undone. Always call prospects_search first, check the sample looks right, then pass searchId from that response so the same search resumes for more people. query/filters work without searchId but re-run from page 1. Duplicates already in the campaign are skipped and not charged. Start with a small maxLeads (default 100, max 500). When credits are the limit, pass fillToBudget. Enrichment beyond this import path is not available over MCP.
Needs: Write campaigns.
mailmoo_social_get_limits
Returns remaining daily sending allowance and daily search allowance for connected sender profiles. Call this before sending a message or pulling post engagement. Remaining 0 means wait until tomorrow or use another sender. Pass senderProfileId to inspect one profile. Omit it to list every sender profile with a connected account, which also discovers IDs for the other social tools.
Needs: Read inbox.
mailmoo_social_get_post
Fetches a post by URL. By default returns only the post, which is cheap. Naming 'commenters' or 'reactors' additionally pulls the people who engaged, and EACH source spends part of the connected account's daily search allowance, which does not refill until tomorrow. Check remaining first with social_get_limits if you are about to spend allowance. Those people are not added to a campaign. Prefer 'commenters': someone who wrote a reply showed far more intent than someone who tapped a reaction, so the same allowance buys better leads. Ask for both only when you need volume more than quality.
Needs: Read inbox.
mailmoo_social_list_user_posts
Recent posts published by one profile, most recent first. Starts from a person rather than a post: use it to find something worth reading, then social_get_post to read it.
Needs: Read inbox.
mailmoo_inbox_send_message
Send a direct message to a lead through a connected social account. This contacts a real person and cannot be undone.
Needs: Send messages.

