Voor AI-agents
MCP-server van SendHQ
Geef een AI-agent volledige, veilige controle over één SendHQ-workspace: e-mail verzenden en ontvangen, domeinen verifiëren, templates publiceren en deliverability onderzoeken via 59 strikt getypeerde tools. Geschreven voor agents, maar mensen zijn ook welkom.
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcpWat deze server is
Met de MCP-server van SendHQ kan een AI-agent één SendHQ-workspace bedienen via het Model Context Protocol: e-mail versturen (los, in batches, met templates, als antwoord, met bijlagen, met idempotente retries), verzonden en ontvangen e-mail lezen en doorzoeken (onderwerpen, berichtteksten en namen van bijlagen) inclusief de bezorgevents, e-mail ordenen in labels met automatische sorteerregels, concepten en privébijlagen beheren, gehoste templates opstellen en publiceren, domeinen en hun DNS toevoegen en verifiëren, inkomende e-mail en inkomende adressen inrichten, deliverability, bounces, klachten en suppressies bekijken, en accountgebruik, factureringsstatus, analytics en metadata van API-sleutels lezen.
Het is een lokale stdio-server die is ingebouwd in de sendhq CLI-binary. Je MCP-client start sendhq mcp als childproces en communiceert via JSON-RPC over stdin/stdout. Elke toolcall wordt één gedocumenteerd request naar de SendHQ REST API op https://sendhq.cc/api/v1, geauthenticeerd met de API-sleutel van je workspace. De MCP-server heeft dus precies de rechten van die sleutel en niet meer.
- 59 tools in 8 groepen, gegenereerd uit één catalogus die ook wordt gepubliceerd als tools.json.
- Strikte JSON Schemas: onbekende argumenten, verkeerde types en ontbrekende verplichte velden worden lokaal geweigerd voordat er iets bij SendHQ aankomt.
- Gestructureerde fouten met een stabiele
code, de HTTP-status, eenexplanation, een concreteremedyen of opnieuw proberen zin heeft. - Elke tool die echte e-mail verstuurt of data vernietigt, zegt dat in de eerste woorden van de beschrijving en heeft MCP-veiligheidsannotaties.
- De modus
--read-onlyverbergt alle tools die verzenden of iets wijzigen. - Er wordt niets gelogd. stdout bevat alleen protocolberichten; de API-sleutel en berichtinhoud komen nooit in een log terecht.
https://sendhq.cc/api/mcp (prijzen en docs opzoeken, geen toegang tot je account). De server op deze pagina is de volledige server met toegang tot je account; die draait lokaal of als de gehoste connector hieronder.SendHQ gebruiken in Claude en ChatGPT
Geen installatie nodig: SendHQ draait deze server ook als gehoste connector op https://mcp.sendhq.cc/mcp, met dezelfde tools. Je logt in met je SendHQ-account in plaats van een sleutel te plakken.
Claude
- Open Settings → Connectors en zoek SendHQ in de directory, of kies Add custom connector en plak
https://mcp.sendhq.cc/mcp. - Klik op Connect, log in bij SendHQ, controleer de toegang en klik op Allow.
- Vraag Claude om je inbox te controleren, een e-mail vanaf je geverifieerde domein te versturen of een bounce uit te leggen.
ChatGPT
- Open Settings → Security and login and turn on Developer mode.
- Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter
https://mcp.sendhq.cc/mcp. - Sign in to SendHQ and click Allow, then pick SendHQ from the tools menu in a new chat.
Muse by Meta
In Muse, open Connectors and search for SendHQ. Click Connect, sign in to SendHQ and click Allow.
Goedkeuring en verbinding verbreken
- The
request_featuretool sends a feature request to the SendHQ team with your account details, so we can follow up by email. - Tools die echte e-mail versturen of data verwijderen, zijn als zodanig gelabeld. Of de assistent je eerst om toestemming vraagt, stel je per tool in de assistent in: kies in Claude voor die tools Needs approval onder Settings → Connectors → SendHQ.
- De connector krijgt een eigen API-sleutel, genoemd naar de assistent (bijvoorbeeld “Claude (AI connector)”). Verwijder die onder API Keys om de verbinding direct te verbreken.
- De connector kan geen API-sleutels aanmaken of intrekken en de facturering niet wijzigen. Bijlagen worden als base64 verstuurd en teruggegeven; er is geen toegang tot lokale bestanden.
- Onbetaalde workspaces (integratieproefperiode) kunnen alleen afleveren bij het e-mailadres van het account of bij een AWS SES-simulatoradres.
Vragen: postmaster@sendhq.cc. Privacy: sendhq.cc/privacy.
Installeren
Installeer de sendhq-binary (Linux, macOS en Windows op x86-64 en arm64). Het installatieprogramma controleert de checksum van de release en zet de binary standaard in ~/.local/bin.
curl -fsSL https://downloads.sendhq.cc/install.sh | shirm https://downloads.sendhq.cc/install.ps1 | iexsendhq version
SENDHQ_API_KEY=re_your_key sendhq doctorMaak een API-sleutel aan in het dashboard op https://sendhq.cc/app#/keys. De MCP-server kan geen sleutels aanmaken. Het enige commando dat de server start is:
SENDHQ_API_KEY=re_your_key sendhq mcpNormaal start je dit nooit handmatig: de MCP-client doet dat. Als je het in een terminal uitvoert, wacht het op JSON-RPC via stdin.
Je client configureren
Claude Code
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp
# read-only variant
claude mcp add sendhq-readonly --env SENDHQ_API_KEY=re_your_key -- sendhq mcp --read-onlyVoeg --scope user toe om de server in elk project beschikbaar te maken, of --scope project om hem naar de .mcp.json van het project te schrijven. Verwijs in een gedeelde .mcp.json naar de sleutel uit de omgeving in plaats van hem te committen; Claude Code expandeert ${VAR} in .mcp.json.
{
"mcpServers": {
"sendhq": {
"command": "sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
}
}
}
}OpenAI Codex
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }Of via de commandline: codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp.
Claude Desktop
Bewerk claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) en herstart de app. Desktopapps nemen het PATH van je shell niet over, dus gebruik het absolute pad van de binary (which sendhq).
{
"mcpServers": {
"sendhq": {
"command": "/Users/you/.local/bin/sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "re_your_key"
}
}
}
}Elke andere MCP-client
Configureer een stdio-server met het commando sendhq, de argumenten ["mcp"] (optioneel "--read-only") en de omgevingsvariabelen hieronder. De server ondersteunt de MCP-protocolversies 2024-11-05, 2025-03-26, 2025-06-18 en 2025-11-25, en implementeert initialize, ping, tools/list en tools/call. Toolresultaten bevatten zowel een JSON-tekstblok als structuredContent.
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_service_health","arguments":{}}}Er is geen gehost HTTP-transport voor de server met toegang tot je account. Een remote MCP-endpoint met schrijfrechten zou OAuth per gebruiker vereisen, en dat biedt SendHQ niet; de lokale binary houdt de sleutel op de machine waar hij al staat.
Omgeving en flags
| Variabele of flag | Verplicht | Betekenis |
|---|---|---|
SENDHQ_API_KEY | ja | API-sleutel van de workspace (re_…). Elke tool behalve get_service_health heeft hem nodig. Zonder sleutel start de server wel, maar elke call geeft een gestructureerde auth_error terug die uitlegt hoe je het oplost. |
SENDHQ_API_BASE_URL | nee | Base-URL van de API. Standaard https://sendhq.cc/api/v1. Gebruik dit alleen voor een lokale of staging-omgeving. SENDHQ_BASE_URL wordt geaccepteerd als oudere alias. |
SENDHQ_MCP_READ_ONLY | nee | 1, true of yes werkt hetzelfde als --read-only. |
--read-only | nee | Stelt alleen tools beschikbaar die geen e-mail versturen en niets wijzigen. Verborgen tools worden ook geweigerd als ze bij naam worden aangeroepen. |
SENDHQ_PROFILE / --profile | nee | Gebruik een sleutel die sendhq auth login in de keyring van het besturingssysteem heeft opgeslagen, in plaats van SENDHQ_API_KEY. Zijn beide aanwezig, dan heeft de omgevingsvariabele voorrang. |
De sleutel wordt alleen als Authorization: Bearer-header naar de geconfigureerde base-URL gestuurd. Hij wordt nooit afgedrukt, gelogd, herhaald in foutmeldingen of opgenomen in toolresultaten.
Veiligheidsmodel voor agents
- Verstuurt echte e-mail.
send_email,send_batchensend_template_testleveren e-mail af bij echte mensen en verbruiken bezorgcredits. Hun beschrijvingen beginnen metSENDS REAL EMAIL. Roep ze alleen aan als de gebruiker expliciet heeft gevraagd om dat specifieke bericht te versturen, met bevestigde ontvangers, afzender en inhoud. - Destructief.
delete_email,delete_draft,delete_attachment,delete_domain,delete_inboxenremove_suppressionzijn gemarkeerd metdestructiveHint: trueen hun beschrijvingen beginnen metDESTRUCTIVE. Vraag eerst bevestiging aan de gebruiker.remove_suppressionverzwakt een veiligheidsblokkade en is alleen gepast als een mens bevestigt dat het adres weer werkt. - Wijzigt de status. Concepten, templates, domeinen en inboxen aanmaken of bijwerken, templates publiceren en verificatie starten wijzigt de workspace, maar verstuurt geen e-mail.
- Alleen-lezen. Al het andere is
readOnlyHint: trueen kun je vrij aanroepen. - Deze server wijzigt nooit DNS.
add_domaingeeft records terug die een mens moet publiceren;get_domain_connect_linkgeeft een toestemmings-URL terug die iemand moet openen en bij de DNS-provider moet goedkeuren. - Deze server wijzigt nooit de facturering.
get_accountleest alleen het abonnement, het gebruik en de status van het abonnement. - Onbetaalde workspaces (integratieproefperiode) kunnen alleen afleveren bij het e-mailadres van de accounteigenaar (
get_account→user.email) of bij een AWS SES-simulatoradres zoalssuccess@simulator.amazonses.com, en kunnen geen bijlagen versturen. - Geaccepteerd is niet afgeleverd. Een geslaagde verzending geeft een ID terug; bewijs van bezorging, bounces en klachten komt later binnen in
list_email_events. Beweer nooit dat een bericht in de inbox is beland of dat iemand het heeft gelezen. - Stap niet over op een ander From-adres om een
423-pauze te omzeilen, en voeg afgemelde ontvangers of ontvangers met een klacht nooit opnieuw toe.
API-sleutels vallen buiten de scope
Er zijn bewust geen tools die API-sleutels aanmaken, wijzigen, roteren, intrekken of verwijderen. Een agent mag geen credentials aanmaken of vernietigen. list_api_keys geeft alleen namen, niet-geheime prefixen en het tijdstip van laatste gebruik terug. Sleutelbeheer blijft in het dashboard, bij een ingelogde mens.
Workflows
1. Eerste verzending
get_service_healthbevestigt dat de API bereikbaar is (werkt zonder sleutel).get_accounttoont het abonnement (access.tier), het resterende quotum enuser.email. Tijdens de proefperiode is dat e-mailadres de enige echte ontvanger die is toegestaan.list_sending_identitiestoont de From-adressen die je kunt gebruiken. Is de lijst leeg, doorloop dan eerst de domeinworkflow.- Bevestig afzender, ontvanger, onderwerp en berichttekst met de gebruiker en roep daarna
send_emailaan met eenidempotency_key. list_email_eventsmet het teruggegevenidtoontdelivery,bounce,complaintofrejectzodra de provider dat meldt (meestal binnen seconden tot minuten).
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "SendHQ is connected",
"text": "It works.",
"idempotency_key": "first-send-2026-09-26"
}
}2. Domeinverificatie van begin tot eind
add_domainmetname: "example.com". Het resultaat bevat de DNS-records (DKIM-CNAME's, SES-verificatie, SPF, aanbevolen DMARC).get_dns_providermet dedomain_iddetecteert de gezaghebbende DNS-provider en geeft per record de exacte relatieve host terug die je bij die provider moet invullen.- Is
providers.domainConnect.availabletrue, dan geeftget_domain_connect_linkeen toestemmings-URL terug. Geef die aan de mens; er verandert niets totdat die bij de provider goedkeurt. Geef de mens anders de records om te publiceren. Publiceer nooit een tweede SPF-record: voeginclude:amazonses.comsamen met de bestaandev=spf1-waarde. verify_domaincontroleert DNS en SES opnieuw. De status loopt viapending,checkingenpropagatingnaarverified. Pollverify_domainofget_domainelke 30–60 seconden; DNS kan minuten tot uren duren.- Als
statusverifiedis, verschijnen de adressen van het domein inlist_sending_identities.
3. Bounces, klachten en suppressies
list_blocked_recipientsgeeft elk geblokkeerd adres terug met de reden (bounce,complaint,unsubscribe) en een totaaloverzicht.list_suppressionsgeeft suppressies door hard bounces en klachten terug;deliverability_statsgeeft bezorg-, bounce- en klachtpercentages over 30 dagen;list_sender_reputationlaat zien welke From-adressen worden afgeremd of gepauzeerd.- Een verzending met een ontvanger op de suppressielijst mislukt met
422 recipient_suppressed. Verwijder die ontvanger en verstuur opnieuw. - Roep
remove_suppressionalleen aan als een mens bevestigt dat een mailbox met een bounce nu weer werkt. Suppressies door klachten zijn permanent (409 complaint_suppression_locked).
4. Inkomende e-mail ontvangen
- Het domein (vaak een subdomein zoals
inbound.example.com) moet geverifieerd zijn. setup_inboundricht ontvangst in en geeft één MX-record terug. Een mens publiceert het.verify_inboundtotdatstatusreadyis.create_inboxmetdomain_idenlocal_part(bijvoorbeeldsupport) maaktsupport@inbound.example.comaan.- Poll
list_emailsmetdirection: "in"enunread: true(optioneelinbox_id). Lees een bericht metget_email, de conversatie metget_thread, bijlagen metdownload_attachment, en markeer het als afgehandeld metmark_email(read: true). - Antwoord in de thread met
send_emailenreply_to_email_id; SendHQ stelt In-Reply-To, References en de thread in.
5. Webhooks en eventnotificaties
SendHQ biedt op dit moment geen webhooks die klanten zelf kunnen configureren, dus er is geen webhooktool. Notificaties van de provider worden binnen SendHQ verwerkt en zijn via leesoperaties beschikbaar. Poll in plaats daarvan: list_email_events voor de uitkomst van één bericht, list_emails met status (bijvoorbeeld bounced) of after voor recente wijzigingen, list_emails met direction: "in" en unread: true voor nieuwe inkomende e-mail, en list_blocked_recipients voor nieuwe suppressies. Poll niet vaker dan ongeveer één keer per minuut per vraag.
6. Een mislukte bezorging diagnosticeren
- Zoek het bericht:
list_emailsmetdirection: "out"entoofquery, ofget_emailals je het ID hebt.status: failedbetekent dat SendHQ of de provider het bij het aanbieden heeft geweigerd; de fout bij de e-mail legt uit waarom. list_email_events:bounce(permanent of tijdelijk, met de diagnose van de provider),complaint,rejectofdelivery. Nog geen events betekent dat de provider nog niets heeft gemeld; wacht en kijk later opnieuw.- Is de verzendcall zelf mislukt, lees dan de fout-
code:sender_domain_unverified→ rond de domeinverificatie af;recipient_suppressed→ het adres gaf eerder een hard bounce of een klacht;sender_paused→ bekijklist_sender_reputationen herstel de bron van de lijst;trial_recipient_restricted→ limieten van de proefperiode;quota_exhausted→ gebruik inget_account. get_domaincontroleert of DKIM, SPF en DMARC nog gepubliceerd zijn;deliverability_statslaat zien of het probleem één bericht betreft of een trend is.- Rapporteer wat het bewijs laat zien. Een
delivery-event betekent dat de server van de ontvanger het bericht heeft geaccepteerd, niet dat het in de inbox is beland of is gelezen.
7. Een eigen taakbucket (labels)
create_labelmetname(bijvoorbeeldAgent/Orders) enskip_inbox: true. Daarmee wordt het label een bucket: ontvangen e-mail die het label krijgt, wordt gearchiveerd, zodat hij alleen in het label verschijnt en nooit in de Inbox van de mens.- Verstuur taakmail met
send_email(ofsend_batch) enlabels: ["Agent/Orders"]. Antwoorden in die conversatie krijgen automatisch het label en slaan de Inbox over. - Voeg voor e-mail die buiten je conversaties begint een sorteerregel toe:
create_label_rulemetinbox_id(een apart adres zoalsorders@…),from,toofsubject. Geefapply_to_existing: truemee om al ontvangen e-mail ook te sorteren. - Werk de bucket af:
list_emailsmetlabel: "Agent/Orders",direction: "in"enunread: true; lees metget_emailofget_thread, antwoord metsend_emailenreply_to_email_id, en roepmark_emailread: trueaan als het is afgehandeld. - Verplaats een verdwaald bericht naar de bucket of eruit met
label_email(add/remove). Een bucketlabel toevoegen aan een ontvangen bericht archiveert het ook. - Optioneel stuurt
set_inbox_forwardingeen kopie van alles wat een ontvangend adres binnenkrijgt naar een andere mailbox (het doeladres bevestigt eerst per e-mail).
{
"name": "send_email",
"arguments": {
"from": "Orders <orders@example.com>",
"to": [
"customer@example.net"
],
"subject": "Order 1042: confirm delivery window",
"text": "Reply with a time that works.",
"labels": [
"Agent/Orders"
],
"idempotency_key": "order-1042-window"
}
}8. Bijlagen en templates
Voeg op een betaald abonnement maximaal 10 bestanden toe met send_email attachments (elk bestand heeft content_base64 of een lokaal file_path nodig; filename is standaard de basisnaam van het bestand). Voor gehoste templates: create_template → update_template_draft → render_template voor een voorbeeld met voorbeelddata → send_template_test (verstuurt één echte test) → publish_template, en verstuur daarna met send_email of send_batch via template: {key, data} en precies één to-ontvanger.
Resultaten, paginering en fouten
Een geslaagde call geeft het JSON-object van de API terug als structuredContent en als JSON-tekstblok. Elke list_*-tool accepteert limit (1–200, standaard 50) en offset, en voegt een pagination-object toe. Blijf aanroepen met offset: pagination.next_offset zolang has_more true is.
{
"data": [
"…"
],
"count": 50,
"pagination": {
"offset": 0,
"limit": 50,
"returned": 50,
"total": 180,
"has_more": true,
"next_offset": 50
}
}Een mislukte call geeft isError: true terug met een gestructureerde fout. Volg remedy in plaats van blind opnieuw te proberen; probeer alleen opnieuw als retryable true is.
{
"error": {
"code": "trial_recipient_restricted",
"status": 402,
"message": "The integration trial can deliver only to your account email or an AWS SES simulator address",
"retryable": false,
"explanation": "This workspace is on the unpaid integration trial. Trial sends can be delivered only to the account owner's email address or an AWS SES simulator address.",
"remedy": "Send to the account email (get_account -> user.email) or a simulator address such as success@simulator.amazonses.com to test. To email anyone else, the account owner must activate a paid plan in the dashboard (Profile & Billing). Do not retry the same recipients."
}
}Optionele foutvelden: request_id (vermeld die bij support), retry_after_seconds, problems (lijst met schemaschendingen bij invalid_arguments) en idempotent_replayed (zie Idempotentie).
Idempotentie
send_email en send_batch accepteren idempotency_key (maximaal 200 tekens), die wordt meegestuurd als Idempotency-Key-header. Genereer één stabiele sleutel per logisch bericht, bijvoorbeeld invoice-4812-receipt.
- Een retry moet dezelfde sleutel EN een identieke requestbody gebruiken. Dezelfde sleutel met welke wijziging dan ook (ontvanger, onderwerp, berichttekst, header, templatedata, zelfs argumentwaarden) geeft
409 idempotency_conflict. - Dezelfde sleutel, dezelfde body, origineel afgerond: SendHQ geeft het opgeslagen resultaat terug zonder opnieuw te versturen. Zo probeer je het veilig opnieuw na een time-out of
network_error. - Dezelfde sleutel terwijl het origineel nog loopt:
409 idempotency_in_progress, na korte tijd opnieuw te proberen. - Een nieuw logisch bericht heeft een nieuwe sleutel nodig.
- Opgeslagen fouten worden ook opnieuw afgespeeld. Is de eerste poging mislukt, dan geeft een retry met dezelfde sleutel diezelfde fout terug met
idempotent_replayed: trueenretryable: false. Controleer metlist_emails(direction: out) dat er niets is verstuurd, los de oorzaak op en verstuur daarna met een nieuwe sleutel. - De server probeert een POST nooit uit zichzelf opnieuw. Alleen alleen-lezen GET-calls worden automatisch opnieuw geprobeerd (maximaal 3 pogingen bij netwerkfouten, 429 en 5xx).
send_emailmet inlineattachmentskan geenidempotency_keymeekrijgen, omdat het meerdere requests uitvoert. Voor verzendingen met bijlagen die veilig opnieuw kunnen:create_draft→upload_attachment→send_emailmetdraft_idenidempotency_key.
{
"name": "send_email",
"arguments": {
"from": "Acme <billing@example.com>",
"to": [
"owner@example.com"
],
"subject": "Receipt #4812",
"text": "Thanks for your payment.",
"idempotency_key": "receipt-4812"
}
}Rate limits en quota
SendHQ publiceert geen vaste limiet voor het aantal requests per seconde op de API. De limieten waar een agent echt tegenaan loopt, zijn gebruikslimieten, die als 429 worden teruggegeven:
- Maandelijkse afleveringen aan ontvangers per abonnement. Elk To-, Cc- en Bcc-adres telt als één aflevering. Zie
get_account→usage.recipientDeliveriesvs.usage.emailQuotaMonth. - Dagelijkse ontvangers per exact From-adres, bepaald door de reputatiestatus van die afzender (
list_sender_reputation→dailyLimit, standaard 2.000 op betaalde abonnementen). - Integratieproefperiode: in totaal 100 ontvangers, alleen naar het e-mailadres van het account of naar SES-simulatoradressen.
- Bijlagen: maximaal 10 bestanden en 10 MB per bericht; 10 GB aan bijlagenverkeer per maand, gewogen naar ontvangers, op betaalde abonnementen.
- Per request: To + Cc + Bcc tot 100 adressen;
send_batchtot 100 berichten. - Reputatie-circuitbreaker: in een rollend venster van 7 dagen zorgen bounces of klachten boven de drempel ervoor dat één From-adres wordt afgeremd of gepauzeerd (
423 sender_paused). Het herstelt automatisch zodra de percentages dalen.
quota_exhausted kun je pas opnieuw proberen als de periode opnieuw begint of het abonnement verandert. rate_limited kun je opnieuw proberen na retry_after_seconds; probeer verzendingen opnieuw met dezelfde idempotency_key en een identieke body.
Foutencatalogus
code is stabiel; baseer je logica daarop en niet op message.
| code | HTTP | Opnieuw? | Wat het betekent en wat je moet doen |
|---|---|---|---|
invalid_arguments | — | nee | De argumenten voldeden lokaal niet aan het JSON Schema van de tool; er is niets bij SendHQ aangekomen. Corrigeer de velden die in problems staan. |
auth_error | 401 | nee | Ontbrekende, ingetrokken of verkeerde API-sleutel. Stel SENDHQ_API_KEY in voor het serverproces; een mens maakt sleutels aan in het dashboard. |
trial_recipient_restricted | 402 | nee | De integratieproefperiode kan alleen afleveren bij het e-mailadres van het account of een SES-simulatoradres. Verstuur daarheen, of laat de eigenaar een betaald abonnement activeren. |
payment_required | 402 | nee | De functie vereist een betaald abonnement (bijvoorbeeld bijlagen). Verstuur zonder, of upgrade. |
sender_domain_not_owned | 403 | nee | Het From-domein hoort niet bij deze workspace. Gebruik list_sending_identities of add_domain. |
sender_domain_unverified | 403 | nee | Het From-domein is nog niet geverifieerd. get_domain, ontbrekende records publiceren, verify_domain. |
domain_limit_reached | 403 | nee | De domeinlimiet van het abonnement is bereikt. Verwijder een ongebruikt domein (na goedkeuring) of upgrade. |
marketing_not_enabled | 403 | nee | De marketingklasse is niet ingeschakeld voor dit domein of abonnement. Gebruik transactional alleen als het bericht echt transactioneel is. |
forbidden | 403 | nee | Het beleid staat de bewerking niet toe. Pas het request aan. |
not_found | 404 | nee | Het ID hoort niet bij deze workspace. Vraag de resource op om het juiste ID te vinden; herstel gearchiveerde templates eerst. |
idempotency_conflict | 409 | nee | Sleutel hergebruikt met een andere body. Verstuur exact het origineel opnieuw, of gebruik een nieuwe sleutel voor een nieuw bericht. |
idempotency_in_progress | 409 | ja | Het oorspronkelijke request loopt nog. Wacht en probeer het dan opnieuw met dezelfde sleutel en body. |
revision_conflict | 409 | nee | Het templateconcept is gewijzigd sinds je het las. get_template, samenvoegen, opnieuw opslaan. |
complaint_suppression_locked | 409 | nee | De ontvanger heeft een klacht ingediend. Stuur hem nooit meer e-mail. |
inbound_not_ready | 409 | nee | Ontvangst van inkomende e-mail is nog niet klaar. setup_inbound, MX publiceren, verify_inbound. |
conflict | 409 | nee | De resource bestaat al of heeft de verkeerde status. Lees hem en pas aan. |
attachments_too_large | 413 | nee | Meer dan 10 bestanden of 10 MB. Verwijder bijlagen of maak ze kleiner. |
recipient_suppressed | 422 | nee | Een ontvanger gaf eerder een hard bounce of een klacht. Verwijder die; zie list_blocked_recipients. |
recipient_unsubscribed | 422 | nee | Een ontvanger heeft zich afgemeld voor marketingmail. Verwijder die permanent. |
validation_failed | 422 | nee | Inhoud geweigerd, bijvoorbeeld templatedata die het variabelencontract schendt. Corrigeer de invoer. |
sender_paused | 423 | nee | Dit From-adres is gepauzeerd door de circuitbreaker voor bounces/klachten over 7 dagen. Stop, herstel de lijst en wacht op automatisch herstel. |
quota_exhausted | 429 | nee | Maandelijkse limiet, daglimiet per afzender, bijlagenlimiet of limiet van de proefperiode bereikt. Controleer get_account; wacht op de reset of upgrade. |
rate_limited | 429 | ja | Rustiger aan; wacht retry_after_seconds. Verzendingen: dezelfde sleutel, dezelfde body. |
server_error | 5xx | ja | Tijdelijke fout bij SendHQ of de provider. Wacht met backoff en probeer opnieuw; verzendingen met dezelfde sleutel en body. Is idempotent_replayed true, gebruik dan een nieuwe sleutel nadat je hebt bevestigd dat er niets is verstuurd. |
network_error | — | ja | Request of respons verloren gegaan. Probeer opnieuw; bij verzendingen maakt dezelfde idempotency_key dat veilig. |
invalid_request | 400 | nee | Ongeldig request. Lees message en corrigeer het. |
tool_error | — | nee | Lokale fout binnen de MCP-server (bijvoorbeeld een onleesbaar file_path). Lees message. |
Toolreferentie
Elke tool met zijn veiligheidsklasse, het REST-endpoint dat hij aanroept, zijn parameters, de responsstructuur en een voorbeeld van een params-object voor tools/call. De parameters zijn exact: de server weigert alles wat niet vermeld staat.
E-mails en threads: send_email, send_batch, list_emails, get_email, mark_email, delete_email, list_email_events, get_thread
Labels en automatische sorteerregels: list_labels, get_label, create_label, update_label, delete_label, create_label_rule, delete_label_rule, label_email
Concepten, bijlagen en afzenderidentiteiten: list_sending_identities, create_draft, list_drafts, get_draft, update_draft, delete_draft, upload_attachment, download_attachment, delete_attachment
Gehoste templates: list_templates, create_template, get_template, update_template_draft, create_template_draft, render_template, send_template_test, publish_template, archive_template, restore_template
Domeinen en DNS: list_domains, get_domain, add_domain, verify_domain, delete_domain, get_dns_provider, get_domain_connect_link
Inkomende e-mail: setup_inbound, verify_inbound, list_inboxes, get_inbox, create_inbox, update_inbox, set_inbox_forwarding, delete_inbox
Deliverability, bounces en suppressies: deliverability_stats, list_sender_reputation, list_suppressions, remove_suppression, list_blocked_recipients
Account, gebruik, analytics en sleutels: get_account, get_analytics, list_api_keys, get_service_health
Geen tools gevonden voor dit filter.
E-mails en threads
send_emailEén e-mail verzenden
SENDS REAL EMAIL. Verstuurt één bericht vanaf een geverifieerd domein: ruwe html/tekst, een gepubliceerde gehoste template, een antwoord in een bestaande thread of een bericht met bijlagen. Geef idempotency_key mee zodat een retry niet twee keer kan versturen; een retry moet dezelfde sleutel EN een identiek request gebruiken, anders geeft SendHQ 409 terug. attachments is een gemaksoptie die een concept aanmaakt, elk bestand uploadt en met dat concept verstuurt; het kan niet worden gecombineerd met idempotency_key of draft_id (gebruik create_draft + upload_attachment + send_email met draft_id voor verzendingen met bijlagen die veilig opnieuw kunnen). Onbetaalde workspaces (integratieproefperiode) kunnen alleen afleveren bij het e-mailadres van het account of een AWS SES-simulatoradres, en kunnen geen bijlagen versturen.
Geef minstens één van deze op: html, text, template.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
from | string | ja | Afzender, bijv. Acme <hello@example.com>. Het domein moet in deze workspace geverifieerd zijn (zie list_sending_identities). (max. 998 tekens) |
to | string[] | ja | Ontvangers. Elk item is een adres, optioneel met een weergavenaam. To+cc+bcc mogen samen maximaal 100 zijn; elke bestemming verbruikt één bezorgcredit. (1–100 items) |
cc | string[] | nee | Ontvangers in cc. (0–100 items) |
bcc | string[] | nee | Ontvangers in bcc. (0–100 items) |
subject | string | nee | Onderwerpregel. Laat weg bij het versturen van een template. (max. 998 tekens) |
text | string | nee | Berichttekst in plaintext. Geef text, html of template op. |
html | string | nee | HTML-berichttekst. SendHQ saneert die en leidt de tekst af als text ontbreekt. |
reply_to | string | nee | Reply-To-adres. |
headers | object | nee | Extra veilige custom headers (stringwaarden), bijv. {"X-Entity-Ref-ID": "123"}. Routeringsheaders zoals From/To/Message-ID worden door SendHQ beheerd. |
message_class | string | nee | transactional (standaard) of marketing. Marketing vereist een abonnement of domein waarop marketing is ingeschakeld en voegt afmeldafhandeling toe. (een van transactional, marketing) |
reply_to_email_id | string | nee | Antwoord binnen een bestaande conversatie: het em_…-ID van het bericht waarop je antwoordt. SendHQ stelt In-Reply-To/References en de thread in. |
thread_id | string | nee | Expliciet thread-ID waaronder het bericht wordt opgeslagen. |
draft_id | string | nee | Verstuur de bijlagen van een opgeslagen concept met dit bericht (dr_…). Het concept wordt na een geslaagde verzending verwijderd. |
template | object | nee | Verstuur een gepubliceerde gehoste template in plaats van ruwe html/tekst. Vereist precies één to-ontvanger en geen cc/bcc; de template levert het onderwerp. Geef minstens één van deze op: id, key. |
template.id | string | nee | Template-ID (tmpl_…). Geef id of key op. |
template.key | string | nee | Templatekey, zoals account-welcome. Geef id of key op. |
template.version_id | string | nee | Optioneel ID van een gepubliceerde release (tmplv_…). Standaard de huidige gepubliceerde release. |
template.data | object | nee | Waarden voor de getypeerde variabelen van de template. |
labels | string[] | nee | Labelnamen of lbl_…-ID's waaronder dit bericht wordt opgeslagen. Onbekende namen worden aangemaakt. Antwoorden in de conversatie krijgen dezelfde labels, en een bucketlabel (skip_inbox) houdt die antwoorden uit de Inbox. Max. 10. (0–10 items) |
idempotency_key | string | nee | Idempotency-Key-header (max. 200 tekens). Hergebruik die alleen om exact dit request opnieuw te proberen. (max. 200 tekens) |
attachments | object[] | nee | Bij te voegen bestanden (max. 10 bestanden, 10 MB in totaal). Elk bestand heeft content_base64 (plus filename) of een lokaal file_path nodig. (0–10 items) Geef minstens één van deze op: content_base64, file_path. |
attachments[].filename | string | nee | Bestandsnaam die de ontvanger ziet. Verplicht bij content_base64; standaard de basisnaam van file_path. (max. 255 tekens) |
attachments[].content_type | string | nee | MIME-type, bijv. application/pdf. Standaard application/octet-stream. |
attachments[].content_base64 | string | nee | Standaard base64-inhoud van het bestand. |
attachments[].file_path | string | nee | Absoluut pad van een lokaal bestand dat het MCP-serverproces kan lezen. |
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "Your export is ready",
"text": "Download it from your dashboard.",
"idempotency_key": "export-ready-42"
}
}send_batchEen batch individuele e-mails verzenden
SENDS REAL EMAIL. Verstuurt 1–100 onafhankelijke berichten in één request (gebruik dit voor templatepersonalisatie per ontvanger). Elk item heeft dezelfde structuur als send_email (zonder attachments/idempotency_key). Items slagen of mislukken afzonderlijk: HTTP 207 betekent gedeeltelijk succes; controleer elke data[i].ok en data[i].error. Eén idempotency_key geldt voor de hele batchbody.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
emails | object[] | ja | Te verzenden berichten. (1–100 items) Geef minstens één van deze op: html, text, template. |
idempotency_key | string | nee | Idempotency-Key voor de hele batch (max. 200 tekens). (max. 200 tekens) |
{
"name": "send_batch",
"arguments": {
"emails": [
{
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"template": {
"key": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}
],
"idempotency_key": "welcome-batch-2026-09-26"
}
}list_emailsE-mail opvragen en doorzoeken
Vraagt verzonden (direction: out) en ontvangen (direction: in) e-mail op, nieuwste eerst, met filters. Ontvangen e-mail wordt geclassificeerd: lees de inbox van de mens met direction: in, archived: false, category: primary; triage met important: true; spam is verborgen, tenzij category: spam of include_spam: true. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
direction | string | nee | in voor ontvangen, out voor verzonden. (een van in, out) |
status | string | nee | Statusfilter, bijv. queued, sent, delivered, bounced, complained, failed. |
domain | string | nee | Alleen berichten voor dit domein, of een kommagescheiden lijst met domeinen (matcht op elk ervan). |
inbox_id | string | nee | Alleen berichten die door deze inbox zijn ontvangen (inb_…). |
label | string | nee | Alleen berichten met dit label: een label-ID lbl_… of de exacte naam, of een kommagescheiden lijst (matcht op elk ervan). Gebruik list_labels om de mappen te zien. |
archived | boolean | nee | false = de Inbox-weergave (ontvangen e-mail die niet is gearchiveerd), true = alleen gearchiveerd. Laat weg voor alle e-mail. |
category | string | nee | primary (mensen), updates (nieuwsbrieven, bulk, geautomatiseerd) of spam; of een kommagescheiden lijst. Spam is verborgen, tenzij je erom vraagt. |
important | boolean | nee | true = alleen berichten die als belangrijk zijn gemarkeerd (antwoorden op conversaties die jij bent begonnen en afzenders die als belangrijk zijn gemarkeerd). |
include_spam | boolean | nee | Neem spam op in de resultaten (voor zoekopdrachten in alle mappen). |
from | string | nee | Afzenderadres bevat deze waarde. |
to | string | nee | Ontvangersadres bevat deze waarde. |
unread | boolean | nee | true = alleen ongelezen, false = alleen gelezen. |
after | string | nee | ISO-8601-tijdstempel; alleen berichten die daarna zijn aangemaakt. (date-time) |
before | string | nee | ISO-8601-tijdstempel; alleen berichten die daarvoor zijn aangemaakt. (date-time) |
query | string | nee | Vrije-tekstzoekopdracht in onderwerpen, berichtteksten, adressen van afzenders/ontvangers en bestandsnamen van bijlagen. (max. 200 tekens) |
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_emails",
"arguments": {
"direction": "in",
"unread": true,
"limit": 25
}
}get_emailEén e-mail ophalen
Haalt één bericht op met headers, html-/tekstbody, status, threadmetadata en metadata van bijlagen (download de bytes met download_attachment).
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
email_id | string | ja | E-mail-ID (begint met em_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "get_email",
"arguments": {
"email_id": "em_123"
}
}mark_emailMarkeren als gelezen, gearchiveerd, spam of belangrijk
Werkt één bericht bij: read, archived, category (primary, updates, spam; alleen ontvangen e-mail) en important. Als je spam meldt of iets als belangrijk markeert, leert SendHQ dat over die afzender voor toekomstige e-mail; geef learn: false mee om alleen dit bericht te wijzigen. Geef minstens één veld op.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
email_id | string | ja | E-mail-ID (begint met em_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
read | boolean | nee | true = gelezen, false = ongelezen. |
archived | boolean | nee | true = archiveren (de Inbox overslaan), false = terugzetten naar de Inbox. |
category | string | nee | Verplaats een ontvangen bericht naar primary, updates of spam. (een van primary, updates, spam) |
important | boolean | nee | Markeer het bericht als belangrijk of haal die markering weg. |
learn | boolean | nee | false = dit oordeel niet onthouden voor de afzender (standaard true). |
{
"name": "mark_email",
"arguments": {
"email_id": "em_123",
"read": true
}
}delete_emailEen e-mail verwijderen
DESTRUCTIVE: verwijdert een bewaard bericht en de opgeslagen bijlagen permanent uit SendHQ. Een bericht dat al is afgeleverd, wordt niet teruggehaald.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
email_id | string | ja | E-mail-ID (begint met em_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "delete_email",
"arguments": {
"email_id": "em_123"
}
}list_email_eventsBezorgevents van een e-mail opvragen
Provider-events voor één verzonden bericht: delivery, bounce, complaint, reject, open, click. Dit is het bewijs of een bericht is afgeleverd of waarom het is mislukt. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
email_id | string | ja | E-mail-ID (begint met em_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_email_events",
"arguments": {
"email_id": "em_123"
}
}get_threadEen conversatie ophalen
Haalt alle berichten in een conversatie op in chronologische volgorde (verzonden en ontvangen), elk met metadata van de bijlagen.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
thread_id | string | ja | Thread-ID (meestal het em_…-ID van het eerste bericht; zie threadId bij elke e-mail). (max. 128 tekens) |
{
"name": "get_thread",
"arguments": {
"thread_id": "em_123"
}
}Labels en automatische sorteerregels
list_labelsLabels opvragen
Vraagt de labels (mappen) van de workspace op met het totale aantal en het aantal ongelezen berichten, plus hun automatische sorteerregels. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_labels",
"arguments": {}
}get_labelEen label ophalen
Haalt één label op met aantallen en automatische sorteerregels.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
label_id | string | ja | Label-ID (begint met lbl_) of de exacte labelnaam. (max. 128 tekens) |
{
"name": "get_label",
"arguments": {
"label_id": "Billing"
}
}create_labelEen label aanmaken
Maakt een label in mapstijl aan. Zet skip_inbox: true om er een bucket van een agent van te maken: verstuur met labels: [name] en de antwoorden worden in het label opgeslagen en uit de Inbox gehouden. Optionele automatische sorteerregels sorteren nieuwe verzonden/ontvangen e-mail (elke voorwaarde van een regel moet overeenkomen). Zet apply_to_existing om ook bewaarde e-mail te sorteren.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
name | string | ja | Labelnaam, bijv. Billing of Clients/Acme. Uniek per workspace (hoofdletterongevoelig). (max. 64 tekens) |
color | string | nee | Hexkleur zoals #1a73e8. Optioneel. |
skip_inbox | boolean | nee | Bucketmodus: ontvangen e-mail die dit label krijgt (via een regel, via een antwoord op een conversatie die met dit label is verzonden, of handmatig) wordt gearchiveerd, zodat hij alleen in het label verschijnt en niet in de Inbox. |
rules | object[] | nee | Optionele automatische sorteerregels (max. 20). Elke regel heeft minstens een van inbox_id, from, to, subject nodig. (0–20 items) |
rules[].direction | string | nee | Alleen in (ontvangen) of out (verzonden) e-mail. Laat weg voor beide. (een van in, out) |
rules[].inbox_id | string | nee | Alleen e-mail die door deze inbox is ontvangen (inb_…). Sorteert elk ontvangend adres in een eigen map. |
rules[].from | string | nee | Afzender bevat deze tekst (hoofdletterongevoelig), bijv. @stripe.com. (max. 200 tekens) |
rules[].to | string | nee | To/Cc bevat deze tekst (hoofdletterongevoelig). (max. 200 tekens) |
rules[].subject | string | nee | Onderwerp bevat deze tekst (hoofdletterongevoelig). (max. 200 tekens) |
rules[].skip_inbox | boolean | nee | Archiveer overeenkomende ontvangen e-mail, zodat die alleen in de labelmap verschijnt en niet in de Inbox. |
apply_to_existing | boolean | nee | Sorteer ook al bewaarde e-mail die aan de regels voldoet. |
{
"name": "create_label",
"arguments": {
"name": "Agent/Orders",
"skip_inbox": true,
"rules": [
{
"from": "@stripe.com"
}
]
}
}update_labelEen label hernoemen, van kleur veranderen of er een bucket van maken
Hernoemt een label, wijzigt de kleur of schakelt de bucketmodus (skip_inbox) in of uit. Als je de bucketmodus inschakelt, wordt ontvangen e-mail die al in het label staat gearchiveerd.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
label_id | string | ja | Label-ID (begint met lbl_) of de exacte labelnaam. (max. 128 tekens) |
name | string | nee | Nieuwe naam. (max. 64 tekens) |
color | string | nee | Nieuwe hexkleur. |
skip_inbox | boolean | nee | Bucketmodus: ontvangen e-mail die dit label krijgt (via een regel, via een antwoord op een conversatie die met dit label is verzonden, of handmatig) wordt gearchiveerd, zodat hij alleen in het label verschijnt en niet in de Inbox. |
{
"name": "update_label",
"arguments": {
"label_id": "lbl_123",
"name": "Finance/Billing"
}
}delete_labelEen label verwijderen
DESTRUCTIVE: verwijdert een label en de regels ervan. De e-mail zelf blijft bewaard; die verliest alleen dit label.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
label_id | string | ja | Label-ID (begint met lbl_) of de exacte labelnaam. (max. 128 tekens) |
{
"name": "delete_label",
"arguments": {
"label_id": "lbl_123"
}
}create_label_ruleEen automatische sorteerregel toevoegen
Voegt een regel aan een label toe, zodat overeenkomende nieuwe e-mail automatisch wordt gesorteerd. Elke voorwaarde die je instelt, moet overeenkomen. Gebruik inbox_id om een ontvangend adres een eigen map te geven; voeg skip_inbox toe om die e-mail uit de Inbox te houden.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
label_id | string | ja | Label-ID (begint met lbl_) of de exacte labelnaam. (max. 128 tekens) |
direction | string | nee | Alleen in (ontvangen) of out (verzonden) e-mail. Laat weg voor beide. (een van in, out) |
inbox_id | string | nee | Alleen e-mail die door deze inbox is ontvangen (inb_…). Sorteert elk ontvangend adres in een eigen map. |
from | string | nee | Afzender bevat deze tekst (hoofdletterongevoelig), bijv. @stripe.com. (max. 200 tekens) |
to | string | nee | To/Cc bevat deze tekst (hoofdletterongevoelig). (max. 200 tekens) |
subject | string | nee | Onderwerp bevat deze tekst (hoofdletterongevoelig). (max. 200 tekens) |
skip_inbox | boolean | nee | Archiveer overeenkomende ontvangen e-mail, zodat die alleen in de labelmap verschijnt en niet in de Inbox. |
apply_to_existing | boolean | nee | Sorteer ook al bewaarde e-mail die overeenkomt. |
{
"name": "create_label_rule",
"arguments": {
"label_id": "Billing",
"inbox_id": "inb_123",
"skip_inbox": true
}
}delete_label_ruleEen automatische sorteerregel verwijderen
DESTRUCTIVE: verwijdert één automatische sorteerregel. E-mail die al is gesorteerd, houdt zijn label.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
label_id | string | ja | Label-ID (begint met lbl_) of de exacte labelnaam. (max. 128 tekens) |
rule_id | string | ja | Regel-ID (begint met lrule_), uit get_label. (max. 128 tekens) |
{
"name": "delete_label_rule",
"arguments": {
"label_id": "lbl_123",
"rule_id": "lrule_123"
}
}label_emailLabels aan een e-mail toevoegen of ervan verwijderen
Verplaatst een bericht tussen mappen: voeg labels toe en/of verwijder ze op naam of lbl_…-ID. Onbekende namen in add worden aangemaakt, tenzij create false is.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
email_id | string | ja | E-mail-ID (begint met em_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
add | string[] | nee | Toe te voegen labels. (0–10 items) |
remove | string[] | nee | Te verwijderen labels. (0–10 items) |
create | boolean | nee | Maak onbekende labels in add aan (standaard true). |
{
"name": "label_email",
"arguments": {
"email_id": "em_123",
"add": [
"Billing"
],
"remove": [
"Support"
]
}
}Concepten, bijlagen en afzenderidentiteiten
list_sending_identitiesGeverifieerde afzenderidentiteiten opvragen
Adressen en domeinen waarvandaan deze workspace op dit moment kan versturen (geverifieerde domeinen, hun standaard-From en actieve inboxadressen). Roep dit aan vóór send_email om een geldige from te kiezen.
Geen parameters.
{
"name": "list_sending_identities",
"arguments": {}
}create_draftEen concept aanmaken
Maakt een concept in de editor aan. Concepten bevatten bijlagen: maak een concept aan, roep upload_attachment aan en daarna send_email met draft_id. Verstuurt niets.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
from | string | nee | Afzenderadres op een geverifieerd domein (mag leeg zijn tijdens het opstellen). |
to | string[] | nee | Ontvangers. (0–100 items) |
cc | string[] | nee | Ontvangers in cc. (0–100 items) |
bcc | string[] | nee | Ontvangers in bcc. (0–100 items) |
subject | string | nee | Onderwerpregel. (max. 998 tekens) |
html | string | nee | HTML-berichttekst. |
text | string | nee | Berichttekst in plaintext. |
reply_to_email_id | string | nee | E-mail-ID waarop dit concept antwoordt. |
thread_id | string | nee | Thread-ID waar dit concept bij hoort. |
{
"name": "create_draft",
"arguments": {
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice"
}
}list_draftsConcepten opvragen
Vraagt concepten uit de editor op, meest recent bijgewerkt eerst. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_drafts",
"arguments": {}
}get_draftEen concept ophalen
Haalt één concept op met de metadata van de bijlagen.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
draft_id | string | ja | Concept-ID (begint met dr_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "get_draft",
"arguments": {
"draft_id": "dr_123"
}
}update_draftInhoud van een concept vervangen
Vervangt de inhoud en ontvangers van een concept. Dit is een volledige vervanging: velden die je weglaat, worden leeggemaakt, dus lees eerst get_draft en stuur elk veld mee dat je wilt behouden. Bijlagen blijven ongewijzigd.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
draft_id | string | ja | Concept-ID (begint met dr_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
from | string | nee | Afzenderadres op een geverifieerd domein (mag leeg zijn tijdens het opstellen). |
to | string[] | nee | Ontvangers. (0–100 items) |
cc | string[] | nee | Ontvangers in cc. (0–100 items) |
bcc | string[] | nee | Ontvangers in bcc. (0–100 items) |
subject | string | nee | Onderwerpregel. (max. 998 tekens) |
html | string | nee | HTML-berichttekst. |
text | string | nee | Berichttekst in plaintext. |
reply_to_email_id | string | nee | E-mail-ID waarop dit concept antwoordt. |
thread_id | string | nee | Thread-ID waar dit concept bij hoort. |
{
"name": "update_draft",
"arguments": {
"draft_id": "dr_123",
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice (updated)",
"text": "Attached."
}
}delete_draftEen concept weggooien
DESTRUCTIVE: gooit een concept weg en verwijdert de opgeslagen bijlagen permanent.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
draft_id | string | ja | Concept-ID (begint met dr_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "delete_draft",
"arguments": {
"draft_id": "dr_123"
}
}upload_attachmentEen bijlage uploaden naar een concept
Uploadt één bestand naar een concept (max. 10 bestanden en 10 MB in totaal per bericht). Geef content_base64 of een lokaal file_path op. Voor bijlagen is bij het verzenden een betaald abonnement nodig.
Geef minstens één van deze op: content_base64, file_path.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
draft_id | string | ja | Concept-ID (begint met dr_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
filename | string | nee | Bestandsnaam die de ontvanger ziet. Standaard de basisnaam van file_path. (max. 255 tekens) |
content_type | string | nee | MIME-type, bijv. application/pdf. Standaard application/octet-stream. |
content_base64 | string | nee | Standaard base64-inhoud van het bestand. |
file_path | string | nee | Absoluut pad van een lokaal bestand dat het MCP-serverproces kan lezen. |
{
"name": "upload_attachment",
"arguments": {
"draft_id": "dr_123",
"filename": "invoice.pdf",
"content_type": "application/pdf",
"file_path": "/tmp/invoice.pdf"
}
}download_attachmentEen bijlage downloaden
Downloadt een privébijlage (verzonden, ontvangen of van een concept). Geeft base64-inhoud terug, of schrijft het bestand weg als save_to_path is ingesteld (weigert te overschrijven, tenzij overwrite true is).
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
attachment_id | string | ja | Bijlage-ID (begint met att_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
save_to_path | string | nee | Optioneel absoluut lokaal pad om het bestand naartoe te schrijven in plaats van base64 terug te geven. |
overwrite | boolean | nee | Sta toe dat een bestaand bestand op save_to_path wordt vervangen. Standaard false. |
{
"name": "download_attachment",
"arguments": {
"attachment_id": "att_123",
"save_to_path": "/tmp/invoice.pdf"
}
}delete_attachmentEen bijlage verwijderen
DESTRUCTIVE: verwijdert een opgeslagen bijlage permanent (bijvoorbeeld om een bestand uit een concept te halen voordat je verstuurt).
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
attachment_id | string | ja | Bijlage-ID (begint met att_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "delete_attachment",
"arguments": {
"attachment_id": "att_123"
}
}Gehoste templates
list_templatesGehoste templates opvragen
Vraagt gehoste e-mailtemplates op met publicatiestatus en gebruik. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
lifecycle | string | nee | active (standaard), archived of all. (een van active, archived, all) |
query | string | nee | Zoeken op naam of key. (max. 120 tekens) |
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_templates",
"arguments": {
"lifecycle": "active"
}
}create_templateEen gehoste template aanmaken
Maakt een template met een bewerkbaar concept aan, optioneel op basis van een startsjabloon (welcome, reset, receipt of blank). Publiceer de template voordat je op key verstuurt.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
name | string | ja | Leesbare naam. (max. 120 tekens) |
key | string | nee | Stabiele verzendkey: kleine letters, cijfers en koppeltekens; begint met een letter (2–64 tekens). Wordt afgeleid van de naam als je hem weglaat. |
starter | string | nee | Startinhoud. (een van blank, welcome, reset, receipt) |
{
"name": "create_template",
"arguments": {
"name": "Account welcome",
"key": "account-welcome",
"starter": "welcome"
}
}get_templateEen template ophalen
Haalt het huidige concept van een template op (met revision), de actieve gepubliceerde release, de releasegeschiedenis en het gebruik. Accepteert een ID of key.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
template_id | string | ja | Template-ID (tmpl_…) of key. (max. 128 tekens) |
{
"name": "get_template",
"arguments": {
"template_id": "account-welcome"
}
}update_template_draftEen templateconcept opslaan
Slaat het bewerkbare concept van de template op met optimistic concurrency: geef de huidige revision uit get_template mee (409 betekent dat iemand anders eerder heeft opgeslagen; lees opnieuw en probeer het nog eens). Dit vervangt de conceptinhoud volledig: weggelaten velden worden leeggemaakt, dus stuur elk veld mee dat je wilt behouden. Gebruik placeholders als {{variable}}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
template_id | string | ja | Template-ID of key. (max. 128 tekens) |
revision | integer | ja | Huidige conceptrevisie uit get_template. (1–…) |
name | string | nee | Templatenaam. (max. 120 tekens) |
subject_template | string | nee | Onderwerp met placeholders. (max. 998 tekens) |
preheader_template | string | nee | Voorbeeldtekst. (max. 240 tekens) |
html_template | string | nee | HTML-berichttekst met placeholders. |
text_template | string | nee | Berichttekst in plaintext met placeholders. |
from | string | nee | Standaardafzender voor verzendingen van deze template. |
reply_to | string | nee | Standaard-Reply-To. |
variables | object[] | nee | Getypeerd variabelencontract. Elk item: {key (kleine letters/underscores), label, type: text|number|url|boolean, required (standaard true), fallback, description}. |
variables[].key | string | ja | |
variables[].label | string | nee | |
variables[].type | string | nee | (een van text, number, url, boolean) |
variables[].required | boolean | nee | |
variables[].fallback | any | nee | |
variables[].description | string | nee | |
sample_data | object | nee | Voorbeeldwaarden voor voorbeelden en tests. |
{
"name": "update_template_draft",
"arguments": {
"template_id": "account-welcome",
"revision": 3,
"name": "Account welcome",
"subject_template": "Welcome, {{first_name}}",
"text_template": "Hi {{first_name}}",
"variables": [
{
"key": "first_name",
"type": "text",
"required": true
}
],
"sample_data": {
"first_name": "Asha"
}
}
}create_template_draftEen nieuw concept starten vanuit de gepubliceerde release
Maakt een nieuw bewerkbaar concept aan als kopie van de huidige gepubliceerde release (409 als er al een concept bestaat of niets is gepubliceerd).
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
template_id | string | ja | Template-ID of key. (max. 128 tekens) |
{
"name": "create_template_draft",
"arguments": {
"template_id": "account-welcome"
}
}render_templateEen voorbeeld van een template renderen
Rendert de exacte serveruitvoer (onderwerp, html, tekst) voor het concept, de gepubliceerde release of een specifieke versie met de opgegeven data. Verstuurt niets. Geeft 422 met findings terug als de data het variabelencontract schendt.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
template_id | string | ja | Template-ID of key. (max. 128 tekens) |
version_id | string | nee | Optioneel versie-ID; standaard het concept, daarna de gepubliceerde release. |
data | object | nee | Variabelewaarden; standaard de voorbeelddata van de versie. |
{
"name": "render_template",
"arguments": {
"template_id": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}send_template_testEen testmail van een template versturen
SENDS REAL EMAIL. Verstuurt een snapshot van het concept (of een opgegeven versie) met het voorvoegsel [Test] naar de opgegeven ontvangers. Telt mee voor het gebruik; workspaces in de proefperiode kunnen alleen versturen naar het e-mailadres van het account of een SES-simulatoradres.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
template_id | string | ja | Template-ID of key. (max. 128 tekens) |
to | string[] | ja | Testontvangers. (1–100 items) |
from | string | nee | Afzender op een geverifieerd domein; standaard de From van de template. |
version_id | string | nee | Optioneel versie-ID. |
data | object | nee | Variabelewaarden; standaard de voorbeelddata. |
{
"name": "send_template_test",
"arguments": {
"template_id": "account-welcome",
"to": [
"owner@example.com"
]
}
}publish_templateEen templaterelease publiceren
Publiceert het huidige concept als onveranderlijke release die send_email met template.key zal gebruiken. Mislukt met 422 en findings bij validatiefouten, of met 409 als het het live variabelencontract zou breken van een template die al in productie wordt gebruikt.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
template_id | string | ja | Template-ID of key. (max. 128 tekens) |
{
"name": "publish_template",
"arguments": {
"template_id": "account-welcome"
}
}archive_templateEen template archiveren
Stopt nieuwe verzendingen met deze template (de geschiedenis blijft bewaard; terug te draaien met restore_template). Elke integratie die met deze key verstuurt, begint te falen met 404.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
template_id | string | ja | Template-ID of key. (max. 128 tekens) |
{
"name": "archive_template",
"arguments": {
"template_id": "account-welcome"
}
}restore_templateEen gearchiveerde template herstellen
Maakt een gearchiveerde template weer actief.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
template_id | string | ja | Template-ID of key. (max. 128 tekens) |
{
"name": "restore_template",
"arguments": {
"template_id": "account-welcome"
}
}Domeinen en DNS
list_domainsDomeinen opvragen
Vraagt verzenddomeinen op met een samengevatte setup_status (verified | checking | pending), de DNS-status per record en de status van inkomende e-mail. Kan traag zijn: niet-geverifieerde domeinen worden live opnieuw gecontroleerd. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_domains",
"arguments": {}
}get_domainConfiguratiegegevens van een domein ophalen
Haalt één domein op met de exacte DNS-records die je moet publiceren (type, naam, waarde), de live status van elk record volgens twee publieke resolvers, dns_issues met oplossingen en de status van inkomende e-mail.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
domain_id | string | ja | Domein-ID (begint met dom_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "get_domain",
"arguments": {
"domain_id": "dom_123"
}
}add_domainEen verzenddomein toevoegen
Registreert een domein dat je beheert om vanaf te versturen. Geeft de DNS-records terug (SES Easy DKIM-CNAME's) die de eigenaar moet publiceren. Wijzigt zelf geen DNS. Telt mee voor de domeinlimiet van het abonnement.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
name | string | ja | Kale domeinnaam, bijv. example.com of mail.example.com. (max. 253 tekens) |
default_from | string | nee | Optioneel standaard afzenderadres op dit domein. |
{
"name": "add_domain",
"arguments": {
"name": "example.com"
}
}verify_domainEen domein verifiëren
Voert nu een live SES/DNS-verificatie uit. Veilig om te herhalen; poll elke 30–60 s na DNS-wijzigingen (propagatie kan minuten tot uren duren). Verzenden is toegestaan zodra de status verified is.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
domain_id | string | ja | Domein-ID (begint met dom_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "verify_domain",
"arguments": {
"domain_id": "dom_123"
}
}delete_domainEen domein verwijderen
DESTRUCTIVE: verwijdert het domein uit de workspace, inclusief de route voor inkomende e-mail. Verzendingen vanaf het domein mislukken daarna direct. DNS-records bij je DNS-provider worden niet verwijderd.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
domain_id | string | ja | Domein-ID (begint met dom_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "delete_domain",
"arguments": {
"domain_id": "dom_123"
}
}get_dns_providerDNS-provider en recordhosts detecteren
Detecteert de gezaghebbende DNS-provider van het domein en geeft per record de relatieve host terug die je bij die provider moet invullen, het aanbevolen DMARC-record, richtlijnen voor de inkomende MX en of configuratie met één klik (Domain Connect) beschikbaar is.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
domain_id | string | ja | Domein-ID (begint met dom_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "get_dns_provider",
"arguments": {
"domain_id": "dom_123"
}
}get_domain_connect_linkEen link voor DNS-configuratie met één klik ophalen
Maakt een ondertekende toestemmings-URL aan als get_dns_provider providers.domainConnect.available meldt. Geef die aan de mens: die opent hem en keurt de DNS-wijziging goed bij de provider. Er verandert niets totdat die goedkeurt. 409 als het niet wordt ondersteund.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
domain_id | string | ja | Domein-ID (begint met dom_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "get_domain_connect_link",
"arguments": {
"domain_id": "dom_123"
}
}Inkomende e-mail
setup_inboundInkomende e-mail inschakelen voor een domein
Richt ontvangst van inkomende e-mail via SES in voor een geverifieerd domein. Gebruikt het hoofddomein als dat geen conflicterend MX-record heeft, en anders inbound.<domain>. Geeft het MX-record terug dat de eigenaar moet publiceren; wijzigt zelf geen DNS.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
domain_id | string | ja | Domein-ID (begint met dom_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "setup_inbound",
"arguments": {
"domain_id": "dom_123"
}
}verify_inboundInkomende MX verifiëren
Controleert het inkomende MX-record opnieuw. De status wordt ready als beide publieke resolvers het zien.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
domain_id | string | ja | Domein-ID (begint met dom_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "verify_inbound",
"arguments": {
"domain_id": "dom_123"
}
}list_inboxesInkomende adressen opvragen
Vraagt ontvangende adressen op, optioneel voor één domein. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
domain_id | string | nee | Optioneel filter op domein-ID. |
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_inboxes",
"arguments": {
"domain_id": "dom_123"
}
}get_inboxEen inbox ophalen
Haalt één inkomend adres op.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
inbox_id | string | ja | Inbox-ID (begint met inb_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "get_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}create_inboxEen inkomend adres aanmaken
Maakt een adres zoals support@<receiving domain> aan op een domein waarvan de inkomende status ready is (voer eerst setup_inbound en verify_inbound uit). Ontvangen e-mail verschijnt in list_emails met direction in.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
domain_id | string | ja | Domein-ID (begint met dom_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
local_part | string | ja | Deel vóór de @, bijv. support. (max. 64 tekens) |
name | string | nee | Optionele weergavenaam. |
{
"name": "create_inbox",
"arguments": {
"domain_id": "dom_123",
"local_part": "support",
"name": "Support"
}
}update_inboxEen inbox hernoemen, inschakelen of uitschakelen
Hernoemt een inbox of zet de status op active / disabled.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
inbox_id | string | ja | Inbox-ID (begint met inb_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
name | string | nee | Nieuwe weergavenaam. |
status | string | nee | Nieuwe status. (een van active, disabled) |
{
"name": "update_inbox",
"arguments": {
"inbox_id": "inb_123",
"status": "disabled"
}
}set_inbox_forwardingEen inbox doorsturen naar een ander adres
SENDS REAL EMAIL bij doorsturen naar iemand anders dan de accounteigenaar: stelt in waarheen de ontvangen e-mail van een inbox wordt doorgestuurd. Het eigen adres van de eigenaar wordt direct actief; elk ander adres krijgt een bevestigingsmail en doorsturen blijft pending totdat iemand daar bevestigt. Geef forward_to: null mee om doorsturen uit te zetten. Doorgestuurde kopieën komen van het inboxadres met de oorspronkelijke afzender als Reply-To.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
inbox_id | string | ja | Inbox-ID (begint met inb_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
forward_to | string,null | ja | E-mailadres waarnaar wordt doorgestuurd, of null om doorsturen uit te zetten. (max. 254 tekens) |
{
"name": "set_inbox_forwarding",
"arguments": {
"inbox_id": "inb_123",
"forward_to": "team@example.net"
}
}delete_inboxEen inbox verwijderen
DESTRUCTIVE: verwijdert een inkomend adres. Al ontvangen e-mail blijft bewaard; nieuwe e-mail aan het adres wordt er niet meer in opgeslagen.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
inbox_id | string | ja | Inbox-ID (begint met inb_), zoals teruggegeven door een list- of create-tool. (max. 128 tekens) |
{
"name": "delete_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}Deliverability, bounces en suppressies
deliverability_statsBezorgstatistieken over 30 dagen ophalen
Totalen over 30 dagen voor de hele workspace: sent, delivery, bounce, complaint, reject, open, click en deliveryRate (%).
Geen parameters.
{
"name": "deliverability_stats",
"arguments": {}
}list_sender_reputationAfzenderreputatie opvragen
Reputatiestatus per exact From-adres: active, throttled (lagere daglimiet) of paused (verzendingen geven 423), met de reden en de daglimiet. Controleer dit als verzendingen mislukken met 423 of 429. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_sender_reputation",
"arguments": {}
}list_suppressionsSuppressies opvragen
Suppressielijst van de workspace: ontvangers die zijn geblokkeerd na een permanente bounce of een spamklacht. Verzendingen naar hen mislukken met 422. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_suppressions",
"arguments": {}
}remove_suppressionEen bouncesuppressie verwijderen
DESTRUCTIVE (verzwakt een veiligheidsblokkade): verwijdert een bouncesuppressie zodat het adres weer e-mail kan ontvangen. Doe dit alleen als de mens bevestigt dat het adres nu geldig is. Suppressies door klachten kunnen niet worden verwijderd (409).
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
email | string | ja | Adres van de ontvanger op de suppressielijst. (max. 320 tekens) |
{
"name": "remove_suppression",
"arguments": {
"email": "fixed-mailbox@example.net"
}
}list_blocked_recipientsGeblokkeerde ontvangers opvragen
Elke ontvanger die SendHQ weigert: bounces, klachten en afmeldingen voor marketing per domein, met een overzicht per soort. Leest maximaal de 500 nieuwste. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_blocked_recipients",
"arguments": {}
}Account, gebruik, analytics en sleutels
get_accountAccount, gebruik en facturering ophalen
E-mailadres van de accounteigenaar, abonnement/toegangsniveau, gebruikte afleveringen aan ontvangers in de huidige periode vs. quotum, gebruikte domeinen vs. limiet, bijlagenverkeer, reputatieoverzicht, abonnementsstatus, gepubliceerde abonnementen en aantallen in de workspace. Gebruik dit om het resterende quotum te controleren of om te zien naar wie de proefperiode kan afleveren (het e-mailadres van het account).
Geen parameters.
{
"name": "get_account",
"arguments": {}
}get_analyticsVerzendanalytics ophalen
Dashboardanalytics over de laatste 7, 30 of 90 dagen: totalen voor sent/received/delivered/bounced/blocked/opened/clicked/complaint, een dagelijkse tijdlijn, de belangrijkste verzenddomeinen en de meest gebruikte onderwerpen.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
days | integer | nee | Venster in dagen: 7, 30 (standaard) of 90. (een van 7, 30, 90) |
{
"name": "get_analytics",
"arguments": {
"days": 30
}
}list_api_keysMetadata van API-sleutels opvragen
Vraagt namen, niet-geheime prefixen en het tijdstip van laatste gebruik van API-sleutels op. Alleen-lezen: deze MCP-server kan geen sleutels aanmaken, roteren of intrekken; dat doet een mens in het dashboard. Gepagineerd: het resultaat bevat pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
limit | integer | nee | Paginagrootte. Standaard 50. (standaard 50; 1–200) |
offset | integer | nee | Aantal records dat wordt overgeslagen. Gebruik pagination.next_offset van de vorige pagina. (standaard 0; 0–…) |
{
"name": "list_api_keys",
"arguments": {}
}get_service_healthStatus van de SendHQ-dienst controleren
Controleert of de SendHQ API bereikbaar is en welke mailprovider actief is. Heeft geen geldige API-sleutel nodig.
Geen parameters.
{
"name": "get_service_health",
"arguments": {}
}Overzicht van de API-dekking
Elke bewerking in de publieke API en de tool die haar dekt. Alles wat een gebruiker in het dashboard kan doen en een API heeft, wordt gedekt; de uitzonderingen hieronder zijn bewust.
| Endpoint | Tool | Opmerkingen |
|---|---|---|
| POST /emails | send_email | Eén e-mail verzenden |
| POST /emails/batch | send_batch | Maximaal 100 individuele berichten verzenden |
| GET /emails | list_emails | Verzonden en ontvangen e-mail opvragen |
| GET /emails/:id | get_email | Een e-mail en de bijlagen ophalen |
| PATCH /emails/:id | mark_email | Leesstatus, archivering, spam, categorie of belangrijkheid bijwerken |
| POST /emails/:id/labels | label_email | Labels aan een e-mail toevoegen of ervan verwijderen |
| DELETE /emails/:id | delete_email | Een bewaarde e-mail verwijderen |
| GET /emails/:id/events | list_email_events | Bezorgevents van een e-mail opvragen |
| GET /threads/:id | get_thread | Een conversatie in chronologische volgorde ophalen |
| GET /labels | list_labels | Labels opvragen met aantallen berichten en sorteerregels |
| POST /labels | create_label | Een label aanmaken, optioneel met automatische sorteerregels |
| GET /labels/:id | get_label | Een label ophalen op ID of naam |
| PATCH /labels/:id | update_label | Een label hernoemen, een andere kleur geven of er een bucket van maken |
| DELETE /labels/:id | delete_label | Een label verwijderen zonder de e-mail erin te verwijderen |
| POST /labels/:id/rules | create_label_rule | Een automatische sorteerregel aan een label toevoegen |
| DELETE /labels/:id/rules/:rule_id | delete_label_rule | Een automatische sorteerregel verwijderen |
| POST /drafts | create_draft | Een concept in de editor aanmaken |
| GET /drafts | list_drafts | Concepten uit de editor opvragen |
| GET /drafts/:id | get_draft | Een concept en de bijlagen ophalen |
| PUT /drafts/:id | update_draft | Inhoud van een concept vervangen |
| DELETE /drafts/:id | delete_draft | Een concept weggooien |
| POST /drafts/:id/attachments | upload_attachment | Een bijlage uploaden naar een concept |
| GET /attachments/:id | download_attachment | Een privébijlage downloaden |
| DELETE /attachments/:id | delete_attachment | Een privébijlage verwijderen |
| GET /sending-identities | list_sending_identities | Geverifieerde afzenderidentiteiten opvragen |
| GET /templates | list_templates | Gehoste templates opvragen |
| POST /templates | create_template | Een gehoste template aanmaken |
| GET /templates/:id | get_template | Concepten, releases en gebruik ophalen |
| PUT /templates/:id/draft | update_template_draft | Een templateconcept automatisch opslaan |
| POST /templates/:id/draft | create_template_draft | Een nieuw concept maken op basis van de gepubliceerde release |
| POST /templates/:id/render | render_template | De exacte serveruitvoer renderen |
| POST /templates/:id/test | send_template_test | Een testsnapshot verzenden |
| POST /templates/:id/publish | publish_template | Een onveranderlijke templaterelease publiceren |
| POST /templates/:id/archive | archive_template | Een template archiveren |
| POST /templates/:id/restore | restore_template | Een gearchiveerde template herstellen |
| POST /domains | add_domain | Een verzenddomein toevoegen |
| GET /domains | list_domains | Domeinen en gecachte DNS-status opvragen |
| GET /domains/:id | get_domain | Configuratiegegevens van een domein ophalen |
| POST /domains/:id/verify | verify_domain | SES- en DNS-verificatie vernieuwen |
| POST /domains/:id/inbound/setup | setup_inbound | Ontvangst van inkomende e-mail via SES inrichten |
| POST /domains/:id/inbound/verify | verify_inbound | Inkomende MX-routering verifiëren |
| DELETE /domains/:id | delete_domain | Een domein verwijderen |
| GET /dns/provider | get_dns_provider | De gezaghebbende DNS-provider en relatieve recordhosts detecteren |
| GET /dns/domain-connect/connect | get_domain_connect_link | Een Domain Connect-toestemmingslink maken voor DNS-configuratie met één klik |
| POST /inboxes | create_inbox | Een inkomend adres aanmaken |
| GET /inboxes | list_inboxes | Inkomende adressen opvragen |
| GET /inboxes/:id | get_inbox | Een inkomend adres ophalen |
| PATCH /inboxes/:id | update_inbox | Een inbox hernoemen, inschakelen of uitschakelen |
| PUT /inboxes/:id/forwarding | set_inbox_forwarding | De ontvangen e-mail van een inbox doorsturen naar een ander adres |
| DELETE /inboxes/:id | delete_inbox | Een inbox verwijderen en de berichten bewaren |
| GET /deliverability/stats | deliverability_stats | Bezorgstatistieken over 30 dagen ophalen |
| GET /deliverability/reputation | list_sender_reputation | Reputatiestatus per exacte afzenderidentiteit opvragen |
| GET /suppressions | list_suppressions | Suppressies van de workspace opvragen |
| DELETE /suppressions/:email | remove_suppression | Een bouncesuppressie verwijderen die daarvoor in aanmerking komt |
| GET /blocked-recipients | list_blocked_recipients | Bounces, klachten en afmeldingen opvragen |
| GET /account | get_account | Account, gebruik, factureringsstatus en aantallen in de workspace ophalen met een API-sleutel |
| GET /analytics | get_analytics | Verzendanalytics uit het dashboard ophalen over 7, 30 of 90 dagen |
| GET /profile | get_account | Sessievariant van GET /account; de MCP-server leest de route voor API-sleutels. |
| POST /billing/checkout | niet beschikbaar | Factureringswijzigingen kunnen bewust alleen via een sessie en vereisen de accounteigenaar in het dashboard. De factureringsstatus is leesbaar met get_account. |
| POST /billing/cancel | niet beschikbaar | Factureringswijzigingen kunnen bewust alleen via een sessie en vereisen de accounteigenaar in het dashboard. De factureringsstatus is leesbaar met get_account. |
| POST /keys | niet beschikbaar | Bewust uitgesloten: een agent mag geen credentials aanmaken of vernietigen. Sleutels worden door een mens in het dashboard beheerd. |
| GET /keys | list_api_keys | Metadata van API-sleutels opvragen |
| DELETE /keys/:id | niet beschikbaar | Bewust uitgesloten: een agent mag geen credentials aanmaken of vernietigen. Sleutels worden door een mens in het dashboard beheerd. |
Bewust niet beschikbaar
| Mogelijkheid | Endpoints | Reden |
|---|---|---|
| API-sleutels aanmaken, roteren, intrekken of verwijderen | POST /keys, DELETE /keys/:id | Bewust uitgesloten: een agent mag geen credentials aanmaken of vernietigen. Sleutels worden door een mens in het dashboard beheerd. |
| Een checkout starten of een abonnement opzeggen | POST /billing/checkout, POST /billing/cancel | Factureringswijzigingen kunnen bewust alleen via een sessie en vereisen de accounteigenaar in het dashboard. De factureringsstatus is leesbaar met get_account. |
| Cloudflare-DNS met één klik (OAuth) | GET /api/dns/cloudflare/connect | Vereist een interactieve browsersessie en toestemming via Cloudflare OAuth. Gebruik in plaats daarvan de records uit get_domain, de hosts uit get_dns_provider of get_domain_connect_link. |
| Registreren, inloggen, uitloggen, Google-account koppelen | /api/auth/* | Authenticatie door een mens in de browser; de MCP-server authenticeert met een API-sleutel. |
| Contactformulier voor support | POST /api/contact | Openbaar formulier op de marketingsite voor mensen, geen bewerking in een workspace. |
Machineleesbare catalogus: /docs/mcp/tools.json (schema's, annotaties, koppeling met endpoints, uitzonderingen). Markdownversie van deze pagina: /docs/mcp.md. Met de CLI geïnstalleerd print sendhq commands --format json dezelfde catalogus.