Apollo Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Apollo Mcp (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<!-- mycelium-badges:start -->
<p> <a href="https://github.com/adelaidasofia/apollo-mcp/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/github/license/adelaidasofia/apollo-mcp?color=blue"></a> <a href="https://github.com/adelaidasofia/apollo-mcp/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/adelaidasofia/apollo-mcp?color=eab308"></a> <a href="https://github.com/adelaidasofia/apollo-mcp/commits/main"><img alt="Last commit" src="https://img.shields.io/github/last-commit/adelaidasofia/apollo-mcp"></a> <a href="https://github.com/adelaidasofia/apollo-mcp/issues"><img alt="Open issues" src="https://img.shields.io/github/issues/adelaidasofia/apollo-mcp"></a> <a href="https://pypi.org/project/adelaidasofia-apollo-mcp/"><img alt="PyPI version" src="https://img.shields.io/pypi/v/adelaidasofia-apollo-mcp?color=blue&label=pypi"></a> <a href="https://pypi.org/project/adelaidasofia-apollo-mcp/"><img alt="PyPI downloads" src="https://img.shields.io/pypi/dm/adelaidasofia-apollo-mcp?color=blue&label=downloads"></a> <a href="https://myceliumai.co"><img alt="Built by Mycelium AI" src="https://img.shields.io/badge/built_by-Mycelium_AI-15B89A"></a> </p>
<!-- mycelium-badges:end -->
FastMCP server exposing the full operational surface of the Apollo.io REST API to Claude Code. 27 tools covering sequences, campaign health, mailbox warmup, people/org enrichment, CRM contacts, tasks, labels, credit tracking, AND programmatic template/sequence/mailbox-cap editing with audit logging.
Most existing Apollo MCPs only expose people search and enrichment. This one is built for teams running outbound at scale — daily health digests, sequence management, mailbox deliverability monitoring, programmatic contact enrollment, and end-to-end sequence authoring without touching the Apollo UI.
apollo_campaign_health — daily digest (start here)
apollo_messages_search days_back=1 — raw send/open/reply/bounce log
apollo_mailbox_warmup — per-mailbox deliverability state
apollo_sequences_list — all sequences + labels + stats
apollo_sequence_add_contacts ... — enroll contacts into a sequence
apollo_template_update ... — update template body + subject (with audit log)
apollo_sequence_create ... — author a new sequence end-to-end
apollo_step_create ... — add a step + template to a sequence
apollo_mailbox_update_cap ... — change daily send cap
apollo_credits_remaining — monthly credit budget check
apollo_health — self-check (also probes master key)apollo_campaign_health(days_back=1) — digest across all sequences + mailboxesapollo_mailbox_warmup() — per-mailbox warmup status and daily limitsapollo_sequence_get(sequence_id) — one-sequence deep-diveapollo_sequences_list() — list all sequences with statsapollo_sequence_add_contacts(sequence_id, contact_ids, send_email_from_email_account_id?)apollo_sequence_remove_contacts(sequence_id, contact_ids)apollo_sequence_set_active(sequence_id, active) — activate or pauseapollo_messages_search(days_back, sequence_ids?, stats?, per_page, max_pages)apollo_people_search(...) — free (no credit burn)apollo_person_enrich(...) — 1 credit per revealed emailapollo_bulk_person_enrich(people, reveal_personal_emails?) — up to 10/callapollo_org_search(...)apollo_org_enrich(domain)apollo_org_job_postings(organization_id)apollo_contacts_search(...)apollo_contact_create(...)apollo_contact_update(contact_id, fields)apollo_contact_stages()apollo_task_create(...)apollo_labels_list()apollo_label_create(name)apollo_credits_remaining()apollo_template_get(template_id) — fetch current template stateapollo_template_update(template_id, subject?, body_text?, body_html?, audit_label?) — update template subject + body. Snapshots current state to APOLLO_AUDIT_LOG_PATH (if set) BEFORE the write so any breakage is reversible from the diffapollo_sequence_create(name, label?, permissions?, active?) — create a new sequence (paused by default)apollo_step_create(sequence_id, position, wait_days, subject, body_text, body_html?, step_type?, include_signature?) — create a step + touch + template in one callapollo_mailbox_update_cap(mailbox_id, daily_send_limit, audit_label?) — change daily send cap on a mailbox. Audits before/after.apollo_health() — probes API key validity + master-key hintCopy config.example.yaml to config.yaml and fill in your values:
cp config.example.yaml config.yamlconfig.yaml is gitignored. Key fields:
| Field | Default | Description |
|---|---|---|
daily_send_target | 50 | Used in health digest vs-target display |
monthly_credit_pool | 4000 | Alerts when credit_alert_pct consumed |
sequence_labels | {} | Map sequence IDs to human-readable names |
mailbox_labels | {} | Map email addresses to display names |
Env vars:
| Var | Required | Description |
|---|---|---|
APOLLO_API_KEY | Yes | Must be a MASTER key |
APOLLO_MCP_CONFIG | No | Override config.yaml path |
APOLLO_MCP_TIMEOUT | No | HTTP timeout in seconds (default 30) |
APOLLO_AUDIT_LOG_PATH | No | Path to a markdown file where destructive writes (template_update, sequence_create, step_create, mailbox_update_cap) append before/after diffs. Required for reversibility on the destructive-write tools. |
Open Claude Code, paste:
/plugin marketplace add adelaidasofia/apollo-mcp /plugin install apollo-mcp@apollo-mcp
Then set APOLLO_API_KEY (must be a master key) in your environment and restart Claude Code.
<details> <summary>Legacy install</summary>
pip3 install -r requirements.txt
python3 -c "import server; print('OK')"Add to your .mcp.json:
{
"mcpServers": {
"apollo": {
"command": "python3",
"args": ["/path/to/apollo-mcp/server.py"],
"env": {
"APOLLO_API_KEY": "your-master-key-here"
}
}
}
}Restart Claude Code after editing .mcp.json.
</details>
/emailer_campaigns, /emailer_messages/search, /email_accounts, /usage_stats/*. Standard keys return 403. apollo_health probes for this automatically.apollo_person_enrich(reveal_personal_emails=True) and the bulk variant each burn 1 credit.sequences_list, email_accounts, labels, contact_stages. Force-refresh by restarting Claude Code.error code: 1010 when it sees python-urllib/* or python-httpx/* user-agents. The server spoofs apollo-mcp/1.0 (curl/8.0.0) to bypass. If you build any adjacent scripts hitting apollo.io, add the same User-Agent header or you'll debug a phantom 403 that looks like a missing master key.POST /emailer_campaigns/{id}/remove_contact_ids returns 404. The no-ID variant POST /emailer_campaigns/remove_contact_ids returns 200 but is a silent no-op regardless of payload. The only reliable unenroll path is DELETE /contacts/{id}, which cascades all campaign enrollments. Destructive: the contact record is marked deleted: true. apollo_sequence_remove_contacts wraps this.POST /emailer_campaigns/search to list sequences. The server does this correctly — just be careful if you hit the API directly.PUT /emailer_campaigns/{id} with body {"emailer_campaign": {"active": true/false}}. Sub-resource paths like /check_contacts return 404.scripts/daily_digest.py — standalone script that pulls yesterday's stats and prepends them to a markdown dashboard. Run via cron or manually.scripts/bootstrap_sequences.py — create sequences programmatically from code. Useful for version-controlling email copy. Includes the undocumented POST /emailer_touches/{id}/approve endpoint needed to move steps out of draft state.Same author, same architecture pattern (FastMCP, draft+confirm on writes where applicable, vault auto-export, MIT):
This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.
What is sent:
slack-mcp)0.1.0)What is NOT sent:
Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.
Opt out: Set the environment variable MYCELIUM_NO_PING=1 before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at ~/.mycelium/onboarded-<plugin> — delete it if you want to reset state.
MIT
Built by Mycelium AI. Full install or team version at diazroa.com.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.