# Apollo MCP MCP Server

> **Apollo MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Apollo MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/apollo-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

Search Apollo's B2B contact and company database, enrich records in bulk, and manage email sequences from your connected Apollo account.

---

## Details

- Server ID: `apollo-mcp`
- Version: 1.0.0
- Tools: 73
- Authentication: OAuth, managed by MewCP
- Calls served: 72
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — Apollo MCP has to be in the toolset
first. In order:

1. Add Apollo MCP to your toolset at https://mewcp.com/mcp/apollo-mcp
2. Connect your Apollo MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Copy your MewCP API key from the dashboard (Developer)
4. Configure your client with the snippet for it below

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (73)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `apollo_accounts_create` _(destructive)_ — Use the Create an Account endpoint to add a new account to your team's Apollo account. Use this when adding a single account; to add several at once, use the…
- `apollo_accounts_update` _(destructive)_ — Use the Update an Account endpoint to update existing accounts in your team's Apollo account. The values you send overwrite the account's current values, and…
- `apollo_accounts_bulk_create` _(destructive)_ — Create many accounts (companies) in one call. Pass an array of account objects under accounts. No deduplication is applied by default: each object becomes a…
- `apollo_analytics_sync_report` _(read)_ — Query Apollo's sales analytics data with flexible filtering, grouping, and aggregation. Supports metrics across emails, calls, meetings, tasks, opportunities,…
- `apollo_contacts_create` _(destructive)_ — Create a new contact in Apollo. Use this when adding a single contact; to add several at once, use the Bulk Create Contacts tool (apollo_contacts_bulk_create).…
- `apollo_contacts_update` _(destructive)_ — Update an existing contact in your team's Apollo account. In Apollo terminology, a contact is a person that your team has explicitly added to your database. A…
- `apollo_contacts_search` _(read)_ — Use the Search for Contacts endpoint to search for the contacts that have been added to your team's Apollo account. In Apollo terminology, a contact is a…
- `apollo_contacts_bulk_create` _(destructive)_ — Create many contacts in a single call. Pass an array of contact objects under contacts. Apollo automatically prevents duplicates: any object that matches an…
- `apollo_context_center_show` _(read)_ — Fetch the team's full Context Center — the Ideal Customer Profile (ICP) and all product profiles Apollo uses to personalize AI-generated messaging. Returns the…
- `apollo_context_center_create_profile` _(write)_ — Create the team's Context Center Ideal Customer Profile (ICP). The ICP is the single team-wide profile Apollo uses to personalize AI-generated outreach: who…
- `apollo_context_center_update_profile` _(destructive)_ — Update fields on the team's EXISTING Context Center Ideal Customer Profile (ICP). Each field you send REPLACES the prior value of that field; fields you omit…
- `apollo_context_center_show_product` _(read)_ — Fetch a single product from the team's Context Center by its Apollo id. Use this to read a product's current details before editing or referencing it in…
- `apollo_context_center_create_product` _(write)_ — Add a product (or service) to the team's Context Center. Products describe specific offerings Apollo can reference when generating outreach. Each call creates…
- `apollo_context_center_update_product` _(destructive)_ — Update an existing product in the team's Context Center. Each field you send REPLACES the prior value of that field; fields you omit are left unchanged. BEFORE…
- `apollo_conversations_search` _(read)_ — Search conversations for the current team, sorted by start time descending. Use this tool to discover conversation IDs before calling get_transcript,…
- `apollo_conversations_get_transcript` _(read)_ — Retrieve the transcript for a single conversation. The end user will not provide a conversation id directly. Call Search Conversations…
- `apollo_conversations_get_insights` _(read)_ — Retrieve AI-generated insights for a single conversation. The end user will not provide a conversation id directly. Call Search Conversations…
- `apollo_conversations_get_recording_links` _(read)_ — Fetch temporary presigned recording links for a single conversation. The end user will not provide a conversation id directly. Call Search Conversations…
- `apollo_deals_create` _(write)_ — Create a new deal (opportunity) in Apollo. A deal represents a potential sale tied to an account, with stage, amount, and close date. Only `name` is required;…
- `apollo_deals_search` _(read)_ — Search the deals (opportunities) in your team's Apollo account. Returns a paginated list of deals matching the supplied filters. All filters AND together; omit…
- `apollo_deals_show` _(read)_ — Retrieve a single deal (opportunity) by its Apollo ID, including full details (stage, amount, close date, owner, account, contact roles). Use Search Deals…
- `apollo_domain_purchase_index` _(read)_ — List the domains the team has purchased through Apollo. Returns each domain's id, domain name, status, billing period, SPF/DKIM/DMARC diagnostics, and any…
- `apollo_email_account_purchase_index` _(read)_ — List the team's Apollo-provisioned (purchased) mailboxes. Returns each mailbox's id, email, mailbox type (type_cd), provisioning status (status_cd:…
- `apollo_email_account_purchase_create` _(destructive)_ — Purchase one or more Apollo-provisioned outbound mailboxes against a domain the team already owns. THIS CONSUMES CREDITS and provisions real mailboxes — it is…
- `apollo_email_accounts_index` _(read)_ — Use the Get a List of Email Accounts endpoint to retrieve information about the linked email inboxes that your teammates use in your Apollo account. In…
- `apollo_emailer_campaigns_search` _(read)_ — Use the Search for Sequences endpoint to search for the sequences that have been created for your team's Apollo account. This endpoint should be called before…
- `apollo_emailer_campaigns_show` _(read)_ — Fetch a single sequence's full step-by-step detail: its ordered steps and, for each step, its touches (emailer_touches) and the email template content (subject…
- `apollo_emailer_campaigns_add_contact_ids` _(destructive)_ — Use the Add Contacts to a Sequence endpoint to add contacts to existing sequences in your team's Apollo account. This action sends real emails from a real…
- `apollo_emailer_campaigns_remove_or_stop_contact_ids` _(destructive)_ — Remove or stop contacts from one or more Apollo sequences. This action modifies live sequence enrollment state and may affect active outbound workflows. -…
- `apollo_emailer_campaigns_approve` _(destructive)_ — Activate (turn on) an existing sequence so that contacts enrolled in it begin receiving emails and tasks. This is the toggle that flips active=false to…
- `apollo_emailer_campaigns_activity_feed` _(read)_ — Return a single contact's sequence enrollment/engagement timeline — the same enrollment activity a user sees on the contact's Apollo timeline — as a…
- `apollo_emailer_messages_create` _(write)_ — Creates a draft email message for a contact. The draft is saved but NOT sent until you call apollo_emailer_messages_send_now. BEFORE calling this tool: 1. Call…
- `apollo_emailer_messages_send_now` _(destructive)_ — Sends a drafted email immediately. The send_from parameter sets which mailbox sends the email. You MUST provide it with the email_account_id and the email…
- `apollo_emailer_messages_email_send_status` _(read)_ — Check the delivery status of an email after calling apollo_emailer_messages_send_now. Pass the emailer_message id from the send_now response. If status is…
- `apollo_emailer_messages_search` _(read)_ — Report on the emails of a sequence (emailer_campaign). Two ways to call it: 1. LIST / STATUS COUNTS — pass emailer_campaign_id with display_mode…
- `apollo_emailer_messages_get_content` _(read)_ — Fetch the content of one or more SENT emails by id — subject, body (plain text or raw HTML), recipients, sent time, and status. Pass an ids array (e.g. ids…
- `apollo_emailer_schedules_index` _(read)_ — List all sending schedules available in the user's team. A schedule defines the time windows (days of week, hours of day, time zone) during which Apollo will…
- `apollo_feedback_log` _(write)_ — Call this tool to report when a previous Apollo tool returned an unexpected, empty, or unhelpful result — for example, when a search returned no results…
- `apollo_fields_index` _(read)_ — List your team's fields so you can set them on accounts or contacts. Use this BEFORE calling the Create/Update/Bulk Create tools for accounts or contacts…
- `apollo_labels_index` _(read)_ — List the Apollo lists (also called labels) that belong to your team. In Apollo terminology, a list is a named, saved group of records — most commonly a list of…
- `apollo_labels_create` _(write)_ — Create a new, empty Apollo list (label) for your team. In Apollo terminology, a list is a named, saved group of records. Supply the modality to choose whether…
- `apollo_labels_update` _(destructive)_ — Rename an existing Apollo list (label). Pass the list id and the new name. Use List Lists (apollo_labels_index) to discover the id of the list you want to…
- `apollo_labels_add_entity_ids_to_label_names` _(write)_ — Add one or more contacts or accounts to one or more Apollo lists. Identify the records by their Apollo ids (entity_ids) and the lists by name (label_names).…
- `apollo_labels_remove_entity_ids_from_label_names` _(destructive)_ — Remove one or more contacts or accounts from one or more Apollo lists. Identify the records by their Apollo ids (entity_ids) and the lists by name…
- `apollo_mixed_companies_search` _(destructive)_ — Searches Apollo's global company database (all companies Apollo indexes, not just your team's saved accounts). Use this tool for prospecting — there is no…
- `apollo_mixed_people_api_search` _(read)_ — Searches Apollo's global people database (all people Apollo indexes, not just your team's saved contacts). Use this tool for prospecting net new people; use…
- `apollo_organizations_lookup` _(read)_ — Default free organization discovery tool for MCP agents. Find organization candidates using a fuzzy company name (domains can be passed as…
- `apollo_organizations_job_postings` _(destructive)_ — Use the Organization Job Postings endpoint to retrieve the current job postings for a company. Find the organization `id` first with…
- `apollo_organizations_enrich` _(destructive)_ — Use the Organization Enrichment endpoint to enrich data for 1 company. Enriched data potentially includes industry information, revenue, employee counts,…
- `apollo_organizations_bulk_enrich` _(destructive)_ — Use the Bulk Organization Enrichment endpoint to enrich data for up to 10 companies with a single API call. Provide a list of domains to enrich. Enriched data…
- `apollo_people_match` _(destructive)_ — Use the People Enrichment endpoint to enrich data for 1 person. Apollo relies on the information you pass via the endpoint's parameters to identify the correct…
- `apollo_people_bulk_match` _(destructive)_ — For each person, provide identifying details such as first name, last name, email, organization name, domain, or LinkedIn URL. By default, this endpoint does…
- `apollo_phone_calls_create` _(write)_ — Log a phone-call record in Apollo. Use this to record outbound/inbound dialer activity tied to a contact and (optionally) an account or opportunity. If…
- `apollo_phone_calls_search` _(read)_ — Search phone-call records in your team's Apollo account. Returns a paginated list of calls matching the supplied filters. All filters AND together; omit a…
- `apollo_phone_calls_update` _(destructive)_ — Update an existing phone-call record (e.g. to attach a note, outcome, or quality feedback). If this tool returns an unexpected, empty, or unhelpful result,…
- `apollo_sequences_create` _(write)_ — Create a new multi-step outreach sequence (also called an emailer campaign) in the user's Apollo workspace. A sequence has a name, an optional sending…
- `apollo_sequences_update` _(destructive)_ — Update an existing sequence's metadata, schedule, steps, touches, and templates in a single call. DECLARATIVE DIFF SEMANTICS — the emailer_steps array you send…
- `apollo_tasks_create` _(write)_ — Create a single task in Apollo. A task is an action item (call, email, LinkedIn step, generic action_item) assigned to a user and tied to a contact, account,…
- `apollo_tasks_bulk_create` _(write)_ — Create many tasks in a single call. Pass an array of task attribute objects under tasks_attributes. Each object accepts the same fields as the single Create…
- `apollo_tasks_search` _(read)_ — Search the tasks in your team's Apollo account. Returns a paginated list of tasks matching the supplied filters. All filters AND together; omit a filter to…
- `apollo_tasks_show` _(read)_ — Fetch the full detail of a single task by ID, including the action to perform (e.g. the LinkedIn message body or call script), the associated contact, and —…
- `apollo_tasks_complete` _(write)_ — Mark a single task as completed. For a task that belongs to a sequence, completing it advances the contact to the next step of that sequence. Complete a task…
- `apollo_tasks_update` _(write)_ — Edit an existing task in place — change its title, note, priority, due date, assignee, or the message body (subject / body_text) for email and LinkedIn-step…
- `apollo_tasks_skip` _(write)_ — Skip a single task without performing it. For a task that belongs to a sequence, skipping it moves the contact past this step. Tasks controlled by a workflow…
- `apollo_usage_stats_credit_usage_stats` _(read)_ — Retrieve credit usage stats for the authenticated team — credits used, remaining, and reset windows for enrichment/people-search/email-reveal credits. Takes no…
- `apollo_users_api_profile` _(read)_ — Use the Profile endpoint to get the user's profile information (name, email, title, id) Set include_credit_usage to true to include credit usage information in…
- `apollo_users_search` _(read)_ — List or search the users (teammates) in your team's Apollo account. Useful when you need a user's Apollo ID to set as owner/assignee on another resource (deal…
- `apollo_webhook_result_show` _(read)_ — Poll for the result of an asynchronous enrichment request: either a phone-number reveal started by apollo_people_match or apollo_people_bulk_match with…
- `apollo_website_visitor_domain_tracker_index` _(write)_ — Retrieve the website visitor domain tracker configuration for the team. Returns the tracker id, team id, the list of active allowed referrer domains (with…
- `apollo_website_visitor_domain_tracker_install_script` _(read)_ — Return the ready-to-embed Apollo website visitor tracking snippet for the team, with the team's tracker id already substituted in — so callers never…
- `apollo_website_visitor_domain_tracker_update` _(destructive)_ — Add, edit, or delete a domain in the team's website visitor domain tracker. The `action` field inside `domain_data` controls which operation is performed: -…
- `apollo_website_visitor_domain_tracker_send_install_email` _(destructive)_ — Email the Apollo website visitor tracking JavaScript snippet to one or more recipients. Typically used to send the script to a developer who will install it on…
- `apollo_website_visitors_domain_aggregates` _(read)_ — Returns visit counts, unique-visitor counts, and top visited paths for a single visiting company on one of your team's tracked websites, over a date range. Two…

---

## Connect

Gateway URL: https://gateway.mewcp.com/personal/mcp

Every request carries one header:

    Authorization: Bearer <API_KEY>

Replace `API_KEY` with your own key from the dashboard (Developer).

## Apps

### Claude Desktop

Mac & Windows app

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://gateway.mewcp.com/personal/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open Claude Desktop → Settings → Developer → "Edit Config"
2. Paste the snippet inside the outer { } of the config file (merge with your existing "mcpServers" section if you have one)
3. Save the file, then quit Claude Desktop completely and reopen it
4. Start a new conversation — your tool will be available

### VS Code

Copilot / Cline

- Command Palette → "MCP: Open User Configuration" (opens mcp.json). For one project only, use .vscode/mcp.json instead.

```json
{
  "mcp.servers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have a "servers" section in your mcp.json? Just add the server entry inside it.

1. Open VS Code → Command Palette (Cmd+Shift+P / Ctrl+Shift+P)
2. Run "MCP: Open User Configuration" to open your mcp.json
3. Paste the snippet and save
4. Start the server when prompted (or from the MCP servers view) and use it in Copilot Chat

### Cursor

AI-first editor

- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your mcp.json? Just add the server entry inside it.

1. Open Cursor → Settings → Cursor Settings → MCP
2. Click "Add new global MCP server"
3. Paste the snippet and save
4. Restart Cursor

### Codex

OpenAI's CLI agent

- Add the snippet to your Codex MCP config or your standard MCP config file for the CLI tool you use.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Codex generally reads a standard MCP server block, so you can add this alongside your other configured servers.

1. Open your Codex MCP config or project-level config file
2. Paste the MewCP server block inside the config JSON/TOML structure your tool expects
3. Save the file and restart Codex
4. Verify the tool is available inside a fresh session

### Claude Code

Anthropic's CLI agent

- ~/.claude.json (user scope) or .mcp.json in your project root — create it if it doesn't exist. Or skip the file and use the CLI command below.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open ~/.claude.json (or .mcp.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file and start (or restart) Claude Code
4. Or skip the file entirely and run the CLI command below instead

### OpenCode

Open-source terminal agent

- ~/.config/opencode/opencode.json (global) or opencode.json in your project root — create it if it doesn't exist.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mewcp": {
      "type": "remote",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcp" section in your opencode.json? Just add the server entry inside it.

1. Open ~/.config/opencode/opencode.json (or opencode.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and start (or restart) OpenCode

### OpenClaw

Self-hosted agent gateway

- ~/.openclaw/openclaw.json — create it if it doesn't exist.

```json
{
  "mcp": {
    "servers": {
      "mewcp": {
        "transport": "streamable-http",
        "url": "https://gateway.mewcp.com/personal/mcp",
        "enabled": true,
        "headers": {
          "Authorization": "Bearer API_KEY"
        }
      }
    }
  }
}
```

Already have an "mcp" section in your openclaw.json? Just add the server entry inside "servers".

1. Open ~/.openclaw/openclaw.json in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and restart OpenClaw

### Antigravity

Google's agentic IDE

- ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace-local) — create it if it doesn't exist.

```json
{
  "mcpServers": {
    "mewcp": {
      "serverUrl": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it. Remote servers must use the "serverUrl" field — the legacy "url"/"httpUrl" fields aren't supported.

1. In the editor's agent side panel, click "…" → "MCP Servers" → "Manage MCP Servers" → "View raw config" (Antigravity CLI: type /mcp instead to open the Interactive MCP Manager)
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file — the server connects automatically

### Hermes

Nous Research's CLI agent

- config.yaml in your Hermes config directory (~/.hermes) — add this under a top-level "mcp_servers:" key.

```yaml
mcp_servers:
  mewcp:
    url: "https://gateway.mewcp.com/personal/mcp"
    headers:
      Authorization: "Bearer API_KEY"
```

Already have an "mcp_servers" section in your config.yaml? Just add the server entry inside it.

1. Open config.yaml in your Hermes config directory
2. Paste the snippet under the top-level "mcp_servers:" key (merge with existing entries if you have any)
3. Save the file, then run /reload-mcp in Hermes (or start a fresh session)
4. Ask Hermes "Tell me which MCP-backed tools are available right now" to confirm it connected

### DeepSeek Harness

DeepSeek's agent harness

- cordis.yml in your DSH project — or the patch file you mount plugins from.

```yaml
- id: mcp-mewcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: mewcp
    transport: streamable-http
    url: https://gateway.mewcp.com/personal/mcp
    headers:
      Authorization: "Bearer API_KEY"
```

One plugin instance = one MCP server. Add this entry to your plugin list; don't nest it inside another entry.

1. Open cordis.yml (or your patch file) in your DSH project
2. Paste the entry into your plugin list, keeping the leading dash and indentation
3. Restart DSH (or let HMR reload) — tools register as mcp__mewcp__<tool_name>
4. Verify with: dsh web --dump-config | grep -A3 mcp

## SDKs

### Python

fastmcp client

```python
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

SERVER_URL = "https://gateway.mewcp.com/personal/mcp"
API_KEY = "API_KEY"

transport = StreamableHttpTransport(
    url=SERVER_URL,
    headers={
        "Authorization": f"Bearer {API_KEY}",
    }
)

async def main():
    client = Client(transport)
    async with client:
        tools = await client.list_tools()
        print(tools)

asyncio.run(main())
```

1. Install fastmcp: pip install fastmcp
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run your script

### TypeScript

MCP SDK

```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const SERVER_URL = "https://gateway.mewcp.com/personal/mcp";
const API_KEY = "API_KEY";

const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), {
  requestInit: {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  },
});

const client = new Client({ name: "mewcp-client", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map((t) => t.name));
```

1. Install: npm install @modelcontextprotocol/sdk
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run with Node 18+ as an ES module (e.g. npx tsx script.ts)