Codex · MCP Server
Codex MCP Server: Messaging und E-Mail in Ihrem Produkt
Drei Zeilen config.toml verbinden den Unipile MCP-Server. Codex baut dann LinkedIn-, WhatsApp- und E-Mail-Features in Ihr Produkt ein.
7 Tage kostenlos testen, ohne Kreditkarte.
Codex · crm-app
Unipile MCP verbunden
Ergänze mein CRM um die LinkedIn-Personensuche.
Endpoint lesenPOST /v2/{account_id}/linkedin/searchSchema geladen
Such-Route und Ergebnisliste ergänzt. Jede Zeile behält die Provider-ID für das Profil.
Nächstes Feature beschreiben…
Die Aufgabe
Was Sie erreichen wollen
Ihr Produkt um eine LinkedIn-, WhatsApp-, E-Mail- oder Kalenderverbindung erweitern. Das heißt: eine API-Referenz lesen, die richtigen Endpoints wählen, Hosted Auth und seine Callbacks verkabeln und dann die richtigen IDs von der Suche bis zur Nachricht behalten. Mit dem Unipile MCP-Server in Codex übernimmt der Agent das Lesen und schreibt den Code in Ihrem Stack, aus der CLI, der IDE-Erweiterung oder der Desktop-App.
Den Unipile MCP-Server mit Codex verbindenUnipile MCP verbunden
Wählen Sie die Kanäle, die Sie verbinden möchten
developer.unipile.com/mcpAlle Kanäle verbinden9 Kanäle
↑↓navigieren Leertasteauswählen ↵verbindeneine URL, ein Header
Ohne
Tabs, Raten, Glue Code
Codex rät Endpoint-Namen und Payloads aus Trainingsdaten und liegt bei den IDs falsch.
Sie kopieren Schemas aus der Referenz in den Chat, einen Endpoint nach dem anderen.
Der erste echte Aufruf passiert in Production, nach dem Code-Review.
Mit dem Unipile MCP-Server
Das Ergebnis in Ihrer Anwendung
Eine Connect-Route und ein Settings-Button: Jeder Nutzer verbindet sein eigenes Konto über Hosted Auth.
Ein Webhook-Empfänger und ein Posteingang, der Nachrichten und E-Mails zeigt, sobald sie ankommen.
Jede Anfrage bereits einmal in Ihrer Development-Anwendung ausgeführt, bevor Sie den Diff prüfen.
config.toml, CLI und IDE
Unipile MCP-Server für Codex
Der Server ist remote: eine URL über streamable HTTP und ein Header. Kein npx, kein lokaler Prozess. Einen Eintrag in config.toml lesen Codex CLI, die Codex-IDE-Erweiterung und die ChatGPT-Desktop-App gleichermaßen, Sie konfigurieren ihn also einmal.
Codex CLI installiert (npm i -g @openai/codex) oder die Codex-IDE-Erweiterung, angemeldet.
Eine Development-Anwendung im Unipile-Dashboard, mit einem Scope und einem Scoped Account API Key.
Mindestens ein Testkonto, das über Hosted Auth mit diesem Scope verbunden ist, damit der Agent echte Anfragen ausführen kann.
codex mcp add, dann der Headerregistriert die URL in ~/.codex/config.toml
Globale Konfiguration~/.codex/config.toml
Projektkonfiguration.codex/config.toml (vertrauenswürdiges Projekt)
Key aus einer Umgebungsvariablenenv_http_headers
?
Warum zwei Schritte in der CLI?codex mcp add nimmt --url und eine Variable für einen Bearer-Token, aber kein Flag für eigene Header. Der Unipile-Server authentifiziert über X-API-KEY, der Befehl registriert also die URL, und der Header kommt in config.toml, von Hand oder über env_http_headers.
# 1. Den gehosteten Unipile MCP-Server registrieren (globale Konfiguration)
codex mcp add unipile --url "https://developer.unipile.com/mcp?branch=v2.0"
# Added global MCP server 'unipile'.
# 2. Den X-API-KEY-Header im Eintrag in ~/.codex/config.toml ergänzen
[mcp_servers.unipile]
url = "https://developer.unipile.com/mcp?branch=v2.0"
http_headers = { "X-API-KEY" = "your-scoped-api-key" }
# 3. Prüfen
codex mcp get unipile
[mcp_servers.unipile]
url = "https://developer.unipile.com/mcp?branch=v2.0"
http_headers = { "X-API-KEY" = "your-scoped-api-key" }
[mcp_servers.unipile]
url = "https://developer.unipile.com/mcp?branch=v2.0"
http_headers = { "X-API-KEY" = "your-scoped-api-key" }
# Wird nur in einem vertrauenswürdigen Projekt gelesen. Halten Sie den Key aus git: besser env_http_headers.
[mcp_servers.unipile]
url = "https://developer.unipile.com/mcp?branch=v2.0"
env_http_headers = { "X-API-KEY" = "UNIPILE_API_KEY" }
# export UNIPILE_API_KEY=your-scoped-api-key vor dem Start von codex
Speichern Sie die Datei und starten Sie Codex neu. codex mcp list zeigt unipile als enabled, und /mcp listet den Server innerhalb einer Session. Geprüft mit codex-cli 0.154.0.
Was jede Zeile tut, geprüft mit codex-cli 0.154.0
codex mcp add unipileErstellt die Tabelle [mcp_servers.unipile] in der globalen config.toml. Der Name gehört Ihnen; halten Sie ihn kurz, er wird zum Tool-Präfix.--url "https://developer.unipile.com/mcp?branch=v2.0"Transport über streamable HTTP. Setzen Sie die URL in Anführungszeichen: Das Fragezeichen ist in zsh ein Glob-Zeichen.http_headers = { "X-API-KEY" = "…" }Statischer Header, der bei jeder Anfrage mitgeht. Nutzen Sie Ihren Scoped Account API Key, nie einen Service- oder globalen Account-Key.env_http_headers = { "X-API-KEY" = "UNIPILE_API_KEY" }Derselbe Header, Wert beim Start aus der Umgebung gelesen. Die richtige Form für eine Projekt-config.toml, die in git liegt.startup_timeout_sec = 30Optional. Standard sind 10 s; erhöhen Sie den Wert, wenn der erste Handshake in einem langsamen Netz in einen Timeout läuft.enabled = falseOptional. Deaktiviert den Server, ohne den Eintrag zu löschen, praktisch beim Wechsel zwischen Development- und Production-Keys.Der Teil, den es nur bei Codex gibt
Halten Sie Ihren API Key aus config.toml heraus
http_headers schreibt den Key im Klartext in eine Datei, die in Backups landet und bei einer Projektkonfiguration auch in git. Codex hat drei Wege, den X-API-KEY-Header zu senden; wählen Sie den, der zum Ort der Datei passt.
1http_headers, statischer WertDie Form aus der Unipile-Dokumentation. In Ordnung für eine User-Konfiguration auf Ihrer eigenen Maschine, nie für eine Datei, die in einem Repository geteilt wird.http_headers = { "X-API-KEY" = "your-scoped-api-key" }
2env_http_headers, beim Start gelesenOrdnet dem Header-Namen den Namen einer Umgebungsvariablen zu. Die Datei enthält kein Secret, jeder Entwickler exportiert seinen eigenen Scoped Key. Die richtige Form für eine Projekt-config.toml.env_http_headers = { "X-API-KEY" = "UNIPILE_API_KEY" }
export UNIPILE_API_KEY=your-scoped-api-key
3http_headers_helper, aus einem BefehlEin lokaler Befehl, der die Header als JSON ausgibt, für Teams, die Keys aus einem Vault holen. Und denken Sie an CODEX_HOME: Es verschiebt das gesamte Konfigurationsverzeichnis, ein in einem Terminal gespeicherter Server kann in einem anderen also fehlen.http_headers_helper = "./scripts/unipile-headers.sh"
Prüfen
Die Verbindung prüfen
Drei Prüfungen: in der CLI, innerhalb einer Session und dann mit einem Prompt, der nur die Spezifikation liest. Keine davon berührt ein verbundenes Konto.
1In der Codex CLIlist gibt eine Zeile pro Server mit URL und Status aus. get zeigt den Transport, die Header und den Befehl zum Entfernen.codex mcp list
codex mcp get unipile
2Innerhalb einer SessionIn der Codex-TUI, der IDE-Erweiterung (Zahnrad-Menü, MCP servers) und der ChatGPT-Desktop-App (Settings, MCP servers) erscheint derselbe Eintrag: eine Konfiguration, drei Oberflächen./mcp
# Status enabled, Auth Unsupported ist normal: Der Server nutzt einen Header, kein OAuth
3Im Chat, ohne ein Konto zu berührenFragen Sie etwas, das nur die API-Spezifikation liest. Antwortet der Agent mit echten Routen und Parametern, ist der Server verkabelt.Liste über den Unipile MCP die Endpoints für die LinkedIn-Personensuche und ihre Pflichtparameter auf.
Prompts statt Glue Code
Geben Sie Ihrem Agenten den Prompt
Drei Integrationsaufgaben, jeweils mit dem exakten Prompt zum Einfügen in Codex, den Unipile-Endpoints, die der Agent liest und aufruft, und dem, was in Ihrem Projekt landet. Die Pfade sind vollständig, auf der API-Basis-URL
https://api.unipile.com, mit Ihrem Scoped Key im X-API-KEY Header.Ergänze mein CRM um die LinkedIn-Personensuche und lass den Nutzer danach das ausgewählte Profil öffnen und von dort eine Konversation starten.
Endpoints suchen"linkedin search people profile"3 Treffer
Anfrage ausführenPOST /v2/{account_id}/linkedin/search10 Ergebnisse
Ergänzt
GET /api/linkedin/search (Keywords, Pagination-Cursor) und GET /api/linkedin/profiles/:identifier. Die Ergebnisliste behält die Provider-ID aus der Such-Response, die Profil-Route nutzt sie erneut, und der Button „Nachricht“ übergibt sie an die Chat-Erstellung. Beide in der Development-App ausgeführt.Eine ID vom Suchergebnis bis zur Konversation
Das Schwierige an einem LinkedIn-Feature sind nicht die Aufrufe, sondern dieselbe ID von der Suchzeile über das Profil bis zur Nachricht zu behalten. Codex liest die drei Verträge über den Server, sieht, welches Feld diese ID in welcher Response trägt, und schreibt die Routen so, dass nichts geraten wird.
Endpoints, die der Agent nutzt
POST/v2/{account_id}/linkedin/searchGET/v2/{account_id}/users/{identifier}POST/v2/{account_id}/chats
Häufiger Fehler: Mit einem Konto suchen und mit einem anderen schreiben. Profil und Chat müssen über die
Eine LinkedIn-Integration bauen
account_id geöffnet werden, die die Suche ausgeführt hat.Generiere aus den API-Schemas einen typisierten Node.js- und Python-Client für die Unipile-Routen zu Chats und E-Mails, die wir nutzen, mit Retries bei 429.
Endpoint lesenGET /v2/{account_id}/emailsSchema geladen
Anfrage ausführenGET /v2/{account_id}/chats200 OK
Geschrieben:
unipile-client.ts und unipile_client.py aus den Request- und Response-Schemas: typisierte Methoden zum Auflisten und Senden für Chats und E-Mails, ein Helper für Cursor-Pagination, exponentielles Backoff bei 429 mit dem Retry-After-Header. Beide Clients haben die Listen-Aufrufe in der Development-App ausgeführt.Typisierte Clients aus den echten Schemas, nicht aus dem Gedächtnis
Codex rät die Payloads nicht. Es liest den Request-Body und das Response-Schema jeder Route über den Server, generiert die Typen und führt vor Ihrem Review einen Aufruf pro Methode in Ihrer Development-Anwendung aus. Die offiziellen SDKs für Node.js und Python bleiben die Referenz; der generierte Client gehört Ihnen und darf klein bleiben.
Endpoints, die der Agent nutzt
GET/v2/{account_id}/chatsPOST/v2/{account_id}/chats/{chat_id}/messages/sendGET/v2/{account_id}/emailsPOST/v2/{account_id}/emails/send
Häufiger Fehler: Einen Sendevorgang nach einem Timeout ohne Idempotenzprüfung wiederholen. Eine Nachricht kann nur einmal rausgehen; wiederholen Sie Lese-Aufrufe, keine Schreibvorgänge.
Die offiziellen SDKs ansehen
Unterstütze mehrere verbundene Konten pro Nutzer meines SaaS: Sie können mehrere LinkedIn- und E-Mail-Konten verbinden und wählen, über welches gesendet wird.
Endpoint lesenGET /v2/accountsSchema geladen
Anfrage ausführenGET /v2/accounts3 Konten
Ergänzt: eine Tabelle
accounts , indiziert nach Nutzer und account_id, ein Auswahlfeld im Composer und POST /api/messages , das über das ausgewählte Konto sendet. Reconnect-Zustände aus der Accounts-Route werden als Badge angezeigt. Mit drei Konten in der Development-App verifiziert.Ein Nutzer, mehrere Konten, ein Scope pro Workspace
Jedes Konto, das Ihre Nutzer über Hosted Auth verbinden, erhält eine eigene
account_id. Der Agent entwirft das Mapping zwischen Ihren Nutzern und diesen IDs, liest die Route für den Kontostatus, um Reconnect- und Checkpoint-Zustände anzuzeigen, und leitet jeden Sendevorgang an das vom Nutzer gewählte Konto.Endpoints, die der Agent nutzt
GET/v2/accountsGET/v2/accounts/{account_id}POST/v2/auth/linkPOST/v2/{account_id}/chats
Häufiger Fehler: Die Konto-ID am Workspace statt am Nutzer speichern. Konten gehören der Person, die sie verbunden hat; der Workspace gruppiert nur Scopes und Keys.
Hosted Auth mit einem Agenten implementieren
Von Development zu Production
Zuerst in einer Development-Anwendung testen
Das Unipile-Dashboard trennt eine Development-Anwendung von einer Production-Anwendung. Geben Sie Codex einen Scoped Key aus der Development-Anwendung, mit ein oder zwei über Hosted Auth verbundenen Testkonten. Der Agent führt echte Anfragen auf diesen Konten aus, im Namen des authentifizierten Nutzers, der sie verbunden hat, innerhalb der Limits jedes Anbieters, und bis zum Release wird kein Konto Ihrer Nutzer berührt. Lassen Sie
default_tools_approval_mode während der Entwicklung auf prompt, wenn Sie jeden Schreibvorgang bestätigen möchten.Validieren Sie den Connect-Flow end-to-end: Auth-Link serverseitig erstellt, Konto-ID am Nutzer gespeichert.
Validieren Sie pro Feature einen Lese- und einen Schreibvorgang: Chats auflisten, eine Nachricht über das Testkonto senden.
Validieren Sie eine Webhook-Zustellung und einen Reconnect- oder Checkpoint-Zustand, bevor Sie den Key auf Production umstellen.
crm-app · DevelopmentVon Codex genutzt
Scopedev-tests · 2 Konten
Key
scoped Account API keyKontenLinkedIn-Testkonto, Gmail-Testpostfach
Webhooks1 Endpoint · Message-Events
crm-app · ProductionUnberührt
Scopeeiner pro Workspace
Key
scoped keys, in your backend onlyKontendie eigenen Konten Ihrer Nutzer, über Hosted Auth
Fehlerbehebung
Häufige Fehler und was sie bedeuten
Was Sie sehen, wenn ein MCP-Eintrag in Codex nicht stimmt, und die jeweilige Lösung. Meistens liegt es an der Datei, am TOML, am Trust-Level oder am Key.
Der Server erscheint nach dem Bearbeiten von config.toml nicht
codex mcp list gibt nichts aus, oder der Eintrag fehlt in einer Session.
LösungStarten Sie den Client neu: Die Datei wird beim Start gelesen. Prüfen Sie dann CODEX_HOME: Es verschiebt das gesamte Konfigurationsverzeichnis, ein in einem Terminal gespeicherter Server kann in einem anderen also unsichtbar sein. Führen Sie codex mcp list in derselben Shell aus, aus der Sie Codex starten.
Die Projektkonfiguration wird ignoriert
.codex/config.toml liegt im Wurzelverzeichnis des Repositories, und Codex nutzt trotzdem den globalen Eintrag oder gar keinen.
LösungCodex lädt die Projektebene nur für ein vertrauenswürdiges Projekt. Markieren Sie es mit trust_level = "trusted" unter [projects."/path/to/repo"] in der User-Konfiguration, oder verschieben Sie den Eintrag nach ~/.codex/config.toml.
Ungültiges TOML
Die Datei lässt sich nicht parsen, und alle Server verschwinden auf einmal.
LösungEine Tabelle mit exakt dem Namen [mcp_servers.unipile] , Anführungszeichen um "X-API-KEY" in der Header-Tabelle, und eine Tabelle, kein String, für http_headers. Eine fehlende schließende Klammer legt die ganze Datei lahm.
401 Unauthorized bei Anfragen
Der Server ist gelistet und liest die Spezifikation, aber eine Anfrage schlägt fehl.
LösungDer Header fehlt, die in env_http_headers genannte Variable ist nicht in der Shell exportiert, die Codex gestartet hat, oder der Key ist ein Service- oder globaler Account-Key statt eines Scoped Account API Key aus Ihrer Development-Anwendung.
Die Einstellungen melden den Server als nicht verfügbar
Die IDE-Erweiterung oder die Desktop-App markiert den Server, obwohl Actions laufen.
LösungDiese Prüfung sucht nach Resources, und der Unipile-Server stellt Actions bereit, keine Resources. Bestätigen Sie es mit /mcp in einer Session und mit einem Lese-Aufruf. Auf Ihrer Seite ist nichts zu ändern.
Timed out
Der Start oder ein Aufruf überschreitet das Limit.
LösungDie Standardwerte sind startup_timeout_sec = 10 und tool_timeout_sec = 60. Der Server ist remote, es gibt keinen Prozess zu starten: Prüfen Sie die URL (inklusive?branch=v2.0 ), das Netzwerk und einen möglichen Unternehmens-Proxy, bevor Sie die Timeouts erhöhen.
6000+
Unternehmen, die mit Unipile innovieren
Vertrauen bei Branchenführern
1 API
Rationalisierung der Abläufe für alle wichtigen Kommunikationskanäle
2 Tage
Schnelle Live-Integration mit minimaler Einrichtung
30%
Verringerung des Wartungsaufwands und der Ressourcen
Integrierte Sicherheit und Compliance
Unternehmensgerechter Schutz für Ihre Daten und Arbeitsabläufe Erfahren Sie mehr über unsere Sicherheit
SOC 2 Typ II
Zertifiziert
Unabhängig geprüfte Sicherheitskontrollen zur Gewährleistung des Datenschutzes und der betrieblichen Integrität.
GDPR
Konform
Vollständige Einhaltung der europäischen Datenschutzbestimmungen zum Schutz der Privatsphäre der Nutzer.
99.9%
Betriebszeit der Plattform in den letzten 24 Monaten
24/7
Globaler Support mit leistungsstarker API
FAQ zum Codex MCP-Server
Die Fragen, die wirklich gestellt werden: config.toml statt mcp.json, wo sie liegt, codex mcp add, den Key aus der Datei halten, die drei Oberflächen, was zu prüfen ist, wenn nichts erscheint, Timeouts und Keys.
Nein. Codex speichert seine MCP-Konfiguration in
~/.codex/config.toml, in TOML, eine Tabelle pro Server mit dem Namen [mcp_servers.<name>]. Eine mcp.json gibt es in Codex nicht, und die Datei wird bei der Installation nicht angelegt: Sie erstellen sie, oder codex mcp add erstellt sie für Sie. Ein vertrauenswürdiges Projekt kann zusätzlich eine .codex/config.toml im Wurzelverzeichnis tragen.~/.codex/config.toml für die User-Konfiguration, .codex/config.toml im Wurzelverzeichnis des Repositories für die Projektkonfiguration. Die Umgebungsvariable CODEX_HOME verschiebt das gesamte Konfigurationsverzeichnis: Zeigt sich ein Server in einem Terminal und im anderen nicht, prüfen Sie das zuerst. Codex CLI, die IDE-Erweiterung und die Desktop-App lesen dieselbe Datei.Teilweise.
codex mcp add unipile --url "https://developer.unipile.com/mcp?branch=v2.0" schreibt die Tabelle für einen streamable-HTTP-Server, und --bearer-token-env-var deckt Server ab, die einen Bearer-Token nehmen. Der Unipile-Server authentifiziert über einen X-API-KEY Header, den der Befehl nicht setzen kann, Sie ergänzen den erzeugten Eintrag also um http_headers oder env_http_headers . Geprüft mit codex-cli 0.154.0.Nutzen Sie
env_http_headers = { "X-API-KEY" = "UNIPILE_API_KEY" }: Es ordnet dem Header-Namen den Namen einer Umgebungsvariablen zu statt eines Werts, die Datei lässt sich also ohne Secret einchecken, und jeder Entwickler exportiert seinen eigenen Scoped Account API Key. http_headers ist für statische Werte, und http_headers_helper lässt einen lokalen Befehl die Header als JSON erzeugen.Ja. Die drei Oberflächen eines Codex-Hosts lesen dieselbe Konfiguration, ein einmal hinzugefügter Server ist also überall verfügbar. In der Desktop-App und in der Erweiterung können Sie ihn auch über Settings, MCP servers, Add server hinzufügen und Streamable HTTP wählen. Starten Sie den Client nach dem Speichern der Datei neu.
Vier Ursachen, der Reihe nach: Der Client wurde nicht neu gestartet; die Datei liegt unter einem anderen
CODEX_HOME als Ihre aktuelle Shell; die Tabelle steht in einer projektbezogenen .codex/config.toml und das Projekt ist nicht als trust_level = "trusted"markiert, wodurch Codex die Projektebene komplett überspringt; oder das TOML ist ungültig. Führen Sie codex mcp listaus, danach /mcp in einer Session.startup_timeout_sec überschreibt den Standard-Startup-Timeout von 10 Sekunden und tool_timeout_sec den Standard-Timeout von 60 Sekunden pro Tool, beide unter der Server-Tabelle. Der Unipile-Server ist remote über HTTP und hat keinen lokalen Prozess zu starten, ein Startup-Timeout deutet also fast immer auf die URL, das Netzwerk oder einen Unternehmens-Proxy hin, nicht auf den Server.Der Server antwortet ohne Key, solange der Agent nur die API-Spezifikation liest. Für echte Anfragen erstellen Sie in Ihrer Development-Anwendung einen Scope, weisen die Testkonten zu und erzeugen einen Scoped Account API Key für diesen Scope. Geben Sie einem MCP-Client nie einen Service-Key oder einen globalen Account-Key.