MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Communication & messaging

Emailchef MCP by usefulapi

Read lists, contacts, campaign stats; add contacts; draft, schedule and send campaigns and SMS.

Checks passed
14 / 22

0 failed · 8 not measured

Median response
280 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
43

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Outdated check

Last connection measurement is over 24 hours old. Current availability is unknown.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
400
Publisher identityCan the publisher be traced to its source?
402

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 280 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name emailchef-mcp.

  • Pass
    Lists tools

    tools/list returned 43 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 280 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 280 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Pass
    Parameters documented

    87 of 104 parameters have a description (84%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Pass
    Source repo linked

    A repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-11-10T23:34:41.521598Z, within 180 days.

  • Not measured
    Open-source licence

    The GitHub licence lookup has not returned an OSI result yet.

Start using Emailchef MCP by usefulapi

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http emailchef-mcp-by-usefulapi https://emailchef.usefulapi.io/mcp

Capabilities

Tools 43

emailchef_archive_campaign

WRITE: archive a campaign (hidden from the default list; statistics are kept). Reversible with emailchef_unarchive_campaign. PUT /campaigns/{id}/archivecampaign.

Discovered
emailchef_block_emails

WRITE: add up to 100 addresses to the account blocklist so they never receive email from any list. Reversible with emailchef_unblock_email. POST /blockings?type=MANUAL.

Discovered
emailchef_clone_campaign

WRITE: copy an existing campaign into a new DRAFT (nothing is sent). A SENT campaign cannot be cloned (Emailchef answers HTTP 500). Returns the new campaign id. POST /newsletters?clone=1.

Discovered
emailchef_create_campaign

WRITE: create a new campaign as a DRAFT (nothing is sent). Needs a verified sender (emailchef_list_senders) and at least one list. To be sendable the HTML body must contain the CAN-SPAM placeholders [[account:business]], [[account:address_1]], [[account:city]], [[account:postal_code]], [[account:country]] and an unsubscribe link <a href="[[unsubscribe_link]]">, otherwise the send ends FAILED. Schedule or send it afterwards. POST /newsletters.

Discovered
emailchef_create_contact

WRITE: add a contact (email, name, custom fields) to a list. Only add people who agreed to receive email: an ACTIVE contact will receive the account's campaigns and automations. Returns the contact id and status. POST /contacts.

Discovered
emailchef_create_list

WRITE: create a new, empty contact list. Returns the new list id. POST /lists.

Discovered
emailchef_get_account

The Emailchef account this API key belongs to: id, email, language, status, subscriber total, bounces and complaints. GET /accounts/current.

Discovered
emailchef_get_campaign

One campaign: name, subject, HTML and text body, sender, reply-to, state, schedule, recipient lists/segments and cached sent/open/click counts. GET /campaigns/{id}.

Discovered
emailchef_get_campaign_counts

How many campaigns the account has by state: drafts, sent, scheduled, archived, failed. GET /campaigns/count.

Discovered
emailchef_get_campaign_links

The links contained in a campaign (id, name, URL). GET /newsletters/{id}/links.

Discovered
emailchef_get_contact

One contact in one list: status, email, name, IP, how it was added, when, and its custom field values. GET /contacts/{contact_id}?list_id=...

Discovered
emailchef_get_import_task

One import task: status, progress, imported/updated/failed counts and any error message. GET /importtasks/{task_id}.

Discovered
emailchef_get_list

One contact list: name, description, default sender, creation date. GET /lists/{list_id}.

Discovered
emailchef_get_list_contact_counts

How many contacts a list has by state: active, unsubscribed, bounced, reported. GET /lists/{list_id}/stats/count.

Discovered
emailchef_get_list_stats

Daily growth of a list over a date range: total contacts per day and the daily delta. Omit the dates for the whole history. GET /lists/{list_id}/stats.

Discovered
emailchef_get_segment

One segment with its logic and condition groups. GET /lists/{list_id}/segments/{segment_id}.

Discovered
emailchef_get_sms_balance

The account's SMS credit balance and currency. GET /sms/balance.

Discovered
emailchef_get_sms_status

Delivery status of one sent SMS by message id: recipient, text, sent/done time, parts, price, state and error. GET /sms/status/{messageId}.

Discovered
emailchef_get_subscription

The account's current Emailchef plan: plan name, plan expiry, contact and send limits, credits left, active/expired flags. Check this before a big send. GET /subscriptions/current.

Discovered
emailchef_import_contacts

WRITE: bulk-add or update up to 500 contacts in a list in one call (an existing email is updated). Each contact is an object keyed by field placeholder, e.g. {"email":"a@b.com","firstname":"Ada"}: get the placeholders from emailchef_list_predefined_fields and emailchef_list_custom_fields. Import only people who agreed to receive email. Runs in the background: poll emailchef_get_import_task with the returned id. POST /lists/{list_id}/import.

Discovered
emailchef_list_blocked

List the account's blocklist (emails that never receive email): address and reason (MANUAL, UNSUBSCRIBED, COMPLAINT). GET /blockings.

Discovered
emailchef_list_campaign_engagement

Per-contact engagement for a sent campaign: who opened, clicked, was delivered, did not open, unsubscribed, complained, or was sent to, with counts and first/last event time. Pick exactly one event. GET /newsletters/{id}/contacts.

Discovered
emailchef_list_campaigns

List email campaigns with state, recipients, delivered, unique opens and unique clicks. Without a status filter Emailchef returns only SENT and ARCHIVED campaigns; pass a status to see DRAFT, SCHEDULED, SENDING or FAILED ones. GET /campaigns.

Discovered
emailchef_list_contacts

List the contacts of one list (id, email, name, added by, subscription date), optionally by state. GET /contacts?list_id=...

Discovered
emailchef_list_custom_fields

The custom contact fields of a list: name, data type, placeholder (the key used when writing contacts), options. GET /lists/{list_id}/customfields.

Discovered
emailchef_list_import_tasks

List contact import tasks: list, status (DISPATCHED, COMPLETE, FAILED), progress, imported/updated/failed counts. GET /importtasks.

Discovered
emailchef_list_lists

List the contact lists with id, name, and counts of active, unsubscribed and bounced contacts and segments. Newest first by default. GET /lists.

Discovered
emailchef_list_predefined_fields

The built-in contact fields (email, first name, ...) with their placeholders. GET /predefinedfields.

Discovered
emailchef_list_segments

List the saved segments of a list with how many contacts match each. GET /lists/{list_id}/segments.

Discovered
emailchef_list_senders

List the sender identities (name, email, verification status, postal address). Campaigns and emails need a verified sender id. GET /senders.

Discovered
emailchef_list_timezones

List Emailchef's timezones (id, name, fixed UTC offset). The id is required to schedule a campaign. GET /meta/timezones.

Discovered
emailchef_schedule_campaign

WRITE, SENDS EMAIL TO CUSTOMERS LATER: schedule a DRAFT campaign to go out to all its recipients at a date and time. Emailchef timezones are fixed offsets without daylight saving: pick the id (emailchef_list_timezones) whose offset matches the send date. Undo before it starts with emailchef_unschedule_campaign. PUT /campaigns/{id}/schedule.

Discovered
emailchef_send_campaign

WRITE, SENDS EMAIL TO CUSTOMERS NOW AND CANNOT BE UNDONE: start sending a DRAFT (or FAILED) campaign immediately to ALL its recipients and use up plan sends. Check the recipients (emailchef_get_campaign), the sender and the subscription first, ideally after emailchef_send_test_campaign, and send only with the user's explicit go-ahead (confirm must be true). Queued asynchronously: poll emailchef_get_campaign for the final state. PUT /campaigns/{id}/send.

Discovered
emailchef_send_email

WRITE, SENDS AN EMAIL NOW AND CANNOT BE UNDONE: send a single email to one recipient from a verified sender and use up plan sends. Pass text_body and/or html_body. The recipient does not need to be a contact. Send only with the user's explicit go-ahead (confirm must be true). POST /sendmail.

Discovered
emailchef_send_sms

WRITE, SENDS TEXT MESSAGES NOW, COSTS SMS CREDIT AND CANNOT BE UNDONE: send an SMS to 1-50 phone numbers in international format (e.g. +393331234567). Check emailchef_get_sms_balance first and send only with the user's explicit go-ahead (confirm must be true). Returns a message id per recipient and the remaining balance. POST /sms/send.

Discovered
emailchef_send_test_campaign

WRITE: email ONE test copy of a campaign to a single address. The campaign state does not change. The sender must be verified. PUT /campaigns/{id}/sendtest.

Discovered
emailchef_unarchive_campaign

WRITE: restore an archived campaign. PUT /campaigns/{id}/unarchivecampaign.

Discovered
emailchef_unblock_email

WRITE: remove one address from the account blocklist so it can receive email again. Only do this for an address whose owner asked for it. DELETE /blockings/{email}.

Discovered
emailchef_unschedule_campaign

WRITE: cancel the schedule of a SCHEDULED campaign and bring it back to DRAFT. PUT /campaigns/{id}/unschedule.

Discovered
emailchef_unsubscribe_contact

WRITE: unsubscribe one contact from one list (it stops receiving that list's email). POST /lists/{list_id}/unsubscribe?contact_id=...

Discovered
emailchef_update_campaign

WRITE: change a DRAFT campaign's name, subject, body, sender, reply-to or recipient lists. Only the fields you pass change: the tool reads the campaign first and sends the complete record back, because Emailchef blanks any omitted field. Refuses a campaign that is not a DRAFT. PUT /newsletters/{id}.

Discovered
emailchef_update_contact

WRITE: change a contact's name, state or custom fields in one list. Only the fields you pass change. Setting the status to ACTIVE re-subscribes someone: only do so with their consent. PUT /contacts/{contact_id}.

Discovered
emailchef_update_list

WRITE: rename a contact list and/or change its description. Only the fields you pass change. PUT /lists/{list_id}.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected280 ms43