Codex · MCP Server
Codex MCP-server: messaging en e-mail in uw product
Drie regels in config.toml koppelen de Unipile MCP-server. Daarna bouwt Codex LinkedIn-, WhatsApp- en e-mailfuncties in uw product.
7 dagen gratis proberen, geen creditcard nodig.
Codex · crm-app
Unipile MCP verbonden
Voeg zoeken naar personen op LinkedIn toe aan mijn CRM.
Endpoint lezenPOST /v2/{account_id}/linkedin/searchschema geladen
De zoekroute en de resultatenlijst toegevoegd. Elke regel bewaart de provider-ID van het profiel.
Beschrijf de volgende feature…
De opdracht
Wat u wilt bereiken
Een koppeling met LinkedIn, WhatsApp, e-mail of agenda toevoegen aan uw product. Dat betekent een API-referentie lezen, de juiste endpoints kiezen, Hosted Auth en de callbacks aansluiten, en daarna de juiste ID's bewaren van zoekopdracht tot bericht. Met de Unipile MCP-server in Codex doet de agent dat leeswerk voor u en schrijft hij de code in uw stack, vanuit de CLI, de IDE-extensie of de desktopapp.
Koppel de Unipile MCP-server aan CodexUnipile MCP verbonden
Selecteer de kanalen die u wilt koppelen
developer.unipile.com/mcpAlle kanalen koppelen9 kanalen
↑↓navigeren spatieselecteren ↵koppelenéén URL, één header
Zonder
Tabbladen, giswerk, lijmcode
Codex raadt endpointnamen en payloads op basis van trainingsdata, en haalt de ID's door elkaar.
U plakt schema's uit de referentie in de chat, één endpoint tegelijk.
De eerste echte call gebeurt in productie, na de code review.
Met de Unipile MCP-server
Het resultaat in uw applicatie
Een connect-route en een knop in Instellingen: elke gebruiker koppelt zijn eigen account via Hosted Auth.
Een webhook-ontvanger en een inbox die berichten en e-mails toont zodra ze binnenkomen.
Elke request is al één keer uitgevoerd op uw Development-applicatie voordat u de diff reviewt.
config.toml, CLI en IDE
Voeg de Unipile MCP-server toe aan Codex
De server is remote: één URL via streamable HTTP en één header. Geen npx, geen lokaal proces. Eén entry in config.toml wordt gelezen door Codex CLI, de Codex IDE-extensie en de ChatGPT-desktopapp, dus u configureert alles één keer.
Codex CLI geïnstalleerd (npm i -g @openai/codex) of de Codex IDE-extensie, ingelogd.
Een Development-applicatie in het Unipile-dashboard, met een Scope en een scoped Account API key.
Minstens één testaccount dat via Hosted Auth aan die Scope is gekoppeld, zodat de agent echte requests kan uitvoeren.
codex mcp add, daarna de headerregistreert de URL in ~/.codex/config.toml
Globale configuratie~/.codex/config.toml
Projectconfiguratie.codex/config.toml (vertrouwd project)
Key uit een omgevingsvariabeleenv_http_headers
?
Waarom twee stappen in de CLI?codex mcp add accepteert --url en een variabele voor een bearer token, maar geen flag voor custom headers. De Unipile-server authenticeert met X-API-KEY, dus het commando registreert de URL en de header gaat in config.toml, met de hand of met env_http_headers.
# 1. Registreer de gehoste Unipile MCP-server (globale config)
codex mcp add unipile --url "https://developer.unipile.com/mcp?branch=v2.0"
# Added global MCP server 'unipile'.
# 2. Voeg de X-API-KEY-header toe aan de entry in ~/.codex/config.toml
[mcp_servers.unipile]
url = "https://developer.unipile.com/mcp?branch=v2.0"
http_headers = { "X-API-KEY" = "your-scoped-api-key" }
# 3. Verifiëren
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" }
# Wordt alleen gelezen in een vertrouwd project. Houd de key uit git: gebruik bij voorkeur 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 voordat u codex start
Sla het bestand op en herstart Codex. codex mcp list toont unipile als enabled, en /mcp binnen een sessie toont de server. Gecontroleerd op codex-cli 0.154.0.
Wat elke regel doet, gecontroleerd op codex-cli 0.154.0
codex mcp add unipileMaakt de tabel [mcp_servers.unipile] aan in de globale config.toml. De naam kiest u zelf; houd hem kort, want hij wordt het prefix van de tools.--url "https://developer.unipile.com/mcp?branch=v2.0"Streamable HTTP-transport. Zet de URL tussen aanhalingstekens: het vraagteken is een glob-teken in zsh.http_headers = { "X-API-KEY" = "…" }Statische header die bij elke request wordt meegestuurd. Gebruik uw scoped Account API key, nooit een Service key of globale Account key.env_http_headers = { "X-API-KEY" = "UNIPILE_API_KEY" }Dezelfde header, met de waarde die bij het starten uit de omgeving wordt gelezen. De juiste vorm voor een project-config.toml die in git staat.startup_timeout_sec = 30Optioneel. De standaard is 10 s; verhoog hem als de eerste handshake op een traag netwerk een time-out geeft.enabled = falseOptioneel. Schakelt de server uit zonder de entry te verwijderen, handig om te wisselen tussen de keys van Development en Production.Het Codex-specifieke deel
Houd uw API-sleutel uit config.toml
http_headers schrijft de key in platte tekst in een bestand dat in back-ups belandt en, bij een projectconfig, in git. Codex heeft drie manieren om de X-API-KEY-header te versturen; kies de manier die past bij waar het bestand staat.
1http_headers, statische waardeDe vorm uit de Unipile-documentatie. Prima voor een gebruikersconfig op uw eigen machine, nooit voor een bestand dat in een repository wordt gedeeld.http_headers = { "X-API-KEY" = "your-scoped-api-key" }
2env_http_headers, gelezen bij het startenKoppelt de headernaam aan de naam van een omgevingsvariabele. Het bestand bevat geen geheim, elke developer exporteert zijn eigen scoped key. De juiste vorm voor een project-config.toml.env_http_headers = { "X-API-KEY" = "UNIPILE_API_KEY" }
export UNIPILE_API_KEY=your-scoped-api-key
3http_headers_helper, via een commandoEen lokaal commando dat de headers als JSON uitvoert, voor teams die keys uit een vault halen. En denk aan CODEX_HOME: die verplaatst de hele configuratiemap, dus een server die in de ene terminal is opgeslagen, kan in een andere ontbreken.http_headers_helper = "./scripts/unipile-headers.sh"
Verifiëren
Controleer de verbinding
Drie checks: in de CLI, binnen een sessie en daarna met een prompt die alleen de specificatie leest. Geen enkele raakt een gekoppeld account.
1In de Codex CLIlist toont één regel per server met de URL en de status. get toont het transport, de headers en het commando om de server te verwijderen.codex mcp list
codex mcp get unipile
2Binnen een sessieIn de Codex TUI, de IDE-extensie (tandwielmenu, MCP servers) en de ChatGPT-desktopapp (Settings, MCP servers) verschijnt dezelfde entry: één config, drie omgevingen./mcp
# Status enabled, Auth Unsupported is normaal: de server gebruikt een header, geen OAuth
3In een chat, zonder een account aan te rakenStel een vraag die alleen de API-specificatie leest. Antwoordt de agent met echte routes en parameters, dan is de server goed gekoppeld.Gebruik de Unipile MCP en toon de endpoints om personen te zoeken op LinkedIn, met hun verplichte parameters.
Prompts, geen lijmcode
Geef uw agent de prompt
Drie integratieopdrachten, elk met de exacte prompt om in Codex te plakken, de Unipile-endpoints die de agent leest en uitvoert, en wat er in uw project terechtkomt. Paden zijn volledig, op de API-basis-URL
https://api.unipile.com, met uw scoped key in de X-API-KEY header.Voeg zoeken naar personen op LinkedIn toe aan mijn CRM, en laat de gebruiker daarna het geselecteerde profiel openen en van daaruit een gesprek starten.
Endpoints zoeken"linkedin search people profile"3 resultaten
Request uitvoerenPOST /v2/{account_id}/linkedin/search10 resultaten
Toegevoegd
GET /api/linkedin/search (trefwoorden, pagineringscursor) en GET /api/linkedin/profiles/:identifier. De resultatenlijst bewaart de provider-ID die de zoekopdracht teruggeeft, de profielroute hergebruikt die, en de knop "Bericht" geeft hem door bij het aanmaken van de chat. Beide uitgevoerd op de Development-app.Eén identifier van zoekresultaat tot gesprek
Het lastige aan een LinkedIn-feature zijn niet de calls, maar dezelfde identifier vasthouden van de zoekregel naar het profiel en daarna naar het bericht. Codex leest de drie contracten via de server, ziet welk veld die identifier in elke response bevat, en schrijft de routes zo dat er niets wordt gegokt.
Endpoints die de agent gebruikt
POST/v2/{account_id}/linkedin/searchGET/v2/{account_id}/users/{identifier}POST/v2/{account_id}/chats
Veelgemaakte fout: Zoeken met het ene account en berichten sturen met het andere. Het profiel en de chat moeten worden geopend op dezelfde
Bouw een LinkedIn-integratie
account_id waarmee is gezocht.Genereer uit de API-schema's een getypeerde Node.js- en Python-client voor de Unipile-routes voor chats en e-mails die we gebruiken, met retries bij 429.
Endpoint lezenGET /v2/{account_id}/emailsschema geladen
Request uitvoerenGET /v2/{account_id}/chats200 OK
Gegenereerd:
unipile-client.ts en unipile_client.py op basis van de request- en responseschema's: getypeerde list- en send-methodes voor chats en e-mails, een helper voor cursorpaginering, exponential backoff bij 429 met de Retry-After-header. Beide clients hebben de list-calls uitgevoerd op de Development-app.Getypeerde clients uit de echte schema's, niet uit het geheugen
Codex gokt de payloads niet. Hij leest via de server de request-body en het responseschema van elke route, genereert de types en voert per methode één call uit op uw Development-applicatie voordat u de diff reviewt. De officiële SDK's voor Node.js en Python blijven de referentie; de gegenereerde client houdt u zelf klein.
Endpoints die de agent gebruikt
GET/v2/{account_id}/chatsPOST/v2/{account_id}/chats/{chat_id}/messages/sendGET/v2/{account_id}/emailsPOST/v2/{account_id}/emails/send
Veelgemaakte fout: Een send opnieuw proberen na een time-out zonder idempotentiecheck. Een bericht kan maar één keer vertrekken; probeer leescalls opnieuw, geen schrijfacties.
Bekijk de officiële SDK's
Ondersteun meerdere gekoppelde accounts voor elke gebruiker van mijn SaaS: ze kunnen meerdere LinkedIn- en e-mailaccounts koppelen en kiezen welk account verstuurt.
Endpoint lezenGET /v2/accountsschema geladen
Request uitvoerenGET /v2/accounts3 accounts
Een tabel
accounts toegevoegd, met als sleutel de gebruiker en account_id, een keuzelijst in de composer, en POST /api/messages dat verstuurt via het geselecteerde account. Reconnect-statussen uit de accounts-route worden als badge getoond. Gecontroleerd met drie accounts op de Development-app.Eén gebruiker, meerdere accounts, één Scope per workspace
Elk account dat uw gebruikers via Hosted Auth koppelen, krijgt een eigen
account_id. De agent ontwerpt de mapping tussen uw gebruikers en die ID's, leest de route voor de accountstatus om reconnect- en checkpoint-statussen te tonen, en stuurt elke verzending naar het account dat de gebruiker koos.Endpoints die de agent gebruikt
GET/v2/accountsGET/v2/accounts/{account_id}POST/v2/auth/linkPOST/v2/{account_id}/chats
Veelgemaakte fout: De account-ID op de workspace opslaan in plaats van bij de gebruiker. Accounts horen bij de persoon die ze heeft gekoppeld; de workspace groepeert alleen Scopes en keys.
Hosted Auth implementeren met een agent
Van Development naar productie
Test eerst op een Development-applicatie
Het Unipile-dashboard scheidt een Development-applicatie van een Production-applicatie. Geef Codex een scoped key uit de Development-applicatie, met één of twee testaccounts gekoppeld via Hosted Auth. De agent voert echte requests uit op die accounts, namens de geauthenticeerde gebruiker die ze heeft gekoppeld en binnen de limieten van elke provider, en niets raakt de accounts van uw gebruikers tot u live gaat. Laat
default_tools_approval_mode op prompt staan tijdens het bouwen als u elke schrijfactie wilt bevestigen.Valideer de connect-flow end-to-end: auth-link server-side aangemaakt, account-ID opgeslagen bij de gebruiker.
Valideer per feature één lees- en één schrijfactie: chats oplijsten, een bericht versturen op het testaccount.
Valideer een webhook-levering en een reconnect- of checkpoint-status voordat u de key naar Production omzet.
crm-app · DevelopmentGebruikt door Codex
Scopedev-tests · 2 accounts
Key
scoped Account API keyAccountsLinkedIn-testaccount, Gmail-testmailbox
Webhooks1 endpoint · berichtevents
crm-app · ProductionOnaangeroerd
Scopeéén per workspace
Key
scoped keys, alleen in uw backendAccountsde eigen accounts van uw gebruikers, via Hosted Auth
Probleemoplossing
Veelvoorkomende fouten en wat ze betekenen
Wat u ziet als een Codex MCP-entry niet klopt, en de oplossing voor elk ervan. Meestal komt het neer op het bestand, de TOML, het trust-niveau of de key.
De server verschijnt niet na het bewerken van config.toml
codex mcp list toont niets, of de entry ontbreekt binnen een sessie.
OplossingHerstart de client: het bestand wordt bij het opstarten gelezen. Controleer daarna CODEX_HOME: die verplaatst de hele configuratiemap, dus een server die in de ene terminal is opgeslagen, kan in een andere onzichtbaar zijn. Voer codex mcp list uit in dezelfde shell waarmee u Codex start.
De projectconfiguratie wordt genegeerd
.codex/config.toml staat in de root van de repository, maar Codex gebruikt nog steeds de globale entry, of geen enkele.
OplossingCodex laadt de projectlaag alleen voor een vertrouwd project. Markeer het met trust_level = "trusted" onder [projects."/path/to/repo"] in de gebruikersconfig, of verplaats de entry naar ~/.codex/config.toml.
Ongeldige TOML
Het bestand kan niet worden geparsed en alle servers verdwijnen tegelijk.
OplossingEen tabel die exact [mcp_servers.unipile] heet, aanhalingstekens rond "X-API-KEY" in de headertabel, en een tabel, geen string, voor http_headers. Eén ontbrekende sluitaccolade haalt het hele bestand onderuit.
401 Unauthorized bij requests
De server staat in de lijst en leest de specificatie, maar het uitvoeren van een request mislukt.
OplossingDe header ontbreekt, de variabele die in env_http_headers wordt genoemd, is niet geëxporteerd in de shell die Codex startte, of de key is een Service key of globale Account key in plaats van een scoped Account API key uit uw Development-applicatie.
De instellingen melden dat de server niet beschikbaar is
De IDE-extensie of de desktopapp markeert de server, maar acties worden wel uitgevoerd.
OplossingDie check zoekt naar resources, en de Unipile-server biedt acties aan, geen resources. Bevestig dit met /mcp binnen een sessie en door één leescall uit te voeren. U hoeft niets aan te passen.
Time-out
Het opstarten of een call overschrijdt de limiet.
OplossingDe standaardwaarden zijn startup_timeout_sec = 10 en tool_timeout_sec = 60. De server is remote, er is geen proces om te starten: controleer de URL (?branch=v2.0 inbegrepen), het netwerk en een eventuele bedrijfsproxy voordat u de time-outs verhoogt.
6000+
Bedrijven innoveren met Unipile
Vertrouwd door marktleiders
1 API
Activiteiten stroomlijnen voor alle belangrijke communicatiekanalen
2 dagen
Snel live integratie bereiken met minimale installatie
30%
Vermindering van onderhoudsinspanningen en -middelen
Ingebouwde beveiliging en compliance
Enterprise-bescherming voor uw gegevens en workflows Meer informatie over onze beveiliging
SOC 2 type II
Gecertificeerd
Onafhankelijk gecontroleerde beveiligingscontroles voor gegevensbescherming en operationele integriteit.
GDPR
Conform
Volledige naleving van de Europese regelgeving voor gegevensbescherming voor de privacy van gebruikers.
99.9%
Platform Uptime over de laatste 24 maanden
24/7
Wereldwijde ondersteuning met krachtige API
FAQ Codex MCP-server
De vragen die mensen echt intypen: config.toml in plaats van mcp.json, waar het bestand staat, codex mcp add, de key buiten het bestand houden, de drie omgevingen, wat u controleert als er niets verschijnt, time-outs en keys.
Nee. Codex slaat zijn MCP-configuratie op in
~/.codex/config.toml, in TOML, één tabel per server met de naam [mcp_servers.<name>]. Codex kent geen mcp.json, en het bestand wordt niet bij de installatie aangemaakt: u maakt het zelf aan, of codex mcp add maakt het voor u aan. Een vertrouwd project kan ook een .codex/config.toml in de root hebben.~/.codex/config.toml voor de gebruikersconfiguratie, .codex/config.toml in de root van de repository voor de projectconfiguratie. De variabele CODEX_HOME verplaatst de hele configuratiemap: als een server in de ene terminal verschijnt en in een andere niet, controleer die dan eerst. Codex CLI, de IDE-extensie en de desktopapp lezen hetzelfde bestand.Deels.
codex mcp add unipile --url "https://developer.unipile.com/mcp?branch=v2.0" schrijft de tabel voor een streamable HTTP-server, en --bearer-token-env-var dekt servers die een Bearer-token gebruiken. De Unipile-server authenticeert met een X-API-KEY header, die het commando niet kan instellen, dus voegt u http_headers of env_http_headers toe aan de entry die het heeft aangemaakt. Gecontroleerd op codex-cli 0.154.0.Gebruik
env_http_headers = { "X-API-KEY" = "UNIPILE_API_KEY" }: die koppelt de headernaam aan de naam van een omgevingsvariabele in plaats van aan een waarde, zodat het bestand zonder geheim kan worden gecommit en elke developer zijn eigen scoped Account API key exporteert. http_headers is voor statische waarden, en met http_headers_helper maakt een lokaal commando de headers aan als JSON.Ja. De drie omgevingen van één Codex-host lezen dezelfde configuratie, dus een server die u één keer toevoegt, is overal beschikbaar. In de desktopapp en in de extensie kunt u hem ook toevoegen via Settings, MCP servers, Add server, met Streamable HTTP als keuze. Herstart de client na het opslaan van het bestand.
Vier oorzaken, op volgorde: de client is niet herstart; het bestand staat onder een andere
CODEX_HOME dan uw huidige shell; de tabel staat in het projectbestand .codex/config.toml en het project is niet gemarkeerd met trust_level = "trusted", waardoor Codex de projectlaag volledig overslaat; of de TOML is ongeldig. Gebruik codex mcp list, en daarna /mcp binnen een sessie.startup_timeout_sec overschrijft de standaard opstarttime-out van 10 seconden en tool_timeout_sec de standaardtime-out van 60 seconden per tool, allebei onder de servertabel. De Unipile-server is remote via HTTP, zonder lokaal proces om te starten, dus een opstarttime-out wijst bijna altijd op de URL, het netwerk of een bedrijfsproxy, niet op de server.De server antwoordt zonder key zolang de agent alleen de API-specificatie leest. Om echte requests uit te voeren, maakt u een Scope aan in uw Development-applicatie, wijst u de testaccounts toe en genereert u een scoped Account API key voor die Scope. Geef een MCP-client nooit een Service key of een globale Account key.