Skip to main content

Connect an agent

Setup steps for each supported agent. Before you start, confirm the prerequisites in Introduction: an organization admin must have enabled the agent, and the agent must present the client id assigned to it.

Claude

In the command-line examples below, snap-ads is a local name only — it identifies the server in the client's own configuration and namespaces its tools.

Claude Code

claude mcp add --transport http --client-id claude-snap-ads snap-ads https://mcp.snapchat.com/ads
claude mcp login snap-ads

Add --no-browser to login on a headless or SSH session to print the authorization URL instead of opening a browser.

Claude Desktop and Claude web

Both surfaces share one account-synced connector, so adding it once covers both.

  1. Open Settings → Connectors → Add custom connector.
  2. Set the URL to https://mcp.snapchat.com/ads.
  3. In the advanced options, set the OAuth client id to claude-snap-ads and leave the client secret empty.
  4. Save the connector, then connect, and complete the Snapchat sign-in and approval.

Claude Desktop through a local bridge

This is an alternative to the connector above, not an addition to it. Claude Desktop can also reach the server through a bridge process that runs on your own machine. Add the following to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
"mcpServers": {
"snap-ads": {
"command": "npx",
"args": [
"-y",
"mcp-remote@0.1.38",
"https://mcp.snapchat.com/ads",
"--static-oauth-client-info",
"{\"client_id\":\"claude-snap-ads\",\"scope\":\"snapads.read\"}"
]
}
}
}

Two details are load-bearing:

  • Keep scope exactly as shown. Without it the bridge requests a default set of scopes this server rejects, and authorization fails.
  • The desktop app does not inherit your shell environment. If it cannot find npx, replace command with an absolute path to your Node installation and add an env block setting PATH.

Codex and ChatGPT

Codex CLI

codex mcp add snap-ads --url https://mcp.snapchat.com/ads --oauth-client-id codex-snap-ads
codex mcp login snap-ads

--url selects the streamable-HTTP transport. Codex derives its own callback path and port, both already registered, so there is no redirect URI to configure.

ChatGPT

Add the connector in the ChatGPT web app. It is account-synced, so adding it once also makes it available in the ChatGPT desktop app. The desktop app's own custom MCP form is a different feature and cannot be used here, because it has no field for an OAuth client id.

Use these values:

SettingValue
Server URLhttps://mcp.snapchat.com/ads
Registration methodUser-defined OAuth client
OAuth client idchatgpt-snap-ads
OAuth client secretLeave blank
Token endpoint auth methodnone
Scopessnapads.read
Authorization URLhttps://mcp.snapchat.com/authorize
Token URLhttps://mcp.snapchat.com/token
Resourcehttps://mcp.snapchat.com/ads

Leave the registration URL and every OpenID Connect field empty. This server supports neither dynamic client registration nor OpenID Connect.

ChatGPT generates the connector's callback URL and displays it read-only in the connector form. Snap registers that exact URL, so check the value your connector shows against the one your Snap Account Manager has on file before you authorize. Editing the connector's OAuth client id keeps the same callback URL. Deleting the connector and creating a new one may not, so avoid recreating it once the URL is registered.

Antigravity and Gemini

Antigravity

Antigravity's MCP panel has no client id field, so configure it as JSON. Use its Open MCP Config action and edit ~/.gemini/config/mcp_config.json:

{
"mcpServers": {
"snap-ads": {
"type": "http",
"url": "https://mcp.snapchat.com/ads",
"oauth": {
"enabled": true,
"clientId": "antigravity-snap-ads",
"scopes": ["snapads.read"]
}
}
}
}

Then connect from the panel and complete the Snapchat sign-in and approval. Antigravity supplies its own callback address, so there is no redirectUri to set or omit.

Include "type": "http". Without it the panel reports Error: calling "initialize": rejected by transport: Service Unavailable, which reads as a server outage but is a client-side transport selection problem.

Gemini CLI

The Gemini CLI signs in to Google separately from the connection it makes to Snap, and the two are independent. Recent CLI builds have retired the individual Sign in with Google option, which now fails with a message pointing to Antigravity, so start the CLI with a Gemini API key or with Vertex AI credentials before adding the Snap connection. If you would rather not manage the CLI's own credentials, use Antigravity instead.

gemini mcp add --transport http snap-ads https://mcp.snapchat.com/ads registers the server, but the CLI exposes no flag for a pre-registered OAuth client, so set the client id directly in ~/.gemini/settings.json:

{
"mcpServers": {
"snap-ads": {
"type": "http",
"url": "https://mcp.snapchat.com/ads",
"oauth": {
"enabled": true,
"clientId": "gemini-snap-ads",
"scopes": ["snapads.read"]
}
}
}
}

The CLI attempts dynamic client registration first, so clientId is required rather than optional. Use type and urlhttpUrl is deprecated — and keep scopes an array. There is no mcp auth subcommand, so authorize from inside the CLI with /mcp auth snap-ads.

Do not set redirectUri. The CLI serves its callback on one fixed path, and oauth.redirectUri changes only the address sent to the authorization server, not the path it listens on. Pointing it elsewhere produces a successful approval followed by a "Not found" page, leaving the connection incomplete.

Was this page helpful?
Yes
No