Für KI-Agenten

SendHQ MCP-Server

Geben Sie einem KI-Agenten vollständige, sichere Kontrolle über einen SendHQ-Workspace: E-Mails senden und empfangen, Domains verifizieren, Templates veröffentlichen und die Zustellbarkeit untersuchen – über 59 streng typisierte Tools. Zuerst für Agenten geschrieben; Menschen sind willkommen.

59 Toolsstdio-Transport, ein Befehl0 Tools zur Schlüsselverwaltung
Installieren und verbinden (Claude Code)
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp

Was dieser Server ist

Der SendHQ MCP-Server lässt einen KI-Agenten über das Model Context Protocol einen SendHQ-Workspace bedienen: E-Mails senden (einzeln, als Batch, per Template, Antworten, Anhänge, idempotente Wiederholungsversuche), gesendete und empfangene E-Mails (Betreff, Text und Anhangsnamen) samt Zustell-Events lesen und durchsuchen, E-Mails mit Labels und automatischen Ablageregeln organisieren, Entwürfe und private Anhänge verwalten, gehostete Templates erstellen und veröffentlichen, Domains samt DNS hinzufügen und verifizieren, Inbound-Empfang und Inbound-Adressen einrichten, Zustellbarkeit, Bounces, Beschwerden und Sperrliste prüfen sowie Kontonutzung, Abrechnungsstatus, Analytics und Metadaten zu API-Schlüsseln lesen.

Es ist ein lokaler stdio-Server, der in die sendhq-CLI-Binärdatei eingebaut ist. Ihr MCP-Client startet sendhq mcp als Kindprozess und spricht JSON-RPC über stdin/stdout. Jeder Tool-Aufruf wird zu genau einer dokumentierten Anfrage an die SendHQ REST API unter https://sendhq.cc/api/v1, authentifiziert mit dem API-Schlüssel Ihres Workspace. Der MCP-Server hat also genau die Berechtigungen dieses Schlüssels und keine weiteren.

  • 59 Tools in 8 Gruppen, erzeugt aus einem einzigen Katalog, der auch als tools.json veröffentlicht wird.
  • Strikte JSON Schemas: Unbekannte Argumente, falsche Typen und fehlende Pflichtfelder werden lokal abgelehnt, bevor etwas SendHQ erreicht.
  • Strukturierte Fehler mit stabilem code, dem HTTP-status, einer explanation, einem konkreten remedy und der Angabe, ob ein erneuter Versuch helfen kann.
  • Jedes Tool, das echte E-Mails sendet oder Daten löscht, sagt das gleich in den ersten Worten seiner Beschreibung und trägt MCP-Sicherheitsannotationen.
  • Der --read-only-Modus blendet alle sendenden und ändernden Tools aus.
  • Es wird nichts protokolliert. stdout enthält nur Protokollnachrichten; der API-Schlüssel und der Nachrichteninhalt gelangen nie in ein Log.
Nicht der MCP-Endpunkt für die Dokumentation.SendHQ betreibt außerdem einen kleinen, nur lesenden MCP-Endpunkt für die Dokumentation unter https://sendhq.cc/api/mcp (Preis- und Doku-Abfragen, kein Kontozugriff). Der Server auf dieser Seite ist der vollständige, kontobezogene; er läuft lokal oder als gehosteter Connector weiter unten.

SendHQ in Claude und ChatGPT nutzen

Keine Installation nötig: SendHQ betreibt diesen Server auch als gehosteten Connector unter https://mcp.sendhq.cc/mcp mit denselben Tools. Sie melden sich mit Ihrem SendHQ-Konto an, statt einen Schlüssel einzufügen.

Claude

  1. Öffnen Sie Settings → Connectors und suchen Sie SendHQ im Verzeichnis, oder wählen Sie Add custom connector und fügen Sie https://mcp.sendhq.cc/mcp ein.
  2. Klicken Sie auf Connect, melden Sie sich bei SendHQ an, prüfen Sie den Zugriff und klicken Sie auf Allow.
  3. Bitten Sie Claude, Ihren Posteingang zu prüfen, eine E-Mail von Ihrer verifizierten Domain zu senden oder einen Bounce zu erklären.

ChatGPT

  1. Open Settings → Security and login and turn on Developer mode.
  2. Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter https://mcp.sendhq.cc/mcp.
  3. 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.

Freigabe und Trennen

  • The request_feature tool sends a feature request to the SendHQ team with your account details, so we can follow up by email.
  • Tools, die echte E-Mails senden oder Daten löschen, sind entsprechend gekennzeichnet. Ob der Assistent vorher nachfragt, legen Sie pro Tool im Assistenten fest: In Claude wählen Sie für diese Tools unter Settings → Connectors → SendHQ die Option Needs approval.
  • Der Connector erhält einen eigenen API-Schlüssel, der nach dem Assistenten benannt ist (zum Beispiel „Claude (AI connector)“). Löschen Sie ihn unter API Keys, um die Verbindung sofort zu trennen.
  • Er kann weder API-Schlüssel erstellen oder widerrufen noch die Abrechnung ändern. Anhänge werden als Base64 gesendet und zurückgegeben; es gibt keinen lokalen Dateizugriff.
  • Nicht bezahlte Workspaces (Integrationstestphase) können nur an die Konto-E-Mail-Adresse oder eine AWS-SES-Simulatoradresse zustellen.

Fragen: postmaster@sendhq.cc. Datenschutz: sendhq.cc/privacy.

Installation

Installieren Sie die sendhq-Binärdatei (Linux, macOS und Windows auf x86-64 und arm64). Das Installationsprogramm prüft die Prüfsumme des Releases und legt die Binärdatei standardmäßig in ~/.local/bin ab.

macOS und Linux
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
Windows PowerShell
irm https://downloads.sendhq.cc/install.ps1 | iex
Installation prüfen
sendhq version
SENDHQ_API_KEY=re_your_key sendhq doctor

Erstellen Sie im Dashboard unter https://sendhq.cc/app#/keys einen API-Schlüssel. Der MCP-Server kann keine Schlüssel erstellen. Der eine Befehl, der den Server startet, lautet:

Den stdio-Server starten
SENDHQ_API_KEY=re_your_key sendhq mcp

Sie führen das normalerweise nie selbst aus: Der MCP-Client startet den Server. Im Terminal ausgeführt, wartet er auf stdin auf JSON-RPC.

Client konfigurieren

Claude Code

claude mcp add
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-only

Fügen Sie --scope user hinzu, damit der Server in jedem Projekt verfügbar ist, oder --scope project, um ihn in die .mcp.json des Projekts zu schreiben. Verweisen Sie in einer gemeinsam genutzten .mcp.json auf den Schlüssel in der Umgebung, statt ihn einzuchecken; Claude Code expandiert ${VAR} in .mcp.json.

.mcp.json
{
  "mcpServers": {
    "sendhq": {
      "command": "sendhq",
      "args": [
        "mcp"
      ],
      "env": {
        "SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
      }
    }
  }
}

OpenAI Codex

~/.codex/config.toml
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }

Oder über die Kommandozeile: codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp.

Claude Desktop

Bearbeiten Sie claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) und starten Sie die App neu. Desktop-Apps erben nicht den PATH Ihrer Shell, verwenden Sie daher den absoluten Pfad der Binärdatei (which sendhq).

claude_desktop_config.json
{
  "mcpServers": {
    "sendhq": {
      "command": "/Users/you/.local/bin/sendhq",
      "args": [
        "mcp"
      ],
      "env": {
        "SENDHQ_API_KEY": "re_your_key"
      }
    }
  }
}

Jeder andere MCP-Client

Konfigurieren Sie einen stdio-Server mit dem Befehl sendhq, den Argumenten ["mcp"] (optional "--read-only") und den unten genannten Umgebungsvariablen. Der Server unterstützt die MCP-Protokollversionen 2024-11-05, 2025-03-26, 2025-06-18 und 2025-11-25 und implementiert initialize, ping, tools/list und tools/call. Tool-Ergebnisse enthalten sowohl einen JSON-Textblock als auch structuredContent.

Roher stdio-Smoke-Test (per Pipe an sendhq mcp)
{"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":{}}}

Für den kontobezogenen Server gibt es keinen gehosteten HTTP-Transport. Ein entfernter, schreibfähiger MCP-Endpunkt würde OAuth pro Nutzer erfordern, das SendHQ nicht anbietet; die lokale Binärdatei hält den Schlüssel auf dem Rechner, der ihn ohnehin besitzt.

Umgebung und Flags

Variable oder FlagErforderlichBedeutung
SENDHQ_API_KEYjaAPI-Schlüssel des Workspace (re_…). Jedes Tool außer get_service_health benötigt ihn. Ohne ihn startet der Server trotzdem, und jeder Aufruf liefert einen strukturierten auth_error mit der Anleitung zur Behebung.
SENDHQ_API_BASE_URLneinBasis-URL der API. Standard: https://sendhq.cc/api/v1. Nutzen Sie sie nur für ein lokales oder Staging-Deployment. SENDHQ_BASE_URL wird als älterer Alias akzeptiert.
SENDHQ_MCP_READ_ONLYnein1, true oder yes verhält sich wie --read-only.
--read-onlyneinStellt nur Tools bereit, die weder E-Mails senden noch Zustand ändern. Ausgeblendete Tools werden auch dann abgelehnt, wenn sie per Namen aufgerufen werden.
SENDHQ_PROFILE / --profileneinVerwendet einen mit sendhq auth login im Schlüsselbund des Betriebssystems gespeicherten Schlüssel statt SENDHQ_API_KEY. Die Umgebungsvariable hat Vorrang, wenn beide vorhanden sind.

Der Schlüssel wird nur als Authorization: Bearer-Header an die konfigurierte Basis-URL gesendet. Er wird nie ausgegeben, protokolliert, in Fehlern wiederholt oder in Tool-Ergebnisse aufgenommen.

Sicherheitsmodell für Agenten

  • Sendet echte E-Mails. send_email, send_batch und send_template_test stellen E-Mails an echte Personen zu und verbrauchen Zustellkontingent. Ihre Beschreibungen beginnen mit SENDS REAL EMAIL. Rufen Sie sie nur auf, wenn der Nutzer ausdrücklich darum gebeten hat, genau diese Nachricht zu senden, und Empfänger, Absender und Inhalt bestätigt sind.
  • Destruktiv. delete_email, delete_draft, delete_attachment, delete_domain, delete_inbox und remove_suppression sind mit destructiveHint: true markiert, und ihre Beschreibungen beginnen mit DESTRUCTIVE. Holen Sie vorher die Bestätigung des Nutzers ein. remove_suppression schwächt eine Schutzsperre ab und ist nur angebracht, wenn ein Mensch bestätigt, dass die Adresse wieder funktioniert.
  • Ändert den Zustand. Das Erstellen oder Aktualisieren von Entwürfen, Templates, Domains und Postfächern, das Veröffentlichen von Templates und das Starten der Verifizierung verändern den Workspace, senden aber keine E-Mails.
  • Nur lesend. Alles andere ist readOnlyHint: true und kann bedenkenlos aufgerufen werden.
  • Dieser Server ändert nie das DNS. add_domain gibt Einträge zurück, die ein Mensch veröffentlichen muss; get_domain_connect_link gibt eine Zustimmungs-URL zurück, die eine Person öffnen und bei ihrem DNS-Provider bestätigen muss.
  • Dieser Server ändert nie die Abrechnung. get_account liest nur Tarif, Nutzung und Abostatus.
  • Nicht bezahlte Workspaces (Integrationstestphase) können nur an die E-Mail-Adresse des Kontoinhabers (get_account → user.email) oder an eine AWS-SES-Simulatoradresse wie success@simulator.amazonses.com zustellen und keine Anhänge senden.
  • Angenommen heißt nicht zugestellt. Ein erfolgreicher Versand liefert eine ID; Belege für Zustellung, Bounce und Beschwerde erscheinen später in list_email_events. Behaupten Sie nie eine Platzierung im Posteingang oder dass eine Person die Nachricht gelesen hat.
  • Wechseln Sie nicht auf eine andere Absenderadresse, um eine 423-Pause zu umgehen, und fügen Sie abgemeldete oder beschwerdeführende Empfänger nie wieder hinzu.

API-Schlüssel sind ausgeschlossen

Es gibt bewusst keine Tools, die API-Schlüssel erstellen, ändern, rotieren, widerrufen oder löschen. Ein Agent darf keine Zugangsdaten erzeugen oder vernichten. list_api_keys gibt nur Namen, nicht geheime Präfixe und Zeitpunkte der letzten Nutzung zurück. Die Schlüsselverwaltung bleibt im Dashboard bei einem angemeldeten Menschen.

Workflows

1. Erster Versand

  1. get_service_health bestätigt, dass die API erreichbar ist (funktioniert ohne Schlüssel).
  2. get_account zeigt den Tarif (access.tier), das verbleibende Kontingent und user.email. In der Testphase ist diese E-Mail-Adresse der einzige erlaubte echte Empfänger.
  3. list_sending_identities listet die nutzbaren Absenderadressen auf. Ist die Liste leer, führen Sie zuerst den Domain-Workflow aus.
  4. Bestätigen Sie Absender, Empfänger, Betreff und Text mit dem Nutzer und rufen Sie dann send_email mit einem idempotency_key auf.
  5. list_email_events mit der zurückgegebenen id zeigt delivery, bounce, complaint oder reject, sobald der Provider es meldet (meist nach Sekunden bis Minuten).
Erster Versand
{
  "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. Domain-Verifizierung von Anfang bis Ende

  1. add_domain mit name: "example.com". Das Ergebnis enthält die DNS-Einträge (DKIM-CNAMEs, SES-Verifizierung, SPF, empfohlenes DMARC).
  2. get_dns_provider mit der domain_id erkennt den maßgeblichen DNS-Provider und liefert für jeden Eintrag den exakten relativen Host, der bei diesem Provider einzutragen ist.
  3. Wenn providers.domainConnect.available true ist, liefert get_domain_connect_link eine Zustimmungs-URL. Geben Sie sie dem Menschen; es ändert sich nichts, bevor er sie beim Provider bestätigt. Andernfalls geben Sie dem Menschen die zu veröffentlichenden Einträge. Veröffentlichen Sie nie einen zweiten SPF-Eintrag: Führen Sie include:amazonses.com mit dem vorhandenen v=spf1-Wert zusammen.
  4. verify_domain prüft DNS und SES erneut. Der Status wechselt von pending über checking und propagating zu verified. Rufen Sie verify_domain oder get_domain alle 30–60 Sekunden ab; DNS kann Minuten bis Stunden brauchen.
  5. Sobald status den Wert verified hat, erscheinen die Adressen der Domain in list_sending_identities.

3. Bounces, Beschwerden und Sperrliste

  1. list_blocked_recipients gibt jede blockierte Adresse mit Grund (bounce, complaint, unsubscribe) und einer zusammenfassenden Anzahl zurück.
  2. list_suppressions gibt Sperrlisteneinträge für Hard Bounces und Beschwerden zurück; deliverability_stats liefert die Zustell-, Bounce- und Beschwerderaten der letzten 30 Tage; list_sender_reputation zeigt, welche Absenderadressen gedrosselt oder pausiert sind.
  3. Ein Versand mit einem gesperrten Empfänger schlägt mit 422 recipient_suppressed fehl. Entfernen Sie diesen Empfänger und senden Sie erneut.
  4. Rufen Sie remove_suppression nur auf, wenn ein Mensch bestätigt, dass ein zuvor gebouncetes Postfach jetzt funktioniert. Sperren wegen Beschwerden sind dauerhaft (409 complaint_suppression_locked).

4. Eingehende E-Mails empfangen

  1. Die Domain (oft eine Subdomain wie inbound.example.com) muss verifiziert sein.
  2. setup_inbound richtet den Empfang ein und gibt einen MX-Eintrag zurück. Ein Mensch veröffentlicht ihn.
  3. Rufen Sie verify_inbound auf, bis status den Wert ready hat.
  4. create_inbox mit domain_id und local_part (zum Beispiel support) erstellt support@inbound.example.com.
  5. Fragen Sie list_emails mit direction: "in" und unread: true (optional inbox_id) regelmäßig ab. Lesen Sie eine Nachricht mit get_email, die Unterhaltung mit get_thread, Anhänge mit download_attachment und markieren Sie sie mit mark_email (read: true) als erledigt.
  6. Antworten Sie im Thread mit send_email und reply_to_email_id; SendHQ setzt In-Reply-To, References und den Thread.

5. Webhooks und Event-Benachrichtigungen

SendHQ bietet derzeit keine vom Kunden konfigurierbaren Webhooks an, daher gibt es kein Webhook-Tool. Provider-Benachrichtigungen werden intern in SendHQ verarbeitet und über lesende Abfragen bereitgestellt. Fragen Sie stattdessen per Polling ab: list_email_events für das Ergebnis einer Nachricht, list_emails mit status (zum Beispiel bounced) oder after für aktuelle Änderungen, list_emails mit direction: "in" und unread: true für neue eingehende E-Mails und list_blocked_recipients für neue Sperren. Fragen Sie pro Fragestellung höchstens etwa einmal pro Minute ab.

6. Einen Zustellfehler diagnostizieren

  1. Finden Sie die Nachricht: list_emails mit direction: "out" und to oder query, oder get_email, wenn Sie die ID haben. status: failed bedeutet, dass SendHQ oder der Provider die Nachricht bei der Einlieferung abgelehnt hat; der Fehler der E-Mail nennt den Grund.
  2. list_email_events: bounce (permanent oder vorübergehend, mit der Diagnose des Providers), complaint, reject oder delivery. Noch keine Events bedeutet, dass der Provider noch nichts gemeldet hat; warten Sie und prüfen Sie erneut.
  3. Wenn der Sendeaufruf selbst fehlgeschlagen ist, lesen Sie den Fehler-code: sender_domain_unverified → Domain-Verifizierung abschließen; recipient_suppressed → die Adresse hat zuvor gebounct oder sich beschwert; sender_paused → list_sender_reputation prüfen und die Listenquelle korrigieren; trial_recipient_restricted → Grenzen der Testphase; quota_exhausted → Nutzung in get_account prüfen.
  4. get_domain prüft, ob DKIM, SPF und DMARC weiterhin veröffentlicht sind; deliverability_stats zeigt, ob das Problem eine einzelne Nachricht oder ein Trend ist.
  5. Berichten Sie, was die Belege zeigen. Ein delivery-Event bedeutet, dass der Server des Empfängers die Nachricht angenommen hat, nicht dass sie im Posteingang gelandet ist oder gelesen wurde.

7. Einen Aufgaben-Bucket führen (Labels)

  1. create_label mit name (zum Beispiel Agent/Orders) und skip_inbox: true. Das macht das Label zu einem Bucket: Empfangene E-Mails, die es erhalten, werden archiviert und erscheinen nur im Label, nie im Posteingang des Menschen.
  2. Senden Sie Aufgaben-E-Mails mit send_email (oder send_batch) und labels: ["Agent/Orders"]. Antworten auf diese Unterhaltung erben das Label automatisch und umgehen den Posteingang.
  3. Für E-Mails, die außerhalb Ihrer Unterhaltungen beginnen, fügen Sie eine Ablageregel hinzu: create_label_rule mit inbox_id (eine dedizierte Adresse wie orders@…), from, to oder subject. Übergeben Sie apply_to_existing: true, um bereits empfangene E-Mails abzulegen.
  4. Den Bucket abarbeiten: list_emails mit label: "Agent/Orders", direction: "in" und unread: true; lesen Sie mit get_email oder get_thread, antworten Sie mit send_email und reply_to_email_id und setzen Sie nach der Bearbeitung mark_email read: true.
  5. Verschieben Sie eine verirrte Nachricht mit label_email (add / remove) in den Bucket oder heraus. Wenn Sie einer empfangenen Nachricht ein Bucket-Label hinzufügen, wird sie ebenfalls archiviert.
  6. Optional sendet set_inbox_forwarding eine Kopie von allem, was eine Empfangsadresse erhält, an ein anderes Postfach (das Ziel bestätigt zuvor per E-Mail).
In einen Bucket senden
{
  "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. Anhänge und Templates

Hängen Sie mit send_email attachments bis zu 10 Dateien an (jede braucht content_base64 oder einen lokalen file_path; filename entspricht standardmäßig dem Basisnamen der Datei), in einem kostenpflichtigen Tarif. Für gehostete Templates: create_template → update_template_draft → render_template für die Vorschau mit Beispieldaten → send_template_test (sendet eine echte Test-E-Mail) → publish_template. Senden Sie danach mit send_email oder send_batch unter Verwendung von template: {key, data} und genau einem to-Empfänger.

Ergebnisse, Paginierung und Fehler

Ein erfolgreicher Aufruf gibt das JSON-Objekt der API als structuredContent und als JSON-Textblock zurück. Jedes list_*-Tool akzeptiert limit (1–200, Standard 50) und offset und fügt ein pagination-Objekt hinzu. Rufen Sie weiter mit offset: pagination.next_offset auf, solange has_more true ist.

Paginiertes Ergebnis
{
  "data": [
    "…"
  ],
  "count": 50,
  "pagination": {
    "offset": 0,
    "limit": 50,
    "returned": 50,
    "total": 180,
    "has_more": true,
    "next_offset": 50
  }
}

Ein fehlgeschlagener Aufruf gibt isError: true mit einem strukturierten Fehler zurück. Befolgen Sie remedy, statt blind zu wiederholen; versuchen Sie es nur erneut, wenn retryable true ist.

Strukturierter Tool-Fehler
{
  "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."
  }
}

Optionale Fehlerfelder: request_id (nennen Sie sie dem Support), retry_after_seconds, problems (Liste der Schema-Verstöße bei invalid_arguments) und idempotent_replayed (siehe Idempotenz).

Idempotenz

send_email und send_batch akzeptieren idempotency_key (max. 200 Zeichen), der als Idempotency-Key-Header gesendet wird. Erzeugen Sie pro logischer Nachricht einen stabilen Schlüssel, zum Beispiel invoice-4812-receipt.

  • Ein Wiederholungsversuch muss denselben Schlüssel UND einen identischen Anfrage-Body verwenden. Derselbe Schlüssel mit irgendeiner Änderung (Empfänger, Betreff, Text, Header, Template-Daten, sogar Argumentwerte) liefert 409 idempotency_conflict.
  • Gleicher Schlüssel, gleicher Body, Original abgeschlossen: SendHQ gibt das gespeicherte Ergebnis zurück, ohne erneut zu senden. So wiederholen Sie nach einem Timeout oder network_error sicher.
  • Gleicher Schlüssel, solange das Original noch läuft: 409 idempotency_in_progress, nach kurzer Wartezeit wiederholbar.
  • Eine neue logische Nachricht braucht einen neuen Schlüssel.
  • Auch gespeicherte Fehler werden wiedergegeben. Ist der erste Versuch fehlgeschlagen, liefert ein Wiederholungsversuch mit demselben Schlüssel genau diesen Fehler mit idempotent_replayed: true und retryable: false. Prüfen Sie mit list_emails (direction: out), dass nichts versendet wurde, beheben Sie die Ursache und senden Sie dann mit einem neuen Schlüssel.
  • Der Server wiederholt nie von sich aus einen POST. Nur lesende GET-Aufrufe werden automatisch wiederholt (bis zu 3 Versuche bei Netzwerkfehlern, 429 und 5xx).
  • send_email mit Inline-attachments kann keinen idempotency_key annehmen, da es mehrere Anfragen ausführt. Für wiederholungssichere Versände mit Anhang: create_draft → upload_attachment → send_email mit draft_id und idempotency_key.
Wiederholungssicherer Versand (bei Timeout exakt wiederholen)
{
  "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 und Kontingente

SendHQ veröffentlicht kein festes Limit für Anfragen pro Sekunde an die API. Die Grenzen, auf die ein Agent tatsächlich stößt, sind Nutzungslimits, die als 429 zurückgegeben werden:

  • Monatliche Empfängerzustellungen pro Tarif. Jede To-, Cc- und Bcc-Adresse zählt als eine Zustellung. Siehe get_account → usage.recipientDeliveries im Vergleich zu usage.emailQuotaMonth.
  • Tägliche Empfänger pro exakter Absenderadresse, bestimmt durch den Reputationsstatus dieses Absenders (list_sender_reputation → dailyLimit, in bezahlten Tarifen standardmäßig 2.000).
  • Integrationstestphase: insgesamt 100 Empfänger, nur an die Konto-E-Mail-Adresse oder SES-Simulatoradressen.
  • Anhänge: höchstens 10 Dateien und 10 MB pro Nachricht; 10 GB empfängergewichteter Anhangstransfer pro Monat in bezahlten Tarifen.
  • Pro Anfrage: To + Cc + Bcc bis zu 100 Adressen; send_batch bis zu 100 Nachrichten.
  • Reputations-Schutzschalter: Überschreiten Bounces oder Beschwerden in einem gleitenden 7-Tage-Fenster den Schwellenwert, wird eine Absenderadresse gedrosselt oder pausiert (423 sender_paused). Sie erholt sich automatisch, sobald die Raten sinken.

quota_exhausted ist nicht wiederholbar, bis die Periode zurückgesetzt wird oder sich der Tarif ändert. rate_limited ist nach retry_after_seconds wiederholbar; wiederholen Sie Versände mit demselben idempotency_key und identischem Body.

Fehlerkatalog

code ist stabil; verzweigen Sie danach und nicht anhand von message.

codeHTTPWiederholen?Bedeutung und empfohlenes Vorgehen
invalid_arguments—neinDie Argumente haben das JSON Schema des Tools lokal nicht bestanden; nichts hat SendHQ erreicht. Korrigieren Sie die in problems aufgeführten Felder.
auth_error401neinAPI-Schlüssel fehlt, wurde widerrufen oder ist falsch. Setzen Sie SENDHQ_API_KEY für den Serverprozess; Schlüssel erstellt ein Mensch im Dashboard.
trial_recipient_restricted402neinDie Integrationstestphase kann nur an die Konto-E-Mail-Adresse oder eine SES-Simulatoradresse zustellen. Senden Sie dorthin, oder der Inhaber aktiviert einen bezahlten Tarif.
payment_required402neinDie Funktion erfordert einen bezahlten Tarif (zum Beispiel Anhänge). Senden Sie ohne sie oder wechseln Sie den Tarif.
sender_domain_not_owned403neinDie Absenderdomain gehört nicht zu diesem Workspace. Nutzen Sie list_sending_identities oder add_domain.
sender_domain_unverified403neinDie Absenderdomain ist noch nicht verifiziert. get_domain, fehlende Einträge veröffentlichen, verify_domain.
domain_limit_reached403neinDas Domain-Limit des Tarifs ist erreicht. Entfernen Sie (mit Freigabe) eine ungenutzte Domain oder wechseln Sie den Tarif.
marketing_not_enabled403neinDie Klasse Marketing ist für diese Domain oder diesen Tarif nicht aktiviert. Verwenden Sie transactional nur, wenn die Nachricht tatsächlich transaktional ist.
forbidden403neinDie Richtlinie erlaubt den Vorgang nicht. Passen Sie die Anfrage an.
not_found404neinDie ID gehört nicht zu diesem Workspace. Listen Sie die Ressource auf, um die richtige ID zu finden; stellen Sie archivierte Templates zuerst wieder her.
idempotency_conflict409neinSchlüssel wurde mit einem anderen Body wiederverwendet. Senden Sie das exakte Original erneut oder verwenden Sie für eine neue Nachricht einen neuen Schlüssel.
idempotency_in_progress409jaDie ursprüngliche Anfrage läuft noch. Warten Sie und wiederholen Sie dann mit demselben Schlüssel und Body.
revision_conflict409neinDer Template-Entwurf hat sich geändert, seit Sie ihn gelesen haben. get_template, zusammenführen, erneut speichern.
complaint_suppression_locked409neinDer Empfänger hat sich beschwert. Schreiben Sie ihm nie wieder.
inbound_not_ready409neinInbound-Empfang ist nicht bereit. setup_inbound, MX veröffentlichen, verify_inbound.
conflict409neinDie Ressource existiert bereits oder befindet sich im falschen Zustand. Lesen Sie sie aus und passen Sie an.
attachments_too_large413neinMehr als 10 Dateien oder 10 MB. Entfernen Sie Anhänge oder verkleinern Sie sie.
recipient_suppressed422neinEin Empfänger hat zuvor gebounct oder sich beschwert. Entfernen Sie ihn; siehe list_blocked_recipients.
recipient_unsubscribed422neinEin Empfänger hat sich von Marketing-E-Mails abgemeldet. Entfernen Sie ihn dauerhaft.
validation_failed422neinInhalt abgelehnt, zum Beispiel Template-Daten, die den Variablenvertrag verletzen. Korrigieren Sie die Eingabe.
sender_paused423neinDiese Absenderadresse wurde vom 7-Tage-Schutzschalter für Bounces/Beschwerden pausiert. Stoppen Sie, bereinigen Sie die Liste und warten Sie auf die automatische Erholung.
quota_exhausted429neinMonatliches Limit, Tageslimit pro Absender, Anhangslimit oder Limit der Testphase erreicht. Prüfen Sie get_account; warten Sie auf das Zurücksetzen oder wechseln Sie den Tarif.
rate_limited429jaVerlangsamen Sie; warten Sie retry_after_seconds. Bei Versänden: gleicher Schlüssel, gleicher Body.
server_error5xxjaVorübergehender Fehler bei SendHQ oder beim Provider. Warten Sie mit Backoff und wiederholen Sie; bei Versänden mit demselben Schlüssel und Body. Ist idempotent_replayed true, verwenden Sie einen neuen Schlüssel, nachdem Sie bestätigt haben, dass nichts gesendet wurde.
network_error—jaAnfrage oder Antwort ging verloren. Wiederholen Sie; bei Versänden macht derselbe idempotency_key das sicher.
invalid_request400neinFehlerhafte Anfrage. Lesen Sie message und korrigieren Sie sie.
tool_error—neinLokaler Fehler im MCP-Server (zum Beispiel ein nicht lesbarer file_path). Lesen Sie message.

Tool-Referenz

Jedes Tool mit Sicherheitsklasse, dem aufgerufenen REST-Endpunkt, seinen Parametern, dem Rückgabeformat und einem Beispiel für das tools/call-params-Objekt. Die Parameter sind exakt: Der Server lehnt alles ab, was nicht aufgeführt ist.

E-Mails und Threads: send_email, send_batch, list_emails, get_email, mark_email, delete_email, list_email_events, get_thread
Labels und automatische Ablageregeln: list_labels, get_label, create_label, update_label, delete_label, create_label_rule, delete_label_rule, label_email
Entwürfe, Anhänge und Absenderidentitäten: list_sending_identities, create_draft, list_drafts, get_draft, update_draft, delete_draft, upload_attachment, download_attachment, delete_attachment
Gehostete Templates: list_templates, create_template, get_template, update_template_draft, create_template_draft, render_template, send_template_test, publish_template, archive_template, restore_template
Domains und DNS: list_domains, get_domain, add_domain, verify_domain, delete_domain, get_dns_provider, get_domain_connect_link
Eingehende E-Mails: setup_inbound, verify_inbound, list_inboxes, get_inbox, create_inbox, update_inbox, set_inbox_forwarding, delete_inbox
Zustellbarkeit, Bounces und Sperrliste: deliverability_stats, list_sender_reputation, list_suppressions, remove_suppression, list_blocked_recipients
Konto, Nutzung, Analytics und Schlüssel: get_account, get_analytics, list_api_keys, get_service_health

E-Mails und Threads

Sendet echte E-Mailssend_email
POST /emails

Eine E-Mail senden

SENDS REAL EMAIL. Sendet eine Nachricht von einer verifizierten Domain: rohes HTML/Text, ein veröffentlichtes gehostetes Template, eine Antwort in einem bestehenden Thread oder eine Nachricht mit Anhängen. Übergeben Sie idempotency_key, damit ein Wiederholungsversuch nicht doppelt sendet; ein Wiederholungsversuch muss denselben Schlüssel UND eine identische Anfrage verwenden, sonst gibt SendHQ 409 zurück. attachments ist eine Komfortfunktion, die einen Entwurf erstellt, jede Datei hochlädt und mit diesem Entwurf sendet; sie lässt sich nicht mit idempotency_key oder draft_id kombinieren (für wiederholungssichere Versände mit Anhang nutzen Sie create_draft + upload_attachment + send_email mit draft_id). Nicht bezahlte Workspaces (Integrationstestphase) können nur an die Konto-E-Mail-Adresse oder eine AWS-SES-Simulatoradresse zustellen und keine Anhänge senden.

Geben Sie mindestens eines an: html, text, template.

ParameterTypErforderlichBeschreibung
fromstringjaAbsender, z. B. Acme <hello@example.com>. Die Domain muss in diesem Workspace verifiziert sein (siehe list_sending_identities). (max. 998 Zeichen)
tostring[]jaEmpfänger. Jeder Eintrag ist eine Adresse, optional mit Anzeigenamen. To+cc+bcc dürfen zusammen höchstens 100 ergeben; jedes Ziel verbraucht ein Zustellkontingent. (1–100 Einträge)
ccstring[]neinEmpfänger in Kopie (Cc). (0–100 Einträge)
bccstring[]neinEmpfänger in Blindkopie (Bcc). (0–100 Einträge)
subjectstringneinBetreffzeile. Beim Senden eines Templates weglassen. (max. 998 Zeichen)
textstringneinPlain-Text-Body. Geben Sie text, html oder template an.
htmlstringneinHTML-Body. SendHQ bereinigt ihn und leitet text ab, wenn text fehlt.
reply_tostringneinReply-To-Adresse.
headersobjectneinZusätzliche sichere benutzerdefinierte Header (String-Werte), z. B. {"X-Entity-Ref-ID": "123"}. Routing-Header wie From/To/Message-ID werden von SendHQ gesteuert.
message_classstringneintransactional (Standard) oder marketing. Marketing erfordert einen Marketing-fähigen Tarif oder eine solche Domain und ergänzt die Abmeldeverarbeitung. (eines von transactional, marketing)
reply_to_email_idstringneinAntwort innerhalb einer bestehenden Unterhaltung: die em_…-ID der beantworteten Nachricht. SendHQ setzt In-Reply-To/References und den Thread.
thread_idstringneinExplizite Thread-ID, unter der die Nachricht abgelegt wird.
draft_idstringneinSendet die Anhänge eines gespeicherten Entwurfs mit dieser Nachricht (dr_…). Der Entwurf wird nach erfolgreichem Versand gelöscht.
templateobjectneinSendet ein veröffentlichtes gehostetes Template statt rohem html/text. Erfordert genau einen to-Empfänger und kein cc/bcc; der Betreff stammt aus dem Template. Geben Sie mindestens eines an: id, key.
template.idstringneinTemplate-ID (tmpl_…). Geben Sie id oder key an.
template.keystringneinTemplate-Key wie account-welcome. Geben Sie id oder key an.
template.version_idstringneinOptionale ID des veröffentlichten Releases (tmplv_…). Standard ist das aktuell veröffentlichte Release.
template.dataobjectneinWerte für die typisierten Variablen des Templates.
labelsstring[]neinLabel-Namen oder lbl_…-IDs, unter denen die Nachricht abgelegt wird. Unbekannte Namen werden angelegt. Antworten in der Unterhaltung erben die Labels, und ein Bucket-Label (skip_inbox) hält diese Antworten aus dem Posteingang heraus. Max. 10. (0–10 Einträge)
idempotency_keystringneinIdempotency-Key-Header (max. 200 Zeichen). Verwenden Sie ihn nur, um genau diese Anfrage zu wiederholen. (max. 200 Zeichen)
attachmentsobject[]neinAnzuhängende Dateien (max. 10 Dateien, insgesamt 10 MB). Jede braucht content_base64 (plus filename) oder einen lokalen file_path. (0–10 Einträge) Geben Sie mindestens eines an: content_base64, file_path.
attachments[].filenamestringneinDateiname, den der Empfänger sieht. Bei content_base64 erforderlich; standardmäßig der Basisname von file_path. (max. 255 Zeichen)
attachments[].content_typestringneinMIME-Typ, z. B. application/pdf. Standard ist application/octet-stream.
attachments[].content_base64stringneinStandard-Base64-Dateiinhalt.
attachments[].file_pathstringneinAbsoluter Pfad einer lokalen Datei, die der MCP-Serverprozess lesen kann.
Rückgabe{id: em_…, providerMessageId, threadId, templateId, templateVersionId, isTest}. Angenommen heißt nicht zugestellt: Prüfen Sie anschließend mit list_email_events.
Beispiel für tools/call params
{
  "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"
  }
}
Sendet echte E-Mailssend_batch
POST /emails/batch

Einen Batch individualisierter E-Mails senden

SENDS REAL EMAIL. Sendet 1–100 unabhängige Nachrichten in einer Anfrage (nutzen Sie das für Template-Personalisierung pro Empfänger). Jeder Eintrag hat dieselbe Form wie bei send_email (ohne attachments/idempotency_key). Die Einträge gelingen oder scheitern einzeln: HTTP 207 bedeutet Teilerfolg; prüfen Sie jeweils data[i].ok und data[i].error. Ein idempotency_key deckt den gesamten Batch-Body ab.

ParameterTypErforderlichBeschreibung
emailsobject[]jaZu sendende Nachrichten. (1–100 Einträge) Geben Sie mindestens eines an: html, text, template.
idempotency_keystringneinIdempotency-Key für den gesamten Batch (max. 200 Zeichen). (max. 200 Zeichen)
Rückgabe{data: [{index, ok, id?, error?: {message, status}}], count, successful, failed}.
Beispiel für tools/call params
{
  "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"
  }
}
Nur lesendlist_emails
GET /emails

E-Mails auflisten und durchsuchen

Listet gesendete (direction: out) und empfangene (direction: in) E-Mails mit Filtern, neueste zuerst. Empfangene E-Mails werden klassifiziert: Den Posteingang eines Menschen lesen Sie mit direction: in, archived: false, category: primary; zum Sichten nutzen Sie important: true; Spam ist ausgeblendet, außer bei category: spam oder include_spam: true. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
directionstringneinin für empfangene, out für gesendete E-Mails. (eines von in, out)
statusstringneinStatusfilter, z. B. queued, sent, delivered, bounced, complained, failed.
domainstringneinNur Nachrichten für diese Domain oder eine durch Kommas getrennte Liste von Domains (trifft auf jede zu).
inbox_idstringneinNur Nachrichten, die dieses Postfach empfangen hat (inb_…).
labelstringneinNur Nachrichten mit diesem Label: eine Label-ID lbl_… oder der exakte Name, oder eine durch Kommas getrennte Liste (trifft auf jedes zu). Mit list_labels sehen Sie die Ordner.
archivedbooleanneinfalse = Posteingangsansicht (empfangene, nicht archivierte E-Mails), true = nur archivierte. Weglassen für alle E-Mails.
categorystringneinprimary (Personen), updates (Newsletter, Massenmails, automatisierte E-Mails) oder spam; oder eine durch Kommas getrennte Liste. Spam ist ausgeblendet, sofern nicht angefordert.
importantbooleanneintrue = nur als wichtig markierte Nachrichten (Antworten auf von Ihnen begonnene Unterhaltungen und als wichtig markierte Absender).
include_spambooleanneinSpam in die Ergebnisse einbeziehen (für Suchen über alle Ordner).
fromstringneinDie Absenderadresse enthält diesen Wert.
tostringneinDie Empfängeradresse enthält diesen Wert.
unreadbooleanneintrue = nur ungelesene, false = nur gelesene.
afterstringneinISO-8601-Zeitstempel; nur Nachrichten, die danach erstellt wurden. (date-time)
beforestringneinISO-8601-Zeitstempel; nur Nachrichten, die davor erstellt wurden. (date-time)
querystringneinFreitextsuche über Betreffs, Texte, Absender-/Empfängeradressen und Anhangsdateinamen. (max. 200 Zeichen)
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [E-Mail-Zusammenfassungen], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_emails",
  "arguments": {
    "direction": "in",
    "unread": true,
    "limit": 25
  }
}
Nur lesendget_email
GET /emails/:email_id

Eine E-Mail abrufen

Ruft eine Nachricht mit Headern, HTML-/Text-Body, Status, Thread-Metadaten und Anhangsmetadaten ab (die Bytes laden Sie mit download_attachment).

ParameterTypErforderlichBeschreibung
email_idstringjaE-Mail-ID (beginnt mit em_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
RückgabeE-Mail-Objekt: {id, direction, status, from, to, cc, bcc, subject, html, text, threadId, messageId, providerMessageId, readAt, createdAt, attachments: [{id, filename, contentType, sizeBytes, available}]}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_email",
  "arguments": {
    "email_id": "em_123"
  }
}
Ändert Zustandmark_email
PATCH /emails/:email_id

Als gelesen, archiviert, Spam oder wichtig markieren

Aktualisiert eine Nachricht: read, archived, category (primary, updates, spam; nur empfangene E-Mails) und important. Wer Spam meldet oder als wichtig markiert, bringt SendHQ etwas über diesen Absender für künftige E-Mails bei; übergeben Sie learn: false, um nur diese Nachricht zu ändern. Übergeben Sie mindestens ein Feld.

ParameterTypErforderlichBeschreibung
email_idstringjaE-Mail-ID (beginnt mit em_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
readbooleanneintrue = gelesen, false = ungelesen.
archivedbooleanneintrue = archivieren (Posteingang überspringen), false = zurück in den Posteingang verschieben.
categorystringneinVerschiebt eine empfangene Nachricht nach primary, updates oder spam. (eines von primary, updates, spam)
importantbooleanneinMarkiert die Nachricht als wichtig oder hebt die Markierung auf.
learnbooleanneinfalse = dieses Urteil nicht für den Absender merken (Standard true).
RückgabeDas aktualisierte E-Mail-Objekt.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "mark_email",
  "arguments": {
    "email_id": "em_123",
    "read": true
  }
}
Destruktivdelete_email
DELETE /emails/:email_id

Eine E-Mail löschen

DESTRUCTIVE: Löscht eine gespeicherte Nachricht und ihre gespeicherten Anhänge dauerhaft aus SendHQ. Eine bereits zugestellte Nachricht wird dadurch nicht zurückgerufen.

ParameterTypErforderlichBeschreibung
email_idstringjaE-Mail-ID (beginnt mit em_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{ok: true}.
AnnotationendestructiveHint idempotentHint
Beispiel für tools/call params
{
  "name": "delete_email",
  "arguments": {
    "email_id": "em_123"
  }
}
Nur lesendlist_email_events
GET /emails/:email_id/events

Zustell-Events einer E-Mail auflisten

Provider-Events zu einer gesendeten Nachricht: delivery, bounce, complaint, reject, open, click. Das ist der Beleg dafür, ob eine Nachricht zugestellt wurde oder warum sie fehlschlug. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
email_idstringjaE-Mail-ID (beginnt mit em_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [{event_type, recipient, reason, created_at, …}], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_email_events",
  "arguments": {
    "email_id": "em_123"
  }
}
Nur lesendget_thread
GET /threads/:thread_id

Eine Unterhaltung abrufen

Ruft alle Nachrichten einer Unterhaltung in chronologischer Reihenfolge ab (gesendet und empfangen), jeweils mit Anhangsmetadaten.

ParameterTypErforderlichBeschreibung
thread_idstringjaThread-ID (meist die em_…-ID der ersten Nachricht; siehe threadId bei jeder E-Mail). (max. 128 Zeichen)
Rückgabe{id, subject, data: [emails]}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_thread",
  "arguments": {
    "thread_id": "em_123"
  }
}

Labels und automatische Ablageregeln

Nur lesendlist_labels
GET /labels

Labels auflisten

Listet die Labels (Ordner) des Workspace mit Gesamtzahl, Zahl ungelesener Nachrichten und ihren automatischen Ablageregeln auf. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [{id, name, color, totalCount, unreadCount, rules: [...]}], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_labels",
  "arguments": {}
}
Nur lesendget_label
GET /labels/:label_id

Ein Label abrufen

Ruft ein Label mit Zählern und automatischen Ablageregeln ab.

ParameterTypErforderlichBeschreibung
label_idstringjaLabel-ID (beginnt mit lbl_) oder der exakte Label-Name. (max. 128 Zeichen)
RückgabeLabel-Objekt.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_label",
  "arguments": {
    "label_id": "Billing"
  }
}
Ändert Zustandcreate_label
POST /labels

Ein Label erstellen

Erstellt ein ordnerartiges Label. Setzen Sie skip_inbox: true, um daraus einen Bucket zu machen, den ein Agent besitzt: Senden Sie mit labels: [name], und die Antworten werden im Label abgelegt und aus dem Posteingang herausgehalten. Optionale automatische Ablageregeln legen neue gesendete/empfangene E-Mails ab (jede Bedingung einer Regel muss zutreffen). Setzen Sie apply_to_existing, um auch gespeicherte E-Mails abzulegen.

ParameterTypErforderlichBeschreibung
namestringjaLabel-Name, z. B. Billing oder Clients/Acme. Pro Workspace eindeutig (Groß-/Kleinschreibung wird nicht unterschieden). (max. 64 Zeichen)
colorstringneinHex-Farbe wie #1a73e8. Optional.
skip_inboxbooleanneinBucket-Modus: Empfangene E-Mails, die dieses Label erhalten (per Regel, per Antwort auf eine mit diesem Label gesendete Unterhaltung oder von Hand), werden archiviert und erscheinen nur im Label, nicht im Posteingang.
rulesobject[]neinOptionale automatische Ablageregeln (max. 20). Jede braucht mindestens eines von inbox_id, from, to, subject. (0–20 Einträge)
rules[].directionstringneinNur in (empfangene) oder out (gesendete) E-Mails. Weglassen für beide. (eines von in, out)
rules[].inbox_idstringneinNur E-Mails, die dieses Postfach empfangen hat (inb_…). Legt jede Empfangsadresse in einem eigenen Ordner ab.
rules[].fromstringneinAbsender enthält diesen Text (Groß-/Kleinschreibung egal), z. B. @stripe.com. (max. 200 Zeichen)
rules[].tostringneinTo/Cc enthält diesen Text (Groß-/Kleinschreibung egal). (max. 200 Zeichen)
rules[].subjectstringneinBetreff enthält diesen Text (Groß-/Kleinschreibung egal). (max. 200 Zeichen)
rules[].skip_inboxbooleanneinArchiviert passende empfangene E-Mails, sodass sie nur im Label-Ordner erscheinen, nicht im Posteingang.
apply_to_existingbooleanneinLegt auch bereits gespeicherte E-Mails ab, die zu den Regeln passen.
RückgabeDas erstellte Label mit Regeln.
Beispiel für tools/call params
{
  "name": "create_label",
  "arguments": {
    "name": "Agent/Orders",
    "skip_inbox": true,
    "rules": [
      {
        "from": "@stripe.com"
      }
    ]
  }
}
Ändert Zustandupdate_label
PATCH /labels/:label_id

Ein Label umbenennen, umfärben oder zum Bucket machen

Benennt ein Label um, ändert seine Farbe oder schaltet den Bucket-Modus (skip_inbox) um. Beim Einschalten des Bucket-Modus werden empfangene E-Mails archiviert, die bereits im Label liegen.

ParameterTypErforderlichBeschreibung
label_idstringjaLabel-ID (beginnt mit lbl_) oder der exakte Label-Name. (max. 128 Zeichen)
namestringneinNeuer Name. (max. 64 Zeichen)
colorstringneinNeue Hex-Farbe.
skip_inboxbooleanneinBucket-Modus: Empfangene E-Mails, die dieses Label erhalten (per Regel, per Antwort auf eine mit diesem Label gesendete Unterhaltung oder von Hand), werden archiviert und erscheinen nur im Label, nicht im Posteingang.
RückgabeAktualisiertes Label.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "update_label",
  "arguments": {
    "label_id": "lbl_123",
    "name": "Finance/Billing"
  }
}
Destruktivdelete_label
DELETE /labels/:label_id

Ein Label löschen

DESTRUCTIVE: Löscht ein Label und seine Regeln. Die E-Mail selbst bleibt erhalten; sie verliert nur dieses Label.

ParameterTypErforderlichBeschreibung
label_idstringjaLabel-ID (beginnt mit lbl_) oder der exakte Label-Name. (max. 128 Zeichen)
Rückgabe{ok: true}.
AnnotationendestructiveHint idempotentHint
Beispiel für tools/call params
{
  "name": "delete_label",
  "arguments": {
    "label_id": "lbl_123"
  }
}
Ändert Zustandcreate_label_rule
POST /labels/:label_id/rules

Eine automatische Ablageregel hinzufügen

Fügt einem Label eine Regel hinzu, damit passende neue E-Mails automatisch abgelegt werden. Jede von Ihnen gesetzte Bedingung muss zutreffen. Mit inbox_id erhält eine Empfangsadresse einen eigenen Ordner; mit skip_inbox bleibt sie aus dem Posteingang heraus.

ParameterTypErforderlichBeschreibung
label_idstringjaLabel-ID (beginnt mit lbl_) oder der exakte Label-Name. (max. 128 Zeichen)
directionstringneinNur in (empfangene) oder out (gesendete) E-Mails. Weglassen für beide. (eines von in, out)
inbox_idstringneinNur E-Mails, die dieses Postfach empfangen hat (inb_…). Legt jede Empfangsadresse in einem eigenen Ordner ab.
fromstringneinAbsender enthält diesen Text (Groß-/Kleinschreibung egal), z. B. @stripe.com. (max. 200 Zeichen)
tostringneinTo/Cc enthält diesen Text (Groß-/Kleinschreibung egal). (max. 200 Zeichen)
subjectstringneinBetreff enthält diesen Text (Groß-/Kleinschreibung egal). (max. 200 Zeichen)
skip_inboxbooleanneinArchiviert passende empfangene E-Mails, sodass sie nur im Label-Ordner erscheinen, nicht im Posteingang.
apply_to_existingbooleanneinLegt auch bereits gespeicherte E-Mails ab, die passen.
Rückgabe{id: lrule_…, labelId, direction, inboxId, from, to, subject, skipInbox}.
Beispiel für tools/call params
{
  "name": "create_label_rule",
  "arguments": {
    "label_id": "Billing",
    "inbox_id": "inb_123",
    "skip_inbox": true
  }
}
Destruktivdelete_label_rule
DELETE /labels/:label_id/rules/:rule_id

Eine automatische Ablageregel löschen

DESTRUCTIVE: Entfernt eine automatische Ablageregel. Bereits abgelegte E-Mails behalten ihr Label.

ParameterTypErforderlichBeschreibung
label_idstringjaLabel-ID (beginnt mit lbl_) oder der exakte Label-Name. (max. 128 Zeichen)
rule_idstringjaRegel-ID (beginnt mit lrule_), aus get_label. (max. 128 Zeichen)
Rückgabe{ok: true}.
AnnotationendestructiveHint idempotentHint
Beispiel für tools/call params
{
  "name": "delete_label_rule",
  "arguments": {
    "label_id": "lbl_123",
    "rule_id": "lrule_123"
  }
}
Ändert Zustandlabel_email
POST /emails/:email_id/labels

Labels einer E-Mail hinzufügen oder entfernen

Verschiebt eine Nachricht zwischen Ordnern: Labels per Name oder lbl_…-ID hinzufügen und/oder entfernen. Unbekannte Namen in add werden angelegt, es sei denn create ist false.

ParameterTypErforderlichBeschreibung
email_idstringjaE-Mail-ID (beginnt mit em_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
addstring[]neinHinzuzufügende Labels. (0–10 Einträge)
removestring[]neinZu entfernende Labels. (0–10 Einträge)
createbooleanneinLegt unbekannte Labels in add an (Standard true).
RückgabeDie aktualisierte E-Mail mit labels.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "label_email",
  "arguments": {
    "email_id": "em_123",
    "add": [
      "Billing"
    ],
    "remove": [
      "Support"
    ]
  }
}

Entwürfe, Anhänge und Absenderidentitäten

Nur lesendlist_sending_identities
GET /sending-identities

Verifizierte Absenderidentitäten auflisten

Adressen und Domains, von denen dieser Workspace jetzt senden kann (verifizierte Domains, ihr Standard-From und aktive Postfachadressen). Rufen Sie das vor send_email auf, um ein gültiges from zu wählen.

Keine Parameter.

Rückgabe{domains: [Namen verifizierter Domains], addresses: [Absenderadressen], localParts: [...]}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_sending_identities",
  "arguments": {}
}
Ändert Zustandcreate_draft
POST /drafts

Einen Entwurf erstellen

Erstellt einen Composer-Entwurf. Entwürfe enthalten Anhänge: Erstellen Sie einen Entwurf, rufen Sie upload_attachment auf und senden Sie dann send_email mit draft_id. Sendet nichts.

ParameterTypErforderlichBeschreibung
fromstringneinAbsenderadresse einer verifizierten Domain (kann beim Entwerfen leer sein).
tostring[]neinEmpfänger. (0–100 Einträge)
ccstring[]neinEmpfänger in Kopie (Cc). (0–100 Einträge)
bccstring[]neinEmpfänger in Blindkopie (Bcc). (0–100 Einträge)
subjectstringneinBetreffzeile. (max. 998 Zeichen)
htmlstringneinHTML-Body.
textstringneinPlain-Text-Body.
reply_to_email_idstringneinE-Mail-ID, auf die dieser Entwurf antwortet.
thread_idstringneinThread-ID, zu der dieser Entwurf gehört.
RückgabeEntwurfsobjekt {id: dr_…, from, to, cc, bcc, subject, html, text, attachments: []}.
Beispiel für tools/call params
{
  "name": "create_draft",
  "arguments": {
    "from": "hello@example.com",
    "to": [
      "owner@example.com"
    ],
    "subject": "Invoice"
  }
}
Nur lesendlist_drafts
GET /drafts

Entwürfe auflisten

Listet Composer-Entwürfe auf, zuletzt aktualisierte zuerst. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [Entwürfe], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_drafts",
  "arguments": {}
}
Nur lesendget_draft
GET /drafts/:draft_id

Einen Entwurf abrufen

Ruft einen Entwurf mit seinen Anhangsmetadaten ab.

ParameterTypErforderlichBeschreibung
draft_idstringjaEntwurfs-ID (beginnt mit dr_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
RückgabeEntwurfsobjekt mit attachments.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_draft",
  "arguments": {
    "draft_id": "dr_123"
  }
}
Ändert Zustandupdate_draft
PUT /drafts/:draft_id

Entwurfsinhalt ersetzen

Ersetzt Inhalt und Empfänger eines Entwurfs. Das ist ein vollständiger Ersatz: Weggelassene Felder werden geleert, lesen Sie daher zuerst get_draft und senden Sie jedes Feld mit, das erhalten bleiben soll. Anhänge bleiben unberührt.

ParameterTypErforderlichBeschreibung
draft_idstringjaEntwurfs-ID (beginnt mit dr_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
fromstringneinAbsenderadresse einer verifizierten Domain (kann beim Entwerfen leer sein).
tostring[]neinEmpfänger. (0–100 Einträge)
ccstring[]neinEmpfänger in Kopie (Cc). (0–100 Einträge)
bccstring[]neinEmpfänger in Blindkopie (Bcc). (0–100 Einträge)
subjectstringneinBetreffzeile. (max. 998 Zeichen)
htmlstringneinHTML-Body.
textstringneinPlain-Text-Body.
reply_to_email_idstringneinE-Mail-ID, auf die dieser Entwurf antwortet.
thread_idstringneinThread-ID, zu der dieser Entwurf gehört.
RückgabeAktualisiertes Entwurfsobjekt.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "update_draft",
  "arguments": {
    "draft_id": "dr_123",
    "from": "hello@example.com",
    "to": [
      "owner@example.com"
    ],
    "subject": "Invoice (updated)",
    "text": "Attached."
  }
}
Destruktivdelete_draft
DELETE /drafts/:draft_id

Einen Entwurf verwerfen

DESTRUCTIVE: Verwirft einen Entwurf und löscht seine gespeicherten Anhänge dauerhaft.

ParameterTypErforderlichBeschreibung
draft_idstringjaEntwurfs-ID (beginnt mit dr_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{ok: true}.
AnnotationendestructiveHint idempotentHint
Beispiel für tools/call params
{
  "name": "delete_draft",
  "arguments": {
    "draft_id": "dr_123"
  }
}
Ändert Zustandupload_attachment
POST /drafts/:draft_id/attachments

Einen Anhang zu einem Entwurf hochladen

Lädt eine Datei zu einem Entwurf hoch (max. 10 Dateien und insgesamt 10 MB pro Nachricht). Geben Sie content_base64 oder einen lokalen file_path an. Anhänge erfordern beim Senden einen bezahlten Tarif.

Geben Sie mindestens eines an: content_base64, file_path.

ParameterTypErforderlichBeschreibung
draft_idstringjaEntwurfs-ID (beginnt mit dr_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
filenamestringneinDateiname, den der Empfänger sieht. Standard ist der Basisname von file_path. (max. 255 Zeichen)
content_typestringneinMIME-Typ, z. B. application/pdf. Standard ist application/octet-stream.
content_base64stringneinStandard-Base64-Dateiinhalt.
file_pathstringneinAbsoluter Pfad einer lokalen Datei, die der MCP-Serverprozess lesen kann.
Rückgabe{id: att_…, filename, contentType, sizeBytes, available}.
Beispiel für tools/call params
{
  "name": "upload_attachment",
  "arguments": {
    "draft_id": "dr_123",
    "filename": "invoice.pdf",
    "content_type": "application/pdf",
    "file_path": "/tmp/invoice.pdf"
  }
}
Nur lesenddownload_attachment
GET /attachments/:attachment_id

Einen Anhang herunterladen

Lädt einen privaten Anhang herunter (gesendet, empfangen oder aus einem Entwurf). Gibt Base64-Inhalt zurück oder schreibt die Datei, wenn save_to_path gesetzt ist (überschreibt nicht, außer overwrite ist true).

ParameterTypErforderlichBeschreibung
attachment_idstringjaAnhangs-ID (beginnt mit att_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
save_to_pathstringneinOptionaler absoluter lokaler Pfad, in den die Datei geschrieben wird, statt Base64 zurückzugeben.
overwritebooleanneinErlaubt das Ersetzen einer vorhandenen Datei unter save_to_path. Standard false.
Rückgabe{attachment_id, filename, content_type, size_bytes, content_base64} oder {attachment_id, filename, content_type, size_bytes, saved_to}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "download_attachment",
  "arguments": {
    "attachment_id": "att_123",
    "save_to_path": "/tmp/invoice.pdf"
  }
}
Destruktivdelete_attachment
DELETE /attachments/:attachment_id

Einen Anhang löschen

DESTRUCTIVE: Löscht einen gespeicherten Anhang dauerhaft (zum Beispiel, um vor dem Senden eine Datei aus einem Entwurf zu entfernen).

ParameterTypErforderlichBeschreibung
attachment_idstringjaAnhangs-ID (beginnt mit att_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{ok: true}.
AnnotationendestructiveHint idempotentHint
Beispiel für tools/call params
{
  "name": "delete_attachment",
  "arguments": {
    "attachment_id": "att_123"
  }
}

Gehostete Templates

Nur lesendlist_templates
GET /templates

Gehostete Templates auflisten

Listet gehostete E-Mail-Templates mit Veröffentlichungsstatus und Nutzung auf. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
lifecyclestringneinactive (Standard), archived oder all. (eines von active, archived, all)
querystringneinSuche nach Name oder Key. (max. 120 Zeichen)
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [Templates], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_templates",
  "arguments": {
    "lifecycle": "active"
  }
}
Ändert Zustandcreate_template
POST /templates

Ein gehostetes Template erstellen

Erstellt ein Template mit bearbeitbarem Entwurf, optional aus einer Vorlage (welcome, reset, receipt oder blank). Veröffentlichen Sie es, bevor Sie per Key senden.

ParameterTypErforderlichBeschreibung
namestringjaName für Menschen. (max. 120 Zeichen)
keystringneinStabiler Sende-Key: Kleinbuchstaben, Ziffern, Bindestriche; beginnt mit einem Buchstaben (2–64 Zeichen). Wird aus dem Namen abgeleitet, wenn er fehlt.
starterstringneinStartinhalt. (eines von blank, welcome, reset, receipt)
Rückgabe{template, draft, activeVersion, versions, usage}.
Beispiel für tools/call params
{
  "name": "create_template",
  "arguments": {
    "name": "Account welcome",
    "key": "account-welcome",
    "starter": "welcome"
  }
}
Nur lesendget_template
GET /templates/:template_id

Ein Template abrufen

Ruft den aktuellen Entwurf eines Templates (mit revision), das aktive veröffentlichte Release, den Release-Verlauf und die Nutzung ab. Akzeptiert ID oder Key.

ParameterTypErforderlichBeschreibung
template_idstringjaTemplate-ID (tmpl_…) oder Key. (max. 128 Zeichen)
Rückgabe{template, draft: {id, revision, subjectTemplate, htmlTemplate, textTemplate, variables, sampleData, …} | null, activeVersion, versions, usage}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
Ändert Zustandupdate_template_draft
PUT /templates/:template_id/draft

Einen Template-Entwurf speichern

Speichert den bearbeitbaren Entwurf des Templates mit optimistischer Nebenläufigkeitskontrolle: Übergeben Sie die aktuelle revision aus get_template (409 bedeutet, dass jemand anderes zuerst gespeichert hat; erneut lesen und wiederholen). Das ist ein vollständiger Ersatz des Entwurfsinhalts: Weggelassene Felder werden geleert, senden Sie daher jedes Feld mit, das erhalten bleiben soll. Verwenden Sie {{variable}}-Platzhalter.

ParameterTypErforderlichBeschreibung
template_idstringjaTemplate-ID oder Key. (max. 128 Zeichen)
revisionintegerjaAktuelle Entwurfsrevision aus get_template. (1–…)
namestringneinTemplate-Name. (max. 120 Zeichen)
subject_templatestringneinBetreff mit Platzhaltern. (max. 998 Zeichen)
preheader_templatestringneinVorschautext. (max. 240 Zeichen)
html_templatestringneinHTML-Body mit Platzhaltern.
text_templatestringneinPlain-Text-Body mit Platzhaltern.
fromstringneinStandardabsender für Versände dieses Templates.
reply_tostringneinStandard-Reply-To.
variablesobject[]neinTypisierter Variablenvertrag. Jeder Eintrag: {key (Kleinbuchstaben/Unterstriche), label, type: text|number|url|boolean, required (Standard true), fallback, description}.
variables[].keystringja
variables[].labelstringnein
variables[].typestringnein(eines von text, number, url, boolean)
variables[].requiredbooleannein
variables[].fallbackanynein
variables[].descriptionstringnein
sample_dataobjectneinBeispielwerte für Vorschauen und Tests.
Rückgabe{template, draft: {revision: next}, validation: {valid, findings}}.
Beispiel für tools/call params
{
  "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"
    }
  }
}
Ändert Zustandcreate_template_draft
POST /templates/:template_id/draft

Einen neuen Entwurf aus dem veröffentlichten Release beginnen

Erstellt einen neuen bearbeitbaren Entwurf als Kopie des aktuellen veröffentlichten Releases (409, wenn bereits ein Entwurf existiert oder nichts veröffentlicht ist).

ParameterTypErforderlichBeschreibung
template_idstringjaTemplate-ID oder Key. (max. 128 Zeichen)
Rückgabe{draft}.
Beispiel für tools/call params
{
  "name": "create_template_draft",
  "arguments": {
    "template_id": "account-welcome"
  }
}
Nur lesendrender_template
POST /templates/:template_id/render

Eine Template-Vorschau rendern

Rendert die exakte Server-Ausgabe (subject, html, text) für den Entwurf, das veröffentlichte Release oder eine bestimmte Version mit den angegebenen Daten. Sendet nichts. Gibt 422 mit findings zurück, wenn Daten den Variablenvertrag verletzen.

ParameterTypErforderlichBeschreibung
template_idstringjaTemplate-ID oder Key. (max. 128 Zeichen)
version_idstringneinOptionale Versions-ID; Standard ist der Entwurf, dann das veröffentlichte Release.
dataobjectneinVariablenwerte; Standard sind die Beispieldaten der Version.
Rückgabe{subject, html, text, preheader, versionId, versionNumber, isDraft, findings}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "render_template",
  "arguments": {
    "template_id": "account-welcome",
    "data": {
      "first_name": "Asha"
    }
  }
}
Sendet echte E-Mailssend_template_test
POST /templates/:template_id/test

Eine Test-E-Mail für ein Template senden

SENDS REAL EMAIL. Sendet einen mit [Test] präfixierten Snapshot des Entwurfs (oder einer angegebenen Version) an die angegebenen Empfänger. Zählt auf die Nutzung an; Workspaces in der Testphase können nur an die Konto-E-Mail-Adresse oder eine SES-Simulatoradresse senden.

ParameterTypErforderlichBeschreibung
template_idstringjaTemplate-ID oder Key. (max. 128 Zeichen)
tostring[]jaTestempfänger. (1–100 Einträge)
fromstringneinAbsender auf einer verifizierten Domain; Standard ist das From des Templates.
version_idstringneinOptionale Versions-ID.
dataobjectneinVariablenwerte; Standard sind die Beispieldaten.
Rückgabe{id: em_…, providerMessageId, threadId, isTest: true}.
Beispiel für tools/call params
{
  "name": "send_template_test",
  "arguments": {
    "template_id": "account-welcome",
    "to": [
      "owner@example.com"
    ]
  }
}
Ändert Zustandpublish_template
POST /templates/:template_id/publish

Ein Template-Release veröffentlichen

Veröffentlicht den aktuellen Entwurf als unveränderliches Release, das send_email mit template.key verwendet. Schlägt mit 422 findings bei Validierungsfehlern fehl oder mit 409, wenn es den aktiven Variablenvertrag eines bereits produktiv genutzten Templates brechen würde.

ParameterTypErforderlichBeschreibung
template_idstringjaTemplate-ID oder Key. (max. 128 Zeichen)
Rückgabe{template, published}.
Beispiel für tools/call params
{
  "name": "publish_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
Ändert Zustandarchive_template
POST /templates/:template_id/archive

Ein Template archivieren

Stoppt neue Versände mit diesem Template (der Verlauf bleibt erhalten; mit restore_template umkehrbar). Jede Integration, die diesen Key sendet, schlägt dann mit 404 fehl.

ParameterTypErforderlichBeschreibung
template_idstringjaTemplate-ID oder Key. (max. 128 Zeichen)
Rückgabe{template}.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "archive_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
Ändert Zustandrestore_template
POST /templates/:template_id/restore

Ein archiviertes Template wiederherstellen

Macht ein archiviertes Template wieder aktiv.

ParameterTypErforderlichBeschreibung
template_idstringjaTemplate-ID oder Key. (max. 128 Zeichen)
Rückgabe{template}.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "restore_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}

Domains und DNS

Nur lesendlist_domains
GET /domains

Domains auflisten

Listet Absenderdomains mit aggregiertem setup_status (verified | checking | pending), DNS-Status pro Eintrag und Inbound-Status auf. Kann langsam sein: Nicht verifizierte Domains werden live neu geprüft. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [Domains mit Einträgen], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_domains",
  "arguments": {}
}
Nur lesendget_domain
GET /domains/:domain_id

Domain-Setup-Details abrufen

Ruft eine Domain mit den exakt zu veröffentlichenden DNS-Einträgen (type, name, value), dem Live-Status jedes Eintrags von zwei öffentlichen Resolvern, dns_issues samt Lösungen und dem Inbound-Status ab.

ParameterTypErforderlichBeschreibung
domain_idstringjaDomain-ID (beginnt mit dom_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{id, name, status, setup_status, dns_propagating, records: [{type, name, value, verified, dns_state}], dns_issues: [{code, message, …}], inbound_domain, inbound_status}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
Ändert Zustandadd_domain
POST /domains

Eine Absenderdomain hinzufügen

Registriert eine Domain, die Sie kontrollieren, für den Versand. Gibt die DNS-Einträge (SES-Easy-DKIM-CNAMEs) zurück, die der Inhaber veröffentlichen muss. Ändert das DNS nicht selbst. Zählt auf das Domain-Limit des Tarifs an.

ParameterTypErforderlichBeschreibung
namestringjaReiner Domainname, z. B. example.com oder mail.example.com. (max. 253 Zeichen)
default_fromstringneinOptionale Standard-Absenderadresse dieser Domain.
Rückgabe{id: dom_…, name, status: pending, records: [...], ses: {configured}}.
Beispiel für tools/call params
{
  "name": "add_domain",
  "arguments": {
    "name": "example.com"
  }
}
Ändert Zustandverify_domain
POST /domains/:domain_id/verify

Eine Domain verifizieren

Führt jetzt eine Live-Prüfung von SES/DNS durch. Kann bedenkenlos wiederholt werden; fragen Sie nach DNS-Änderungen alle 30–60 s ab (die Propagierung kann Minuten bis Stunden dauern). Senden ist erlaubt, sobald der Status verified ist.

ParameterTypErforderlichBeschreibung
domain_idstringjaDomain-ID (beginnt mit dom_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{domain, checks: {ses, dkim, dkim_status}, status: verified|pending}.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "verify_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
Destruktivdelete_domain
DELETE /domains/:domain_id

Eine Domain löschen

DESTRUCTIVE: Entfernt die Domain aus dem Workspace, einschließlich ihrer Inbound-Empfangsroute. Versände von ihr schlagen danach sofort fehl. DNS-Einträge bei Ihrem DNS-Provider werden dabei nicht gelöscht.

ParameterTypErforderlichBeschreibung
domain_idstringjaDomain-ID (beginnt mit dom_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{ok: true}.
AnnotationendestructiveHint idempotentHint
Beispiel für tools/call params
{
  "name": "delete_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
Nur lesendget_dns_provider
GET /dns/provider

DNS-Provider und Eintrags-Hosts erkennen

Erkennt den maßgeblichen DNS-Provider der Domain und gibt für jeden Eintrag den relativen Host zurück, der bei diesem Provider einzutragen ist, dazu den empfohlenen DMARC-Eintrag, MX-Hinweise für Inbound und die Angabe, ob die Einrichtung per Klick (Domain Connect) verfügbar ist.

ParameterTypErforderlichBeschreibung
domain_idstringjaDomain-ID (beginnt mit dom_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{detectionStatus, detected, zone, nameservers, recordHosts: {recordId: host}, inbound, recommendations, authentication, providers: {domainConnect: {available, providerName}}}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_dns_provider",
  "arguments": {
    "domain_id": "dom_123"
  }
}

Eingehende E-Mails

Ändert Zustandsetup_inbound
POST /domains/:domain_id/inbound/setup

Inbound-Empfang für eine Domain aktivieren

Richtet SES-Inbound-Empfang für eine verifizierte Domain ein. Verwendet die Root-Domain, wenn sie keinen kollidierenden MX hat, andernfalls inbound.<domain>. Gibt den MX-Eintrag zurück, den der Inhaber veröffentlichen muss; das DNS wird nicht bearbeitet.

ParameterTypErforderlichBeschreibung
domain_idstringjaDomain-ID (beginnt mit dom_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{domain: Empfangsdomain, status: dns_pending|ready, record: {type: MX, name, value}}.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "setup_inbound",
  "arguments": {
    "domain_id": "dom_123"
  }
}
Ändert Zustandverify_inbound
POST /domains/:domain_id/inbound/verify

Inbound-MX verifizieren

Prüft den Inbound-MX-Eintrag erneut. Der Status wird ready, wenn beide öffentlichen Resolver ihn sehen.

ParameterTypErforderlichBeschreibung
domain_idstringjaDomain-ID (beginnt mit dom_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{domain, status: ready|dns_pending|propagating|checking, record}.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "verify_inbound",
  "arguments": {
    "domain_id": "dom_123"
  }
}
Nur lesendlist_inboxes
GET /inboxes

Inbound-Adressen auflisten

Listet Empfangsadressen auf, optional für eine Domain. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
domain_idstringneinOptionaler Filter nach Domain-ID.
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [{id, address, name, status, domainId}], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_inboxes",
  "arguments": {
    "domain_id": "dom_123"
  }
}
Nur lesendget_inbox
GET /inboxes/:inbox_id

Ein Postfach abrufen

Ruft eine Inbound-Adresse ab.

ParameterTypErforderlichBeschreibung
inbox_idstringjaPostfach-ID (beginnt mit inb_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
RückgabePostfachobjekt.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_inbox",
  "arguments": {
    "inbox_id": "inb_123"
  }
}
Ändert Zustandcreate_inbox
POST /inboxes

Eine Inbound-Adresse erstellen

Erstellt eine Adresse wie support@<receiving domain> auf einer Domain, deren Inbound-Status ready ist (führen Sie zuvor setup_inbound und verify_inbound aus). Empfangene E-Mails erscheinen in list_emails mit direction in.

ParameterTypErforderlichBeschreibung
domain_idstringjaDomain-ID (beginnt mit dom_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
local_partstringjaTeil vor dem @, z. B. support. (max. 64 Zeichen)
namestringneinOptionaler Anzeigename.
Rückgabe{id: inb_…, address, name, status: active}.
Beispiel für tools/call params
{
  "name": "create_inbox",
  "arguments": {
    "domain_id": "dom_123",
    "local_part": "support",
    "name": "Support"
  }
}
Ändert Zustandupdate_inbox
PATCH /inboxes/:inbox_id

Ein Postfach umbenennen, aktivieren oder deaktivieren

Benennt ein Postfach um oder setzt seinen Status auf active / disabled.

ParameterTypErforderlichBeschreibung
inbox_idstringjaPostfach-ID (beginnt mit inb_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
namestringneinNeuer Anzeigename.
statusstringneinNeuer Status. (einer von active, disabled)
RückgabeAktualisiertes Postfach.
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "update_inbox",
  "arguments": {
    "inbox_id": "inb_123",
    "status": "disabled"
  }
}
Sendet echte E-Mailsset_inbox_forwarding
PUT /inboxes/:inbox_id/forwarding

Ein Postfach an eine andere Adresse weiterleiten

SENDS REAL EMAIL, wenn an jemand anderen als den Kontoinhaber weitergeleitet wird: Legt fest, wohin die empfangenen E-Mails eines Postfachs weitergeleitet werden. Die eigene Adresse des Inhabers wird sofort aktiv; jede andere Adresse erhält eine Bestätigungs-E-Mail, und die Weiterleitung bleibt pending, bis dort jemand bestätigt. Übergeben Sie forward_to: null, um die Weiterleitung auszuschalten. Weitergeleitete Kopien kommen von der Postfachadresse, mit dem ursprünglichen Absender als Reply-To.

ParameterTypErforderlichBeschreibung
inbox_idstringjaPostfach-ID (beginnt mit inb_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
forward_tostring,nulljaZieladresse für die Weiterleitung oder null, um die Weiterleitung auszuschalten. (max. 254 Zeichen)
RückgabePostfach mit forwardTo und forwardStatus (off, pending oder active).
AnnotationenidempotentHint
Beispiel für tools/call params
{
  "name": "set_inbox_forwarding",
  "arguments": {
    "inbox_id": "inb_123",
    "forward_to": "team@example.net"
  }
}
Destruktivdelete_inbox
DELETE /inboxes/:inbox_id

Ein Postfach löschen

DESTRUCTIVE: Löscht eine Inbound-Adresse. Bereits empfangene E-Mails bleiben erhalten; neue E-Mails an die Adresse werden ihr nicht mehr zugeordnet.

ParameterTypErforderlichBeschreibung
inbox_idstringjaPostfach-ID (beginnt mit inb_), wie sie ein List- oder Create-Tool zurückgibt. (max. 128 Zeichen)
Rückgabe{ok: true}.
AnnotationendestructiveHint idempotentHint
Beispiel für tools/call params
{
  "name": "delete_inbox",
  "arguments": {
    "inbox_id": "inb_123"
  }
}

Zustellbarkeit, Bounces und Sperrliste

Nur lesenddeliverability_stats
GET /deliverability/stats

Zustellstatistiken der letzten 30 Tage abrufen

Workspace-weite Summen der letzten 30 Tage: sent, delivery, bounce, complaint, reject, open, click und deliveryRate (%).

Keine Parameter.

Rückgabe{window: 30d, sent, delivery, bounce, complaint, reject, open, click, deliveryRate}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "deliverability_stats",
  "arguments": {}
}
Nur lesendlist_sender_reputation
GET /deliverability/reputation

Absenderreputation auflisten

Reputationsstatus pro exakter Absenderadresse: active, throttled (niedrigeres Tageslimit) oder paused (Versände liefern 423), mit Grund und Tageslimit. Prüfen Sie das, wenn Versände mit 423 oder 429 fehlschlagen. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [{sender, status, dailyLimit, reason, cleanSince, warnedAt, pausedAt, evaluatedAt}], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_sender_reputation",
  "arguments": {}
}
Nur lesendlist_suppressions
GET /suppressions

Sperrliste auflisten

Sperrliste des Workspace: Empfänger, die nach einem permanenten Bounce oder einer Spam-Beschwerde blockiert wurden. Versände an sie schlagen mit 422 fehl. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [{email, reason, detail, created_at}], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_suppressions",
  "arguments": {}
}
Destruktivremove_suppression
DELETE /suppressions/:email

Eine Bounce-Sperre entfernen

DESTRUCTIVE (schwächt eine Schutzsperre ab): Entfernt eine Bounce-Sperre, damit die Adresse wieder angeschrieben werden kann. Tun Sie das nur, wenn der Mensch bestätigt, dass die Adresse jetzt gültig ist. Sperren wegen Beschwerden können nicht entfernt werden (409).

ParameterTypErforderlichBeschreibung
emailstringjaGesperrte Empfängeradresse. (max. 320 Zeichen)
Rückgabe{ok: true}.
AnnotationendestructiveHint idempotentHint
Beispiel für tools/call params
{
  "name": "remove_suppression",
  "arguments": {
    "email": "fixed-mailbox@example.net"
  }
}
Nur lesendlist_blocked_recipients
GET /blocked-recipients

Blockierte Empfänger auflisten

Jeder Empfänger, den SendHQ ablehnt: Bounces, Beschwerden und domainbezogene Marketing-Abmeldungen, mit einer Zusammenfassung nach Art. Liest bis zu die neuesten 500. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [{email, domain, kind: bounce|complaint|unsubscribe, reason, detail, source, status, created_at}], count, summary: {total, bounce, complaint, unsubscribe}, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_blocked_recipients",
  "arguments": {}
}

Konto, Nutzung, Analytics und Schlüssel

Nur lesendget_account
GET /account

Konto, Nutzung und Abrechnung abrufen

E-Mail-Adresse des Kontoinhabers, Tarif/Zugriffsstufe, in der aktuellen Periode genutzte Empfängerzustellungen im Vergleich zum Kontingent, genutzte Domains im Vergleich zum Limit, Anhangstransfer, Reputationszusammenfassung, Abostatus, veröffentlichte Tarife und Workspace-Zähler. Nutzen Sie es, um das verbleibende Kontingent zu prüfen oder zu sehen, an wen die Testphase zustellen kann (die Konto-E-Mail-Adresse).

Keine Parameter.

Rückgabe{user: {email, …}, usage: {domainsUsed, domainLimit, recipientDeliveries, emailQuotaMonth, attachmentBytes, attachmentByteLimit, periodKey}, access: {tier, planCode}, reputation, infrastructure, billing: {status, subscriptions, …}, plans, workspace: {mailer, stats}}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_account",
  "arguments": {}
}
Nur lesendget_analytics
GET /analytics

Versand-Analytics abrufen

Dashboard-Analytics für die letzten 7, 30 oder 90 Tage: Summen für gesendet/empfangen/zugestellt/gebounct/blockiert/geöffnet/geklickt/Beschwerden, ein tageweiser Verlauf, die wichtigsten Absenderdomains und die häufigsten Betreffs.

ParameterTypErforderlichBeschreibung
daysintegerneinZeitfenster in Tagen: 7, 30 (Standard) oder 90. (eines von 7, 30, 90)
Rückgabe{window, days, metrics, timeline: [{day, sent, received}], domains, topContent}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_analytics",
  "arguments": {
    "days": 30
  }
}
Nur lesendlist_api_keys
GET /keys

Metadaten zu API-Schlüsseln auflisten

Listet Namen, nicht geheime Präfixe und Zeitpunkte der letzten Nutzung von API-Schlüsseln auf. Nur lesend: Dieser MCP-Server kann keine Schlüssel erstellen, rotieren oder widerrufen; das erledigt ein Mensch im Dashboard. Paginiert: Das Ergebnis enthält pagination {offset, limit, returned, total?, has_more, next_offset}.

ParameterTypErforderlichBeschreibung
limitintegerneinSeitengröße. Standard 50. (Standard 50; 1–200)
offsetintegerneinAnzahl der zu überspringenden Datensätze. Verwenden Sie pagination.next_offset der vorherigen Seite. (Standard 0; 0–…)
Rückgabe{data: [{id, name, prefix, lastUsedAt, createdAt}], count, pagination}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "list_api_keys",
  "arguments": {}
}
Nur lesendget_service_health
GET /health

Den Dienststatus von SendHQ prüfen

Prüft, ob die SendHQ API erreichbar ist und welcher Mail-Provider aktiv ist. Benötigt keinen gültigen API-Schlüssel.

Keine Parameter.

Rückgabe{ok, service, mailer}.
AnnotationenreadOnlyHint idempotentHint
Beispiel für tools/call params
{
  "name": "get_service_health",
  "arguments": {}
}

Abdeckung der API

Jede Operation der öffentlichen API und das Tool, das sie abdeckt. Alles, was ein Nutzer im Dashboard tun kann und wofür es eine API gibt, ist abgedeckt; die folgenden Ausnahmen sind beabsichtigt.

EndpunktToolHinweise
POST /emailssend_emailEine E-Mail senden
POST /emails/batchsend_batchBis zu 100 individualisierte Nachrichten senden
GET /emailslist_emailsGesendete und empfangene E-Mails auflisten
GET /emails/:idget_emailEine E-Mail mit ihren Anhängen abrufen
PATCH /emails/:idmark_emailGelesen-Status, Archivierung, Spam, Kategorie oder Wichtigkeit aktualisieren
POST /emails/:id/labelslabel_emailLabels einer E-Mail hinzufügen oder entfernen
DELETE /emails/:iddelete_emailEine gespeicherte E-Mail löschen
GET /emails/:id/eventslist_email_eventsZustell-Events einer E-Mail auflisten
GET /threads/:idget_threadEine Unterhaltung chronologisch abrufen
GET /labelslist_labelsLabels mit Nachrichtenzahlen und Ablageregeln auflisten
POST /labelscreate_labelEin Label erstellen, optional mit automatischen Ablageregeln
GET /labels/:idget_labelEin Label per ID oder Name abrufen
PATCH /labels/:idupdate_labelEin Label umbenennen, umfärben oder zum Bucket machen
DELETE /labels/:iddelete_labelEin Label löschen, ohne seine E-Mails zu löschen
POST /labels/:id/rulescreate_label_ruleEinem Label eine automatische Ablageregel hinzufügen
DELETE /labels/:id/rules/:rule_iddelete_label_ruleEine automatische Ablageregel löschen
POST /draftscreate_draftEinen Composer-Entwurf erstellen
GET /draftslist_draftsComposer-Entwürfe auflisten
GET /drafts/:idget_draftEinen Entwurf und Anhänge abrufen
PUT /drafts/:idupdate_draftEntwurfsinhalt ersetzen
DELETE /drafts/:iddelete_draftEinen Entwurf verwerfen
POST /drafts/:id/attachmentsupload_attachmentEinen Anhang zu einem Entwurf hochladen
GET /attachments/:iddownload_attachmentEinen privaten Anhang herunterladen
DELETE /attachments/:iddelete_attachmentEinen privaten Anhang löschen
GET /sending-identitieslist_sending_identitiesVerifizierte Absenderidentitäten auflisten
GET /templateslist_templatesGehostete Templates auflisten
POST /templatescreate_templateEin gehostetes Template erstellen
GET /templates/:idget_templateEntwürfe, Releases und Nutzung abrufen
PUT /templates/:id/draftupdate_template_draftEinen Template-Entwurf automatisch speichern
POST /templates/:id/draftcreate_template_draftEinen neuen Entwurf aus dem veröffentlichten Release erstellen
POST /templates/:id/renderrender_templateDie exakte Server-Ausgabe rendern
POST /templates/:id/testsend_template_testEinen Test-Snapshot senden
POST /templates/:id/publishpublish_templateEin unveränderliches Template-Release veröffentlichen
POST /templates/:id/archivearchive_templateEin Template archivieren
POST /templates/:id/restorerestore_templateEin archiviertes Template wiederherstellen
POST /domainsadd_domainEine Absenderdomain hinzufügen
GET /domainslist_domainsDomains und zwischengespeicherten DNS-Status auflisten
GET /domains/:idget_domainDomain-Setup-Details abrufen
POST /domains/:id/verifyverify_domainSES- und DNS-Verifizierung aktualisieren
POST /domains/:id/inbound/setupsetup_inboundSES-Inbound-Empfang einrichten
POST /domains/:id/inbound/verifyverify_inboundInbound-MX-Routing verifizieren
DELETE /domains/:iddelete_domainEine Domain löschen
GET /dns/providerget_dns_providerDen maßgeblichen DNS-Provider und die relativen Eintrags-Hosts erkennen
GET /dns/domain-connect/connectget_domain_connect_linkEinen Domain-Connect-Zustimmungslink für die DNS-Einrichtung per Klick erstellen
POST /inboxescreate_inboxEine Inbound-Adresse erstellen
GET /inboxeslist_inboxesInbound-Adressen auflisten
GET /inboxes/:idget_inboxEine Inbound-Adresse abrufen
PATCH /inboxes/:idupdate_inboxEin Postfach umbenennen, aktivieren oder deaktivieren
PUT /inboxes/:id/forwardingset_inbox_forwardingDie empfangenen E-Mails eines Postfachs an eine andere Adresse weiterleiten
DELETE /inboxes/:iddelete_inboxEin Postfach löschen und die Nachrichten behalten
GET /deliverability/statsdeliverability_statsZustellstatistiken der letzten 30 Tage abrufen
GET /deliverability/reputationlist_sender_reputationReputationsstatus pro exakter Absenderidentität auflisten
GET /suppressionslist_suppressionsSperrlisteneinträge des Workspace auflisten
DELETE /suppressions/:emailremove_suppressionEine zulässige Bounce-Sperre entfernen
GET /blocked-recipientslist_blocked_recipientsBounces, Beschwerden und Abmeldungen auflisten
GET /accountget_accountKonto, Nutzung, Abrechnungsstatus und Workspace-Zähler mit einem API-Schlüssel abrufen
GET /analyticsget_analyticsDashboard-Versand-Analytics für 7, 30 oder 90 Tage abrufen
GET /profileget_accountReines Sitzungs-Gegenstück zu GET /account; der MCP-Server liest die Route für API-Schlüssel.
POST /billing/checkoutnicht verfügbarÄnderungen an der Abrechnung sind bewusst nur in einer Sitzung möglich und erfordern den Kontoinhaber im Dashboard. Der Abrechnungsstatus ist mit get_account lesbar.
POST /billing/cancelnicht verfügbarÄnderungen an der Abrechnung sind bewusst nur in einer Sitzung möglich und erfordern den Kontoinhaber im Dashboard. Der Abrechnungsstatus ist mit get_account lesbar.
POST /keysnicht verfügbarBewusst ausgeschlossen: Ein Agent darf keine Zugangsdaten erzeugen oder vernichten. Schlüssel verwaltet ein Mensch im Dashboard.
GET /keyslist_api_keysAPI-Schlüssel-Metadaten auflisten
DELETE /keys/:idnicht verfügbarBewusst ausgeschlossen: Ein Agent darf keine Zugangsdaten erzeugen oder vernichten. Schlüssel verwaltet ein Mensch im Dashboard.

Bewusst nicht verfügbar

FähigkeitEndpunkteGrund
API-Schlüssel erstellen, rotieren, widerrufen oder löschenPOST /keys, DELETE /keys/:idBewusst ausgeschlossen: Ein Agent darf keine Zugangsdaten erzeugen oder vernichten. Schlüssel verwaltet ein Mensch im Dashboard.
Einen Checkout starten oder ein Abonnement kündigenPOST /billing/checkout, POST /billing/cancelÄnderungen an der Abrechnung sind bewusst nur in einer Sitzung möglich und erfordern den Kontoinhaber im Dashboard. Der Abrechnungsstatus ist mit get_account lesbar.
Cloudflare-DNS per Klick (OAuth)GET /api/dns/cloudflare/connectErfordert eine interaktive Browsersitzung und die OAuth-Zustimmung bei Cloudflare. Nutzen Sie stattdessen die Einträge aus get_domain, die Hosts aus get_dns_provider oder get_domain_connect_link.
Registrieren, Anmelden, Abmelden, Verknüpfung mit Google-Konto/api/auth/*Authentifizierung im Browser durch Menschen; der MCP-Server authentifiziert sich mit einem API-Schlüssel.
Kontaktformular für den SupportPOST /api/contactÖffentliches Formular der Marketing-Website für Menschen, keine Workspace-Operation.

Maschinenlesbarer Katalog: /docs/mcp/tools.json (Schemas, Annotationen, Endpunktzuordnung, Ausnahmen). Markdown-Version dieser Seite: /docs/mcp.md. Mit installierter CLI gibt sendhq commands --format json denselben Katalog aus.