FullVision

Tools

MCP tools available on the FullVision server

The FullVision MCP mirrors the API: reports, entities, audiences and experiments, plus data-health tools. 32 tools in total. There is no raw SQL and no schema exploration — you ask for a report, not a query. See Setup to connect.

Use this page when you want to know what your AI agent can actually reach, or when it calls the wrong tool and you want to name the right one for it.

Reports

These answer "where does the money come from?" — by page, channel, search keyword, paid campaign, email campaign or form.

One tool per report. Each has a group form (omit the addressing key → ranked list) and a single form (pass the key → one entity's deep-dive). fields trims the response blocks; it never widens one.

ToolDescription
page-reportFull per-page report — traffic, engagement, first-touch and assisted attribution, revenue, and product events. page_url_scope pins the marketing or product host.
channel-reportTraffic plus attributed new/returning customers and cash per channel bucket. Omit channel for all 9 buckets ranked; pass one for its sources, top landing pages and outcomes.
keyword-reportAttributed revenue plus Search Console metrics (clicks, impressions, CTR, position) with striking-distance and content-gap flags per query. Synced GSC data, not live.
ad-reportSpend-ranked paid-campaign leaderboard with full- and fair-window metrics, campaign LTV/CAC/ROAS (Google-only), and product events. level = campaign / ad_group / ad / keyword.
email-reportReach revenue plus causal (bought-in-session / influenced) revenue and the sends → clicks funnel per campaign. Reach metrics overlap across campaigns — never sum them.
form-reportStarts → submits and completion rate, reach plus causal revenue, and (single form) the captured-submissions list. Submissions contain what people typed into your forms — treat them as personal data.

Amounts are integer cents in each row's currency. Never sum across currencies.

Entities

These answer "who?" rather than "how much?". People and journeys return personal data — names, email addresses, event timelines — so an agent should quote them, not dump them.

ToolDescription
visitorsAudience profile: device / browser / country splits, active-hours heatmap, new-vs-returning, engagement top-line. Group-only.
peopleFind people by identifier (q: email / cus_… / person id) or by criteria (first-touch channel, plan, paid…). Returns person rows plus a lifetime-revenue summary — never timelines; follow journey_id to journeys. Rows are PII.
journeysThe event-by-event timeline for one person (journey_id or q) or a cohort — the only surface that returns timelines. Two date axes: from/to is the event window, created_from/created_to is cohort membership. Rows are PII.

Audiences

Build a segment as a criteria tree, check it, then activate it. The loop is build → compile → revise → commit, then attach a destination.

compile_audience_criteria answers a rejected tree with HTTP 200 and { "valid": false, "errors": [...] }, not a 4xx. Read the body, not the status code.

attach_audience_destination starts real delivery. The scheduler uploads the audience's members to the live ad account on its next tick — there is no preview and no dry run.

ToolDescription
list_audiencesEvery audience in the workspace: id, name, member count, refresh cadence, last refresh time and error. Archived audiences excluded.
create_audienceCreate an audience from a criteria_json tree. Names are unique per workspace (409 duplicate_name). Nothing is delivered until a destination is attached.
get_audienceOne audience in full, including its criteria tree, snapshot ids and emailable count.
update_audiencePatch name, description, refresh cadence or the criteria tree. Replacing the tree invalidates the current snapshot — attached destinations then see a full delta.
delete_audienceArchive an audience (soft delete). It stops refreshing and its destinations stop receiving members. No un-archive on this surface.
compile_audience_criteriaValidate a tree and estimate its size without creating anything. is_estimate: true with hit_limit: true means the count query timed out — the tree is valid, the number is unknown.
attach_audience_destinationAttach Google Ads Customer Match, Meta Custom Audience, LinkedIn DMP segment, or a webhook. Ad-platform targets require consent_attested: true and a ready platform connection (409 connection_not_ready).
list_audience_destinationsThe destinations attached to an audience, with per-platform sync state (match_status, list_size, last_synced_at).

The criteria grammar is documented at Criteria DSL; the create_audience and compile_audience_criteria tool descriptions carry the same grammar inline, so your agent has it without reading the docs.

Data health

ToolDescription
check_data_healthCall BEFORE trusting any number. Runs the three coverage checks (identity reconciliation, checkout-cookie coverage, server-event-cookie coverage) against fixed thresholds and returns a verdict: green = trust the numbers; amber = they are biased low by roughly the coverage gap; red = abort revenue-based decisions.
login-funnelLogin pageview → identify or signup in 30 minutes, same visitor_id. OAuth-safe: do not quote bounce on a login URL. from_path is required (path prefixes, each starting with /). Unlinked API signups with no visitor_id never convert.
get_replayDashboard URL of a sampled session recording, if one exists and has not expired. Pass a session_id from a $dead_click / $rageclick / login-funnel drop-off. 10% of product-host sessions are recorded; missing means unsampled or expired (7 days), not a tracking outage.

Experiments

Run the full A/B test loop: define metrics, create and start an edge experiment, read results, stop, and record the verdict. Experiment metrics are reusable, role-free measurement definitions — an experiment assigns each one as a goal ("move this") or a guardrail ("don't hurt this") when it references the metric's id. The decision journal (hypothesis at create, verdict via record_experiment_decision) is the cross-test memory: consult list_experiments before designing a new test.

ToolDescription
list_experimentsEvery experiment in the workspace — status, page under test, variations, dates, plus the journal (hypothesis, decision, learnings). The experiment memory; always read it first.
list_experiment_metricsThe workspace's reusable metrics. Check before creating — "signup conversion" usually already exists.
create_experiment_metricDefine a metric once: type binomial (converted yes/no) or mean (numeric per exposed visitor), source events or stripe, a numerator (what counts), and an attribution window_config.
create_experimentCreate a draft edge experiment. Control arm stays bare (serves the canonical page); every other arm needs a deployed variant url. hypothesis is required — it's the journal entry. Weights sum to 1.0; duration_days (default 7) auto-stops the test at the deadline.
check_experiment_powerFeasibility gate — call BEFORE create_experiment. Reports feasible, detectable_lift, required_days, daily_exposures from live data. feasible: false means the test cannot conclude in a reasonable window; rescope it rather than launching anyway.
get_experiment_resultsCompute a fresh snapshot and return per-variation sample size, conversion, uplift, CI, chance-to-win and p-value per goal metric, plus health checks (srm_p < 0.001 = broken split). Don't stop early on a good p-value — the stop rule is the planned end date.
update_experimentPatch an experiment. Everything is editable while it is a draft; once running only name, hypothesis and duration_days, and duration_days may only be extended.
start_experimentDraft → running; visitors see variants within ~60s. Deploy the variant page first. 409 page_conflict if another running experiment claims the page.
pause_experimentRunning → paused within ~60s; the experiment stays alive and resumable via start_experiment. Use this, not stop_experiment, for a temporary halt — stopped is terminal. Paused days still count against duration_days.
stop_experimentRunning → stopped (terminal, no resume) within ~60s. Normally the deadline auto-stops; stop manually only to kill a harmful test.
delete_experimentDelete an experiment and its journal permanently. A running experiment is refused (409 experiment_running) — deleting is not an early stop. Stop it, read the results, record the decision, then delete.
record_experiment_decisionRecord the verdict on a stopped experiment (409 otherwise): shipped_variant (+ decision_variant naming the winner), kept_control, or inconclusive, plus free-text learnings for future test designers. Re-recording overwrites.

On this page