FullVision

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.

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_KEY

3. 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:

ToolWhat it does
setup_statusReturns 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_stepReturns 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_verifyChecks one step now and returns its status. It never waits: call again after retry_seconds.
setup_create_event_keyCreates a secret key that can only send events (events:write) and returns it once, to write to .env as FULLVISION_SECRET_KEY.
setup_skipMarks 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/mcp

In 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:

StepWhat happens
Connect StripeYou open a link, connect Stripe in the browser, then click Start backfill.
Web tracker, marketing siteThe agent installs the tracker on your marketing site (the host of your workspace's website URL).
Web tracker, appThe agent installs the tracker on your app (every other host).
Signup and identify eventsIf .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 attributionThe 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.
ChannelsYou 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:

  1. The agent calls check_data_health when the answer will drive a spend or pricing decision.
  2. It calls the report that matches the question — channel-report, page-report, keyword-report, ad-report, form-report — with from / to and, on a group form, limit and granularity.
  3. 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/mcp

Transport: Streamable HTTP · Auth: Authorization: Bearer sk_…

On this page