Skip to main content
Glama
apollo-mcp

apollo-mcp

by dyngai

apollo-mcp

Apollo.io tools for agents, MCP clients, and the command line.

Tests Coverage Python MCP License: MIT


apollo-mcp exposes Apollo's B2B data APIs through a Model Context Protocol server built with FastMCP 3. It also ships apollo-cli, a small command-line wrapper for the most common search and enrichment workflows.

Highlights

  • 45 MCP tools spanning prospect search, enrichment, CRM records, deals, tasks, sequences, email engagement, phone calls, and API usage stats.

  • Two transports — stdio for Claude Desktop, Claude Code, and local MCP clients; Streamable HTTP for hosted or remote deployments.

  • Per-request auth in HTTP mode so one environment key is never shared across remote clients or organizations.

  • Defensive request construction for Apollo's endpoint-specific wire-format quirks (see Apollo Wire-Format Notes).

  • A CLI for quick search and enrichment without writing any code.

  • 288 tests — 255 unit plus 33 live integration tests, with the unit suite alone covering most of the package.

Related MCP server: apollo-io-mcp-server

Contents

Quickstart

git clone https://github.com/dyngai/apollo-mcp.git
cd apollo-mcp
uv sync --extra dev

cp env.example .env        # then set APOLLO_API_KEY in .env

Run the MCP server over stdio:

uv run apollo-mcp

Or run a CLI command:

uv run apollo-cli search-people \
  --person_titles "Manager,Director" \
  --person_locations "Virginia"

Installation

With uv

uv is the recommended workflow for local development:

uv sync                 # runtime dependencies
uv sync --extra dev     # plus pytest, respx, coverage

With pip

pip install -e .
pip install -e ".[dev]"

Both install the apollo-mcp and apollo-cli console scripts.

Configuration

python-dotenv is loaded automatically, so a local .env file works for stdio and CLI usage.

Variable

Required

Default

Notes

APOLLO_API_KEY

stdio / CLI

—

Apollo API key used by local clients.

APOLLO_BASE_URL

No

https://api.apollo.io/api/v1

Override for testing or proxies.

NOTE

Several Apollo endpoints require amaster API key — user and stage listings, deal mutations, sequence search, and API usage stats. Non-master keys generally receive 403 API_INACCESSIBLE on those endpoints. Tools that need one say so in their description.

MCP Server

apollo-mcp                               # stdio (default)
apollo-mcp --transport http              # HTTP on 127.0.0.1:8000/mcp/
apollo-mcp --transport http --host 0.0.0.0 --port 9000 --path /api/mcp/
apollo-mcp --transport sse --port 8001   # legacy SSE transport
apollo-mcp --version
apollo-mcp --help

Flag

Default

Description

--transport

stdio

One of stdio, http, or sse.

--host

127.0.0.1

HTTP/SSE bind address.

--port

8000

HTTP/SSE port.

--path

/mcp/

HTTP path prefix. FastMCP preserves the trailing slash.

Claude Desktop / Claude Code

For stdio-based clients, point the MCP client at apollo-mcp and pass the Apollo key in the server environment:

{
  "mcpServers": {
    "apollo": {
      "command": "apollo-mcp",
      "env": {
        "APOLLO_API_KEY": "your-apollo-api-key",
        "APOLLO_BASE_URL": "https://api.apollo.io/api/v1"
      }
    }
  }
}

You can also use a virtualenv-relative command such as .venv/bin/apollo-mcp, or run through uvx.

HTTP / Remote Clients

apollo-mcp --transport http --host 0.0.0.0 --port 8000

The endpoint is then available at http://<host>:8000/mcp/, and every request must carry its own Apollo key:

Authorization: Bearer <apollo-api-key>
IMPORTANT

In HTTP mode the bearer token isrequired and APOLLO_API_KEY is never used as a fallback, even when it is set in the server environment. That keeps a shared environment key from leaking across organizations. Requests without a bearer token fail with a clear "Authentication required" error.

Each distinct bearer token gets one long-lived ApolloClient, so HTTP connections and TLS sessions are pooled and reused across tool calls rather than renegotiated every time. The cache is bounded, and the least-recently-used client is closed on eviction.

If you deploy behind a reverse proxy or TLS terminator, forward the configured --path prefix unchanged.

Docker

docker build -t apollo-mcp .
docker run --rm -p 8080:8080 apollo-mcp

The container starts the HTTP transport on 0.0.0.0:8080/mcp/ as a non-root user. Clients still need to send Authorization: Bearer <apollo-api-key>.

CLI

The CLI covers the highest-leverage search and enrichment commands.

Command

Purpose

search-people

Search for people. Requires --person_titles.

search-companies

Search for companies.

enrich-person

Enrich a person by email, LinkedIn URL, or name + company.

enrich-company

Enrich a company by domain or name.

bulk-enrich-people

Bulk person enrichment via --json.

bulk-enrich-companies

Bulk company enrichment via --json.

org-jobs

Job postings for an organization.

org-info

Full organization profile by ID.

search-news

Search news articles.

# Search for people. Apollo requires at least person_titles for this flow.
apollo-cli search-people \
  --person_titles "Manager,Director" \
  --person_locations "Virginia"

# Find a specific person by enrichment instead of broad search.
apollo-cli enrich-person \
  --first_name "John" \
  --last_name "Doe" \
  --organization_name "Company"

# Other examples.
apollo-cli enrich-person --email "tim@apollo.io"
apollo-cli search-companies --q "technology" --organization_num_employees_ranges "51,200"
apollo-cli org-jobs --id "5e66b6381e05b4008c8331b8" --page 2 --per_page 50

Argument conventions

  • --key value and --key=value are both supported.

  • Comma-separated values become arrays: --person_titles "CEO,CTO,VP".

  • Employee ranges keep their comma as one range: --organization_num_employees_ranges "11,20" becomes ["11,20"].

  • Complex request bodies can be passed with --json '{"q":"test","page":1}'.

  • Bare digits become integers (--page 2), but values with a leading zero stay strings so identifiers like --postal_code 02134 are preserved intact.

apollo-cli --help
apollo-cli <command> --help

Tool Catalog

Tool

Purpose

apollo_search_people

People search with Apollo-compatible filter mapping.

apollo_search_companies

Company search with location, size, revenue, funding, jobs, and technology filters.

apollo_enrich_person

Single-person enrichment with compact output by default.

apollo_reveal_person

Reveal full contact info from an Apollo person ID.

apollo_get_person

Look up a person by Apollo ID. Use full=true for raw payloads.

apollo_enrich_company

Single-company enrichment by domain or name.

apollo_bulk_enrich_people

Bulk people enrichment.

apollo_bulk_enrich_organizations

Bulk organization enrichment. Requires at least one domain.

apollo_get_organization_job_postings

Job postings for an organization.

apollo_get_complete_organization_info

Full organization profile by ID.

apollo_get_organization_top_people

Top contacts at an organization.

apollo_search_news_articles

News article search. Requires organization_ids.

apollo_add_to_my_prospects

Save people to "My Prospects".

Tool

Purpose

apollo_search_contacts

Search your Apollo CRM contacts.

apollo_match_contact

Match a single CRM contact.

apollo_bulk_match_contacts

Bulk-match CRM contacts. Rate limit: 100/hour, 20/minute.

apollo_create_contact

Create a single CRM contact.

apollo_update_contact

Update a CRM contact.

apollo_bulk_create_contacts

Create contacts in bulk (up to 100 per call).

apollo_list_contact_stages

List configured contact-stage IDs.

Tool

Purpose

apollo_search_accounts

Search your Apollo CRM accounts.

apollo_create_account

Create a single CRM account.

apollo_update_account

Update a CRM account.

apollo_bulk_create_accounts

Create accounts in bulk.

apollo_list_account_stages

List configured account-stage IDs.

Tool

Purpose

apollo_search_deals

Search deals/opportunities.

apollo_create_deal

Create a deal. Requires a master API key.

apollo_update_deal

Update an existing deal. Requires a master API key.

apollo_list_deal_stages

List configured pipeline stages. Requires a master API key.

Tool

Purpose

apollo_create_task

Create one task scoped to one or more contacts.

apollo_search_tasks

Search tasks.

apollo_bulk_create_tasks

Create one task per contact in a list.

apollo_bulk_complete_tasks

Mark multiple tasks complete.

Tool

Purpose

apollo_search_sequences

Find emailer sequences/campaigns. Requires a master API key.

apollo_add_contacts_to_sequence

Add contacts to a sequence.

apollo_remove_contacts_from_sequence

Remove or stop contacts in sequences.

apollo_approve_sequence

Approve a sequence to start sending.

apollo_abort_sequence

Abort an active sequence.

apollo_archive_sequence

Archive a sequence.

Tool

Purpose

apollo_search_emailer_messages

Search sent emailer messages.

apollo_get_emailer_message_activities

Get opens, clicks, replies, and bounces for a message.

apollo_create_phone_call

Log a phone call.

apollo_update_phone_call

Update a phone-call record.

apollo_list_users

List teammates. Requires a master API key.

apollo_get_api_usage_stats

View per-endpoint usage and rate limits. Requires a master API key.

Apollo Wire-Format Notes

Apollo's API has several endpoint-specific request shapes that this package handles explicitly.

Request construction

  • People-search filters are sent as URL query parameters with bracket notation: person_titles[]=VP&person_titles[]=CTO. Sending them in the JSON body is silently ignored and returns arbitrary results.

  • People-search aliases such as q, company_domains, and q_organization_domains are normalized to the current Apollo fields q_keywords and q_organization_domains_list[]. An explicitly supplied canonical field always wins over its alias.

  • Range filters serialize with bracketed sub-keys — revenue_range[min]=100 — and booleans render lowercase (true/false) as Apollo expects.

  • Company employee ranges accept dash format at the MCP boundary ("11-20") and are normalized to Apollo's comma format ("11,20").

  • Apollo uses PATCH to update contacts, accounts, deals, and phone calls.

  • bulk_enrich_organizations expects {"domains": [...]}, not objects; bulk_enrich_people expects {"details": [...]}, not {"people": [...]}.

  • Caller-supplied IDs interpolated into URL paths are URL-encoded to prevent path traversal and query-string injection.

Pagination

per_page is capped at 100. Apollo rejects larger values outright with HTTP 422 (Per page not supported on people search, Per Page Limit Crossed. on company search) rather than clamping them, so the MCP schema enforces 1–100 before a request is ever sent.

Responses

  • apollo_search_people and apollo_search_companies always return compact per-result summaries so MCP clients do not receive unnecessarily large payloads.

  • apollo_enrich_person and apollo_get_person are compact by default but accept full=true for the raw Apollo record — those can exceed 100 KB and may overflow MCP token limits, so reach for it only when you need the complete employment_history / current_technologies / organization block.

  • The lower-level ApolloClient never trims; it always returns the raw response.

  • Endpoints that answer 204 No Content — sequence approve, abort, and archive, and bulk task completion — decode to {} rather than raising.

  • A non-JSON body (for example an upstream HTML error page returned with a 200) raises an ApolloError naming the status, content type, and a body snippet, instead of a bare JSON decoding error.

Development

apollo_mcp/
  apollo.py     # ApolloClient: httpx wrapper, errors, redirects, query strings
  server.py     # FastMCP server and all tool registrations
  cli.py        # apollo-cli argument parsing and command dispatch

tests/
  test_apollo.py        # respx-mocked client tests
  test_server.py        # FastMCP tool tests with a fake Apollo client
  test_cli.py           # subprocess and in-process CLI tests
  test_integration.py   # live Apollo API tests, auto-skip without a key
uv sync --extra dev      # install development dependencies
uv run apollo-mcp        # run the server locally
uv run apollo-cli --help # run the CLI locally

Testing

# Unit tests only — no Apollo key required.
pytest -m "not integration"

# Live integration tests only.
APOLLO_API_KEY=... pytest -m integration

# Everything.
APOLLO_API_KEY=... pytest

# With coverage.
APOLLO_API_KEY=... pytest --cov=apollo_mcp --cov-report=term-missing

The integration suite is marked integration and auto-skips when APOLLO_API_KEY is not set. Those tests are read-only — searches, enrichments, and stage listings — so they do not mutate CRM data, though enrichment calls do consume Apollo credits.

Suite

Tests

Notes

Unit

255

Mocked transports, no network.

Integration

33

Live Apollo API, requires a key.

Total

288

Both run in well under a minute.

The unit suite covers 92% of the package on its own; the badge above tracks that figure, since it is the one reproducible without an Apollo key.

NOTE

The test counts and coverage percentage in this README are generated, not hand-maintained. After changing the suite, run:

python scripts/coverage_badge.py --write   # refresh them
python scripts/coverage_badge.py --check   # verify (CI runs this)

Security

  • Do not commit Apollo API keys.

  • .env and .mcp.json are gitignored because they commonly contain secrets.

  • API keys are never intentionally logged by the package.

  • HTTP transport requires Authorization: Bearer <apollo-api-key> per request and never falls back to a server-side environment key.

  • Path traversal and query-string injection regressions are covered in tests/test_apollo.py.

If you open an issue, remove API keys, emails, tokens, and other sensitive customer data from logs and screenshots first.

Contributing

Contributions are welcome.

  1. Fork the repository.

  2. Create a feature branch.

  3. Add or update tests for behavioral changes.

  4. Run the relevant commands from Testing.

  5. Open a pull request with a concise description of the change.

For API-shape changes, prefer tests that assert the exact HTTP method, path, query string, and JSON body sent to Apollo.

License

MIT. See LICENSE.

Available Tools

45 tools
apollo_abort_sequenceA

Abort an active sequence (stops sending immediately).

Inputs: sequence_id (required). Returns: result

apollo_add_contacts_to_sequenceC

Add one or more contact IDs to an emailer sequence. send_email_from_email_account_id is typically required by Apollo.

Inputs: contact_ids (required), sequence_id (required), sequence_no_email, sequence_job_change, +4 more. Returns: result

apollo_add_to_my_prospectsC

Save people from prospect search results to 'My Prospects'. Pass the entity (person) IDs returned from people search.

Inputs: entity_ids (required), analytics_context, skip_fetching_people. Returns: result

apollo_approve_sequenceB

Approve a sequence so it can start sending.

Inputs: sequence_id (required). Returns: result

apollo_archive_sequenceB

Archive a sequence (hide from active list).

Inputs: sequence_id (required). Returns: result

apollo_bulk_complete_tasksB

Mark multiple tasks as complete by ID.

Inputs: task_ids (required). Returns: result

apollo_bulk_create_accountsB

Bulk-create CRM accounts. Pass 'accounts' as a list of dicts with name/domain/phone/etc.

Inputs: accounts (required), run_dedupe, append_label_names. Returns: result

apollo_bulk_create_contactsA

Bulk-create CRM contacts (up to 100 per call). Pass 'contacts' as a list of dicts with first_name/last_name/email and any other fields (title, organization_name, linkedin_url, contact_stage_id, owner_id, phone_numbers, etc.). Apollo returns created_contacts and existing_contacts.

Inputs: contacts (required), run_dedupe, append_label_names. Returns: result

apollo_bulk_create_tasksA

Bulk-create tasks. One task is created per contact in contact_ids. Same required fields as create_task except note is optional.

Inputs: type (required), due_at (required), status (required), user_id (required), +2 more. Returns: result

apollo_bulk_enrich_organizationsA

Bulk enrich multiple organizations using Apollo match. Provide an array of organizations with domain or name.

Inputs: organizations (required). Returns: result

apollo_bulk_enrich_peopleA

Bulk enrich multiple people using Apollo match. Provide an array of people with email, linkedin_url, name+domain, or name+organization_name.

Inputs: people (required), reveal_phone_number, reveal_personal_emails. Returns: result

apollo_bulk_match_contactsA

Bulk-match CRM contacts. Pass 'details' as a list of dicts with email/linkedin_url/name+org. RATE LIMIT: 100/hour, 20/minute.

Inputs: details (required). Returns: result

apollo_create_accountB

Create a single CRM account. Common fields are explicit; pass anything else (label_names, typed_custom_fields, etc.) via 'extra'.

Inputs: name, extra, phone, domain, +4 more. Returns: result

apollo_create_contactA

Create a single CRM contact in your Apollo account. Apollo dedupes by email when run_dedupe is true. Common fields are explicit; pass anything else (custom phones, label_names, typed_custom_fields, etc.) via the 'extra' bag.

Inputs: email, extra, title, owner_id, +8 more. Returns: result

apollo_create_dealA

Create a new deal/opportunity in your Apollo account. Requires a master Apollo API key. 'name' is the only required field.

Inputs: name (required), amount, owner_id, account_id, +3 more. Returns: result

apollo_create_phone_callA

Log a phone call in Apollo. Common fields are explicit; pass less-common fields (recording_url, etc.) via 'extra'.

Inputs: note, extra, status, user_id, +5 more. Returns: result

apollo_create_taskC

Create a task assigned to a teammate, scoped to one or more contacts. All six core fields (user_id, contact_ids, type, priority, status, due_at) are required by Apollo.

Inputs: type (required), due_at (required), status (required), user_id (required), +3 more. Returns: result

apollo_enrich_companyB

Enrich a company/organization by domain or name using Apollo match.

Inputs: name, domain. Returns: result

apollo_enrich_personA

Enrich a person by email, linkedin_url, or name+domain/name+organization_name using Apollo match. Returns a compact summary by default (~25 fields trimmed to the most useful ones). Pass full=true to return the raw Apollo payload — those can exceed 100KB and may overflow MCP token limits, so only use full=true when you need the complete employment_history / current_technologies / org block.

Inputs: full, name, email, domain, +5 more. Returns: result

apollo_get_api_usage_statsA

View your team's Apollo API usage and per-minute/hour/day rate limits across endpoints. Requires a master Apollo API key — non-master keys will receive HTTP 403.

Inputs: no named parameters. Returns: result

apollo_get_complete_organization_infoC

Get complete information for a specific organization by organization ID.

Inputs: organization_id (required). Returns: result

apollo_get_emailer_message_activitiesA

Get engagement activities (opens, clicks, replies, bounces) for a single emailer message ID.

Inputs: message_id (required). Returns: result

apollo_get_organization_job_postingsA

Get job postings for a specific organization by organization ID.

Inputs: organization_id (required). Returns: result

apollo_get_organization_top_peopleB

Get the top contacts at a given organization (good for ICP mapping). Calls GET /mixed_people/organization_top_people?organization_id=…. This endpoint is not formally documented on docs.apollo.io but appears in your usage-stats catalog and is used in the wild.

Inputs: organization_id (required). Returns: result

apollo_get_personA

Look up a single person by Apollo ID via /people/{id}. By default returns a compact summary (~50 fields trimmed to the most useful ones). Pass full=true to return the raw Apollo payload (can be 100KB+ — only do this when you specifically need the full record).

Inputs: person_id (required), full. Returns: result

apollo_list_account_stagesA

List the account stages configured for your team. Use the IDs to set account_stage_id on create/update account. Requires a master API key.

Inputs: no named parameters. Returns: result

apollo_list_contact_stagesA

List the contact stages configured for your team. Use the IDs to set contact_stage_id on create/update contact. Requires a master API key.

Inputs: no named parameters. Returns: result

apollo_list_deal_stagesA

List the deal stages configured for your Apollo team. Use the IDs returned here to set 'opportunity_stage_id' on create/update deal. Requires a master Apollo API key.

Inputs: no named parameters. Returns: result

apollo_list_usersB

List teammates (users) in your Apollo account. Returns IDs needed for owner_id/user_id on deals and tasks. Requires a master Apollo API key.

Inputs: page, per_page. Returns: result

apollo_match_contactA

Match a CRM contact via POST /contacts/match. Like people/match but scoped to your CRM contacts. Provide email, linkedin_url, or name+org.

Inputs: email, extra, domain, last_name, +3 more. Returns: result

apollo_remove_contacts_from_sequenceB

Remove or stop contacts in one or more sequences. mode is typically 'mark_as_finished'. Returns a job descriptor (async on Apollo's side).

Inputs: contact_ids (required), sequence_ids (required), mode. Returns: result

apollo_reveal_personA

Reveal full contact info (name, email, phone, LinkedIn) for a person by their Apollo ID. Use person IDs from search results. Costs 1 export credit per call.

Inputs: id (required), reveal_phone_number, reveal_personal_emails. Returns: result

apollo_search_accountsA

Search YOUR Apollo CRM accounts (vs the prospect database). Accepts q_organization_name, account_stage_ids, sort fields, pagination, etc.

Inputs: page, extra, per_page, account_stage_ids, +1 more. Returns: result

apollo_search_companiesB

Search for companies/organizations in Apollo with comprehensive filtering options. Use filters to target specific company types, locations, sizes, and industries.

Inputs: page, query, filters, per_page. Returns: result

apollo_search_contactsA

Search YOUR Apollo CRM contacts (vs the prospect database). Accepts arbitrary Apollo search params (q_keywords, contact_label_ids, contact_stage_ids, sort_ascending, sort_by_field, page, per_page, etc.).

Inputs: page, extra, per_page, q_keywords, +2 more. Returns: result

apollo_search_dealsA

Search deals/opportunities. Filter by name keyword, owner, stage, and date ranges. Accepts pagination and a freeform 'extra' bag for less-common Apollo params.

Inputs: page, extra, q_name, per_page, +2 more. Returns: result

apollo_search_emailer_messagesB

Search sent emailer messages. Filter by sequence, recipient, status, date range, etc. via the freeform 'extra' bag.

Inputs: page, extra, per_page, contact_ids, +1 more. Returns: result

apollo_search_news_articlesB

Search Apollo for news articles about specific companies. organization_ids is REQUIRED — Apollo returns 422 without it. Optionally filter by event categories (e.g. 'hires', 'investment', 'contract') and a published-date range.

Inputs: organization_ids (required), page, per_page, categories, +2 more. Returns: result

apollo_search_peopleB

Search for people in Apollo with advanced filtering options. Use filters to target specific roles, locations, seniority levels, and companies.

Inputs: page, query, filters, per_page. Returns: result

apollo_search_sequencesB

Search emailer sequences (campaigns) in your Apollo account. Requires a master API key.

Inputs: page, q_name, per_page. Returns: result

apollo_search_tasksC

Search tasks. Accepts open_factor (open_tasks/closed_tasks/etc.), due_at_range, owner_ids, pagination, and a freeform 'extra' bag.

Inputs: page, extra, per_page, owner_ids, +1 more. Returns: result

apollo_update_accountB

Update a CRM account via PATCH /accounts/{id}.

Inputs: account_id (required), name, extra, phone, +5 more. Returns: result

apollo_update_contactA

Update a CRM contact via PATCH /contacts/{id}. Pass only the fields you want to change. label_names REPLACES the existing list.

Inputs: contact_id (required), email, extra, title, +12 more. Returns: result

apollo_update_dealA

Update an existing deal/opportunity. Requires a master Apollo API key. Pass only the fields you want to change.

Inputs: opportunity_id (required), name, amount, owner_id, +3 more. Returns: result

apollo_update_phone_callC

Update a phone-call record via PATCH /phone_calls/{id}.

Inputs: phone_call_id (required), note, extra, status, +1 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 45 tools

    Disambiguation5/5

    Each tool targets a distinct resource (people, contacts, companies, accounts, deals, sequences, tasks, messages, phone calls) with clear verbs. Overlap is avoided by scoping searches to either the prospect database or CRM, and by differentiating get/enrich/reveal operations.

    Naming Consistency5/5

    All tools follow the apollo_<verb>_<noun> pattern with snake_case. Verbs like get, search, list, create, update, bulk, add, remove, abort, archive, approve, reveal, enrich, match are consistently applied to the appropriate nouns. No mixing of conventions.

    Tool Count3/5

    45 tools is a high count, bordering on overwhelming, but the server aims to provide comprehensive access to the Apollo platform. While the count exceeds the typical 15-25 range for well-scoped servers, each tool serves a distinct and necessary function, justifying the number.

    Completeness4/5

    The tool set covers most major CRM workflows: search, create, update, enrich, and manage contacts, accounts, deals, tasks, and sequences. However, there are notable gaps such as no delete operations for contacts, accounts, or deals, and no tool to create sequences, which slightly hinders full lifecycle management.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    • Apollo.io MCP — company and people data via api.apollo.io, the caller's OWN Apollo account (fleet…

    • Your agent needs B2B contacts and the pipeline objects around them — find the company, find the person, get the email, then write it back where your team works. **What you can ask for** • "Find heads of engineering at Series-B SaaS companies in the Nordics, with emails." • "Enrich these companies with headcount, industry and funding." • "What roles is this company hiring for right now?" • "Create an account and a contact, then log this opportunity." • "Search our sequences for messages sent to this domain." **How to use it** Point any MCP client at https://mcp.aisa.one/apollo/mcp and sign in with OAuth — there is no key to create or paste. 54 tools: people and organisation search and enrichment, job postings, accounts, contacts, opportunities and their stages, custom fields, labels, notes, users, email accounts, sequence messages and phone-call search — reads and writes. **Why this rather than the source** The full object model, not just a search endpoint, so an agent can finish the job rather than hand you a CSV. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Find the person here, then ask the same agent what their company's traffic looks like or what they rank for — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/sales/mcp adds Similarweb and creator discovery around it.

    • Search people and companies, enrich profiles, and find email and phone over MCP.

      https://mcp.recruitmcp.com/mcp
    • Your agent needs a pipeline, not a list — the companies worth calling, the people who decide inside them, a way to reach those people, and the market evidence that the account is worth the call. **What you can ask for** • "Find Series-B fintech companies in Germany and the heads of marketing there, with emails." • "Enrich these 200 domains with headcount, funding and tech stack." • "Which of these accounts is hiring for roles that imply they need us?" • "How much traffic does this prospect get, and where does it come from?" • "Create the account and contact records and move this opportunity to the next stage." **How to use it** Point any MCP client at https://mcp.aisa.one/sales/mcp and sign in with OAuth — there is no key to create or paste. 79 tools: Apollo people and company search, enrichment, accounts, contacts, opportunities and stages, job postings, sequences and call activity; Similarweb traffic, audience, referrals, ad spend and competitors; plus creator discovery. **Why this rather than the source** Prospecting, enrichment, market sizing and the CRM writes behind one login instead of three. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Build the list here, then ask the same agent what those companies rank for or what is being said about them — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/apollo/mcp or https://mcp.aisa.one/similarweb/mcp for one of them alone; https://mcp.aisa.one/gtm/mcp adds the social side.

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to interact with Apollo.io API for sales and marketing activities. Provides tools to search for companies and contacts, enrich person and organization data, and manage accounts with comprehensive lead generation capabilities.
      11
      MIT
    • F
      license
      B
      quality
      D
      maintenance
      Exposes Apollo.io API functionalities as MCP tools for people and organization enrichment, search, and job postings. Enables natural language interaction with Apollo.io data.
      5
      16
      -
    • A
      license
      A
      quality
      D
      maintenance
      MCP server for Apollo.io B2B sales intelligence API. Enables searching and enriching people and organizations via natural language.
      7
      22 npm
      4
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides tools to search and enrich people and companies, retrieve job postings, and search news articles via the Apollo.io API.
      78 npm
      MIT