
Create a new account/company in Apollo CRM. Name is required. Optionally set domain, owner, stage and custom fields. Call listaccountstages for a valid accountstageid. For ownerid, call listusers (needs a master API key) or reuse an ownerid from searchaccounts or get_account.
Get an account by ID from Apollo CRM. Returns full account details including contacts count.
Update an existing account in Apollo CRM. Only provided fields will be updated.
Search accounts (companies) in Apollo CRM by company name, stage, owner, or labels. Use qorganizationname to filter by name. Use listaccountstages for stage IDs and listusers (needs a master API key) for owner IDs. Returns account IDs for getaccount, updateaccount and searchcontacts.
List all available account stages in Apollo CRM. Use stage IDs when creating or updating accounts.
Update the stage for multiple accounts at once. Provide account IDs and the new stage ID.
Reassign ownership of multiple accounts to a different user. For ownerid, call listusers (needs a master API key; a non-master key returns a permission error) or reuse the ownerid already on a record from searchaccounts or getaccount. Use searchaccounts to find account IDs.
Create a new contact in Apollo CRM. Provide name, email, title, company, and optional account association.
Get a contact by ID from Apollo CRM. Returns full contact details including custom fields.
Update an existing contact in Apollo CRM. Only provided fields will be updated.
Search contacts in Apollo CRM by keywords, stage, owner, account, or labels. Supports sorting and pagination.
List all available contact stages in Apollo CRM. Use stage IDs when creating or updating contacts.
Update the stage for multiple contacts at once. Provide contact IDs and the new stage ID.
Reassign ownership of multiple contacts to a different user. For ownerid, call listusers (needs a master API key; a non-master key returns a permission error) or reuse the ownerid already on a record from searchcontacts or getcontact. Use searchcontacts to find contact IDs.
Create a new deal/opportunity in Apollo CRM. Name is required. Optionally set amount, close date, stage, and associations.
Get an opportunity/deal by ID from Apollo CRM. Returns full deal details including stage and associations.
Update an existing opportunity in Apollo CRM. Change stage, amount, close date, or mark as won/lost.
Search opportunities in Apollo CRM pipeline. Filter by stage, owner, account, amount range, or close date.
Enrich company data by domain. Returns company details including size, industry, funding, technologies, and social profiles.
Bulk enrich multiple companies by domain, returning company details for each. Consumes one Apollo credit per enriched company.
Search Apollo database for companies by name, industry keywords, location, or employee count. Returns company profiles.
Get current job postings for a company by Apollo organization ID. Useful for understanding hiring activity and company growth.
Search Apollo database for people by title, seniority, location, company domain, or keywords. Returns contact info and company details.
Enrich a person's profile by Apollo id, email, LinkedIn URL, or name+company domain. Returns full contact details, employment history, and social profiles. To enrich someone found with searchpeople, pass their id from that result: search withholds lastname, email and linkedin_url, so the id is the only usable handle. Consumes one Apollo credit per match.
Bulk enrich up to 10 people per call. Provide a list of Apollo id, email, LinkedIn URL, or name+domain combinations. To enrich people found with searchpeople, pass each id from that result: search withholds lastname, email and linkedinurl. Unmatched entries are omitted from matches (see missingrecords). Consumes one Apollo credit per match.
List email accounts/mailboxes linked to Apollo. Returns email account IDs needed for addcontactsto_sequence. Requires master API key.
Search email sequences by NAME, and read their steps and performance metrics. qname matches sequence names only -- Apollo offers no other filter on this endpoint, and no way to fetch one sequence by ID, so a name search is how you find a sequence again after createsequence. Returns each sequence's emailersteps, IDs included, which updatesequence needs.
Add one or more contacts to an email sequence. Optionally specify email account to send from and override settings.
Change a contact's status in a sequence: 'remove' to remove them, 'stop' to halt their progress, or 'markasfinished' to mark the sequence completed. Use searchsequences for sequence IDs and searchcontacts for contact IDs.
List the sending-window schedules a sequence can run on — which hours and weekdays Apollo is allowed to send in, and in whose time zone. Call this before createsequence when the sequence should not use the team default, and pass the id as emailerschedule_id.
Create an email sequence with its steps and the subject and body each step sends. Creates it INACTIVE: nothing sends until you call activatesequence. Each step needs a type and waittime; email steps also need emailertouches carrying the template. Use listemailschedules for emailerschedule_id, or omit it for the team default. Needs the sequences/create endpoint enabled on the API key.
Update a sequence: rename it, change owner, schedule, labels, caps or CC/BCC, or edit its steps. emailersteps is REQUIRED and is the COMPLETE list -- a step left out is DELETED, each needs a position, and email steps need a template. Apollo never returns existing step copy, so what you send BECOMES the copy: re-send subjects and bodies you want kept. searchsequences gives the ID.
Archive a sequence. This CANNOT BE UNDONE -- Apollo publishes no unarchive endpoint -- and it deactivates the sequence and finishes every contact currently in it, so anyone mid-sequence stops receiving the remaining steps. To pause reversibly, use deactivatesequence instead. Use searchsequences for the ID.
Turn a sequence on. Contacts already enrolled begin receiving REAL email from the sending mailbox as soon as the schedule allows, and sent email cannot be recalled. Confirm the steps, the copy and the sending mailbox first. Use search_sequences for the sequence ID.
Turn a sequence off, pausing every contact in it so no further steps are sent. Reversible with activatesequence, but it does not recall email already sent. Use searchsequences for the sequence ID.
Search the emails a sequence sent. Filter by emailermessagestats (['replied'], ['opened'], ['bounced']) and emailermessagereplyclasses (['willingtomeet']). Filters are reliable; per-message flags often are not -- read bounce (not bounced) and status, and count filtered results rather than trusting opened/clicked. Set includefull_payload for message bodies.
Create a sales task/reminder in Apollo. Requires userid, contactids, priority, dueat and type. Call searchcontacts for contact IDs. For userid, call listusers (needs a master API key) or reuse an ownerid from searchaccounts or search_contacts. One task is created per contact.
Search tasks in Apollo. Filter by assignee, contact, account, type, priority, status, or due date range.
List users on the Apollo team with their IDs. Use it for an ownerid for updateaccountowners or updatecontactowners, or a userid for createtask. Requires a master API key; a non-master key returns a permission error, in which case reuse an ownerid already on a record from searchaccounts or searchcontacts. Supports pagination.
Validate Apollo credentials. Verifies credentials during setup.

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}It’s an MCP server that exposes data and functionality from Apollo via tools. Your agents can use these tools to create contacts, enrich a person’s profile, search and retrieve sequences, and more.
Apollo doesn’t offer an official MCP server at the moment (an MCP server that they would provide and manage), so you’ll need to use one from a 3rd-party vendor, like Merge.
Here are some common use cases:
Here are some popular tools across data types:
Sequences
Opportunities
Organizations
Merge Agent Handler’s Apollo MCP server comes with platform-level advantages:
Yes, Merge Agent Handler supports both default and custom security rules that scan tool inputs and outputs for sensitive data and enforce actions such as blocking, redacting, or masking fields.
These rules apply to all connectors used through the platform, including Apollo.
Here are some examples of rules you can set:
You can take these steps:
1. Sign up for Merge Agent Handler here.
2. Select the Apollo MCP server, and name it for the environment you want (e.g.,, “Apollo – Prod” vs “Apollo – Sandbox”).
3. Authenticate Apollo by completing the credential flow (typically using an Apollo API key or OAuth, depending on how your setup is configured), then store it in Agent Handler so agents don’t handle raw credentials directly.
4. Define what the agent is allowed to do with Apollo: choose which Apollo tools/endpoints are permitted (for example, search people, enrich contact, create/update contact, enroll in sequence), and set any limits (volume caps, read-only mode, allowlisted domains).
5. Set security rules for Apollo tool calls: configure DLP and policy rules such as blocking bulk exports, redacting personal emails/phone numbers, and preventing writes unless explicitly approved.
6. Test with a small, safe workflow: run a few low-volume calls (for example, “find 5 RevOps leaders at these 3 accounts”) and verify results, redactions, and logs look correct.
7. Ship a real use case behind guardrails: connect the Apollo MCP server to a production agent workflow (prospecting, enrichment, routing, sequencing), keep tight rate limits at first, then expand scope as the results look good.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now