Connect Chartsy to ChatGPT, the OpenAI API and other MCP clients
Chartsy MCP isn't a Claude feature that happens to use MCP - it's a standard remote MCP server. Anything that speaks the protocol can read your live revenue and traffic data: ChatGPT, the OpenAI API, an agent you wrote yourself, or the editor you already have open.
The setup is the same everywhere, because there are only two things any client needs: the server URL and a way to authenticate. The rest of this page is those two facts, in the shape each client expects them.
Using Claude?
You don't need this page. Connect Chartsy to Claude in 5 minutes is shorter and has a video - Claude runs the OAuth flow for you, so there's no token to handle.
What you need first#
- A Chartsy account on any plan, including the free trial.
- A connected payment provider. The server reads live Stripe or Paddle data, so one has to be connected and synced. The sample account seeded at signup doesn't count - it's the same demo data for everyone.
- A personal access token, for most clients on this page. See below.
Step 1: Generate a token#
Claude signs in with OAuth. Most other clients - and every scripted or API use - can't run that flow, so they send a token instead.
- In Chartsy, go to Settings → Claude & MCP.
- Click Generate token. It is shown once - copy it before you leave the page.
- Store it the way you'd store any API key: an environment variable or a secret manager, never committed to a repo.
Tokens last a year. That same tab lists every token you've issued, when it expires, and lets you revoke any of them instantly - which takes effect on the very next call.
If your client does support OAuth
Skip the token. Add https://mcp.chartsy.app/mcp as a remote MCP server and the client will send you to Chartsy to sign in, exactly as Claude does. VS Code and several desktop clients can do this.
Step 2a: ChatGPT#
Custom MCP connections live behind developer mode. In ChatGPT:
- Open Settings → Security and login and turn on Developer mode. Whether it's available depends on your account and, on a business or enterprise workspace, on your admin's policy.
- Add a new connection, give it a name and description - "Chartsy - live revenue and traffic data" is plenty - and paste the server URL, including the
/mcppath:
https://mcp.chartsy.app/mcp- Authenticate: sign in to Chartsy if ChatGPT offers OAuth, or paste your token if it asks for an API key or a custom header.
- Review the tools it discovers. You should see eighteen, all read-only.
Then ask it something broad - "what happened in my business yesterday?" - and it will answer from one call rather than a dozen.
OpenAI moves this menu occasionally
If the path above doesn't match what you see, OpenAI's own developer mode guide is the current source. The only thing Chartsy needs you to get right is the URL and the token.
Step 2b: The OpenAI API#
The Responses API can call a remote MCP server directly - OpenAI does the tool calling, you just declare the server. Pass your Chartsy token in the authorization field, not as a header:
curl https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5",
"tools": [
{
"type": "mcp",
"server_label": "chartsy",
"server_description": "Live MRR, churn, customer and site-traffic data from Chartsy.",
"server_url": "https://mcp.chartsy.app/mcp",
"authorization": "YOUR_CHARTSY_TOKEN",
"require_approval": "never"
}
],
"input": "What happened in my business yesterday?"
}'OpenAI doesn't store the value in authorization and it never appears in responses, so you send it with every request. require_approval can be "never" with a clear conscience here: every Chartsy tool is read-only, so there is no destructive call to approve.
If you're building something narrow - a weekly digest, a churn alert - restrict what the model can reach with allowed_tools:
"allowed_tools": ["get_daily_snapshot", "get_mrr", "get_churn_rate"]Step 2c: The OpenAI Agents SDK#
The Agents SDK connects to the server itself, which means your code sees the tool calls as they happen:
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
async with MCPServerStreamableHttp(
name="Chartsy",
params={
"url": "https://mcp.chartsy.app/mcp",
"headers": {"Authorization": f"Bearer {CHARTSY_TOKEN}"},
"timeout": 30,
},
) as chartsy:
agent = Agent(
name="Revenue analyst",
instructions="Answer questions about the business using Chartsy.",
mcp_servers=[chartsy],
)
result = await Runner.run(agent, "Which customers are at risk of churning?")
print(result.final_output)If you'd rather let OpenAI host the connection, pass the same details to HostedMCPTool in the agent's tools list instead - the fields are the ones from the Responses API example above.
Step 2d: Cursor, VS Code and everything else#
Most MCP clients keep servers in a JSON config file. The shape Cursor and many others use, with a token:
{
"mcpServers": {
"chartsy": {
"url": "https://mcp.chartsy.app/mcp",
"headers": {
"Authorization": "Bearer YOUR_CHARTSY_TOKEN"
}
}
}
}VS Code uses servers rather than mcpServers and can run the OAuth flow, so no token is needed - it will prompt you to sign in the first time a tool is called:
{
"servers": {
"chartsy": {
"type": "http",
"url": "https://mcp.chartsy.app/mcp"
}
}
}For anything else, these are the four facts to hand it: URL https://mcp.chartsy.app/mcp, transport streamable HTTP, auth OAuth or an Authorization: Bearer token, and scope read-only.
What any client can read#
The same eighteen tools, whichever client is connected: MRR overall, by plan and by country; revenue over any range; refunds; goals; churn, new subscribers, at-risk customers, top customers and revenue concentration; site visits, signups and traffic sources; plus two snapshot tools that answer "how is the business doing?" or "what happened yesterday?" in a single call.
The full list
Every tool, what each returns, and the limits that apply to all of them are in the Chartsy MCP reference.
The limits travel with the server, not the client, so pointing a different AI at it changes nothing: it stays read-only end to end, customer rows identify people by payment-processor ID only, every query is filtered to the accounts your own login owns, and access is re-checked on every call. Tool calls draw from your monthly ChartsyAI allowance wherever they come from.
Troubleshooting#
401, or the client says unauthorised.
The token is missing, mistyped, expired or revoked. Check it's sent as Authorization: Bearer YOUR_TOKEN - in the Responses API, as the authorization field with no Bearer prefix - and check the Claude & MCP tab to see whether it's still live.
The client connects but finds no tools.
Usually a URL missing the /mcp path, or a client configured for stdio rather than a remote HTTP server. Chartsy MCP is remote-only; there is nothing to install locally.
"This Chartsy login has no connected payment provider yet."
Connect Stripe or Paddle and let the first sync finish. The demo account seeded at signup doesn't count.
"This Chartsy login has N accounts, so account_id is required."
Name the account in your question, or call list_accounts first and pass the ID you want.
"You've used all N ChartsyAI questions included in your plan this month."
The allowance is spent. It resets on the 1st, or you can upgrade. Agents that poll on a schedule get through it faster than a person does - worth keeping in mind when you set the interval.
Anything else: support@chartsy.app.


