Setup
Connect a cloud AI agent to the FullVision MCP Server
The FullVision MCP Server lets a cloud AI agent (Claude, Cursor, or any MCP-compatible client) query your analytics in plain language — no SDK, no SQL, no exports. The agent discovers what's available and answers questions directly against your live data.
Use it when you would rather ask "which channel drove the most revenue last month?" than write the query that answers it.
It exposes 38 tools — reports, people, audiences, custom reports and insights — covering revenue (Stripe), web traffic, attribution, conversion funnels, SEO (Google Search Console), product engagement and audience segmentation. See Tools for the full tool list.
1. Browser connectors (claude.ai, ChatGPT)
Both connect through the browser — no API key to copy or paste. Claude Code, Codex, Cursor and VS Code use the key-based setup in section 2, except when you install FullVision with your coding agent.
claude.ai
Settings → Connectors → Add custom connector, URL
https://data.fullvision.io/mcp. You're redirected to sign in and approve
a workspace in the browser.
ChatGPT
Requires developer mode (Plus, Pro, Business, Enterprise or Education;
web only). On Business and Enterprise, a workspace admin enables it first
in Workspace Settings → Permissions & Roles → Connected Data. Same URL:
https://data.fullvision.io/mcp.
Only workspace owners can authorize a connector. A connector can also run the setup tools that install FullVision in a project; a pasted key cannot.
A connector appears in Settings → API keys as a named key. Revoking that key disconnects it.
2. Key-based clients (Claude Code, Cursor, VS Code, Codex)
Mint a key with read access
Open MCP in the dashboard and mint a key — it is shown once, and the same page renders the config below with the key already filled in. The key encodes your workspace, so it only ever returns your data.
The server admits a key only if it carries
read scope (read:*, or any
of revenue:read, web:read, search:read, attribution:read,
customer:read). The events key on the Setup page is events:write and
is refused with 403.
Add the server to your MCP client
Add this to Claude Desktop, Claude Code, Cursor, or any MCP-compatible client:
{
"mcpServers": {
"fullvision": {
"url": "https://data.fullvision.io/mcp",
"headers": {
"Authorization": "Bearer sk_your_key"
}
}
}
}Replace sk_your_key with your FullVision API key.
Install in Cursor
One-click install. Update your API key after.
Install in VS Code
One-click install. Update your API key after.
Copy MCP Config
Copy the JSON block above into any MCP-compatible client.
CLI clients take it in one command instead:
# Claude Code
claude mcp add --transport http fullvision https://data.fullvision.io/mcp \
--header "Authorization: Bearer sk_your_key"
# Codex — reads the token from an env var
export FULLVISION_API_KEY="sk_your_key"
codex mcp add fullvision --url https://data.fullvision.io/mcp \
--bearer-token-env-var FULLVISION_API_KEY3. Verify
Ask your agent: "Which channel drove the most new-customer revenue last
month?" It should call channel-report and answer from the rows. If it
does, you're connected.
Install FullVision with your coding agent
Your coding agent (Claude Code, Cursor or Codex) can install FullVision in your codebase for you: the web tracker, signup and login events, and Stripe payment attribution. It reads your project, edits the code, and hands you the links for anything that has to happen in the browser.
The tools that drive it are served over MCP only, with no REST endpoint:
| Tool | What it does |
|---|---|
setup_status | Returns the status of every setup step (pending, waiting_on_user, live, skipped) and the link the user must open when a step waits on them. |
setup_next_step | Returns the next step, with instructions for the project's stack, the values to use and how to verify it. Call it again after each step until it returns wrap_up. |
setup_verify | Checks one step now and returns its status. It never waits: call again after retry_seconds. |
setup_create_event_key | Creates a secret key that can only send events (events:write) and returns it once, to write to .env as FULLVISION_SECRET_KEY. |
setup_skip | Marks an optional step (stripe_connect, checkout, channels) as not needed, after the user confirms. |
All five need the setup:write scope, which only a workspace owner's browser
sign-in grants: an API key does not unlock them.
Add the server without a key
# Claude Code
claude mcp add --transport http fullvision https://data.fullvision.io/mcp
# Codex
codex mcp add fullvision --url https://data.fullvision.io/mcpIn Cursor, use Set up with AI → Add to Cursor in the onboarding wizard. Don't pass an API key: your browser opens to sign in and approve a workspace, the same way as a browser connector. Only this browser sign-in unlocks the setup tools. A key minted on the MCP page does not.
Ask it to set up FullVision
Paste this prompt into the agent, from the root of your project:
Set up FullVision in this project. Use the FullVision MCP tools: call
setup_next_step with the stack you detect, follow each step, and keep going
until it returns wrap_up.The agent works through these steps in order:
| Step | What happens |
|---|---|
| Connect Stripe | You open a link, connect Stripe in the browser, then click Start backfill. |
| Web tracker, marketing site | The agent installs the tracker on your marketing site (the host of your workspace's website URL). |
| Web tracker, app | The agent installs the tracker on your app (every other host). |
| Signup and identify events | If .env has none yet, the agent creates an events-only secret key and writes it to .env as FULLVISION_SECRET_KEY. It adds server-side calls at signup and login. It then proposes a few more events for you to approve. |
| Stripe payment attribution | The agent attributes payments for the way your product takes them: fv_visitor_id in the metadata of every Checkout Session or PaymentIntent your server creates, or your signed-in user's id appended to your Payment Links. |
| Channels | You open a link per channel (Search Console, Google Ads, Meta Ads, LinkedIn Ads) and connect it in the browser. |
Tracker install
The agent installs the tracker through a reverse proxy by default: a path
on your own domain (such as /k3x9q2mz/) that forwards to FullVision. Ad
blockers drop requests to third-party trackers, often 10–30% of a technical
audience, and that skews attribution toward the channels whose visitors block
least. A path on your own domain keeps those visitors. The agent writes the
proxy into your project (Next.js middleware, Nginx, Caddy or your Node
server), and it ships with your next deploy. Every proxy sends the
X-FV-Proxy: 1 header; without it, requests count as direct.
If you use Cloudflare, the agent can deploy a Cloudflare Worker with your
already-logged-in wrangler, or hand you the code. It never asks for a
Cloudflare token. When your stack has no proxy option, or you decline it, the
agent uses the plain snippet. A workspace that already uses a managed
subdomain (CNAME) keeps it. The CNAME option itself lives in the dashboard,
because it needs a DNS change at your provider.
Marketing site and app in separate projects
Tell the agent which of the two the current project contains. It does only the
steps that belong there. The events and payment steps need the app. When it is
done, it lists what remains in the other project and asks you to open your
coding agent there and paste the same prompt. setup_status shows those steps
as pending with the reason other_repository.
If your marketing site is built in a site builder (Webflow, Framer, Wix, Squarespace or WordPress), the agent gives you the snippet with your values filled in and tells you where to paste it in that tool. The reverse proxy does not apply there. The step turns live on the first pageview after you publish. A workspace with no website URL has a single surface: the app tracker covers every host.
At the end the agent summarizes every step and lists the environment variables
to set on your hosting provider before you deploy (FULLVISION_SECRET_KEY).
Each step reports one of these statuses:
- pending: not started.
- waiting_on_user: the code is in place, or the link has been handed to you, and FullVision is waiting for data. The tracker turns live on the first pageview from your deployed site, events on the first signup, and payment attribution on the first attributed live-mode payment. Stripe test-mode payments are not imported, so a test purchase never completes that step. A waiting step does not block the next one.
- live: FullVision is receiving the data.
- skipped: not needed. Connect Stripe, payment attribution and channels
can be skipped once you confirm; the trackers and events cannot. Payment
attribution is skipped automatically when you have no Stripe or take no
payments. The marketing-site tracker is skipped when your workspace has no
website URL (
no_website_url).
Payment Links attribute purchases by account only: a link clicked by a signed-in user carries their id, but a public link clicked by an anonymous visitor is not attributed. Checkout Sessions attribute both.
Things to know:
- You connect Stripe and your channels yourself, in the browser. The agent never asks for a Stripe, Search Console or ad-platform key, and won't accept one pasted into the chat. A connect link only works for an owner of the workspace being set up, and only while it is your current workspace. If it isn't, the page offers to switch.
- The events key is yours to manage. It can only send events. It appears
under Settings → API keys as
setup-agent <date>and keeps working if you disconnect the agent, because your production app depends on it. A workspace can hold at most three active setup keys. Revoke an old one, or reuse the key already in.env, if the agent reports the limit. - No account yet? Sign up from the sign-in page the agent opens, with Google or with email and password, create your workspace, and you're sent back to approve the connection. With email and password, finish within the hour in the same browser.
- Connected before the setup tools existed? Your connector keeps working for reports but has no setup tools. Remove it and connect again.
How to use it
You don't call tools by hand — you ask business questions, and the agent picks the report and parameters. A typical turn:
- The agent calls
check_data_healthwhen the answer will drive a spend or pricing decision. - It calls the report that matches the question —
channel-report,page-report,keyword-report,ad-report,form-report— withfrom/toand, on a group form,limitandgranularity. - It reads the returned rows and answers in plain language.
Just ask naturally. Examples that work out of the box:
- "Which channel drives the most new-customer revenue over the last 90 days?"
- "Top landing pages by revenue this month, marketing site only."
- "Which Google Search queries convert to revenue?"
- "Which paid campaigns have the worst LTV-to-CAC ratio?"
- "Build me an audience of people who hit pricing twice in 30 days and never paid, and sync it to Google Ads."
- "Set up an A/B test on my pricing hero and tell me when it has a verdict."
There is no raw SQL and no schema browsing on this surface. If a question isn't answerable from a report, say so — the fix is a new report, not a query.
Endpoint
https://data.fullvision.io/mcpTransport: Streamable HTTP · Auth: Authorization: Bearer sk_…
