Emailchaser
REMOTE · APP.EMAILCHASER.COM · SCANNED SEP 29
Run cold email outbound from an AI agent: campaigns, leads, replies, sender accounts, autopilot.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token. See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability73
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 15811 tokens (~156/item across 101 items; 101 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management57
- Stability observed for 17 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 9 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 102 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Emailchaser MCP server?
Emailchaser is a hosted endpoint at https://app.emailchaser.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · app.emailchaser.com
claude mcp add --transport http com-emailchaser-emailchaser 'https://app.emailchaser.com/api/mcp'
{
"mcpServers": {
"com-emailchaser-emailchaser": {
"url": "https://app.emailchaser.com/api/mcp"
}
}
} {
"servers": {
"com-emailchaser-emailchaser": {
"type": "http",
"url": "https://app.emailchaser.com/api/mcp"
}
}
} [mcp_servers.com-emailchaser-emailchaser] url = "https://app.emailchaser.com/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-emailchaser-emailchaser": {
"type": "remote",
"url": "https://app.emailchaser.com/api/mcp",
"enabled": true
}
}
} openclaw mcp add com-emailchaser-emailchaser --url 'https://app.emailchaser.com/api/mcp' --transport streamable-http
mcp_servers:
com-emailchaser-emailchaser:
url: "https://app.emailchaser.com/api/mcp" {
"McpServers": {
"com-emailchaser-emailchaser": {
"Transport": "http",
"Url": "https://app.emailchaser.com/api/mcp"
}
}
} assistant mcp add com-emailchaser-emailchaser -t streamable-http -u 'https://app.emailchaser.com/api/mcp'
{
"mcpServers": {
"com-emailchaser-emailchaser": {
"type": "http",
"url": "https://app.emailchaser.com/api/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 29 Sept 26 +1
- Tool “connect_sender_email” rewrote its description, which is the text the model reads security
- Tool “get_campaign” rewrote its description, which is the text the model reads security
- Tool “get_sender_email” rewrote its description, which is the text the model reads security
- Tool “get_sender_email_dns” rewrote its description, which is the text the model reads security
- Tool “get_sender_email_warmup” rewrote its description, which is the text the model reads security
- Tool “list_sender_emails” rewrote its description, which is the text the model reads security
- Tool “update_campaign” rewrote its description, which is the text the model reads security
- Tool “update_sender_email” rewrote its description, which is the text the model reads security
- Tool “update_sender_email_warmup” rewrote its description, which is the text the model reads security
- “create_campaign” added an optional parameter “minimumHealthScore” cosmetic
- “update_campaign” added an optional parameter “minimumHealthScore” cosmetic
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 23 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “create_dfy_order” rewrote its description, which is the text the model reads security
- “create_dfy_order” reworded the description of “domains” cosmetic
- “create_dfy_order” reworded the description of “mailboxes” cosmetic
- 22 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 21 Sept 26 0
- New tool “cancel_email_verification_job” functional
- New tool “create_email_verification_job” functional
- New tool “get_email_verification_job” functional
- New tool “get_email_verification_rates” functional
- New tool “list_email_verification_jobs” functional
- New tool “list_email_verification_results” functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 29 Sept 2026 · Probed https://app.emailchaser.com/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=app.emailchaser.com | CN=YR1,O=Let's Encrypt,C=US | 23 Aug 2026 | 21 Nov 2026 | RSA 2048 | SHA256-RSA | 61021dee2caec2f53b2f84d9ba3be1caeeb |
| SANs: app.emailchaser.com | ||||||
| CN=YR1,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | a20253f15f2691c05dc1ce13b9bcca4e |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of app.emailchaser.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| emailchaser.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Challenged, unverified
The endpoint asked for a token, but we could not retrieve and validate the RFC 9728 metadata that tells a client how to obtain one.
| Result | Challenged, unverified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://app.emailchaser.com/.well-known/oauth-protected-resource"
Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://app.emailchaser.com/.well-known/oauth-protected-resource" | Header | Value |
|---|---|
| strict-transport-security | max-age=63072000 |
Protected resource metadata
| Document | https://app.emailchaser.com/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | No |
| Problem | metadata_http_error |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://app.emailchaser.com/api/mcp | Verified | 200 | |
| http (plaintext) | http://app.emailchaser.com/api/mcp | HTTPS enforced | 308 | https://app.emailchaser.com/api/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_blocklist_entries Add blocklist entries ~174
Adds up to 1,000 suppression entries in one call so no campaign ever emails them. Each value is either a full email address (contains @) or a bare domain; the type is inferred per value. Existing entries and invalid values are skipped, so the call is safe to retry and suited to carrying over a suppression list from another sending platform. Scope defaults to "workspace"; "global" blocks across every workspace on the account and only works from the main workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| scope | string | – | "workspace" (default) blocks for this workspace only; "global" blocks for every workspace on the account |
| values | array | yes | Email addresses and/or domains to block, e.g. ["competitor.com", "jane@acme.com"] (1 to 1,000 per request) |
No output schema declared.
No examples provided.
add_lead_finder_prospects Lead Finder: add people to a campaign (spends credits) ~844
SPENDS CREDITS, AND BY DEFAULT METERED EMAIL VERIFICATION. Adds people from the Lead Finder contact database to a campaign as leads, revealing their contact details, in the background. Pass refs (from search_lead_finder results; up to 1,000 different people by default) to add exactly those people, or pass filters and count (1 to 5,000 by default) to add count people matching the filters who are not in the workspace yet. A filters add always walks the matches from the top and skips anyone already a lead, free and not counted, so repeating the same add adds the NEXT count people and charges again. Never repeat an add to retry: after an error or a timeout, call list_lead_finder_imports to see whether it started. A filters add stops early when the audience runs out or once it has looked at five people for every one requested (at least 1,000). People already added count toward that limit even though skipping them is free, so after an add of more than about 1,000 people a small follow-up can stop with nobody added. Every person a filters add looks at, added or skipped, also uses the account's daily allowance for filters adds (25,000 people by default). Each person added costs 1 credit ($0.033 at list), reported as creditsPerProspect; the response reports estimatedCredits, the most the add can cost in credits, and the wallet must hold that much for it to start. People already in the workspace, blocklisted, without a usable address, on a personal mailbox when the campaign only takes business addresses, or marked invalid by verification are skipped and cost no credits. verifyEmails (on by default) checks every screened address with the paid email verification waterfall, including the ones it marks invalid: one or two checks per address, billed as metered usage on the next invoice (price per check: GET /email-verification/rates in the REST API), within the account's monthly verification spend limit. Catch-all and unconfirmed addresses are added and charged, and so is every a…
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | integer | yes | The numeric campaign ID (from list_campaigns) |
| count | integer | – | How many people not yet in the workspace to add with filters (1 to 5,000 by default; get_lead_finder_filters has the limit that applies) |
| filters | object | – | Add people matching these filters (same shape as search_lead_finder). Needs count. The matches are walked from the top every time and people already in the workspace are skipped, so a repeat adds the… |
| refs | array | – | Refs of the people to add, from search_lead_finder results. Duplicates and blanks are dropped before sending; up to 1,000 different people per add by default (get_lead_finder_filters has the limit th… |
| verifyEmails | boolean | – | Check each address with the paid email verification waterfall before adding it (default true): one or two checks per address, billed on the next invoice, including addresses that turn out invalid. In… |
No output schema declared.
No examples provided.
add_leads Add leads ~123
Creates or updates up to 1,000 leads in one request, optionally adding them to a campaign via campaignId. Existing leads (matched by email) are updated instead of duplicated. Returns the id of every lead written, so they can be fetched or updated afterwards. Attributes outside the named fields can be passed in customVariables and become merge tags in email copy.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | integer | – | Campaign to add the leads to (from list_campaigns) |
| leads | array | yes | The leads to create or update (1 to 1,000 per request) |
No output schema declared.
No examples provided.
approve_autopilot_run Autopilot: approve a run ~243
Approves an autopilot run that is awaiting approval — the one human gate in the flow. CAN SPEND REAL MONEY: approval first reveals the run's prospects at 1 credit ($0.033 at list) each, then, if the workspace has no connected sending account, places one done-for-you order sized from the plan snapshotted at start, at most 10 .com domains and at most six mailboxes per domain, never more mailboxes than the plan, charged at the prices in effect when the order is placed. So the plan's mailbox and domain counts are a ceiling and its dollar figures an estimate, not an exact quote. No credits are bought, but the reveal and later top-ups spend the wallet's credits. If a sending account is already connected, no infrastructure is bought; a run started without budgetUsd and with no connected account fails. Show the user the plan from the start_autopilot_run response before calling this. Nothing is revealed, bought or sent before this call; after it, sending starts without further confirmation.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric autopilot run ID (from list_autopilot_runs) |
No output schema declared.
No examples provided.
attach_campaign_sender_emails Attach sender emails to campaign ~147
Attaches connected sender email accounts to a campaign. A campaign only sends through the senders attached to it, so this call decides which mailboxes it uses. Idempotent: already-attached senders are left untouched and only missing ones are added. The call is refused whole when any requested sender is not a connected sender email in the workspace. Attaching to a running campaign reschedules it so the new senders are picked up.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric campaign ID (from list_campaigns) |
| senderEmailIds | array | yes | Sender email IDs to attach (from list_sender_emails). Every ID must be a connected sender email in the workspace |
No output schema declared.
No examples provided.
cancel_email_verification_job Cancel an email verification job ~53
Stops a running verification job. Addresses already verified stay in the results and stay billed; addresses that never ran are never charged, so cancelling costs nothing further.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job ID |
No output schema declared.
No examples provided.
cancel_lead_finder_import Lead Finder: stop an add ~164
Stops a running Lead Finder add. It reads canceled at once. A batch the worker is already writing is still added and charged; a batch still being screened or verified is dropped, though verification checks already made are billed. Credits held for the rest are released. Until finishedAt is set, added, creditsSpent and even status can still change: if that batch was the add's last, it ends completed or failed instead. People already added stay in the campaign. A stopped add cannot be resumed: start a new add_lead_finder_prospects instead. Stopping one that already finished changes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The import ID (importId from add_lead_finder_prospects or list_lead_finder_imports) |
No output schema declared.
No examples provided.
confirm_connection Confirm the connection ~149
Confirms the API key works and tells Emailchaser which AI assistant connected. Call it as your first action after connecting, and whenever the user asks you to confirm or check the Emailchaser connection: it records the assistant and time on the key, which the app's API & MCP page watches to show the user you are in, and completes the 'Connect your AI' onboarding step. Idempotent: repeat calls simply refresh the record. Works with read-only keys as well as read & write keys.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your name in any form, e.g. claude, chatgpt, cursor, gemini. Normalized to a short lowercase identifier and echoed back |
No output schema declared.
No examples provided.
connect_sender_email Connect sender email ~225
Connects an SMTP/IMAP mailbox to the workspace using an app password, with no browser step. Google and Microsoft mailboxes are NOT supported here because both require an interactive consent screen that cannot be automated; connect those in the app. The address must be on a business domain, so gmail.com and similar are rejected. The returned account's healthScore is null until warm-up has checked 20 of its emails (see get_sender_email).
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | The mailbox address, on a business domain | |
| firstName | string | – | Sender first name |
| imapServerUrl | string | yes | IMAP host, optionally with a port, e.g. imap.fastmail.com:993 |
| lastName | string | – | Sender last name |
| loginString | string | – | Login username if it differs from the email address |
| password | string | yes | App password for the mailbox, not the account login password |
| smtpServerUrl | string | yes | SMTP host, optionally with a port, e.g. smtp.fastmail.com:587 |
No output schema declared.
No examples provided.
copilot_launch Copilot: launch a draft campaign ~170
Creates a DRAFT campaign from a sequence and starts finding + verifying leads for it from a LinkedIn Sales Navigator search. Nothing sends — the campaign stays a draft until you review and launch it. Returns the new campaign id and a lead-finding job id.
| Name | Type | Req | Description |
|---|---|---|---|
| icp | object | – | Optional ICP object as returned by copilot_plan, stored with the campaign for reference only |
| name | string | yes | Campaign name |
| salesNavData | string | – | Optional base64 LinkedIn session payload from the browser extension; required for lead-finding to actually run |
| salesNavSearchUrl | string | yes | A LinkedIn Sales Navigator people-search URL to source leads from |
| sequence | array | yes | The email sequence: the first step is the initial email, the rest are follow-ups |
No output schema declared.
No examples provided.
copilot_plan Copilot: plan a campaign ~114
Given a company website, the honest AI SDR builds an ideal-customer-profile (ICP) and a suggested cold-email sequence. Read-only — creates nothing. Returns the ICP (personas, titles, industries, suggested Sales Navigator keywords) and a draft sequence you can review or pass to copilot_launch.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional extra context, e.g. 'we sell to dental clinics in the US' |
| website | string | yes | The company website to analyze, e.g. https://acme.com |
No output schema declared.
No examples provided.
create_campaign Create campaign ~620
Creates a campaign in the workspace. The campaign starts as a DRAFT and sends nothing. A new campaign has no emails in it, so it cannot be launched until a sequence is written with replace_campaign_sequence and a sender email is attached. Sending limits and deliverability settings can be set here or changed later with update_campaign.
| Name | Type | Req | Description |
|---|---|---|---|
| allowNonBusinessEmails | boolean | – | Allow sending to free mailbox providers (gmail.com, etc.) |
| dailyLimit | integer | – | Cap on the total emails (initial + follow-ups) the campaign may schedule per calendar day in its timezone. Omit for no campaign-level cap; per-mailbox limits still apply |
| emoji | string | – | Campaign emoji shown in the app. Defaults to a generic one |
| flow | string | – | Campaign flow. Defaults to multiple_leads_scheduled, which behaves exactly like a campaign created in the app. Only pass api if you specifically want lead validation skipped at launch |
| ignoreOutOfOfficeReplies | boolean | – | Do not stop follow-ups on out-of-office replies |
| isEnabledCatchallValidated | boolean | – | Send to catch-all validated addresses |
| isEnabledEmailVerifier | boolean | – | Verify lead emails before sending |
| isEnabledIgnoreHardBouncedLeads | boolean | – | Skip leads that previously hard-bounced |
| isEnabledIgnoreLeadsWhoAlreadyResponded | boolean | – | Skip leads who already responded in another campaign |
| isEnabledLlm | boolean | – | Enable AI (LLM) features for this campaign |
| isEnabledSkipLeadIfAlreadyExists | boolean | – | Skip leads that already exist in the workspace |
| isEnabledStopFollowUpsForSameCompany | boolean | – | Company reply stop: once a lead replies (out-of-office and other automatic replies don't count), stop emailing the other leads at the same company in this campaign. Subdomains count as the same compa… |
| isEnabledStopFollowUpsOnReply | boolean | – | Stop follow-ups to a lead once they reply |
| maximumSendingLimitPerSenderEmail | integer | – | Daily sending limit per sender email account |
| maximumSendingLimitPerSenderEmailVariation | integer | – | Random daily variation applied to the sending limit |
| maximumTimeBetweenEmails | integer | – | Maximum gap between two sends, in minutes |
| minimumHealthScore | integer | – | Minimum email account health score for this campaign, 1-100 (see healthScore in list_sender_emails). An account below it, or with no score yet, sends nothing in this campaign, first emails and follow… |
| minimumTimeBetweenEmails | integer | – | Minimum gap between two sends, in minutes |
| name | string | yes | Campaign name |
| timezone | string | – | IANA timezone, e.g. America/New_York |
No output schema declared.
No examples provided.
create_dfy_order Create done-for-you order (charges real money) ~235
SPENDS REAL MONEY. Places a real order for sending domains and pre-warmed mailboxes: domains are registered at their listed price (about $13.99/year for a .com — search_dfy_domains shows the exact price per domain) and each mailbox costs about $3 setup plus $6/month. The order is accepted immediately and provisioned in the background; poll get_dfy_order for progress. Purchased domains redirect visitors to forwardingDomain. Use search_dfy_domains first to confirm availability and price. Every domain in domains needs at least one mailbox in mailboxes whose domainName is that domain, or the order is refused before anything is bought; mailboxes can also go on a domain from an earlier order.
| Name | Type | Req | Description |
|---|---|---|---|
| domains | array | – | Domains to purchase. Each one needs at least one mailbox in mailboxes with the same domainName. |
| forwardingDomain | string | – | Where the purchased domains redirect visitors, e.g. acme.com |
| mailboxes | array | – | Mailboxes to provision: at least one on every domain in domains. A mailbox can also go on a domain from an earlier order. |
No output schema declared.
No examples provided.
create_email_verification_job Verify a list of email addresses (spends money) ~298
SPENDS MONEY: every address checked adds metered usage to the workspace's next invoice. This does NOT use prospect credits and it does NOT create or send a campaign — it verifies a list on its own and gives back a per-address verdict you can download as CSV. Call get_email_verification_rates first for the current price: an address costs one verification credit when the first provider rejects it outright and two when both providers answer, so multiply your list size by perAddressCeilingUsd to budget. An address that gets no verdict is NOT billed and comes back with result unknown. Duplicates are removed and unparseable entries are returned in invalid_emails before anything is charged, so the total in the response is what will be billed against, not what you submitted. Needs an active subscription: a trialing or past_due workspace is refused with subscription_not_active. If the workspace's monthly verification allowance runs out mid-job the job does not fail — the remaining addresses come back unknown, marked, still in the download, and unbilled. Poll get_email_verification_job until state is done, then read the results with list_email_verification_results.
| Name | Type | Req | Description |
|---|---|---|---|
| emails | array | yes | The addresses to verify, up to 50,000. Duplicates and unparseable entries are dropped before billing. |
| name | string | yes | What to call this job in the app, e.g. 'Q3 conference list' |
No output schema declared.
No examples provided.
create_icp Create ICP ~252
Stores a manually-authored Ideal Customer Profile (ICP): who the workspace sells to, as targeting criteria (titles, seniorities, industries, company sizes, locations, keywords). Set makePrimary to promote it to the workspace's active profile. Use copilot_plan instead when you want the AI to build the ICP from a website.
| Name | Type | Req | Description |
|---|---|---|---|
| companySizes | array | – | Company headcount ranges, e.g. ["11-50", "51-200"] |
| industries | array | – | Industries, e.g. ["Software"] |
| keywords | array | – | Free-text keywords, e.g. ["b2b saas"] |
| locations | array | – | Locations, e.g. ["United States"] |
| makePrimary | boolean | – | Promote this profile to the workspace's active one, demoting any existing primary |
| name | string | yes | Profile name, e.g. "Mid-market SaaS RevOps leaders" |
| seniorities | array | – | Seniority levels, e.g. ["owner", "director"] |
| summary | string | – | One to three sentences describing who the workspace sells to |
| titles | array | – | Job titles to target, e.g. ["CEO", "Head of Sales"] |
No output schema declared.
No examples provided.
create_webhook Create webhook ~88
Registers a webhook endpoint that receives a POST request whenever the selected event happens (email sent, reply received, bounce, lead created, lead category updated, or campaign status changed).
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Display name for the webhook, shown in the app |
| type | string | yes | The event type to subscribe to |
| url | string | yes | HTTPS URL that will receive the events |
No output schema declared.
No examples provided.
create_workspace Create workspace ~147
Creates a sub-workspace under the account's main workspace (for example one per client, for an agency) and by default mints a read & write API key bound to it. The key's fullKey is returned exactly ONCE and cannot be retrieved again, so hand it to the user straight away; it never outlives the calling key. Must be called with the main workspace's key: sub-workspace keys are refused. Workspaces are a Professional-plan feature.
| Name | Type | Req | Description |
|---|---|---|---|
| generateApiKey | boolean | – | Also mint a read & write API key for the new workspace. Defaults to true |
| name | string | yes | Name of the new workspace (1 to 60 characters) |
No output schema declared.
No examples provided.
create_workspace_api_key Create API key for a workspace ~237
Mints a new API key bound to a workspace the calling key already owns: its own workspace, or one of its sub-workspaces when called with the main workspace's key. This is how a workspace whose key was lost gets a new one without a UI step. fullKey is returned exactly ONCE and cannot be retrieved again, so hand it to the user straight away. The new key authorizes the named workspace only and never outlives the calling key. Keys can be revoked in the app under API & MCP.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric workspace ID (from list_workspaces) |
| name | string | – | Name shown in the app's API key list. Defaults to "<workspace name> key" |
| readOnly | boolean | – | Mint a read-only key. It can use the read (list and get) tools plus confirm_connection, get_audience_size and search_lead_finder, so it can read, size audiences and browse Lead Finder (which still us… |
No output schema declared.
No examples provided.
delete_campaign Delete campaign ~48
Permanently deletes a campaign and all associated data, including its emails, sequences and scheduled tasks. This cannot be undone.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric campaign ID (from list_campaigns) |
No output schema declared.
No examples provided.
delete_icp Delete ICP ~48
Deletes an Ideal Customer Profile. Deleting the primary leaves the workspace without an active profile. This cannot be undone.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric ICP ID (from list_icps) |
No output schema declared.
No examples provided.
delete_lead Delete lead ~40
Permanently deletes a lead by ID. This cannot be undone.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric lead ID (returned when the lead was created) |
No output schema declared.
No examples provided.
delete_webhook Delete webhook ~38
Deletes a registered webhook endpoint by ID so it stops receiving events.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric webhook ID (from list_webhooks) |
No output schema declared.
No examples provided.
detach_campaign_sender_email Detach sender email from campaign ~121
Detaches a sender email from a campaign so the campaign stops sending through that mailbox. Unsent follow-ups to emails this sender already sent are canceled and do not come back on re-attach; a running campaign is rescheduled onto its remaining senders; already-sent emails are untouched. Idempotent: detaching a sender that is not attached is a no-op.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric campaign ID (from list_campaigns) |
| senderEmailId | integer | yes | The numeric sender email ID (from list_sender_emails) |
No output schema declared.
No examples provided.
get_audience_size Get audience size ~220
Counts how many prospects match ad-hoc targeting criteria (titles, seniorities, industries, company sizes, locations, keywords) without saving anything. Free — searching never spends credits; only revealing contact details is metered. Use it to validate targeting before creating an ICP or sourcing leads. A read-only key may call it: a read-only key can use the read (list and get) tools plus confirm_connection, get_audience_size and search_lead_finder.
| Name | Type | Req | Description |
|---|---|---|---|
| companySizes | array | – | Company headcount ranges, e.g. ["11-50", "51-200"] |
| industries | array | – | Industries, e.g. ["Software"] |
| keywords | array | – | Free-text keywords, e.g. ["b2b saas"] |
| locations | array | – | Locations, e.g. ["United States"] |
| seniorities | array | – | Seniority levels, e.g. ["owner", "director"] |
| titles | array | – | Job titles to target, e.g. ["CEO", "Head of Sales"] |
No output schema declared.
No examples provided.
get_autopilot_run Autopilot: get a run ~80
Returns one autopilot run including its full audit trail. It does not return the budget plan: that comes back only from start_autopilot_run (when budgetUsd was given) and from plan_autopilot. Use it to check progress.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric autopilot run ID (from list_autopilot_runs) |
No output schema declared.
No examples provided.
get_billing_profile Get workspace billing profile ~64
Returns the registrant and postal contact details held for the workspace: what is filed with the registrar when a done-for-you order buys a domain, and the postal address a CAN-SPAM footer must carry. Errors with 404 until set_billing_profile has been called.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_blocklist_entry Get blocklist entry ~75
Returns one suppression entry by ID: the blocked domain or email address, when it was added and which list it belongs to. Entries inherited from the account-wide list are visible from a sub-workspace too and report scope "global".
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric blocklist entry ID (from list_blocklist_entries) |
No output schema declared.
No examples provided.
get_campaign Get campaign ~100
Retrieves a campaign by ID, including settings, sending schedule, stats and per-status email counts. minimumHealth lists each connected email account on the campaign with its healthScore and whether the campaign's minimum health score (settings.minimumHealthScore) holds it back, with the reason; when every account is held back, allHeldBack is true and message says the campaign is sending nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric campaign ID (from list_campaigns) |
No output schema declared.
No examples provided.
get_campaign_sequence Get campaign sequence ~64
Returns the ordered emails that make up a campaign's sequence, including any A/B variants. delayDays on each step is counted from the previous step, and the first step is always 0.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric campaign ID (from list_campaigns) |
No output schema declared.
No examples provided.
get_campaign_stats Get campaign stats ~109
Returns a campaign's performance in one call: totals (sent, replied, positive, bounced, meetings), per-A/B-variant results, per-sequence-step results and a daily time series (UTC days). Use it to judge how a campaign is doing or to compare variants. There is no opens metric anywhere in the response: Emailchaser does not track opens, so its absence is deliberate, not an omission.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric campaign ID (from list_campaigns) |
No output schema declared.
No examples provided.
get_credit_balance Get credit balance ~103
Returns the workspace's credit wallet: available, reserved, lifetime granted and used, and the monthly grant. Credits pay for prospect reveals and AI work (list price $0.033 each). A new workspace sees zeros, not an error. unlimited is true when Emailchaser has made this workspace's credits free: every credit action then goes through without using available and is never refused for lack of credits, so there is no need to check the balance or buy credits.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_deliverability_insights Get deliverability insights ~98
What is wrong with deliverability across the workspace right now, worst first, each with the action that fixes it. Combines the inbox placement measured over the window with the latest health check of every connected mailbox: authentication records, blacklist listings and measured placement per mailbox. The best first call when asked 'why are we landing in spam'.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | How many days of runs to summarise (default 30) |
No output schema declared.
No examples provided.
get_dfy_order Get done-for-you order ~76
Returns one done-for-you order: status (created, pending_approval, processing, completed, failed, partially_completed, canceled), cost breakdown and any failure reason. Poll it to track provisioning after create_dfy_order.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric order ID (from create_dfy_order or list_dfy_orders) |
No output schema declared.
No examples provided.
get_email_verification_job Get an email verification job ~84
Returns one verification job: its state, per-verdict counts and what it has billed. Poll until state is done. An errorCode of monthly_limit_reached means the allowance ran out and the remaining addresses came back unknown rather than missing — they are still in the results, marked, and were not billed.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job ID |
No output schema declared.
No examples provided.
get_email_verification_rates Get the email verification rate ~108
Returns what one email verification costs right now, read from the billing plan the meter actually charges against. Call this before create_email_verification_job rather than assuming a price. Every check runs a waterfall of up to two providers and each one that returns a verdict is one billable verification credit, so an address costs ONE credit when the first provider rejects it outright and TWO when both answer. Budget against perAddressCeilingUsd, which is the common case, not perAddressFloorUsd.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_icp Get ICP ~55
Retrieves one Ideal Customer Profile by ID, including its targeting criteria, whether it is AI-generated or human-edited, primary status and estimated audience size.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric ICP ID (from list_icps) |
No output schema declared.
No examples provided.
get_inbox_placement_run Get inbox placement run ~139
Returns one inbox placement run with its complete report: the headline inbox / spam / promotions / missing split, the breakdown per mailbox provider and per sending mailbox, and the content spam rules the copy triggered. 'Promotions' rolls up every Gmail category tab. 'Missing' means the probe was never found in any folder, which usually indicates a silent block: a worse problem than spam, with a different fix. spamScore is in tenths of a point (47 means 4.7) and -1 means not scored.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric inbox placement run ID (from list_inbox_placement_runs) |
No output schema declared.
No examples provided.
get_inbox_placement_stats_by_date Get inbox placement stats by date ~134
Rolls completed inbox placement runs up by UTC calendar day over a window, for a trend. Defaults to the last 30 days. Days on which nothing ran are ABSENT from the series rather than zero: never report a missing day as 0% placement, it means nobody ran a test that day.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Start of the window, RFC3339, e.g. 2026-08-01T00:00:00Z. Defaults to 30 days ago |
| to | string | – | End of the window, RFC3339. Defaults to now |
No output schema declared.
No examples provided.
get_lead Get lead ~40
Retrieves a lead by ID, including contact details and company information.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric lead ID (returned when the lead was created) |
No output schema declared.
No examples provided.
get_lead_conversation Get lead conversation ~115
Returns a lead's full email thread in chronological order: outbound emails (sent, scheduled and unsent drafts) plus inbound replies, each with direction and status. AI reply drafts awaiting review are marked isDraft; edit one with update_reply_draft and send it with send_reply_draft (or a human sends it from the app). Use it to read the back-and-forth with one lead before deciding what to do next.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric lead ID (returned when the lead was created) |
No output schema declared.
No examples provided.
get_lead_finder_filters Lead Finder: filter values and limits ~123
Returns the values Lead Finder's list filters accept (seniorities, jobFunctions, companySizes, revenue, industries, countries, headquartersCountries, regions, continents), the limits that apply to this workspace (page sizes, deepest page, people per add, first-N count, imports running at once, and the daily browsing allowance with what is left today), and creditsPerProspect, what adding one person to a campaign costs. Free, and makes no call to the data provider. Call it before search_lead_finder so filter values match exactly.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_lead_finder_import Lead Finder: add progress ~256
Returns one Lead Finder add's progress: status (running, completed, failed or canceled), how many people were added and skipped and why (skipReasons), what email verification said, and credits spent. added, creditsSpent and status can still change until finishedAt is set, so poll it after add_lead_finder_prospects until it is. A completed add's endReason is all_selected, requested_reached, audience_exhausted or fetch_limit, and a canceled one's is canceled. A failed add can still have added and charged people (see added and creditsSpent); lastError says why it stopped: insufficient_credits, contact_cap_reached, results_expired, budget_exhausted, provider_blocked, invalid_filters, campaign_not_found or internal. A new filters add to finish a partial one starts from the top again and counts the people already added toward its fetch limit (five people per one requested, at least 1,000), so after a large add, pick the missing people by ref from search_lead_finder results instead.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The import ID (importId from add_lead_finder_prospects or list_lead_finder_imports) |
No output schema declared.
No examples provided.
get_lead_finder_search Lead Finder: read a search ~176
Reads a search started with search_lead_finder, by its searchId. While it is still running, or while its exact total is still being counted (totalStatus pending), the call waits up to about six seconds, so calling again straight away is fine. A finished page can be re-read for 10 minutes after it was fetched (less if it came from cache), and re-reading it in that window keeps its refs valid for another 60 minutes. After that the call answers status failed with error expired, though refs already shown stay usable until 60 minutes after they were last shown; running search_lead_finder again shows them afresh and uses browsing rows. After 15 minutes the search is not found.
| Name | Type | Req | Description |
|---|---|---|---|
| searchId | string | yes | The searchId returned by search_lead_finder |
No output schema declared.
No examples provided.
get_outcomes_report Get outcomes report ~198
Puts money against results for a time window: credit spend (grouped by reason, valued at the $0.033 list price) plus done-for-you order costs on one side, and sent emails, replies, positive replies and booked meetings on the other, with cost per reply, per positive reply and per meeting. Subscription fees are NOT included. campaignId narrows the outcome side only — spend stays workspace-level — so per-campaign cost figures are partial attribution, not a true campaign cost. Use it to answer 'what did we spend and what did we get'.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | integer | – | Narrow the outcome side to one campaign (spend stays workspace-level) |
| since | string | – | Window start, RFC3339 or YYYY-MM-DD (inclusive) |
| until | string | – | Window end, RFC3339 or YYYY-MM-DD (inclusive; a bare date means midnight UTC at the start of that day) |
No output schema declared.
No examples provided.
get_primary_icp Get primary ICP ~44
Returns the workspace's active (primary) Ideal Customer Profile — the profile the workspace currently targets; at most one is primary. Errors with 404 when none is set.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_sender_email Get sender email ~120
Retrieves a connected sending email account by ID, including its health score. healthScore is the account's health score: 0-100, higher is better, the share of its warm-up emails over the last 7 full days that landed in the inbox rather than spam. It moves daily as warm-up emails land in the inbox (up) or in spam (down), and is null while warm-up is off or before 20 warm-up emails were checked.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric sender email ID (from list_sender_emails) |
No output schema declared.
No examples provided.
get_sender_email_dns Get sender email DNS vitals ~158
Checks the sender domain's SPF, DKIM, DMARC and MX records and reports each as OK, WARNING, MISSING or ERROR with human-readable issues (the same checks behind the app's DNS vitals view), plus the mailbox's warm-up status: whether it is enrolled, today's ramp target, the daily cap and its healthScore (0-100, higher is better, the share of its warm-up emails over the last 7 full days that landed in the inbox rather than spam). Use it to diagnose deliverability. DNS lookups run live at request time, so the call can take a few seconds but never returns stale records.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric sender email ID (from list_sender_emails) |
No output schema declared.
No examples provided.
get_sender_email_warmup Get sender email warm-up settings ~176
Reads a mailbox's warm-up settings: whether warm-up is on, the ramp (startLimit warm-up emails on the first day, increaseBy more each sending day, up to capLimit a day), weekdays-only, timezone, today's ramp target (currentPerDay) and the account's healthScore (0-100, higher is better, the share of its warm-up emails over the last 7 full days that landed in the inbox rather than spam; null while warm-up is off or before 20 were checked). Warm-up volume is separate from the campaign sending limits changed with update_sender_email. When configured is false the mailbox has never warmed, and the values shown are the defaults that switching warm-up on would use.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The numeric sender email ID (from list_sender_emails) |
No output schema declared.
No examples provided.
get_sender_reputation Get sender reputation and mailbox health ~100
Returns the latest health check for every connected mailbox: SPF, DKIM, DMARC and MX status (OK, WARNING, MISSING or ERROR), blacklist listings with their delisting links, measured inbox placement over recent runs and a combined 0-100 health score. blacklistsChecked is reported next to blacklistsListed so the count is never read as a total. A placementScore or healthScore of -1 means not measured, not zero.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_workspace_details Get workspace details ~43
Returns the workspace behind the API key: campaign counts broken down by status and the list of members. Useful as a first call to confirm which workspace a key belongs to.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
What is the Emailchaser MCP server?
Emailchaser is an MCP server listed in the public MCP registry as com.emailchaser/emailchaser. Run cold email outbound from an AI agent: campaigns, leads, replies, sender accounts, autopilot. This page covers its hosted endpoint (https://app.emailchaser.com/api/mcp).
Is the Emailchaser MCP server safe to use?
Emailchaser scores 85 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Emailchaser MCP server expose?
Emailchaser exposes 101 tools: confirm_connection, list_campaigns, create_campaign, get_campaign, update_campaign, and 96 more. Their descriptions and schemas cost roughly 15,569 tokens of context every time the server is loaded.
Does the Emailchaser MCP server require authentication?
Yes. Emailchaser asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Emailchaser MCP server still maintained?
Emailchaser is still listed as active in the MCP registry. We last reached this channel on 29 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.