mcp-server-apollo
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-apollofind contacts at Microsoft"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-server-apollo
MCP (Model Context Protocol) server for the Apollo.io B2B discovery and enrichment API: company search, people search, contact enrichment (emails/phones), organization firmographics, and API usage stats.
The server wraps Apollo's REST API with one account-level API key kept server-side. It is read-only by design: no sequences, no emailer, no CRM writes, no account management.
Tools
Tool | Risk | Apollo endpoint |
| read | — (local discovery) |
| read + 1 credit/page |
|
| read (free, master key) |
|
| read + credits |
|
| read + credits |
|
| read + 1 credit |
|
| read (free) |
|
| read (free, master key) |
|
Notes that save you a support ticket:
People search returns no contact data. Apollo's current
mixed_people/api_searchendpoint deliberately obfuscates last names and omits emails/phones. Feed the returned personidintoapollo_person_enrichto get contact data (that is what costs credits).Phone reveals are asynchronous.
reveal_phone_number=truerequires a public HTTPSwebhookUrl; Apollo POSTs the numbers there minutes later. The synchronous response carries arequest_id— pollapollo_webhook_resultwith it if the callback is missed (results kept 30 days).Master API key.
apollo_people_searchandapollo_credit_usagerequire a master Apollo API key (Apollo returns 403API_INACCESSIBLEotherwise).No credit-balance API. Apollo only exposes per-endpoint rate-limit usage; the remaining credit balance lives in the Apollo UI (Settings → Billing).
Field projection. Every data tool accepts
fields[]dot-paths to shrink responses; company search applies a slim default projection (pass["*"]for full records).
Related MCP server: Apollo.io MCP Server
Usage
npm install
npm run build
# stdio transport (Claude Desktop, local MCP clients)
APOLLO_API_KEY=... node dist/transports/stdio.js
# streamable HTTP transport on :3000/mcp
APOLLO_API_KEY=... MCP_HTTP_TOKEN=... node dist/transports/http.jsConfiguration (see .env.example): APOLLO_API_KEY (required),
APOLLO_TIMEOUT_MS, APOLLO_AUDIT_LOG (JSONL audit trail; hashed targets,
never raw arguments or secrets), and for HTTP: MCP_HTTP_HOST, PORT,
MCP_HTTP_TOKEN (static bearer), MCP_ALLOWED_ORIGINS, MCP_MAX_BODY_BYTES.
There is also an embeddable gateway export (mcp-server-apollo/gateway) that
exposes the same tools as plain functions with JSON-schema definitions.
Security
The API key is read only from the server environment, sent only in the
x-api-keyheader over HTTPS, and redacted from error messages and logs.Tool calls pass a policy allowlist; anything unlisted is denied.
All tools are annotated read-only/non-destructive; credit-consuming tools state their cost in the description so agents confirm spend with the user.
HTTP transport binds to loopback by default, validates
Origin, caps body size, and supports a static bearer token for upstream auth proxies.Rate limits: HTTP 429 is retried with jittered backoff honouring
retry-after; bulk enrichment runs at low bounded concurrency because Apollo limitsbulk_matchhard (documented 20/min).
Development
npm run typecheck
npm test
npm run smoke:live # needs a real APOLLO_API_KEY; uses ~1 creditLicense
Apache-2.0
Available Tools
8 toolsapollo_companies_searchSearch Companies (Apollo)ARead-onlyIdempotent
Discover companies via Apollo by keyword tags, name, location (include/exclude), employee-count ranges, revenue range, domains, or technology stack. The response preserves Apollo's split between organizations (net-new) and accounts (already saved to your Apollo team, incl. CRM linkage) — use it to dedupe against your CRM — and passes pagination (page/per_page/total_entries/total_pages) through unchanged. COSTS 1 CREDIT per request (page) that returns results — confirm total credit cost with the user before running multi-page batches. Search records are slim; use apollo_org_enrich for revenue/industry/technology details.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| fields | No | Optional dot-path field projection to shrink the response — only these fields are returned per record. Descends nested objects and maps over arrays, e.g. ["id","name","primary_domain","primary_phone.number"]. Pass ["*"] for the full record. | |
| perPage | No | Results per page, 1-100. Defaults to Apollo's default (10). | |
| revenueRange | No | Annual revenue range in plain integers (no symbols/commas). | |
| organizationIds | No | ||
| qOrganizationName | No | Partial company-name match. | |
| organizationLocations | No | HQ locations to include, e.g. ["Ballerup, Denmark"] or ["Denmark"]. | |
| organizationNotLocations | No | ||
| qOrganizationDomainsList | No | Company domains without www. or @. | |
| qOrganizationKeywordTags | No | Keyword tags, e.g. ["plumbing"] or ["pharmaceuticals","biotechnology"]. | |
| organizationNumEmployeesRanges | No | Employee-count ranges as "min,max" strings, e.g. ["1,10","101,200"]. | |
| currentlyUsingAnyOfTechnologyUids | No | Technology uids with underscores, e.g. ["wordpress_org"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. Description adds credit cost details and response structure (two lists, pagination), going beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four well-structured sentences, no fluff, front-loaded with purpose, followed by response details and cost guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, filter options, response format, credit cost, and references sibling tools. Adequate for a complex search tool with 12 parameters and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (75%), and the tool description does not significantly add meaning beyond what the schema already provides for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it discovers companies via multiple filters (keyword tags, name, location, employee ranges, revenue, domains, tech stack). Distinct from sibling enrichment and people search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using apollo_org_enrich for detailed data, warns about credit cost per page, and recommends confirming costs before multi-page batches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apollo_credit_usageGet API Usage / Rate Limits (Apollo)ARead-onlyIdempotent
Report per-endpoint Apollo API usage against the minute/hour/day rate limits, plus the most recent rate-limit headers observed. Use before large batches to check headroom, and to answer "how much have we used?". Requires a master API key; consumes no credits. Note: Apollo exposes no API for the remaining credit balance — that is only visible in the Apollo UI (Settings > Billing and credits).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint false. Description adds that it 'consumes no credits' and requires a master API key, and clarifies what it cannot do (credit balance). No contradictions; adds valuable context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste. Purpose is front-loaded. Each sentence adds distinct value: purpose, usage guidance, and limitation/alternative. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description covers key information: what it reports, when to use, prerequisites, and what it cannot do. Annotations provide additional safety signals. Slightly more detail on the output format (e.g., what fields are in the headers) could be added, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters, so baseline is 4. Description adds meaning by explaining what the tool returns (rate limit headers, per-endpoint usage). While no parameter details are needed, the description provides context about the output, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Report per-endpoint Apollo API usage against the minute/hour/day rate limits, plus the most recent rate-limit headers observed.' This specifies a specific verb ('Report') and resource ('API usage / rate limits'). It distinguishes from sibling tools which are all search/enrich operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use before large batches to check headroom, and to answer "how much have we used?"' Also provides exclusion: 'Note: Apollo exposes no API for the remaining credit balance — that is only visible in the Apollo UI.' Prerequisites are given: 'Requires a master API key; consumes no credits.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apollo_org_enrichEnrich Organization (Apollo)ARead-onlyIdempotent
Fetch full firmographics for one company via Apollo: industry, keywords, employee count, revenue, funding events, technology stack (current_technologies / technology_names), department headcounts, and headcount growth rates. Provide at least one of domain, name, website, or linkedinUrl. Consumes 1 credit when a record is enriched. For Danish companies prefer the Lassox MCP (authoritative CVR registry data); use this for non-DK companies or Apollo-specific fields like technology stack.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| domain | No | Bare domain without www. or @, e.g. "apollo.io". | |
| fields | No | Optional dot-path field projection to shrink the response — only these fields are returned per record. Descends nested objects and maps over arrays, e.g. ["id","name","primary_domain","primary_phone.number"]. Pass ["*"] for the full record. | |
| website | No | ||
| linkedinUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds credit consumption cost ('Consumes 1 credit when a record is enriched') beyond annotations. Annotations already indicate read-only, idempotent, non-destructive behavior. No contradictions present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no waste: first sentence lists output fields, second gives input requirements, third covers cost, fourth provides alternative. Purpose is front-loaded and structure is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: purpose, input requirements, credit cost, and alternative guidance. Could be improved by describing return format or error behavior, but given the annotations and listed fields, it is fairly complete for an enrichment tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds the constraint that at least one of domain, name, website, or linkedinUrl is required, which is not enforced in the schema (0 required params). It also mentions the 'fields' parameter for projection. With 40% schema coverage, this compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool fetches full firmographics for one company via Apollo and lists specific fields (industry, keywords, employee count, etc.). It distinguishes from siblings by referencing the Lassox MCP for Danish companies, indicating use for non-DK or Apollo-specific needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use this tool vs. the Lassox MCP for Danish companies, and states required identifiers ('Provide at least one of domain, name, website, or linkedinUrl'), giving clear context and an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apollo_people_bulk_enrichBulk Enrich People (Apollo)ARead-onlyIdempotent
Enrich up to 100 people via Apollo in one call. Chunks into bulk_match calls of 10, fans out with bounded concurrency, retries HTTP 429, and isolates per-item failures. Returns { total, succeeded, failed, creditsConsumed, requestIds, results[] } with results in input order. CONSUMES CREDITS per enriched record and reveal flags apply to EVERY person — confirm total credit cost with the user first. Apollo rate-limits bulk_match hard (documented 20/min). revealPhoneNumber requires webhookUrl. Emits MCP progress notifications when the client sends a progressToken.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Optional dot-path field projection to shrink the response — only these fields are returned per record. Descends nested objects and maps over arrays, e.g. ["id","name","primary_domain","primary_phone.number"]. Pass ["*"] for the full record. | |
| details | Yes | People to enrich. Each item needs at least one identifier. | |
| webhookUrl | No | Public HTTPS endpoint Apollo POSTs phone numbers to. Required when revealPhoneNumber=true. | |
| concurrency | No | Parallel bulk_match calls, 1-4. Defaults to 2. | |
| revealPhoneNumber | No | ||
| revealPersonalEmails | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations: it consumes credits, applies reveal flags to every person, requires webhookUrl for phone reveal, respects Apollo's hard rate limit (20/min), and emits MCP progress notifications. Annotations (readOnlyHint, idempotentHint, destructiveHint) are consistent and the description enriches them with operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderate in length (few sentences) and front-loads the main action. Each sentence adds necessary detail (chunking, concurrency, retry, credit consumption, rate limits, progress notifications). Some redundancy exists (e.g., 'bounded concurrency' and explicit concurrency parameter), but overall efficient for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully specifies the return format: { total, succeeded, failed, creditsConsumed, requestIds, results[] } with input order. It covers all behavioral aspects (rate limits, credit cost, per-item isolation, progress notifications). For a tool with 6 parameters, concurrency, and multiple constraints, this is exceptionally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all 6 parameters have descriptions), so baseline is 3. The description adds value by: clarifying credit consumption tied to reveal flags, explaining that results preserve input order, and noting that revealPhoneNumber requires webhookUrl (already in schema but reinforced). It also mentions progress notifications related to progressToken, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Enrich up to 100 people via Apollo in one call,' specifying the verb (enrich), resource (people), and scope (up to 100). It distinguishes itself from siblings like apollo_person_enrich (single person) and apollo_people_search (search) implicitly through the batch nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: churns into bulk_match calls, fans out with bounded concurrency, retries HTTP 429, isolates per-item failures, and warns about credit consumption and rate limits. It advises confirming total credit cost with the user. However, it does not explicitly state when not to use this tool or compare directly to alternatives, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apollo_people_searchSearch People (Apollo)ARead-onlyIdempotent
Find people via Apollo by title, seniority, location, employer domain/id, or employer size. FREE (no credits) but requires a MASTER Apollo API key. Results are intentionally slim: last names are obfuscated ("Hu***n") and NO email addresses or phone numbers are included — do not loop searching for contact data; pass the returned person id to apollo_person_enrich instead.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| fields | No | Optional dot-path field projection to shrink the response — only these fields are returned per record. Descends nested objects and maps over arrays, e.g. ["id","name","primary_domain","primary_phone.number"]. Pass ["*"] for the full record. | |
| perPage | No | Results per page, 1-100. Defaults to Apollo's default (10). | |
| qKeywords | No | ||
| personTitles | No | Job titles, OR-matched. Similar titles are included unless includeSimilarTitles=false. | |
| revenueRange | No | Annual revenue range in plain integers (no symbols/commas). | |
| organizationIds | No | ||
| personLocations | No | ||
| personSeniorities | No | ||
| contactEmailStatus | No | ||
| includeSimilarTitles | No | ||
| organizationLocations | No | ||
| qOrganizationDomainsList | No | ||
| organizationNumEmployeesRanges | No | Employee-count ranges as "min,max" strings, e.g. ["1,10","101,200"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds crucial behavioral context: results are intentionally slim with obfuscated last names and no email/phone numbers, and it explicitly warns against looping for contact data. This goes beyond annotations to prevent misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is 3-4 sentences, front-loaded with the core purpose, then cost/API key requirement, then behavioral limitations and forwarding guidance. Every sentence adds value without redundancy or fluff, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 parameters, no output schema), the description covers purpose, usage guidelines, and key behavioral traits. It provides sufficient context for the agent to avoid common pitfalls. However, it could be more complete by mentioning pagination parameters or the fields projection feature, which are in the schema but not summarized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions high-level filter categories (title, seniority, location, employer domain/id, employer size) which map to some of the 14 parameters, but does not detail specific parameters like page, fields, perPage, qKeywords, revenueRange, etc. With schema description coverage at 36%, the description partially compensates but leaves many parameters unexplained, limiting the agent's ability to use them effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately states 'Find people via Apollo' with specific criteria (title, seniority, location, employer domain/id, employer size), clearly distinguishing it from sibling tools like apollo_companies_search. The verb 'find' and resource 'people' are explicit, and the later guidance to use apollo_person_enrich for contact data reinforces its unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states it is FREE (no credits) but requires a MASTER Apollo API key, providing cost and auth context. It further advises against looping for contact data and directs the agent to use apollo_person_enrich instead, giving clear when-to and when-not-to usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apollo_person_enrichEnrich Person (Apollo)ARead-onlyIdempotent
Match one person via Apollo and return their full profile (employment history, employer, departments, seniority). CONSUMES CREDITS when a record is enriched; setting revealPersonalEmails or revealPhoneNumber costs extra per your Apollo plan (typically ~1 credit per email, ~8 per mobile) — confirm with the user first. Phone numbers are NOT in the synchronous response: Apollo delivers them asynchronously to webhookUrl (required for phone reveals); poll apollo_webhook_result with the returned request_id if the callback is missed. Personal emails are not revealed for people in GDPR regions; you are the data controller for retrieved personal data.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Apollo person id, e.g. from apollo_people_search. | |
| name | No | ||
| No | |||
| domain | No | Employer domain without www. or @. | |
| fields | No | Optional dot-path field projection to shrink the response — only these fields are returned per record. Descends nested objects and maps over arrays, e.g. ["id","name","primary_domain","primary_phone.number"]. Pass ["*"] for the full record. | |
| lastName | No | ||
| firstName | No | ||
| webhookUrl | No | Public HTTPS endpoint Apollo POSTs phone numbers to. Required when revealPhoneNumber=true. | |
| hashedEmail | No | MD5 or SHA-256 hashed email. | |
| linkedinUrl | No | ||
| organizationName | No | ||
| revealPhoneNumber | No | ||
| revealPersonalEmails | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description discloses critical behaviors: credit consumption per enrichment, extra cost per email/phone reveal, async phone delivery via webhookUrl, GDPR restrictions on personal emails, and the user's responsibility as data controller. This adds substantial value beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single, dense paragraph that front-loads the purpose, then efficiently covers key behaviors in separate sentences. No redundant information; every sentence adds value. The structure uses capitalization and punctuation effectively to highlight important warnings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 parameters and no output schema, the description comprehensively addresses credit usage, async phone retrieval, and GDPR concerns. It lacks specifics on the return format (e.g., what fields the profile contains) but the tool's purpose of returning 'full profile' is clear. The description is thorough enough for an AI agent to handle common scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (38%), and while the description explains revealPhoneNumber, webhookUrl, and their credit implications, it does not detail most parameters (name, email, domain, etc.). The meaning of these is inferable from context but not explicitly stated, leaving a gap in parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's core action: 'Match one person via Apollo and return their full profile (employment history, employer, departments, seniority).' The verb 'match' and 'return' paired with the resource 'person profile' precisely defines the purpose, distinguishing it from search tools (apollo_people_search) that list many results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes credit consumption and extra costs for reveal options, implicitly guiding when to use (when a full profile is needed) and cautioning about cost. It does not explicitly list alternatives or when not to use, but the context of credit consumption and async phone delivery provides practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apollo_search_capabilitiesSearch Apollo CapabilitiesARead-onlyIdempotent
Search the Apollo MCP server capabilities and examples. Use this first when deciding which Apollo tool to call.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds that it provides 'capabilities and examples', which is behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load purpose and usage. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should clarify return structure. It mentions 'capabilities and examples' but not format. For a simple search tool, it is adequate but leaves some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. Description does not explain the two parameters (query and limit) beyond their schema types. With no explanation, an agent may not know how to use them effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Search the Apollo MCP server capabilities and examples'. Differentiates from sibling tools by advising to use it first when deciding which tool to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this first when deciding which Apollo tool to call', providing clear guidance on when to use. Does not explicitly exclude scenarios but context implies it is a discovery tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apollo_webhook_resultPoll Webhook Result (Apollo)ARead-onlyIdempotent
Fetch the result of an asynchronous Apollo enrichment (phone-number reveal or waterfall) by request_id, in case the webhook callback was missed. Free (no credits); results are kept for 30 days. A 404 with retry_after_seconds means the result is not ready yet — wait before retrying.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | Integer request_id from apollo_person_enrich / apollo_people_bulk_enrich (may be negative). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint, openWorldHint, idempotentHint true, and destructiveHint false. The description adds valuable behavioral info: free (no credits), 30-day retention, and specific retry-on-404 behavior. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each essential. First sentence conveys purpose and condition; second adds cost and retry policy. No filler, efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations and schema richness, the description adequately covers asynchronous nature, retry handling, and retention. Lacks detail on successful response structure, but rules state no output schema needed for return values; still, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing a baseline of 3. The description adds context: requestId comes from apollo_person_enrich or apollo_people_bulk_enrich and may be negative, which aids correct parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches results of an asynchronous Apollo enrichment (phone-number reveal or waterfall) using a request_id, with the specific use case of recovering a missed webhook callback. This distinguishes it from sibling tools like apollo_person_enrich which initiate enrichment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool when a webhook callback was missed and provides retry guidance: a 404 with retry_after_seconds means not ready. It lacks explicit alternatives or when-not-to-use, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
8 tool updates
v0.1.0- First observed
apollo_companies_search - First observed
apollo_credit_usage - First observed
apollo_org_enrich - First observed
apollo_people_bulk_enrich - First observed
apollo_people_search - First observed
apollo_person_enrich - First observed
apollo_search_capabilities - First observed
apollo_webhook_result
TDQS
Each tool targets a distinct domain action (company search/Enrich, people search/enrich, credit usage, webhook results) with no overlapping purposes. Clear separation between sync and async operations, and between company and people workflows.
All tool names follow the consistent pattern 'apollo_<action>_<target>', using snake_case throughout. Examples: apollo_companies_search, apollo_org_enrich, apollo_people_search.
8 tools is an ideal scope for an Apollo API wrapper, covering search, enrichment, usage monitoring, and async handling without being overwhelming or sparse.
The set covers core CRUD-like operations (search, enrich, bulk enrich, usage check, async retrieval) but lacks direct update/delete endpoints, which are likely not exposed by Apollo's API. A minor gap but functional for typical use cases.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Official ZoomInfo MCP server. Search and enrich companies, contacts, and buyer intent signals.
13Remote MCP server to enrich company profiles with structured B2B data and confidence scores.
MCP server for LeadDelta — manage LinkedIn connections and CRM data via AI assistants.
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for Apollo.io B2B database enabling people and company search, enrichment, and insights through conversational interfaces.950719MIT
- FlicenseBqualityCmaintenanceA Model Context Protocol (MCP) server for the Apollo.io API, giving AI coding assistants direct access to Apollo.io's sales intelligence platform for prospecting, enrichment, CRM operations, and outreach.505-
- AlicenseAqualityDmaintenanceMCP server for Apollo.io B2B sales intelligence API. Enables searching and enriching people and organizations via natural language.7274MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for the Apollo.io API that lets LLMs search and enrich people and company data.66MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/borgels/mcp-server-apollo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server