Appearance
Connect ChatGPT
Nexus MCP works in ChatGPT as a custom plugin through its public Streamable HTTP endpoint and built-in OAuth 2.1 flow.
Supported now
The plugin connection is not waiting for future OAuth work. Nexus already provides OAuth discovery, dynamic client registration, PKCE S256 authorization, consent, refresh-token rotation, and revocation.
The exact availability of developer mode and custom plugins can depend on the ChatGPT plan, workspace role, and administrator policy. OpenAI's current workflow is documented in Connect and test your plugin.
Before you start
Confirm all of the following:
- the customer MCP hostname is public and has a valid TLS certificate;
- the user can sign in to the correct Nexus tenant in the browser;
- the advertiser or publisher member has the required Nexus permissions;
- ChatGPT developer mode/custom plugins are allowed for the account or workspace;
- pop-ups and redirects are allowed during the first OAuth connection.
You do not need to copy a Nexus API key into ChatGPT.
Step 1: use the member endpoint
text
https://mcp.example.com/mcpThis public connection is for advertiser and publisher members. Administrative connections are provided privately from the Nexus Account Managers screen.
Step 2: enable developer mode
- Open ChatGPT → Settings.
- Open Security and login.
- Enable Developer mode.
- If the control is unavailable in a managed workspace, ask the workspace owner to allow custom plugins.
The label can change as ChatGPT evolves, but the official flow always starts by enabling developer access for custom MCP plugins.
Step 3: create the Nexus plugin
- Open ChatGPT Plugins.
- Select the + button to add a plugin.
- Enter the connection details:
| Field | Value |
|---|---|
| Name | Nexus Member |
| Description | Nexus advertiser, campaign and reporting tools |
| Connection URL | https://mcp.example.com/mcp |
- Create the plugin and let ChatGPT discover the server metadata and available tools.
- Review the displayed tool names before completing the connection.
Never use /docs, /api-docs, the REST api. hostname, or a URL containing a credential.
Step 4: authorize Nexus
ChatGPT opens the Nexus OAuth flow automatically:
- Nexus identifies the requested member MCP resource.
- If necessary, the browser opens the normal Nexus login page for that customer.
- Sign in to the intended Nexus account. The MCP page itself never asks for a password.
- Review the tenant, ChatGPT callback origin, and requested scopes.
- Approve only the access required for this connection.
- Nexus returns a one-time authorization code to ChatGPT; ChatGPT stores opaque MCP tokens.
Recommended starting scopes:
text
nexus:readRequest additional scopes only for the intended workflows:
text
nexus:write # confirmed campaign/feed/entity changes
nexus:upload # permitted CSV uploads
offline_access # refresh and approved scheduled tasksStep 5: review tools and enable the plugin
The tool list is filtered for the authorized member identity, enabled modules, scopes, and ownership.
Useful tools to look for include:
nexus_whoaminexus_helpnexus_list_campaignsandnexus_get_campaignfor advertiser membersnexus_get_advertiser_statsnexus_analyze_statisticsnexus_resolve_commandandnexus_plan_commandsnexus_read,nexus_query, and confirmed write tools when permitted
Open a new conversation, select Nexus from ChatGPT's tools/plugins menu, and keep it enabled for that chat.
First safe test
Start by confirming identity and permissions:
Use Nexus to show my authenticated account type, tenant, enabled modules, OAuth scopes, and the capability groups available to me. Do not change anything.
Expected behavior:
- ChatGPT calls
nexus_whoami. - Nexus validates the OAuth token and live Nexus session identity.
- The result identifies the tenant and role without returning credentials.
Concrete advertiser examples
List owned campaigns
Show my active campaigns, sorted by daily spend descending. Return CID, name, bid, daily budget, spend, and status. Follow pagination and state whether the total is exact.
ChatGPT should use nexus_list_campaigns with a narrow request similar to:
json
{
"status": "active",
"orderBy": "d_revenue",
"order": "desc",
"offset": 0,
"limit": 100,
"detailLevel": "summary"
}Inspect one campaign
Show the complete configuration for campaign 12345, including budget flags, schedule, geo, device, browser, carrier, frequency cap, and allow/block lists. Do not change it.
This should resolve to nexus_get_campaign with campaignId: 12345. A foreign or missing CID returns the same not-found response and does not reveal another advertiser's data.
Analyze advertiser statistics
Analyze my advertiser campaign statistics for 2026-08-01 through 2026-08-17. Recompute weighted KPIs, rank campaigns by spend and conversions, compare the previous equal-length period, and flag data-quality issues. Do not change campaigns.
Nexus retrieves all required result pages before producing totals. Percentages and unit economics are recomputed instead of being summed.
How a campaign change should look
For a write-enabled connection, ask for a preview first:
Prepare changing campaign 12345's daily budget to 200 EUR. Read the current state, show the exact non-secret diff and validation result, but do not execute until I confirm.
The safe sequence is:
- resolve the command and read campaign 12345;
- load the operation contract and validate the proposed payload;
- display the exact before/after values;
- wait for an explicit confirmation from the user;
- create a payload-bound approval/fingerprint;
- execute once with an idempotency key;
- read the campaign again and report whether verification succeeded.
If the preview differs from the user's intent, do not confirm it. A confirmation cannot be reused for a changed payload.
Multi-command example
Pause Search feed 15, activate XML feed 22, and show campaign 45.
Nexus creates three ordered steps. The two mutations receive separate previews and confirmations; the campaign read needs no mutation confirmation. Execution is sequential and non-atomic, so ChatGPT must report partial completion precisely if a later step fails.
Common connection problems
| Symptom | Likely cause | Resolution |
|---|---|---|
| Plugin URL is rejected | Wrong hostname/path or invalid TLS | Use the exact public https://mcp.<domain>/mcp URL |
| Authorization opens the wrong Nexus area | The wrong account is active in the browser | Sign out, select the intended member, and reconnect /mcp |
| OAuth login loops | Stale Nexus/ChatGPT session, blocked cookies, or callback policy | Sign out, reconnect the plugin, and verify the exact callback origin |
| No tools appear | Discovery failed or cached metadata is stale | Remove/re-add the plugin and check MCP readiness/logs |
| A tool is missing | Current role/module/scope does not permit it | Check nexus_whoami; do not broaden permissions blindly |
| Read works but change is blocked | nexus:write is absent or confirmation is incomplete | Reconnect with the required scope and follow preview/confirmation |
| Token stops working after role/tenant change | Identity binding correctly rejected drift | Remove the connection and authorize it again |
For protocol and server-side diagnostics, continue with MCP troubleshooting.