MCP

Tool-Referenz

Jedes Tool, das der PostNext-MCP-Server bereitstellt, mit seinen Inputs, der Rückgabe-Struktur und einem kopierfertigen Beispiel.

Authentifizierung

Jede Anfrage an https://mcp.postnext.io/api benötigt einen Authorization-Header mit einem Bearer-Token. Du hast zwei Wege, eines zu erhalten.

OAuth (empfohlen für KI-Clients)

KI-Clients führen beim ersten Verbinden Dynamic Client Registration durch und leiten den Nutzer durch einen OAuth-Zustimmungsbildschirm. Die Seite /mcp/connect erledigt das automatisch. Dein Client erhält ein 30-Tage-Access-Token.

API-Schlüssel

Für Skripte und CI generierst du einen persönlichen API-Schlüssel in der PostNext-App unter Account → API-Schlüssel. Der Schlüssel beginnt mit apikey_ und wird wie jeder Bearer-Token präsentiert.

Endpoint

Alle Tool-Aufrufe gehen an einen einzigen JSON-RPC-2.0-Endpoint per HTTPS POST.

POST https://mcp.postnext.io/api

Tools

list_scheduled_posts

Listet deine geplanten Beiträge auf (zur Veröffentlichung vorgemerkt, aber noch nicht gesendet).

Argumente

limitnumber ·optional · default 20
Maximale Anzahl zurückgegebener Ergebnisse (1-100, Standard 20).
fromstring (ISO 8601) ·optional
ISO-Zeitstempel; nur Beiträge zurückgeben, die zu oder nach diesem Zeitpunkt geplant sind.

Rückgabewert

Ein Objekt mit posts: [{id, platform, content, scheduledAt, status}]. Bis zu limit Einträge.

Beispiel

curl -X POST https://mcp.postnext.io/api \
  -H "Authorization: Bearer apikey_xxx" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/call","id":1,
       "params":{"name":"list_scheduled_posts",
                 "arguments":{"limit":5}}}'

list_drafts

Listet deine Entwürfe auf (noch nicht geplant).

Argumente

limitnumber ·optional · default 20
Maximale Anzahl zurückgegebener Ergebnisse (1-100, Standard 20).

Rückgabewert

Ein Objekt mit drafts: [{id, platform, content, updatedAt}]. Bis zu limit Einträge.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":2,
 "params":{"name":"list_drafts","arguments":{"limit":10}}}

list_connected_accounts

Listet die mit deinem Team verbundenen Social-Accounts auf.

Argumente

Keine Argumente.

Rückgabewert

Ein Objekt mit accounts: [{platform, handle, connected, lastSyncAt}].

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":3,
 "params":{"name":"list_connected_accounts","arguments":{}}}

get_account_healthBezahlpaket

Ruft eine Gesundheitszusammenfassung über alle verbundenen Plattformen ab.

Argumente

platformenum ·optional
Social-Plattform: twitter, instagram, linkedin, threads oder tiktok.
windowDays7 | 30 | 90 ·optional · default 30
Rückblickzeitraum in Tagen: 7, 30 oder 90 (Standard 30).

Rückgabewert

Ein Objekt mit windowDays, postsScheduled, postsPublished, postsFailed, einer byPlatform-Aufschlüsselung und topErrors[].

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":4,
 "params":{"name":"get_account_health",
           "arguments":{"windowDays":30}}}

create_post_draft

Erstellt einen neuen Entwurf. Entwürfe werden nicht automatisch veröffentlicht.

Argumente

platformenum ·erforderlich
Social-Plattform: twitter, instagram, linkedin, threads oder tiktok.
contentstring ·erforderlich
Beitragsinhalt (1-2200 Zeichen).
mediaUrlsarray<string> ·optional
Bis zu 10 Bild- oder Video-URLs.
clientRequestIdstring ·optional
Optionaler Idempotenzschlüssel. Derselbe Schlüssel innerhalb von 5 Minuten gibt das zwischengespeicherte Ergebnis zurück.

Rückgabewert

Ein Objekt mit dem neuen Entwurf: {id, platform, content, status: "DRAFT", createdAt}.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":5,
 "params":{"name":"create_post_draft",
           "arguments":{"platform":"twitter",
                        "content":"Hello from MCP"}}}

update_post_draft

Aktualisiert einen bestehenden Entwurf. Mindestens eines von content oder mediaUrls muss angegeben werden.

Argumente

postIdstring ·erforderlich
PostNext-Post-ID aus einem Listenaufruf.
contentstring ·optional
Beitragsinhalt (1-2200 Zeichen).
mediaUrlsarray<string> ·optional
Bis zu 10 Bild- oder Video-URLs.
clientRequestIdstring ·optional
Optionaler Idempotenzschlüssel. Derselbe Schlüssel innerhalb von 5 Minuten gibt das zwischengespeicherte Ergebnis zurück.

Rückgabewert

Ein Objekt mit dem aktualisierten Entwurf: {id, platform, content, mediaUrls, status, updatedAt}.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":6,
 "params":{"name":"update_post_draft",
           "arguments":{"postId":"",
                        "content":"Updated copy"}}}

connect_channel

Generiert eine Einmal-URL, die der Nutzer öffnen kann, um eine neue Plattformverbindung zu autorisieren.

Argumente

platformenum ·erforderlich
Social-Plattform: twitter, instagram, linkedin, threads oder tiktok.

Rückgabewert

Ein Objekt mit authUrl (einmaliger Link, den der Nutzer zur Autorisierung öffnet), expiresAt und platform.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":7,
 "params":{"name":"connect_channel",
           "arguments":{"platform":"linkedin"}}}

schedule_post

Verschiebt einen Entwurf (Status DRAFT) zu einem zukünftigen Zeitpunkt in die BullMQ-Veröffentlichungs-Queue. Idempotent innerhalb von ±60s Drift; lehnt Re-Scheduling-Versuche zu anderer Zeit ohne explizites Cancel ab.

Argumente

postIdstring ·erforderlich
PostNext-Post-ID aus einem Listenaufruf.
scheduledAtstring (ISO 8601) ·erforderlich
ISO-8601-Zeitstempel; darf nicht mehr als 5 Minuten in der Vergangenheit liegen.

Rückgabewert

Ein Objekt mit postId, scheduledAt (ISO), status: SCHEDULED.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":8,
 "params":{"name":"schedule_post",
           "arguments":{"postId":"",
                        "scheduledAt":"2026-05-10T09:00:00Z"}}}

cancel_scheduled_post

Storniert einen geplanten Beitrag und entfernt ihn aus der Queue. Der zugrundeliegende Entwurf bleibt erhalten.

Argumente

postIdstring ·erforderlich
PostNext-Post-ID aus einem Listenaufruf.

Rückgabewert

Ein Objekt mit postId und status: CANCELLED.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":9,
 "params":{"name":"cancel_scheduled_post",
           "arguments":{"postId":""}}}

delete_draft

Löscht einen Entwurf dauerhaft. Lehnt Nicht-DRAFT-Beiträge ab (für SCHEDULED nutze cancel_scheduled_post).

Argumente

postIdstring ·erforderlich
PostNext-Post-ID aus einem Listenaufruf.

Rückgabewert

Ein Objekt mit postId und deleted: true.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":10,
 "params":{"name":"delete_draft",
           "arguments":{"postId":""}}}

get_post

Liefert die vollständige PostGroup für eine postId mit Provider-Inhalten je Plattform + Status + Zeitstempeln.

Argumente

postIdstring ·erforderlich
PostNext-Post-ID aus einem Listenaufruf.

Rückgabewert

Ein Objekt mit postId, status, scheduledAt, createdAt, updatedAt und providers (Map: Plattform → Inhalt).

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":11,
 "params":{"name":"get_post",
           "arguments":{"postId":""}}}

search_posts

Substring-Suche (case-insensitive) über Beitragsinhalte des aktiven Teams. Filter: status, platform, limit (1-100, Standard 20).

Argumente

querystring ·erforderlich
Substring zum Suchen (3-200 Zeichen; Regex-Metazeichen werden escaped).
statusenum ·optional
Optional: DRAFT | SCHEDULED | PUBLISHED | FAILED | CANCELLED.
platformenum ·optional
Social-Plattform: twitter, instagram, linkedin, threads oder tiktok.
limitnumber ·optional · default 20
Maximale Anzahl zurückgegebener Ergebnisse (1-100, Standard 20).

Rückgabewert

Ein Objekt mit posts: [{postId, status, platforms, snippet, scheduledAt, updatedAt}]. Snippet enthält den passenden Kontext mit Auslassungspunkten beidseitig.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":12,
 "params":{"name":"search_posts",
           "arguments":{"query":"launch","limit":10}}}

list_teams

Gibt die Teams zurück, deren Eigentümer oder Admin der angemeldete Nutzer ist, mit Markierung des aktiven Teams.

Argumente

Keine Argumente.

Rückgabewert

Ein Objekt mit currentTeamId und teams: [{teamId, teamName, isCurrent}].

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":13,
 "params":{"name":"list_teams","arguments":{}}}

set_current_team

Wechselt das aktive Team für diesen Bearer-Token. Der Nutzer muss Mitglied sein. Persistent auf dem OAuth-Token-Dokument; In-Session-Mutation macht es sofort für nachfolgende Tools im selben Gespräch wirksam.

Argumente

teamIdstring ·erforderlich
Ziel-teamId aus list_teams. Mitgliedschaft wird serverseitig erneut validiert.

Rückgabewert

Ein Objekt mit teamId, teamName, persisted (true bei OAuth, false bei API-Key) und optionalem note.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":14,
 "params":{"name":"set_current_team",
           "arguments":{"teamId":"team_xxxxx"}}}

get_plan_limits

Liest den aktuellen Subscription-Tier des Nutzers und die Quotas pro Tier (Kanäle, Speicher, KI-Credits, Posten). Auf jedem Plan verfügbar. Nützlich vor mutierenden Tools, um vorherzusagen, ob der Aufruf blockiert wird.

Argumente

Keine Argumente.

Rückgabewert

Ein Objekt mit tier, tierDisplayName, isPaid, isTrial, upgradeUrl, limits (channels/storage/aiCalls/posts jeweils als {limit, current, exceeded} oder {limit, allowed}) und creditsAvailable ({total, subscriptionRemaining, purchasedBalance} oder null).

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":15,
 "params":{"name":"get_plan_limits","arguments":{}}}

get_post_metrics

Holt Engagement-Metriken für einen veröffentlichten Beitrag über alle Plattformen, auf denen er erschienen ist. Twitter und Instagram liefern populierte Metriken (Likes, Retweets/Shares, Kommentare/Antworten, Impressions); LinkedIn, Threads und TikTok liefern nur Veröffentlichungsstatus und URL (Engagement-Erfassung folgt in einem späteren Release). Eine normalisierte totals-Zusammenfassung addiert Likes/Kommentare/Shares/Impressions über alle Plattformen, die Werte gemeldet haben.

Argumente

postId PostNext-Post-ID aus einem Listenaufruf.

Rückgabewert

Ein Objekt mit postId, status, providers: [{platform, publishedPostId, publishedUrl, publishedAt, status, metrics}] und totals: {likes, comments, shares, impressions}. metrics ist ein Objekt mit numerischen Zählern pro Plattform oder null, wenn die Plattform noch keine Engagement-Daten erfasst.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":16,
 "params":{"name":"get_post_metrics",
           "arguments":{"postId":""}}}

get_publish_status

Diagnostiziert einen geplanten Beitrag: Queue-Status, Erfolg/Fehler pro Plattform, Verarbeitungszeit und Worker-Job-ID. Gibt isScheduled=false zurück für Beiträge, die als Entwurf existieren, aber nicht in die Veröffentlichungsqueue verschoben wurden, mit einem Hinweis auf schedule_post.

Argumente

postId PostNext-Post-ID aus einem Listenaufruf.

Rückgabewert

Ein Objekt mit postId, isScheduled, status, scheduledAt, publishedAt, platforms, processingTimeMs, jobId, topLevelError und results: [{platform, success, publishedPostId, publishedAt, error}]. Enthält hint, wenn isScheduled false ist.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":17,
 "params":{"name":"get_publish_status",
           "arguments":{"postId":""}}}

update_brand_profile

Aktualisiert das aktive Markenprofil des Nutzers. Erlaubte Felder: bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize. Alles andere wird stillschweigend verworfen. "Aktiv" wird zuerst als Team-Default aufgelöst, dann das erste eigene aktive Profil des Nutzers.

Argumente

brandVoice Array von Markenstimme-Deskriptoren (z. B. ["professionell", "präzise"]).

Other patchable fields: bio, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize.

Rückgabewert

Ein Objekt mit profileId, name, updated: [Feldnamen, die gepatcht wurden] und den aktuellen Werten von bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize nach dem Patch.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":18,
 "params":{"name":"update_brand_profile",
           "arguments":{"brandVoice":["professional","concise"]}}}

get_best_time_to_post Bezahlter Plan

Empfiehlt die besten N (Wochentag, Stunde) Slots für den nächsten Beitrag auf einer Plattform, sortiert nach Engagement pro Beitrag der letzten 90 Tage. Twitter und Instagram liefern engagement-gewichtete Scores; LinkedIn, Threads, TikTok sortieren nur nach Beitragshäufigkeit. Zeiten in der angegebenen IANA-Zeitzone (Standard UTC). Bezahlplan erforderlich.

Argumente

platform Social-Plattform: twitter, instagram, linkedin, threads oder tiktok.

timezone IANA-Zeitzonenname (z. B. Europe/Berlin, America/New_York). Standard UTC.

topN Anzahl der Slot-Empfehlungen (1-24, Standard 5).

Rückgabewert

Ein Objekt mit platform, timezone, sampleWindowDays, sampleSize, metricsAvailable und recommendations: [{dayOfWeek (1-7, Mo=1), dayLabel, hour (0-23), score, basedOn: {posts, avgEngagement}}]. Enthält hint für Cold-Start- oder Metriken-fehlen-Fälle.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":19,
 "params":{"name":"get_best_time_to_post",
           "arguments":{"platform":"twitter","timezone":"Europe/Berlin","topN":5}}}

search_tools

Durchsucht den MCP-Tool-Katalog nach Freitext, Kategorie oder Absicht. Liefert Kategorien, requiresScope, einzeilige Beschreibungen und passende Use-Case-Tags. Auf jedem Plan verfügbar (Discovery-Oberfläche).

Argumente

All optional. Call with no arguments to list every available tool.

query Freitextsuche über Tool-Namen, Beschreibungen und Use-Case-Tags.

category Auf eine Kategorie filtern: posts, accounts, analytics, brand, teams, discovery, other.

Rückgabewert

Ein Objekt mit totalTools, matchCount, categories: [string[]] und tools: [{name, category, requiresScope, description, useCases, matchedOn: [name|category|description|use_case]}]. Enthält hint bei keinem Treffer oder keinem Filter.

Beispiel

{"jsonrpc":"2.0","method":"tools/call","id":20,
 "params":{"name":"search_tools",
           "arguments":{"query":"why did my post fail"}}}

MCP-Ressourcen

Ressourcen sind nur lesbarer Kontext, den der Client per MCP-resources/read-Methode abrufen kann. Claude lädt sie zu Beginn jedes Gesprächs, sodass Account-/Team-/Brand-Kontext vorhanden ist, ohne dass du jedes Mal neu erklären musst.

postnext://account/summary

Konto-E-Mail und Handle (damit Claude bestätigen kann, mit welchem Konto es arbeitet), Plan, KI-Credits genutzt / Limit, Entwurfsanzahl, geplante Beiträge, verbundene Kanäle. Zählungen jeweils auf 100 begrenzt für schnelles Laden.

postnext://channels/connected

Gleiche Form wie das Ergebnis von list_connected_accounts; als Ressource exponiert, sodass Claude es zu Gesprächsbeginn einmalig lädt (kein Tool-Aufruf-Roundtrip).

postnext://brand-profiles/active

Das aktive Markenprofil des Nutzers (Team-Standard, Fallback auf erstes eigenes Profil). Liefert nur LLM-relevante Felder: bio, expertiseAreas, personalityTraits, brandVoice, mainThemes, audienceSize, preferredHashtags.

postnext://teams/current

Aktuelle Team-Metadaten (teamId, teamName) plus totalTeamsAvailable. Kombiniere mit list_teams + set_current_team zum Wechseln.

Benannte Workflows

Slash-Menü-Shortcuts, die mehrere Tools verketten. Wähle einen aus und lass deinen KI-Assistenten mehrere Schritte durchlaufen, mit Bestätigung vor jeder Änderung.

/weekly-plan

Liest Markenprofil, verbundene Kanäle und Queue und schlägt 5-10 Entwürfe verteilt von Montag bis Freitag vor.

/draft-thread

Schreibt einen Twitter- oder Threads-Thread aus 5-10 Beiträgen zu einem Thema oder einer URL, in deiner Markenstimme.

/audit-queue

Prüft die geplanten Beiträge der nächsten 7 Tage und meldet Duplikate, Plattform-Überlastung und Lücken.

/channel-sweep

Vergleicht verbundene Kanäle mit der unterstützten Liste und schlägt vor, welche zu verbinden oder aufzufrischen sind.

Discovery- und OAuth-Endpoints

Standardkonforme Metadaten, damit jeder MCP-Client sich selbst konfigurieren kann.

  • GET /.well-known/oauth-protected-resource/api — RFC 9728
  • GET /.well-known/oauth-authorization-server — RFC 8414
  • GET /oauth/.well-known/openid-configuration — OIDC
  • POST /oauth/reg — Dynamic Client Registration (RFC 7591)
  • GET /oauth/auth — Authorize (PKCE-S256 required)
  • POST /oauth/token — Token exchange

Open Source

Sofort einsetzbare Rezepte und eine entwicklerfreundliche Referenz finden Sie in unserem öffentlichen Docs-Repo. MIT-lizenziert; Pull Requests willkommen. github.com/postnextio/postnext-mcp

Steuere deine Social-Kanäle aus jedem KI-Assistenten

Plane, entwirf, terminiere und prüfe Beiträge auf 6 Plattformen im Gespräch mit Claude, ChatGPT oder Cursor. Eine sichere Verbindung, jedes PostNext-Feature.

×