{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-06T19:35:56.576Z","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef.md","server":{"slug":"io-usefulapi-emailchef","name":"Emailchef MCP by usefulapi","registryName":"io.usefulapi/emailchef","description":"Read lists, contacts, campaign stats; add contacts; draft, schedule and send campaigns and SMS.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"emailchef","type":"remote","identifier":"https://emailchef.usefulapi.io/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef","version":"1.4.4","transport":null,"scoredAt":"2026-11-06T13:06:17.107Z"},"score":{"total":18,"tier":"low","status":"scored","weekDelta":null,"history":[{"date":"2026-11-06","total":18},{"date":"2026-11-05","total":18},{"date":"2026-11-04","total":18},{"date":"2026-11-03","total":18},{"date":"2026-11-02","total":18},{"date":"2026-11-01","total":66},{"date":"2026-10-31","total":65}]},"categories":[{"name":"Endpoint Security","score":46,"verdict":"fail","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.","HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.","HSTS check failed: the Strict-Transport-Security header is absent.","DNSSEC check failed: this domain isn't protected by DNSSEC."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.unreachable","args":{}},{"code":"https.inconclusive","args":{"reason":"redirect_not_https"}},{"code":"headers.hsts_absent","args":{}},{"code":"dnssec.absent","args":{}}]},{"name":"Transport & Reachability","score":0,"verdict":"fail","reasons":["Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly."],"codes":[{"code":"transport.redirected","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":0,"verdict":"unverified","reasons":["Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list."],"codes":[{"code":"schema.unreachable","args":{}}]},{"name":"Stability & Change Management","score":0,"verdict":"unverified","reasons":["Stability not yet verified: not enough scan history yet (needs a 30-day window)."],"codes":[{"code":"stability.insufficient_history","args":{}}]},{"name":"Tool Coverage","score":0,"verdict":"unverified","reasons":["Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolquality.unreachable","args":{}}]},{"name":"Tool Safety","score":0,"verdict":"unverified","reasons":["Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolsafety.unreachable","args":{}}]},{"name":"Capabilities","score":0,"verdict":"unverified","reasons":["Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"codes":[{"code":"cap.unreachable","args":{}}]}],"inconclusive":["Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.","HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.","Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.","Stability not yet verified: not enough scan history yet (needs a 30-day window).","Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"malware":[],"components":[{"slug":"emailchef","type":"remote","identifier":"https://emailchef.usefulapi.io/mcp","withdrawn":false,"score":18,"current":true,"url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef.md"}],"facts":[{"label":"Endpoint","value":"https://emailchef.usefulapi.io/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"1.4.4"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"emailchef_get_account","title":"Get account","description":"The Emailchef account this API key belongs to: id, email, language, status, subscriber total, bounces and complaints. GET /accounts/current.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":41},{"name":"emailchef_get_subscription","title":"Get subscription","description":"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.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"emailchef_list_senders","title":"List senders","description":"List the sender identities (name, email, verification status, postal address). Campaigns and emails need a verified sender id. GET /senders.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":41},{"name":"emailchef_list_timezones","title":"List timezones","description":"List Emailchef's timezones (id, name, fixed UTC offset). The id is required to schedule a campaign. GET /meta/timezones.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":41},{"name":"emailchef_list_lists","title":"List contact lists","description":"List the contact lists with id, name, and counts of active, unsubscribed and bounced contacts and segments. Newest first by default. GET /lists.","inputs":[{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-100 (default 25)."},{"name":"offset","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_offset."},{"name":"order","type":"string","required":false,"description":"Sort direction (default desc)."},{"name":"order_by","type":"string","required":false,"description":"Sort by creation date (default) or name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":112},{"name":"emailchef_get_list","title":"Get list","description":"One contact list: name, description, default sender, creation date. GET /lists/{list_id}.","inputs":[{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":46},{"name":"emailchef_get_list_stats","title":"Get list growth stats","description":"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.","inputs":[{"name":"end_date","type":"string","required":false,"description":"Last day, yyyy-mm-dd."},{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"start_date","type":"string","required":false,"description":"First day, yyyy-mm-dd."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":91},{"name":"emailchef_get_list_contact_counts","title":"Get list contact counts","description":"How many contacts a list has by state: active, unsubscribed, bounced, reported. GET /lists/{list_id}/stats/count.","inputs":[{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":55},{"name":"emailchef_create_list","title":"Create list","description":"WRITE: create a new, empty contact list. Returns the new list id. POST /lists.","inputs":[{"name":"description","type":"string","required":false,"description":"List description."},{"name":"name","type":"string","required":true,"description":"List name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":48},{"name":"emailchef_update_list","title":"Update list","description":"WRITE: rename a contact list and/or change its description. Only the fields you pass change. PUT /lists/{list_id}.","inputs":[{"name":"description","type":"string","required":false,"description":"New description."},{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"name","type":"string","required":false,"description":"New list name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":70},{"name":"emailchef_list_contacts","title":"List contacts","description":"List the contacts of one list (id, email, name, added by, subscription date), optionally by state. GET /contacts?list_id=...","inputs":[{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-100 (default 25)."},{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"offset","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_offset."},{"name":"order","type":"string","required":false,"description":"Sort direction (default desc)."},{"name":"order_by","type":"string","required":false,"description":"Sort field (default subscription date)."},{"name":"status","type":"string","required":false,"description":"Only contacts in this state (default: all)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":139},{"name":"emailchef_get_contact","title":"Get contact","description":"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=...","inputs":[{"name":"contact_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":78},{"name":"emailchef_create_contact","title":"Add contact to a list","description":"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.","inputs":[{"name":"custom_fields","type":"object","required":false,"description":"Custom field values keyed by the field's place_holder (see emailchef_list_custom_fields): a string, or true/false for boolean fields."},{"name":"email","type":"string","required":true,"description":null},{"name":"first_name","type":"string","required":false,"description":null},{"name":"last_name","type":"string","required":false,"description":null},{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"status","type":"string","required":false,"description":"Initial state (default: the account's default, normally ACTIVE)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":153},{"name":"emailchef_update_contact","title":"Update contact","description":"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}.","inputs":[{"name":"contact_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"custom_fields","type":"object","required":false,"description":"Custom field values keyed by the field's place_holder (see emailchef_list_custom_fields): a string, or true/false for boolean fields."},{"name":"first_name","type":"string","required":false,"description":null},{"name":"last_name","type":"string","required":false,"description":null},{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"status","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":147},{"name":"emailchef_unsubscribe_contact","title":"Unsubscribe contact","description":"WRITE: unsubscribe one contact from one list (it stops receiving that list's email). POST /lists/{list_id}/unsubscribe?contact_id=...","inputs":[{"name":"contact_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":71},{"name":"emailchef_import_contacts","title":"Import contacts","description":"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.","inputs":[{"name":"contacts","type":"array","required":true,"description":"Contacts to import, each keyed by placeholder."},{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":141},{"name":"emailchef_list_import_tasks","title":"List import tasks","description":"List contact import tasks: list, status (DISPATCHED, COMPLETE, FAILED), progress, imported/updated/failed counts. GET /importtasks.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":42},{"name":"emailchef_get_import_task","title":"Get import task","description":"One import task: status, progress, imported/updated/failed counts and any error message. GET /importtasks/{task_id}.","inputs":[{"name":"task_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"emailchef_list_predefined_fields","title":"List predefined fields","description":"The built-in contact fields (email, first name, ...) with their placeholders. GET /predefinedfields.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"emailchef_list_custom_fields","title":"List custom fields","description":"The custom contact fields of a list: name, data type, placeholder (the key used when writing contacts), options. GET /lists/{list_id}/customfields.","inputs":[{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"emailchef_list_segments","title":"List segments","description":"List the saved segments of a list with how many contacts match each. GET /lists/{list_id}/segments.","inputs":[{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-100 (default 25)."},{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"offset","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_offset."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":89},{"name":"emailchef_get_segment","title":"Get segment","description":"One segment with its logic and condition groups. GET /lists/{list_id}/segments/{segment_id}.","inputs":[{"name":"list_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"segment_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"emailchef_list_blocked","title":"List blocked emails","description":"List the account's blocklist (emails that never receive email): address and reason (MANUAL, UNSUBSCRIBED, COMPLAINT). GET /blockings.","inputs":[{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-100 (default 25)."},{"name":"offset","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_offset."},{"name":"search","type":"string","required":false,"description":"Only addresses containing this text."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":99},{"name":"emailchef_block_emails","title":"Block emails","description":"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.","inputs":[{"name":"emails","type":"array","required":true,"description":"Addresses to block."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"emailchef_unblock_email","title":"Unblock email","description":"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}.","inputs":[{"name":"email","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":54},{"name":"emailchef_get_campaign_counts","title":"Get campaign counts","description":"How many campaigns the account has by state: drafts, sent, scheduled, archived, failed. GET /campaigns/count.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"emailchef_list_campaigns","title":"List campaigns","description":"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.","inputs":[{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-100 (default 25)."},{"name":"offset","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_offset."},{"name":"order","type":"string","required":false,"description":"Sort direction (default desc)."},{"name":"order_by","type":"string","required":false,"description":"Sort by date (default) or name."},{"name":"search","type":"string","required":false,"description":"Only campaigns whose name contains this text."},{"name":"status","type":"string","required":false,"description":"Only campaigns in this state (default: SENT and ARCHIVED)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":166},{"name":"emailchef_get_campaign","title":"Get campaign","description":"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}.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":65},{"name":"emailchef_get_campaign_links","title":"Get campaign links","description":"The links contained in a campaign (id, name, URL). GET /newsletters/{id}/links.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":48},{"name":"emailchef_list_campaign_engagement","title":"List campaign engagement","description":"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.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"event","type":"string","required":true,"description":"Which engagement slice to list."},{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-100 (default 25)."},{"name":"offset","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_offset."},{"name":"search","type":"string","required":false,"description":"Only contacts whose email or name contains this text."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":149},{"name":"emailchef_create_campaign","title":"Create campaign (draft)","description":"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.","inputs":[{"name":"html_body","type":"string","required":false,"description":"HTML body (include the CAN-SPAM placeholders and unsubscribe link)."},{"name":"list_ids","type":"array","required":true,"description":"Lists to send to."},{"name":"name","type":"string","required":true,"description":"Campaign name (must be unique in the account)."},{"name":"reply_to_id","type":null,"required":false,"description":"Sender id used for replies."},{"name":"segment_id","type":null,"required":false,"description":"Optional segment of the FIRST list to narrow the audience."},{"name":"sender_id","type":null,"required":true,"description":"A verified sender id from emailchef_list_senders."},{"name":"subject","type":"string","required":true,"description":"Email subject."},{"name":"text_body","type":"string","required":false,"description":"Plain-text body."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":227},{"name":"emailchef_clone_campaign","title":"Clone campaign","description":"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.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"The campaign to copy."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":65},{"name":"emailchef_update_campaign","title":"Update draft campaign","description":"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}.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"html_body","type":"string","required":false,"description":null},{"name":"list_ids","type":"array","required":false,"description":"Replace the recipient lists (any segment is dropped unless segment_id is also passed)."},{"name":"name","type":"string","required":false,"description":null},{"name":"reply_to_id","type":null,"required":false,"description":"Numeric id (as returned by the list tools)."},{"name":"segment_id","type":null,"required":false,"description":"Segment of the first list (only with list_ids)."},{"name":"sender_id","type":null,"required":false,"description":"Numeric id (as returned by the list tools)."},{"name":"subject","type":"string","required":false,"description":null},{"name":"text_body","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":193},{"name":"emailchef_send_test_campaign","title":"Send campaign test email","description":"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.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"email","type":"string","required":true,"description":"Where to send the test copy."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":76},{"name":"emailchef_schedule_campaign","title":"Schedule campaign","description":"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.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"scheduled_time","type":"string","required":true,"description":"Local send time in the chosen timezone, YYYY-MM-DD HH:MM:SS (no UTC offset or Z)."},{"name":"timezone_id","type":null,"required":true,"description":"Timezone id from emailchef_list_timezones."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":147},{"name":"emailchef_unschedule_campaign","title":"Unschedule campaign","description":"WRITE: cancel the schedule of a SCHEDULED campaign and bring it back to DRAFT. PUT /campaigns/{id}/unschedule.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":55},{"name":"emailchef_send_campaign","title":"Send campaign now","description":"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.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."},{"name":"confirm","type":"boolean","required":true,"description":"Must be true: the user explicitly approved sending this campaign now."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":144},{"name":"emailchef_archive_campaign","title":"Archive campaign","description":"WRITE: archive a campaign (hidden from the default list; statistics are kept). Reversible with emailchef_unarchive_campaign. PUT /campaigns/{id}/archivecampaign.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"emailchef_unarchive_campaign","title":"Restore archived campaign","description":"WRITE: restore an archived campaign. PUT /campaigns/{id}/unarchivecampaign.","inputs":[{"name":"campaign_id","type":null,"required":true,"description":"Numeric id (as returned by the list tools)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":44},{"name":"emailchef_send_email","title":"Send one email","description":"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.","inputs":[{"name":"confirm","type":"boolean","required":true,"description":"Must be true: the user explicitly approved sending this email now."},{"name":"html_body","type":"string","required":false,"description":null},{"name":"reply_to","type":"string","required":false,"description":null},{"name":"sender_id","type":null,"required":true,"description":"A verified sender id from emailchef_list_senders."},{"name":"subject","type":"string","required":true,"description":null},{"name":"text_body","type":"string","required":false,"description":null},{"name":"to_email","type":"string","required":true,"description":null},{"name":"to_name","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":161},{"name":"emailchef_get_sms_balance","title":"Get SMS balance","description":"The account's SMS credit balance and currency. GET /sms/balance.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":26},{"name":"emailchef_get_sms_status","title":"Get SMS status","description":"Delivery status of one sent SMS by message id: recipient, text, sent/done time, parts, price, state and error. GET /sms/status/{messageId}.","inputs":[{"name":"message_id","type":"string","required":true,"description":"Message id returned by emailchef_send_sms."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"emailchef_send_sms","title":"Send SMS","description":"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.","inputs":[{"name":"confirm","type":"boolean","required":true,"description":"Must be true: the user explicitly approved sending these SMS now."},{"name":"from","type":"string","required":false,"description":"Sender name or number (default: the account's)."},{"name":"text","type":"string","required":true,"description":"The message text."},{"name":"to","type":"array","required":true,"description":"Recipient phone numbers."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":148}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-06T13:06:17.000Z","track":"remote","endpoint":"https://emailchef.usefulapi.io/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=usefulapi.io","issuer":"CN=WE1,O=Google Trust Services,C=US","notBefore":"2026-09-13T08:55:39Z","notAfter":"2026-12-12T09:54:12Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=WE1,O=Google Trust Services,C=US","issuer":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","notBefore":"2023-12-13T09:00:00Z","notAfter":"2029-02-20T14:00:00Z","keyType":"ECDSA","keyBits":256,"isCa":true},{"subject":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","issuer":"CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE","notBefore":"2023-11-15T03:43:21Z","notAfter":"2028-01-28T00:00:42Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"insecure","label":"Not signed","name":"emailchef.usefulapi.io.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"io.","outcome":"verified","label":"Verified"},{"zone":"usefulapi.io.","outcome":"insecure_proven","label":"Unsigned (proven)"}]},"auth":{"outcome":"inconclusive","label":"Inconclusive","gate":null,"gateLabel":null,"status":302,"authorizationServers":[]},"httpsRedirect":{"outcome":"inconclusive","label":"Inconclusive","status":302},"transports":[{"transport":"streamable-http","outcome":"redirected","label":"Redirected","status":302,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-31","recent":[{"id":"chg_01a1af5c-a816-7ac1-94c5-806002833b57","kind":"score.rubric_changed","summary":"We updated how we score, so this day's move reflects our rubric, not a change to the server","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-06","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a1af5c-a816-7ac1-94c5-806002833b57"},{"id":"chg_01a19aba-1615-7e9f-b028-c7b94670b05a","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19aba-1615-7e9f-b028-c7b94670b05a"},{"id":"chg_01a19aba-1616-7705-9842-64f021b9e6b0","kind":"check.unverifiable","summary":"Authorization (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19aba-1616-7705-9842-64f021b9e6b0"},{"id":"chg_01a19aba-1616-7d13-a718-19a24ce8621d","kind":"check.unverifiable","summary":"Stability (0.03 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19aba-1616-7d13-a718-19a24ce8621d"},{"id":"chg_01a19aba-1617-73af-9663-e3bc409da75c","kind":"check.unverifiable","summary":"Schema quality (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19aba-1617-73af-9663-e3bc409da75c"},{"id":"chg_01a19aba-1617-7909-a1a1-095eea7efe4c","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19aba-1617-7909-a1a1-095eea7efe4c"},{"id":"chg_01a19aba-1618-72b6-805b-528b9a665b1b","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19aba-1618-72b6-805b-528b9a665b1b"},{"id":"chg_01a19aba-1618-7823-8dbd-d5275edf9d21","kind":"capture.status_changed","summary":"Endpoint reachability (reachable → not serving MCP)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19aba-1618-7823-8dbd-d5275edf9d21"},{"id":"chg_01a19aba-1618-7d77-8f48-aa9ff9bd991c","kind":"score.total_changed","summary":"Trust score (66 → 18)","materiality":"functional","direction":"regression","scoreDelta":-48,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19aba-1618-7d77-8f48-aa9ff9bd991c"},{"id":"chg_01a19594-5a20-7500-a84b-ff81a89a309c","kind":"check.reverified","summary":"Stability (unverified → 0.03)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19594-5a20-7500-a84b-ff81a89a309c"},{"id":"chg_01a19594-5a21-7083-a345-cb71a5f058f3","kind":"score.total_changed","summary":"Trust score (65 → 66)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a19594-5a21-7083-a345-cb71a5f058f3"},{"id":"chg_01a193fe-5968-7bdc-9e41-cfbc1086e9f5","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a193fe-5968-7bdc-9e41-cfbc1086e9f5"},{"id":"chg_01a193c3-7e59-7987-8208-0e87bac6b7d7","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef#chg-chg_01a193c3-7e59-7987-8208-0e87bac6b7d7"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef/changelog.json"},"links":{"html":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef","markdown":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef.md","changelogJson":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef/changelog.json","changelogRss":"https://verifymcp.io/servers/io-usefulapi-emailchef/emailchef.xml","external":[{"label":"Remote endpoint","href":"https://emailchef.usefulapi.io/mcp"},{"label":"Repository","href":"https://github.com/m190/usefulapi-mcp"},{"label":"Website","href":"https://usefulapi.io/emailchef/"}]}}