Dispatch MCP Server v0.1

Model Context Protocol Server für die Dispatch API. Ermöglicht Claude und anderen MCP-Clients den direkten Zugriff auf alle API-Funktionen — ohne curl, ohne Code.

Übersicht

Der MCP Server ist ein schlanker HTTP-Proxy: Er nimmt MCP-Tool-Calls entgegen, leitet sie an die Dispatch API weiter und gibt die Antwort zurück. Er läuft auf demselben Server wie die API und kommuniziert intern über 127.0.0.1:3000.

Transport: Streamable HTTP (aktueller MCP-Standard, ersetzt SSE). Stateless — jede Anfrage ist unabhängig, kein Session-State.

Auth: Der MCP Server leitet den Authorization-Header direkt an die API weiter. Auth-Prüfung, Rate Limiting und Domain Enforcement passieren ausschließlich in der API.

Endpoint: https://mcp.dispatch.knerpi.de/mcp

Konfiguration

Den API Key zunächst über POST /keys beantragen (siehe API Docs). Nach Admin-Freigabe wird der Key per Mail zugestellt.

Claude Code

claude mcp add --transport http dispatch https://mcp.dispatch.knerpi.de/mcp \
  --header "Authorization: Bearer dsp_..." \
  --scope user

Mit --scope project wird der Server in .mcp.json im Projektverzeichnis gespeichert und ist für alle Teammitglieder verfügbar. In diesem Fall API Key als Umgebungsvariable referenzieren:

// .mcp.json
{
  "mcpServers": {
    "dispatch": {
      "type": "http",
      "url": "https://mcp.dispatch.knerpi.de/mcp",
      "headers": { "Authorization": "Bearer ${DISPATCH_API_KEY}" }
    }
  }
}

Claude Desktop

Unter Settings → Developer → Edit Config:

{
  "mcpServers": {
    "dispatch": {
      "type": "streamable-http",
      "url": "https://mcp.dispatch.knerpi.de/mcp",
      "headers": {
        "Authorization": "Bearer dsp_..."
      }
    }
  }
}
Der MCP Server validiert den Key nicht selbst — er leitet ihn an die API weiter. Ein ungültiger Key führt zu einem 401-Fehler bei Tool-Aufrufen.

Alle Tools

ToolMethodeEndpointBeschreibung
send_emailPOST/emailsE-Mail senden
list_templatesGET/templatesTemplates auflisten
upload_templatePOST/templatesTemplate hochladen
delete_templateDELETE/templates/:nameTemplate löschen
register_domainPOST/domainsSending Domain registrieren
list_domainsGET/domainsDomains auflisten
get_domainGET/domains/:idDomain-Details + DNS-Records
delete_domainDELETE/domains/:idDomain löschen
verify_domainPOST/domains/:id/verifyDNS-Verifikation auslösen
health_checkGET/healthServer-Status prüfen

send_email

Sendet eine E-Mail. Entweder html, text oder react_template muss angegeben werden.

ParameterTypPflichtBeschreibung
fromstringjaAbsender (z.B. "noreply@example.com" oder "Name <noreply@example.com>")
tostring | string[]jaEmpfänger (ein oder mehrere)
subjectstringjaBetreff
htmlstringja*HTML-Body (*mind. eines von html / text / react_template)
textstringneinPlaintext-Fallback
react_templatestringneinName eines Server-Templates (statt html)
react_propsobjectneinProps für das React-Template
reply_tostringneinReply-To-Adresse
ccstring | string[]neinCC-Empfänger
bccstring | string[]neinBCC-Empfänger
headersobjectneinZusätzliche Mail-Header als Key-Value-Objekt

Ohne verifizierte Sending Domains darf nur dispatch.knerpi.de als Absender-Domain verwendet werden. Siehe register_domain.

list_templates

Listet alle auf dem Server verfügbaren React-Email-Templates auf. Keine Parameter.

Gibt ein Objekt mit templates-Array zurück, z.B. { "templates": ["welcome", "bestellung"] }.

upload_template

Lädt ein React-Email-Template (JSX oder TSX) auf den Server. Überschreibt ein bestehendes Template gleichen Namens. Das Template ist sofort nutzbar — kein Neustart erforderlich.

ParameterTypPflichtBeschreibung
namestringjaTemplate-Name. Nur a–z A–Z 0–9 - _ erlaubt.
codestringjaQuellcode des Templates (JSX/TSX)
extstringneinjsx (Standard) oder tsx

delete_template

Löscht ein Template vom Server.

ParameterTypPflichtBeschreibung
namestringjaName des Templates

register_domain

Registriert eine neue Sending Domain. Generiert ein DKIM-Schlüsselpaar und gibt die erforderlichen DNS-Records zurück (SPF, DKIM, DMARC-Empfehlung). Max. 10 Domains pro Account.

Nach der Registrierung müssen SPF- und DKIM-DNS-Records innerhalb von 72 Stunden gesetzt werden. Ein automatischer Verifikations-Loop prüft alle 15 Minuten. Domains, die nach Ablauf der Deadline nicht verifiziert sind, werden automatisch gelöscht.

ParameterTypPflichtBeschreibung
namestringjaDomain-Name (z.B. example.com). Keine öffentlichen Domains (gmail.com etc.).

list_domains

Listet alle registrierten Sending Domains des eigenen Accounts auf. Admins sehen alle Domains aller Accounts. Keine Parameter.

get_domain

Gibt Details einer Domain zurück, inklusive der DNS-Records, die gesetzt werden müssen (SPF, DKIM, DMARC).

ParameterTypPflichtBeschreibung
idstringjaDomain ID (UUID)

delete_domain

Löscht eine registrierte Domain. Mails können danach nicht mehr über diese Domain versendet werden.

ParameterTypPflichtBeschreibung
idstringjaDomain ID (UUID)

verify_domain

Löst eine sofortige DNS-Verifikation aus — prüft ob SPF und DKIM korrekt gesetzt sind. Der automatische Check läuft alle 15 Minuten; dieses Tool ermöglicht eine sofortige Prüfung.

Wenn die Verifikations-Deadline abgelaufen ist, wird die Domain automatisch gelöscht und muss neu registriert werden.

ParameterTypPflichtBeschreibung
idstringjaDomain ID (UUID)

health_check

Prüft den Status der Dispatch API. Keine Parameter, kein Auth erforderlich.

Gibt { "status": "ok" } zurück wenn die API erreichbar ist.

Fehlerbehandlung

API-Fehler werden als MCP-Fehlermeldung zurückgegeben. Der Originaltext aus der API wird durchgeleitet:

HTTP StatusMCP-Fehlermeldung
401Invalid API key
403Domain not allowed (Originaltext aus der API)
422Validierungsfehler (Originaltext aus der API)
429Rate limit exceeded
500Internal server error