Einführung
Der Streampost-MCP-Server ist ein Streamable-HTTP-MCP-Server. Du erstellst im Dashboard unter MCP einen API-Key und verbindest damit deinen KI-Client. Der Agent erhält dann Tools, um Posts zu lesen, zu erstellen, zu planen und sofort zu veröffentlichen.
Verbindung & Authentifizierung
Es gibt zwei gleichwertige Wege. Der einfachste: der Key im URL-Pfad unter https://mcp.streampost.de/mcp/sp_live_DEIN_KEY. So kommt jeder Client mit der blanken URL aus — auch ChatGPT und die Claude-Connectors, die keine eigenen Header setzen können. Alternativ per Bearer-API-Key im Authorization-Header gegen https://mcp.streampost.de/mcp.
Keys werden gehasht gespeichert und sind nach dem Erstellen nur einmal sichtbar. Erstelle einen Key im Dashboard unter MCP → Neuen API Key erstellen. Da die URL den Key enthält, ist sie wie ein Passwort zu behandeln.
| Parameter | Typ | Beschreibung |
|---|---|---|
| Authorization | header | Bearer sp_live_… — nur beim Header-Weg nötig |
| Content-Type* | header | application/json |
Health-Check (ohne Auth):
curl https://mcp.streampost.de/health
# {"status":"ok","service":"streampost-mcp"}Client einrichten
ChatGPT und Claude (Web & Desktop) - unter Einstellungen → Connectors einen eigenen Connector anlegen und die persönliche URL einfügen. Mehr ist nicht nötig.
Claude Code, Cursor, VS Code - in der MCP-Konfiguration des Clients. type ist Pflicht, sonst wird der Eintrag als lokaler Server gelesen und übersprungen:
{
"mcpServers": {
"streampost": {
"type": "http",
"url": "https://mcp.streampost.de/mcp/sp_live_DEIN_KEY"
}
}
}Gemini CLI - erwartet httpUrl statt url:
{
"mcpServers": {
"streampost": {
"httpUrl": "https://mcp.streampost.de/mcp/sp_live_DEIN_KEY"
}
}
}Plattformen
create_post und publish_now unterstützen diese Plattform-Werte:
Hinweis: Geplante/sofortige Posts auf pinterest und google_business benötigen Board bzw. Standort und sind nur im Dashboard möglich.
Tools
Alle Tools werden als JSON-RPC-tools/call aufgerufen. * markiert Pflichtfelder. Antworten enthalten einen JSON-Text im content-Feld (hier zur Lesbarkeit entpackt).
list_scheduled_posts
lesendListet geplante und Entwurfs-Posts (neueste zuerst), inkl. der Ziel-Plattformen.
| Parameter | Typ | Beschreibung |
|---|---|---|
| limit | number (1–50) | Maximale Anzahl Posts. Standard: 10. |
Antwort (Beispiel)
{
"id": "a5c008db-…",
"master_content": "New Summer Sale …",
"scheduled_at": null,
"status": "draft",
"platforms": ["instagram", "tiktok"]
}get_analytics_summary
lesendAggregierte Analytics der letzten 30 Tage pro Plattform.
Keine Parameter.
Antwort (Beispiel)
{
"platform": "instagram",
"likes": 53,
"comments": 44,
"shares": 0,
"reach": 0
}create_post
schreibendErstellt einen Post (Text, Bild, Video oder Carousel). Ziel sind entweder ALLE Accounts der gewählten platforms ODER gezielt einzelne account_ids. Ohne scheduled_at entsteht ein Entwurf, mit scheduled_at ein geplanter Post, mit use_queue der nächste freie Slot.
| Parameter | Typ | Beschreibung |
|---|---|---|
| content* | string | Standard-Text (max. 5000 Zeichen). Pro Plattform überschreibbar via per_platform. |
| platforms | string[] | Plattformen - postet an ALLE aktiven Accounts dieser Plattformen. Entweder platforms ODER account_ids angeben. |
| account_ids | uuid[] | Gezielte Accounts (aus list_social_accounts). |
| media_urls | url[] | Öffentliche http(s)-URLs. 1 Bild/Video, mehrere Bilder = Carousel. |
| cover_url | url | Cover-/Thumbnail-Bild (nur für Video-Posts). |
| per_platform | {platform, content}[] | Eigener Text je Plattform (überschreibt content). |
| scheduled_at | ISO 8601 | Geplanter Veröffentlichungszeitpunkt (UTC). Weglassen = Entwurf. |
| use_queue | boolean | Plant automatisch in den nächsten freien Slot (4h nach dem letzten geplanten Post). |
Antwort (Beispiel)
{
"id": "1136e63b-…",
"status": "scheduled",
"scheduled_at": "2026-06-20T10:00:00Z",
"post_type": "carousel",
"media_count": 2,
"has_cover": false,
"accounts": [
{ "id": "b571e04c-…", "platform": "tiktok", "name": "Fivelle", "custom_caption": false },
{ "id": "d87bfd8f-…", "platform": "instagram", "name": "Streampost", "custom_caption": true }
]
}publish_now
schreibendVeröffentlicht einen Post SOFORT (statt nur zu planen). Gleiche Parameter wie create_post (ohne scheduled_at/use_queue). Pinterest & Google Business sind hier nicht möglich (benötigen Board/Standort).
| Parameter | Typ | Beschreibung |
|---|---|---|
| content* | string | Standard-Text (max. 5000 Zeichen). |
| platforms | string[] | Plattformen (alle aktiven Accounts) - oder account_ids. |
| account_ids | uuid[] | Gezielte Accounts. |
| media_urls | url[] | Bild/Video/Carousel per URL. |
| cover_url | url | Video-Thumbnail. |
| per_platform | {platform, content}[] | Text je Plattform. |
Antwort (Beispiel)
{
"id": "9f2a…",
"status": "scheduled",
"post_type": "image",
"media_count": 1,
"publishing": "gestartet",
"hint": "Ergebnis je Plattform mit get_post_status abrufen."
}get_post_status
lesendZeigt den Veröffentlichungsstatus eines Posts je Plattform/Account inkl. Fehlergrund und öffentlicher Post-ID.
| Parameter | Typ | Beschreibung |
|---|---|---|
| post_id* | uuid | Die id aus create_post / publish_now. |
Antwort (Beispiel)
{
"id": "1136e63b-…",
"status": "published",
"post_type": "image",
"variants": [
{
"platform": "tiktok",
"account": "Fivelle",
"status": "published",
"error": null,
"published_at": "2026-06-18T10:01:12Z",
"public_id": "7380…"
}
]
}Raw HTTP (JSON-RPC)
Ohne MCP-Client kannst du die Tools direkt per HTTP aufrufen - z. B. einen Entwurf für alle TikTok-Accounts:
curl -X POST https://mcp.streampost.de/mcp \
-H "Authorization: Bearer sp_live_DEIN_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_post",
"arguments": {
"content": "Hallo von der API!",
"platforms": ["tiktok"],
"media_urls": ["https://example.com/bild.jpg"]
}
}
}'Fehler
| Parameter | Typ | Beschreibung |
|---|---|---|
| 401 Unauthorized | http | API-Key fehlt, ist ungültig oder widerrufen. |
| Unauthorized | tool error | Tool-Aufruf ohne gültigen Bearer-Key. |
| Keine aktiven Ziel-Accounts | tool error | platforms/account_ids treffen keinen aktiven Account. |
| Text für <Plattform> zu lang | tool error | Inhalt überschreitet das Zeichenlimit der Plattform. |