Skip to main content
Bounty exposes a read-only Model Context Protocol server for marketing analysis. It gives MCP clients a curated way to inspect campaign, ad, creative, metric, and action data using the authenticated user’s normal Bounty permissions. The production MCP server URL is:
The server uses Streamable HTTP. It is a remote MCP server, not a local stdio server.

What The MCP Server Can Access

The MCP server can read organization-scoped Bounty data that the authenticated user can already access:
  • Account context and data freshness.
  • Saved marketing metric definitions, trends, and breakdowns.
  • Campaign rankings and campaign performance.
  • Campaign analysis findings.
  • Facebook ad rankings, campaign ads, and creative analytics.
  • Google Ads keyword and bidding diagnostics.
  • Existing Bounty actions.
It does not expose raw warehouse SQL, arbitrary table dumps, arbitrary Python execution, infrastructure credentials, or write actions.

Set Up In Claude Code

Claude Code can connect to Bounty as a remote HTTP MCP server:
Then, inside Claude Code, run:
Choose the bounty server and follow the browser login flow. Bounty will ask you to sign in if needed, then approve MCP access for the local Claude Code client. For client-specific command details, see Claude Code’s MCP documentation. After authentication, ask Claude Code questions such as:
  • “Use Bounty MCP to rank Google Ads campaigns by CAC for the last 30 days.”
  • “Find saved metrics related to CAC, then show the daily trend for the best matching metric.”
  • “Analyze campaign facebook:1234567890 for the last 7 days and summarize the evidence.”

Set Up In Claude Cowork

Claude’s hosted custom connectors, including Cowork connectors, use remote MCP servers from Anthropic’s cloud infrastructure. Add Bounty as a custom web connector using:
For individual plans, add it from Claude’s connector settings. For Team or Enterprise plans, an owner typically adds the custom connector for the organization first, then each user connects it from their own connector settings. Cowork uses the same remote connector setup. Hosted Claude and Cowork connectors use Claude’s hosted OAuth callback URL. Bounty supports that hosted callback as well as Claude Code’s local loopback callback flow. For client-specific UI details, see Claude’s remote MCP custom connector guide.

Set Up In ChatGPT

ChatGPT can use remote MCP servers through custom apps in developer mode. Create a custom app from ChatGPT’s Apps settings and use the Bounty MCP server URL:
Use OAuth authentication. Bounty’s MCP OAuth flow is a public-client authorization code flow with PKCE and does not require a shared client secret. Hosted ChatGPT apps use a hosted OAuth callback URL. Bounty supports ChatGPT’s hosted connector callback flow with OAuth and PKCE. For client-specific UI details, see OpenAI’s ChatGPT developer mode guide.

How Authentication Works

The MCP endpoint requires a bearer token:
When a client connects without a valid token, Bounty returns 401 Unauthorized with a WWW-Authenticate header pointing to its protected resource metadata. Bounty exposes OAuth discovery metadata at:
The OAuth endpoints are: The authorization server metadata advertises the dynamic registration endpoint as registration_endpoint. The token flow uses the authorization_code grant, PKCE S256, and the mcp:read scope. The resulting MCP bearer token is audience-bound to api/mcp and wraps the user’s Bounty session. It expires with the underlying session; when it expires, reconnect the MCP client to authorize again. Bounty never asks the MCP client for an organization id, schema name, warehouse name, connection string, or platform credential. Organization and data scope are always derived from the authenticated Bounty user.

Dynamic Client Registration

POST /api/mcp/oauth/register supports allowed public PKCE MCP clients, including MCP Inspector, Claude Code, hosted Claude and Cowork connectors, and ChatGPT custom apps. Dynamic registration does not require a pre-issued Bounty client id, and Bounty does not issue a client secret. Registration accepts:
  • HTTP redirect URIs on localhost or 127.0.0.1 for local clients such as MCP Inspector and Claude Code.
  • https://chatgpt.com/connector/oauth/{callback_id} and the legacy https://chatgpt.com/connector_platform_oauth_redirect callback for ChatGPT.
  • https://claude.ai/api/mcp/auth_callback for hosted Claude and Cowork connectors.
  • Grant types that include authorization_code.
  • Response types that include code.
  • Scope unset or limited to mcp:read.
Other HTTPS redirect URIs are rejected. Bounty also applies the same hosted callback allowlist when the browser authorization page and /api/cli/authorize resolve the request to the MCP audience; plain Bounty CLI authorization remains local-loopback only. Example registration payload:
The response includes a client_id, client_id_issued_at, and echoed client metadata.

Set Up In MCP Inspector

In MCP Inspector, use the Streamable HTTP server URL:
The Inspector should discover Bounty’s protected resource metadata, register a local public PKCE client, open the Bounty login and approval flow in the browser, exchange the code for an MCP token, then call the server with that bearer token. For local development against a Next.js server bound to 0.0.0.0:3000, use the local app URL that users can open:
Bounty’s MCP metadata normalizes local development origins so discovery documents advertise localhost:3000 instead of 0.0.0.0:3000.

Date Ranges

Most data tools accept either explicit dates:
or a preset:
Supported presets are:
  • today
  • yesterday
  • last_7_days
  • last_30_days
  • month_to_date
Explicit dates win over presets. Tool responses include the requested range and the effective range used by Bounty.

Tool Reference

All tools are read-only and return both text and structured JSON. Data-bearing tools include freshness, warnings, and a confidence basis.

Example Workflows

Start broad, then drill down:
Inspect metric semantics before reporting:
Investigate a campaign:
Review existing actions:

Evidence And Confidence

Bounty MCP responses are designed for evidence-based analysis:
  • Use rank_campaigns for campaign CAC rankings instead of ad hoc joins.
  • Treat stale freshness, missing freshness, or source-alignment warnings as directional.
  • Prefer configured primary conversion and paid-efficiency semantics over raw platform conversion counts.
  • Cite the tool outputs, date range, and warnings when making budget or performance recommendations.