Für KI-Agenten
Verbinde deinen Agenten in einem Schritt. Er betreibt deine Social-Kanäle.
Markaestro ist dafür gebaut, von Software bedient zu werden. Ein MCP-Client wie Claude Code meldet sich über den Browser an und erhält einen Schlüssel, der an eine Marke gebunden ist; jeder andere Agent bekommt denselben Schlüssel aus den Einstellungen. In beiden Fällen kann der Agent herausfinden, auf welche Konten er posten darf, Medien hochladen, Beiträge entwerfen und planen, sie veröffentlichen und melden, was tatsächlich rausging, auf Facebook, Instagram, TikTok, LinkedIn, Threads und Pinterest.
Kein SDK zu installieren, keine Plattform-Zugangsdaten zu pflegen. Dein Team verbindet die Konten einmal im Dashboard; ab dann spricht der Agent mit einer einzigen Bearer-Token-API.
Für Autonomie entwickelt, bewusst begrenzt
Warum ein API-Schlüssel die gesamte Integration ist
Das Schwierige daran, einen Agenten Social Media anfassen zu lassen, ist nicht das HTTP. Es geht darum sicherzustellen, dass ein verwirrtes Modell nicht auf der falschen Marke postet, bei einem Wiederholungsversuch doppelt postet oder etwas veröffentlicht, das niemand gelesen hat. Diese Garantien liegen in der API-Oberfläche selbst, nicht in deinem Prompt.
MCP-Clients
Anmeldung direkt aus dem Client. Nichts zum Einfügen.
Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes und jeder andere Client, der das Model Context Protocol spricht, kann sich ohne konfigurierte Zugangsdaten mit dem gehosteten MCP-Server von Markaestro verbinden. Der erste Tool-Aufruf öffnet deinen Browser: anmelden, Arbeitsbereich und Marke wählen, für die der Agent handeln darf, Berechtigungen prüfen und auf Erlauben klicken. Der Client erhält einen an diese Marke gebundenen Schlüssel und erneuert ihn selbstständig.
Das ist Standard-OAuth 2.1 mit PKCE und dynamischer Client-Registrierung, derselbe Mechanismus wie bei anderen gehosteten MCP-Servern, und funktioniert daher ohne Markaestro-spezifisches Plugin. Der Server läuft unter https://markaestro.com/api/public/v1/mcp und stellt einunddreißig Tools über die öffentliche API bereit: Marken- und Ziel-Erkennung, Medien-Upload, Entwürfe und geplante Beiträge, Veröffentlichung mit Job-Run-Abfrage, Massenoperationen, Webhooks und die Regeln je Kanal.
Agenten verbinden
Wähle deinen Agenten. Drei Schritte, dann kann er posten.
Jeder Client unten erreicht denselben gehosteten MCP-Server. Die meisten melden sich über den Browser an: Der erste Tool-Aufruf öffnet eine Zustimmungsseite, auf der du den Workspace und die Marke wählst, für die der Agent handeln darf, und der Client erhält einen Schlüssel, der an diese Marke gebunden ist. Clients ohne Browser verwenden stattdessen einen Workspace-API-Schlüssel. Gleicher Server, gleiche Berechtigungen, gleiche Liste in den Einstellungen.
Claude Code
Das Plugin installiert Skill und gehosteten Server zusammen. Nichts zu konfigurieren, nichts einzufügen.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- Claude Code ist installiert und bei deinem Anthropic-Konto angemeldet.
Anmelden
- Frag Claude etwas zu Markaestro, oder führe /mcp aus und wähle markaestro.
- Dein Browser öffnet die Zustimmungsseite. Wähle Workspace und Marke, prüfe die Berechtigungen, klicke auf Erlauben.
- Um später die Marke zu wechseln, führe /mcp erneut aus, melde dich ab und mit der anderen Marke wieder an.
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- Führe die beiden Plugin-Befehle in einem Terminal aus, oder füge mit dem dritten Befehl nur den Server hinzu.
# The plugin bundles the skill and the hosted server.
claude plugin marketplace add D3vBaba/Markaestro
claude plugin install markaestro@markaestro
# Or add just the server. No key, no header: the first call opens the browser.
claude mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcpClaude
claude.ai und Claude Desktop nehmen die Server-URL als benutzerdefinierten Connector und melden sich über dieselbe Zustimmungsseite an.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- Benutzerdefinierte Connectors gibt es in den bezahlten Claude-Plänen. Bei Team und Enterprise muss ein Inhaber sie eventuell freischalten.
Anmelden
- Klicke neben Markaestro auf Verbinden. Die Zustimmungsseite öffnet sich in einem neuen Tab.
- Wähle Workspace und Marke, prüfe die Berechtigungen, klicke auf Erlauben. Der Tab schließt sich und der Connector ist verbunden.
- Aktiviere Markaestro im Chat über das Tools-Menü, wenn der Agent es nutzen soll.
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- Öffne Einstellungen, Connectors, dann Benutzerdefinierten Connector hinzufügen.
- Füge die Server-URL unten ein, lass die OAuth-Client-Felder leer und klicke auf Hinzufügen.
https://markaestro.com/api/public/v1/mcpCursor
Ein Klick fügt den Server zu Cursor hinzu. Der erste Tool-Aufruf öffnet die Browser-Anmeldung; Cursor speichert das Token im Schlüsselbund des Systems.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- Cursor mit aktiviertem MCP. Remote-MCP-Server funktionieren in jedem Cursor-Plan.
Anmelden
- Öffne Cursor Settings, Tools & MCP. Markaestro zeigt Needs login; klicke darauf.
- Dein Browser öffnet die Zustimmungsseite. Wähle Workspace und Marke, klicke auf Erlauben. Cursor übernimmt das Token und listet die Tools.
- Grok Bot in Cursor nutzt denselben Servereintrag.
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- Klicke auf Zu Cursor hinzufügen und bestätige die Installationsabfrage in Cursor.
- Oder füge das JSON in .cursor/mcp.json im Projekt (per Git mit dem Team geteilt) oder in ~/.cursor/mcp.json (nur du) ein.
// .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)
{
"mcpServers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}Für eine gemeinsame Build-Maschine oder CI ersetzt ein Workspace-API-Schlüssel in den Headern die Anmeldung.
// Without a browser: pass a workspace API key instead.
{
"mcpServers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp",
"headers": { "Authorization": "Bearer mk_live_..." }
}
}
}ChatGPT
ChatGPT verbindet sich mit Markaestro als benutzerdefinierte App im Entwicklermodus und meldet sich über die Zustimmungsseite an.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- Der Entwicklermodus braucht ChatGPT Pro, Business, Enterprise oder Edu. Pro zeigt nur Lese-Tools; Business, Enterprise und Edu zeigen alle.
- Bei Business, Enterprise und Edu muss ein Admin benutzerdefinierte Apps für den Workspace eventuell erlauben.
Anmelden
- Während ChatGPT die Tools scannt, öffnet sich die Zustimmungsseite. Wähle Workspace und Marke, klicke auf Erlauben, dann auf Erstellen.
- Klicke im Chat auf Plus, Mehr, dann Markaestro, um die Tools verfügbar zu machen.
- ChatGPT registriert sich einmal pro Verbindung bei Markaestro. Eine erneute Verbindung erzeugt eine neue Verbindung, die du separat widerrufen kannst.
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- Öffne Einstellungen, Apps & Connectors, Erweiterte Einstellungen und schalte den Entwicklermodus ein.
- Zurück in Apps & Connectors klicke auf Erstellen. Nenne die App Markaestro, füge die Server-URL ein, wähle OAuth als Authentifizierung und klicke auf Tools scannen.
https://markaestro.com/api/public/v1/mcpGrok
Grok erreicht Markaestro auf drei Wegen: als benutzerdefinierter Connector auf grok.com, aus dem Grok-Build-Terminal und als Remote-MCP-Tool in der xAI-API.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- grok.com-Connectors funktionieren in persönlichen Plänen. Grok Business und Enterprise brauchen einen Team-Admin, der den Connector bereitstellt.
- Der xAI-API-Weg läuft serverseitig und nutzt daher immer einen Workspace-API-Schlüssel.
Anmelden
- grok.com und Grok Build öffnen beim ersten Tool-Aufruf die Zustimmungsseite. Wähle Workspace und Marke, klicke auf Erlauben.
- Für die xAI-API erstelle einen Workspace-API-Schlüssel und übergib ihn im Feld authorization.
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- grok.com: Öffne grok.com/connectors, klicke auf New Connector, wähle Custom und füge die Server-URL ein. Fragt der Dialog nach einer Client-ID, nutze die Werte unten.
- Grok Build: Führe die beiden Befehle im Terminal aus. Grok Build übernimmt einen Markaestro-Eintrag auch aus der .mcp.json von Claude Code oder der mcp.json von Cursor.
- xAI-API: Füge den Tool-Block in das tools-Array einer Responses-API-Anfrage ein.
Benutzerdefinierter grok.com-Connector
Server URL: https://markaestro.com/api/public/v1/mcp
grok.com's Custom Connector asks only for a name and this URL. It registers
itself and opens the browser sign-in, no client id or secret to enter.
(If a future dialog does ask, use client id markaestro-grok-web with a blank secret.)Grok-Build-Terminal
# Grok Build (terminal). The first tool call opens the browser.
grok mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp
grok mcp doctor markaestro
# Headless: pass a workspace API key instead.
grok mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp \
--header "Authorization: Bearer ${MARKAESTRO_API_KEY}"Tool-Block für die xAI Responses API
// xAI Responses API: one entry in the request's "tools" array.
// Server-side, so it always uses a workspace API key.
{
"type": "mcp",
"server_url": "https://markaestro.com/api/public/v1/mcp",
"server_label": "markaestro",
"authorization": "Bearer mk_live_...",
"allowed_tools": ["list_products", "list_destinations", "upload_media",
"create_post", "publish_post", "get_job_run"]
}Grok Bot
Grok Bot läuft auf einem Cloud-Computer und nimmt benutzerdefinierte MCP-Server mit einem statischen Schlüssel an. Die Beta hat noch keine Browser-Anmeldung für eigene Server.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- Grok Bot ist in früher Beta in den SuperGrok-Plänen und in Cursor Pro. Enterprise-Zugang über Warteliste.
- Du hast einen Workspace-API-Schlüssel mit den Agenten-Scopes. Erstelle einen mit der Schaltfläche unten.
API-Schlüssel verwenden
- Erstelle einen Schlüssel für eine Marke mit Ablaufdatum. Speichere ihn nur in den Connector-Einstellungen des Bots, nie in einer Chat-Nachricht.
- Sobald Grok Bot eine Browser-Anmeldung für eigene Server anbietet, entferne den Header und verbinde neu. Der Anmeldeweg funktioniert auf diesem Server bereits.
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- Öffne die Connector-Einstellungen deines Bots und füge einen benutzerdefinierten MCP-Server hinzu.
- Füge die Server-URL ein und ergänze den Schlüssel als Header mit den Werten unten.
Header-Werte für den Connector-Dialog
Server URL: https://markaestro.com/api/public/v1/mcp
Header name: Authorization (or x-api-key if that is the only field)
Header value: Bearer mk_live_... (with x-api-key: just mk_live_...)OpenClaw
OpenClaw fügt Remote-MCP-Server über seine CLI hinzu und schließt die Anmeldung über einen Loopback-Port ab, also auf der Maschine, auf der dein Gateway läuft.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- OpenClaw ist installiert und das Gateway läuft.
- Ein Server ohne Browser kann die Anmeldung mit dem --code-Fallback abschließen.
Anmelden
- openclaw mcp login markaestro gibt die Anmelde-URL aus und wartet auf einem Loopback-Port.
- Öffne die URL, wähle Workspace und Marke, klicke auf Erlauben. OpenClaw speichert die Zugangsdaten außerhalb der Konfigurationsdatei.
- Führe openclaw mcp reload aus, damit laufende Agenten die Tools übernehmen.
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- Führe die drei Befehle aus, oder füge den Serverblock in ~/.openclaw/openclaw.json ein.
- Sobald der Markaestro-Skill auf ClawHub ist, fügt openclaw skills install markaestro auch die Agenten-Anweisungen hinzu.
openclaw mcp add markaestro \
--url https://markaestro.com/api/public/v1/mcp \
--transport streamable-http \
--auth oauth
openclaw mcp login markaestro # prints the sign-in URL; add --code <code> when headless
openclaw mcp reloadGleichwertiger Konfigurationseintrag
// ~/.openclaw/openclaw.json
{
"mcp": {
"servers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp",
"transport": "streamable-http",
"auth": "oauth"
}
}
}
}Ohne Browser
# Without a browser: a workspace API key from the environment.
openclaw mcp add markaestro \
--url https://markaestro.com/api/public/v1/mcp \
--transport streamable-http \
--header "Authorization: Bearer ${MARKAESTRO_API_KEY}"Hermes
Hermes Agent registriert HTTP-MCP-Server aus der config.yaml und führt die Anmeldung selbst durch; das Token liegt unter ~/.hermes/mcp-tokens.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- Hermes Agent ist installiert. Geheimnisse gehören in ~/.hermes/.env und werden in der Konfiguration als ${VAR} referenziert.
Anmelden
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- Füge den mcp_servers-Block in ~/.hermes/config.yaml ein.
- Sende in einer laufenden Sitzung /reload-mcp. Die Tools erscheinen als mcp_markaestro_<tool>.
# ~/.hermes/config.yaml
mcp_servers:
markaestro:
url: "https://markaestro.com/api/public/v1/mcp"
auth: oauthOhne Browser
# Without a browser: a workspace API key, kept in ~/.hermes/.env
mcp_servers:
markaestro:
url: "https://markaestro.com/api/public/v1/mcp"
headers:
Authorization: "Bearer ${MARKAESTRO_API_KEY}"Anderer MCP-Client
Jeder Client, der Streamable HTTP und OAuth 2.1 mit dynamischer Client-Registrierung spricht, verbindet sich allein mit der Server-URL.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- Der Client unterstützt Remote-MCP-Server über Streamable HTTP und kann für OAuth einen Browser öffnen. Falls nicht, nutze den Tab API-Schlüssel.
Anmelden
- Der erste Tool-Aufruf wird mit einer Anmeldeaufforderung beantwortet und der Client öffnet die Zustimmungsseite.
- Wähle Workspace und Marke, klicke auf Erlauben. Der Client tauscht den Code gegen einen markengebundenen Schlüssel und erneuert ihn alle 30 Tage.
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- Trage die Server-URL in der MCP-Konfiguration des Clients ein. Das JSON unten ist die übliche mcpServers-Form.
- Konfiguriere keine Client-ID und kein Secret. Der Client registriert sich beim ersten Aufruf selbst.
{
"mcpServers": {
"markaestro": {
"type": "http",
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}API-Schlüssel
Für CI-Jobs, Cron-Worker und Clients ohne Browser: Ein Workspace-API-Schlüssel im Authorization-Header erreicht denselben Server mit denselben Berechtigungen.
Bevor du beginnst
- Du bist Workspace-Inhaber oder -Admin mit bestätigter E-Mail, in einem Workspace mit aktivem Plan und mindestens einer Marke.
- Du kannst Schlüssel erstellen: Workspace-Inhaber oder -Admin mit bestätigter E-Mail.
API-Schlüssel verwenden
Prüfen
- Bitte den Agenten, list_products aufzurufen. Er sollte mit der einen freigegebenen Marke und ihren verbundenen Kanälen antworten.
- Die Verbindung erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, der letzten Nutzung und dem Anfragevolumen. Dort kannst du sie jederzeit widerrufen.
Server hinzufügen
- Erstelle einen Schlüssel für eine Marke mit nur den nötigen Scopes und einem Ablaufdatum.
- Übergib ihn als Bearer-Header an den gehosteten Server oder als MARKAESTRO_API_KEY an den lokalen stdio-Server, der auch Dateien von der Festplatte hochladen kann.
# CI, cron, or any client without a browser: pass a key instead.
claude mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp \
--header "Authorization: Bearer mk_live_..."
# Local stdio server (can also upload files from disk)
claude mcp add markaestro -e MARKAESTRO_API_KEY=mk_live_... -- npx -y @markaestro/mcp{
"mcpServers": {
"markaestro": {
"type": "http",
"url": "https://markaestro.com/api/public/v1/mcp",
"headers": { "Authorization": "Bearer mk_live_..." }
}
}
}Was passiert, wenn sich der Client verbindet
Fünf Schritte, alle vom Client und vom Browser erledigt. Du siehst nur die Zustimmungsseite.
POST /api/public/v1/mcp → 401 + WWW-AuthenticateDer Client ruft den MCP-Endpunkt ohne Zugangsdaten auf. Markaestro antwortet mit 401 und einem WWW-Authenticate-Header, der das Metadaten-Dokument der geschützten Ressource benennt. Dieser Header sagt dem Client, dass eine Anmeldung verfügbar ist.
GET /.well-known/oauth-protected-resource · /.well-known/oauth-authorization-serverDer Client liest zwei öffentliche Dokumente: welcher Autorisierungsserver den Endpunkt schützt und wo dessen Registrierungs-, Autorisierungs- und Token-Endpunkte liegen. Beide werden auf markaestro.com ausgeliefert und sind cachebar.
POST /api/public/v1/oauth/registerDer Client registriert sich mit einem Namen und seiner Callback-Adresse. Loopback-Adressen, https-Callbacks und native App-Schemata werden akzeptiert; reines http zu einem echten Host wird abgelehnt. Eine vorab geteilte Client-ID ist nicht nötig.
GET /oauth/authorize (browser)Dein Browser öffnet die Zustimmungsseite. Ein Inhaber oder Admin des Arbeitsbereichs mit bestätigter E-Mail wählt Arbeitsbereich und Marke, passt die Berechtigungen an und klickt auf Erlauben. Markaestro schickt den Browser mit einem einmaligen Code zurück zum Client.
POST /api/public/v1/oauth/tokenDer Client tauscht den Code plus seinen PKCE-Verifier gegen ein Access-Token und ein Refresh-Token. Das Access-Token ist ein gewöhnlicher Workspace-API-Schlüssel, gebunden an die gewählte Marke. Es läuft nach 30 Tagen ab; ein Refresh rotiert das Geheimnis und verlängert um weitere 30 Tage.
Das Token ist ein echter API-Schlüssel
Scopes, Markenbindung, Rate-Limits, Abo-Prüfungen, Idempotenz und Widerruf laufen über denselben Codepfad wie ein manuell erstellter Schlüssel. Es gibt kein zweites Berechtigungsmodell.
In den Einstellungen sichtbar und widerrufbar
Ein verbundener Agent erscheint unter Einstellungen, API mit dem Badge Verbundener Agent, seiner letzten Nutzung und seinem Anfragevolumen. Widerrufe ihn dort und der nächste Aufruf des Clients schlägt fehl; der Client kann sein Token beim Trennen auch selbst widerrufen.
Eine Verbindung, eine Marke
Jede Verbindung ist an genau eine Marke gebunden, gewählt bei der Zustimmung. Soll ein Agent an einer zweiten Marke arbeiten, verbinde ihn erneut und wähle diese Marke. Ein Client erreicht nie eine Marke, die ihm nicht gewährt wurde.
Codes und Refresh-Tokens sind einmalig
Autorisierungscodes gelten zehn Minuten und werden atomar verbraucht, ein wiederholter Code schlägt fehl. Refresh-Tokens werden bei jeder Nutzung rotiert und gehasht gespeichert. Inaktive Client-Registrierungen verfallen nach 180 Tagen.
Endpunkte
Für alle, die einen MCP-Client bauen oder den Ablauf prüfen. Alles ist über die beiden Well-known-Dokumente auffindbar; nichts davon muss von Hand konfiguriert werden.
# Discovery (public, cacheable)
GET /.well-known/oauth-protected-resource RFC 9728
GET /.well-known/oauth-authorization-server RFC 8414
# Authorization server
POST /api/public/v1/oauth/register RFC 7591, public clients (PKCE) or client_secret
GET /oauth/authorize?response_type=code&client_id=…&redirect_uri=…
&code_challenge=…&code_challenge_method=S256&state=…
POST /api/public/v1/oauth/token grant_type=authorization_code | refresh_token
POST /api/public/v1/oauth/revoke RFC 7009
# Token response
{ "access_token": "mk_live_<ws>.<client>.<secret>", "token_type": "Bearer",
"expires_in": 2592000, "refresh_token": "…", "scope": "products.read posts.write …" }Der Agenten-Kreislauf
Fünf Aufrufe, von Anfang bis Ende
Jede Markaestro-Automatisierung ist eine Variation dieses Kreislaufs. Schritte eins bis drei sind die Connect-API, die flache Oberfläche, auf die die meisten Agenten abzielen sollten. Schritte vier und fünf greifen auf die vollständige /api/public/v1-API für explizite Veröffentlichung und Laufverfolgung zu.
GET /api/connect/v1/social-accountsGibt jedes verbundene, veröffentlichungsfähige Konto für die Marke des Schlüssels zurück, jeweils mit Plattform, Nutzername und undurchsichtiger ID. Rufe es zu Beginn jedes Laufs auf: Verbindungen ändern sich.
POST /api/connect/v1/media/create-upload-url → PUTErstelle eine kurzlebige, einmal verwendbare signierte URL und sende dann die rohen Bytes per PUT dorthin. Du erhältst eine Medien-ID zurück. Bilder bis zu 10 MB; die vollständige API nimmt auch Videos bis zu 250 MB.
POST /api/connect/v1/postsÜbergib den Text, die Medien-IDs und die Konto-IDs unverändert. Lass es als Entwurf zur Prüfung, oder sende is_draft false mit scheduled_at, um es in den Kalender einzutragen.
POST /api/public/v1/posts/:id/publishReiht einen asynchronen Lauf ein. LinkedIn, Threads und Pinterest gehen über die offizielle API raus. Facebook, Instagram und TikTok landen in der „Zu veröffentlichen“-Warteschlange des Arbeitsbereichs, damit ein Mensch nativ postet.
GET /api/public/v1/job-runs/:id · webhooksFrage die Lauf-ID ab, oder registriere einen Webhook-Endpunkt und lass Markaestro post.published, post.action_required und post.failed an dich senden. Nimm nie an, dass eine Veröffentlichung synchron abgeschlossen wurde.
Schnellstart
Eine funktionierende Integration in vier Befehlen
Erstelle zuerst den Schlüssel: Öffne Einstellungen → API, wähle die Marke aus, auf die er zugreifen darf, hake die benötigten Berechtigungen ab und gib optional ein Ablaufdatum an. Der Schlüssel wird einmalig angezeigt, leg ihn direkt in den Secret-Speicher deines Agenten. Das Erstellen von Schlüsseln erfordert einen Administrator oder Inhaber mit verifizierter E-Mail-Adresse.
# The API is served from the marketing apex and the app subdomain alike.
export MARKAESTRO_URL="https://markaestro.com"
export MARKAESTRO_API_KEY="mk_live_<workspaceId>.<clientId>.<secret>"
# 1. What can this key post to?
curl -s "$MARKAESTRO_URL/api/connect/v1/social-accounts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"{
"data": [
{
"id": "prod_123#instagram:instagram:ig_123",
"product_id": "prod_123",
"product": "Northwind Coffee",
"platform": "instagram",
"username": "northwindcoffee"
}
]
}# 2. Mint a signed upload url, then PUT the bytes.
RESP=$(curl -s -X POST "$MARKAESTRO_URL/api/connect/v1/media/create-upload-url" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "mime_type": "image/png", "size_bytes": 184320, "name": "cold-brew.png" }')
# → { "media_id": "ast_777", "upload_url": "https://.../media/upload?token=..." }
curl -X PUT "<upload_url>" \
-H "Content-Type: image/png" \
--data-binary @cold-brew.pngis_draft: false mit einem scheduled_at-Zeitstempel, um den Beitrag stattdessen in den Kalender einzutragen.# 3. Put it on the calendar. Pass the account id back verbatim.
curl -X POST "$MARKAESTRO_URL/api/connect/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"caption": "Cold brew season starts Friday.",
"media": ["ast_777"],
"social_accounts": ["prod_123#instagram:instagram:ig_123"],
"is_draft": false,
"scheduled_at": "2026-08-14T15:00:00.000Z"
}'
# 4. Check where everything stands.
curl -s "$MARKAESTRO_URL/api/connect/v1/posts?limit=20" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"Sofort einsatzbereit
Tool-Definitionen und eine Agenten-Kurzübersicht
Zwei Dinge zum Kopieren. Das erste ist eine Reihe von Tool-Schemas, die den gesamten Veröffentlichungskreislauf abdecken, geschrieben in JSON Schema, sodass sie als Claude-Tool-Definitionen, OpenAI-Funktionen oder als Eingabeform für einen selbst gehosteten MCP-Server funktionieren. Das zweite ist die Betriebs-Kurzübersicht, die verhindert, dass ein Modell damit etwas Unerwartetes tut.
[
{
"name": "markaestro_list_accounts",
"description": "List the social accounts this Markaestro key can publish to. Call this first in every run. Never hardcode account ids. Returns id, platform, and username.",
"input_schema": { "type": "object", "properties": {}, "required": [] }
},
{
"name": "markaestro_upload_media",
"description": "Upload one image or video to Markaestro and return a media asset id. Images: png, jpeg, webp, gif up to 10 MB. Video: mp4, mov, webm up to 250 MB.",
"input_schema": {
"type": "object",
"properties": {
"file_path": { "type": "string", "description": "Local path to the file to upload." },
"mime_type": { "type": "string", "description": "MIME type of the file." }
},
"required": ["file_path", "mime_type"]
}
},
{
"name": "markaestro_create_post",
"description": "Create a post for one channel. Facebook, Instagram, and TikTok are manual-first: a human posts them natively from the To Post queue. Omit delivery_mode unless the user explicitly asked for unattended publishing.",
"input_schema": {
"type": "object",
"properties": {
"channel": {
"type": "string",
"enum": ["facebook", "instagram", "tiktok", "linkedin", "threads", "pinterest", "x"]
},
"caption": { "type": "string", "description": "Caption text, max 4000 characters." },
"media_asset_ids": {
"type": "array",
"items": { "type": "string" },
"description": "Ids from markaestro_upload_media. Instagram and TikTok require at least one."
},
"destination_id": {
"type": "string",
"description": "From markaestro_list_accounts. Required only when the brand has more than one destination on that channel."
},
"delivery_mode": {
"type": "string",
"enum": ["manual_reminder", "direct_publish", "platform_inbox"],
"description": "Omit for the channel default."
}
},
"required": ["channel", "caption"]
}
},
{
"name": "markaestro_publish_post",
"description": "Queue an async publish run for an existing post. Returns a run id. Poll it, do not assume the post is live.",
"input_schema": {
"type": "object",
"properties": { "post_id": { "type": "string" } },
"required": ["post_id"]
}
},
{
"name": "markaestro_list_posts",
"description": "List posts for this brand, newest first. Filter by status: draft, scheduled, publishing, published, platform_action_required, failed, partial_failed.",
"input_schema": {
"type": "object",
"properties": {
"status": { "type": "string" },
"limit": { "type": "integer", "minimum": 1, "maximum": 100 }
},
"required": []
}
},
{
"name": "markaestro_delete_post",
"description": "Remove a post from Markaestro. Use it to cancel something scheduled. Deleting an already-published post does NOT retract the live copy on the platform.",
"input_schema": {
"type": "object",
"properties": { "post_id": { "type": "string" } },
"required": ["post_id"]
}
}
]You have a Markaestro API key for exactly one brand. Markaestro is the
publishing layer: you supply the caption and the media, it handles the
platform rules, the calendar, and delivery.
Base URL: https://markaestro.com
Auth: Authorization: Bearer $MARKAESTRO_API_KEY
Rules:
- Call GET /api/connect/v1/social-accounts before posting. Pass the returned
account ids back verbatim. Never invent or cache an id across runs.
- Upload media before creating a post; posts reference media ids, not files.
- Facebook, Instagram, and TikTok are manual-first. Creating and publishing
them queues a reminder for a human. That is the intended behavior. Only
send deliveryMode "direct_publish" if the operator explicitly asked for it.
- Send a unique Idempotency-Key on every POST. Reuse the SAME key when
retrying the SAME request; never reuse it for a different one.
- On 429, wait the number of seconds in Retry-After, then retry. On 4xx other
than 429, do not retry. Report the error code and requestId and stop.
- Publishing is async. POST /publish returns a run id; poll
GET /api/public/v1/job-runs/<id> until succeeded or failed.
- To cancel, list with ?status=scheduled and DELETE the post id. Deleting a
published post does not remove it from the platform.
- Never claim a post is live until a run reports succeeded or a post reports
published.Dein Agent kann dies auch selbst abrufen: curl https://markaestro.com/llms.txt gibt eine Klartext-Kurzübersicht der gesamten API zurück, Endpunkte, Regeln und Fehlerbehandlung, kompakt genug, um in den Kontext zu passen.
Rezepte
Die vier Workflows, die Agenten tatsächlich nutzen
# Full control: draft → publish → poll. No productId needed:
# the key is already bound to one brand.
POST_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: post-2026-08-14-linkedin" \
-d '{
"channel": "linkedin",
"caption": "We shipped agent-driven publishing.",
"mediaAssetIds": ["ast_777"]
}' | jq -r .post.id)
RUN_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts/$POST_ID/publish" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Idempotency-Key: publish-$POST_ID" | jq -r .run.id)
# queued → running → succeeded | failed
curl -s "$MARKAESTRO_URL/api/public/v1/job-runs/$RUN_ID" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"# Review the queue, then cancel what the operator rejected.
curl -s "$MARKAESTRO_URL/api/public/v1/posts?status=scheduled&limit=100" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
curl -X DELETE "$MARKAESTRO_URL/api/public/v1/posts/pst_123" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
# → { "deleted": true, "id": "pst_123" }# One call, up to 25 posts. Per-item results: one bad item
# does not fail the batch.
curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: week-33-drop" \
-d '{
"posts": [
{ "channel": "instagram", "caption": "Monday", "mediaAssetIds": ["ast_1"] },
{ "channel": "facebook", "caption": "Tuesday", "mediaAssetIds": ["ast_2"] },
{ "channel": "linkedin", "caption": "Thursday" }
]
}'
# → { "results": [...], "created": 3, "total": 3 }# Let Markaestro call you instead of polling.
curl -X POST "$MARKAESTRO_URL/api/public/v1/webhook-endpoints" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-agent.example.com/hooks/markaestro",
"events": ["post.published", "post.action_required", "post.failed"]
}'
# Each delivery carries:
# X-Markaestro-Event post.action_required
# X-Markaestro-Timestamp 2026-08-14T15:00:04.000Z
# X-Markaestro-Signature HMAC of the body with your webhook secret
# The secret is shown once at creation and stored hashed. Verify before acting.Schutzmechanismen
Was der Agent darf und nicht darf
Autonomie ist nur nützlich, wenn der Wirkungsradius klein ist. Die Standardeinstellungen von Markaestro gehen davon aus, dass der Aufrufer Software ist, die sich irren könnte.
Facebook, Instagram und TikTok sind grundsätzlich manuell
Beiträge, die dein Agent für diese Kanäle erstellt, nutzen standardmäßig manual_reminder: Markaestro ruft niemals die API der Plattform für sie auf. Das Veröffentlichen verschiebt den Beitrag in die „Zu veröffentlichen“-Warteschlange des Arbeitsbereichs, wo eine Person die Medien herunterlädt, nativ postet und bestätigt, sodass der Beitrag genau so aussieht, als wäre er von Hand erstellt worden, und ein Mensch jeden einzelnen sieht, bevor er öffentlich existiert. Ein Agent kann einen einzelnen Beitrag für die offizielle API-Veröffentlichung mit deliveryMode: "direct_publish" aktivieren, und bei TikTok bedeutet das die Posteingangsübergabe an den Creator, niemals einen unbeaufsichtigten öffentlichen Beitrag. LinkedIn, Threads und Pinterest veröffentlichen programmatisch, sobald dein Agent explizit danach fragt.
Schlüsselberechtigungen einschränken
Wähle nur die Berechtigungen, die der Agent braucht: products.read, media.write, posts.read, posts.write, posts.publish, job_runs.read, webhooks.manage. Ein Recherche-Agent, der nur den Kalender liest, erhält posts.read und nichts weiter.
Ein Ablaufdatum geben
Schlüssel können mit einem Ablaufdatum erstellt werden. Ein abgelaufener Schlüssel verhält sich genau wie ein widerrufener, sodass ein Schlüssel, der aus der Umgebung eines Agenten austritt, von selbst aufhört zu funktionieren.
Rotieren und widerrufen
Rotiere einen Schlüssel an Ort und Stelle oder widerrufe ihn direkt unter Einstellungen → API. Jeder Schlüssel zeigt seine letzte Nutzung und sein Anfragevolumen, sodass ein Agent, der still wird, oder außer Kontrolle gerät, sichtbar bleibt.
Ratenlimits werden durchgesetzt
60 Anfragen pro Minute pro Endpunkt und 240 pro Minute pro Schlüssel. Jede Antwort trägt X-RateLimit-Limit, -Remaining und -Reset; ein 429 trägt Retry-After. Beachte es, statt hartnäckig weiterzumachen.
Markaestro schreibt niemals für dich
Es gibt keinen Generierungsschritt. Der Text kommt von deinem Agenten, die Medien kommen aus deiner Bibliothek oder der Pipeline deines Agenten. Markaestro liefert die Hände, nicht die Stimme.
Löschungen erfolgen auf Markaestro-Seite
Das Löschen eines geplanten Beitrags bricht ihn ab, bevor er live geht. Das Löschen eines bereits veröffentlichten Beitrags stoppt nur die Nachverfolgung durch Markaestro, der aktive Beitrag bleibt online, bis ihn jemand auf der Plattform entfernt.
Fehlerbehandlung
Bring ihm bei, welche Fehler eine Wiederholung wert sind
Jede Fehlerantwort ist JSON mit einem stabilen error-Code und einer requestId. Lass deinen Agenten die requestId zitieren, wenn er einen Fehler meldet, das braucht der Support, um den Aufruf nachzuverfolgen.
| Status | Code | Was der Agent tun sollte |
|---|---|---|
| 401 | UNAUTHENTICATED | Der Schlüssel fehlt, wurde widerrufen oder ist abgelaufen. Stoppe und bitte einen Menschen um einen neuen, ein Wiederholungsversuch hilft nicht. |
| 403 | FORBIDDEN | Dem Schlüssel fehlt die Berechtigung für diesen Aufruf. Melde, welcher Aufruf fehlgeschlagen ist; Berechtigungen werden unter Einstellungen → API geändert. |
| 403 | API_KEY_NOT_BOUND_TO_PRODUCT | Ein Schlüssel, der vor der Markenbindung ausgestellt wurde. Bitte um einen Ersatzschlüssel. |
| 400 | VALIDATION_* | Die Nutzdaten haben eine Kanalregel verletzt (fehlende Medien, ungültiger Zustellmodus, falsches scheduled_at). Korrigiere die Anfrage; wiederhole sie nicht unverändert. |
| 400 | VALIDATION_IDEMPOTENCY_KEY_REUSED | Derselbe Idempotency-Key wurde mit einem anderen Body gesendet. Erstelle einen neuen Schlüssel für jede eigenständige Anfrage. |
| 400 | VALIDATION_POST_IS_PUBLISHING | Es wurde versucht, einen Beitrag zu löschen, während ein Veröffentlichungslauf lief. Warte, bis er sich erledigt hat, und lösche dann. |
| 409 | VALIDATION_POST_ALREADY_PUBLISHING | Für diesen Beitrag ist bereits ein Veröffentlichungslauf eingereiht. Veröffentliche nicht erneut, frage den bestehenden Lauf ab. |
| 402 | SUBSCRIPTION_REQUIRED | Diesem Workspace ist kein aktiver Tarif zugeordnet. Bitte einen Workspace-Inhaber, die Abrechnung in den Einstellungen zu prüfen. |
| 402 | QUOTA_EXCEEDED_MEDIA_UPLOADS | Der Arbeitsbereich hat sein monatliches Upload-Kontingent erreicht. Stoppe das Hochladen und weise darauf hin, vorhandene Medien werden weiterhin veröffentlicht. |
| 404 | NOT_FOUND | Die ID liegt außerhalb der Marke dieses Schlüssels. Wird als 404 statt 403 beantwortet, damit Schlüssel nicht nach IDs suchen können, die ihnen nicht gehören. |
| 429 | RATE_LIMITED | Warte die in Retry-After angegebene Anzahl Sekunden und wiederhole dieselbe Anfrage mit demselben Idempotency-Key. |
Bring deinen eigenen Stack mit
Wenn es eine HTTPS-Anfrage stellen kann, kann es veröffentlichen
Es gibt keine Markaestro-Client-Bibliothek zu übernehmen und kein Framework, an das man sich halten müsste. Bearer-Token, JSON rein, JSON raus.
Claude & das Claude Agent SDK
Füge die obigen Tool-Definitionen zu deiner Tool-Liste hinzu. Die JSON-Schema-Formen liegen bereits im Claude-Tool-Use-Format vor.
OpenAI-Funktionsaufruf
Dieselben Schemas lassen sich eins zu eins auf Funktionsdefinitionen übertragen, input_schema wird einfach zu parameters umbenannt.
MCP-Clients
Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes: die URL des gehosteten Servers hinzufügen und über den Browser anmelden. Für reine stdio-Clients führt npx -y @markaestro/mcp dieselben einunddreißig Tools lokal aus.
n8n, Make, Zapier
Jeder Endpunkt ist eine einfache HTTP-Anfrage mit einem Bearer-Token. Kein SDK, keine Signierzeremonie, kein OAuth-Tanz für den Agenten.
LangChain & LlamaIndex
Standard-REST-Tools. Der zweistufige Medien-Upload ist der einzige Ablauf mit mehreren Aufrufen, und er umfasst nur zwei Zeilen.
Ein Cronjob und curl
Nicht jeder Agent braucht ein Framework. Der obige Schnellstart ist eine vollständige, funktionierende Integration in vier Befehlen.