All data tools take project (see MCP server); analysis tools take the
filter object (default: last 30 days, test traffic excluded). The scope column
names what a key or OAuth grant needs; tools without a scope work signed out.
Tool names of the original cpi-website2 server (overview, breakdown, list_sessions,
get_session, page_stats, video_retention, quiz_answers, events, leads, schema,
sql_query, mark_conversion, list_conversions, retry_conversion, update_conversion_status)
are still accepted as hidden aliases, so existing prompts keep working.
Some tools accept one of several scopes (written config:write or project:admin): the tool is
listed when your credential holds at least one of them. A tool you may not call returns an error
that ends with (insufficient_scope).
#Onboarding
| Tool | Scope | Purpose |
|---|
setup_status | analytics:read | The project's onboarding status derived from real data: tracking (hosts, SDK, consent, custom events), goals seen, ad platforms and UTM coverage, conversion destinations and tests, Claude activity, team – every open item with reason and fix. Records the onboarding's MCP function test. |
setup_get_prompt | config:write or project:admin (mcp_analysis, troubleshoot, connection_test: analytics:read) | A project-specific instruction text for one onboarding task (install, events, server_conversions, mcp_analysis, troubleshoot, connection_test); never contains secrets |
conversions_send_test | project:admin | One synthetic test conversion to a configured provider in its test mode, returns the provider's answer (asks for confirmation) |
Aliases (recorded deviation from the product brief). The brief named these tools
get_setup_status, get_setup_prompt, verify_installation and send_test_conversion. X3 keeps
its naming scheme (setup_*, conversions_*) in the listed catalog and accepts the brief's names
as hidden aliases on tools/call; each canonical description ends with "Also callable as …", so a
client searching the catalog still finds them.
#Projects
| Tool | Scope | Purpose |
|---|
project_list | any | Projects you can access (id, slug, organization, domains) |
project_get | analytics:read | Settings and tracking config |
project_status | analytics:read | Last events, quotas and budgets, event-name cardinality, conversions and ad-sync health |
project_create | project:create | New project from name, slug, domains, time zone, currency, preset |
project_update_settings | project:admin | Name, time zone, retention, settings |
project_update_tracking_config | config:write or project:admin | Replaces top-level tracking config keys – read project_get first and send complete objects/lists. With config:write only: the measurement keys cta, messaging, downloads, notFound, bookings, bridges, plugins, events, questionnaires, pageGroups, defaultGroup, excludePaths, legacyTrackAttributes, and consent without a mode change; domains, allowed origins, localhost, privacy and test parameters need project:admin |
project_delete | org:admin | Deletes a project (asks for confirmation, needs confirm_slug) |
#Analysis
| Tool | Scope | Purpose |
|---|
analytics_overview | analytics:read | KPIs (sessions, visitors estimate, engaged time, scroll, bounce, clicks, video, quiz funnel, conversions, relevance), optional comparison period |
analytics_timeseries | analytics:read | KPIs per day/week/month |
analytics_breakdown | analytics:read | All session KPIs per value of one dimension, sortable |
analytics_relevance_ranking | analytics:read | Dimension values ranked by relevance (share of hot/engaged sessions) |
analytics_pages | analytics:read | Page table; for one page or group: scroll curve and fold, section reach, clicks, dwell, flow |
analytics_videos / analytics_video_retention | analytics:read | Video list; retention curve per video and format |
analytics_answers | analytics:read | Questionnaire (quiz) funnel and answer distribution |
analytics_funnel | analytics:read | Step conversion of a funnel |
analytics_goals | analytics:read | Goal completions and rates |
analytics_filter_options | analytics:read | Values that exist for each filter key in the range |
#Sessions, events and SQL
| Tool | Scope | Purpose |
|---|
sessions_list | analytics:read | Sessions explorer: filter, sort, limit ≤ 100, offset |
sessions_get | analytics:read | One session's timeline: pageviews, events with props, scroll, sections, videos, conversions |
events_query | analytics:read | Raw event search: names, prop containment, prop substring, session |
events_tail | analytics:read | Live events after a cursor, waits up to 20 s – used to watch an installation |
schema_event_catalog | analytics:read | Built-in, registered and observed events with counts |
schema_get | analytics:read | SQL views and columns, filter documentation |
sql_query | analytics:read | Read-only SQL over the project's views (one statement, SELECT/WITH, ≤ 500 rows, 8 s) |
sql_query runs in a read-only transaction as a reader role that sees only the calling project's
rows (row-level security), behind a lexical guard. Hashes, transient conversion fields and other
projects are unreachable.
#Leads and conversions
| Tool | Scope | Purpose |
|---|
leads_list | leads:read | Recent leads with attribution (personal data; never phone or free text) |
leads_get | leads:read | One lead |
conversions_list | conversions:read | Conversions with per-platform upload status |
conversions_definitions_list | conversions:read | Conversion definitions and their platform mapping |
conversions_mark | conversions:write | Record a conversion for a session, or find the session by time window, UTM and WhatsApp click; optional contact data (hashed); uploads immediately unless upload: false; dry_run |
conversions_retry | conversions:write | Re-send now (all failed providers, or force) |
conversions_update_status | conversions:write | Manual bookkeeping of status per provider |
Typical WhatsApp flow: a visitor clicked the WhatsApp button and wrote you; once you know it is a real
lead, ask Claude "mark the WhatsApp lead from 14:05 as a conversion" – it calls conversions_mark
with match: {at: "…T14:05:00+02:00"}, shows the candidate sessions and uploads the conversion with
the session's click ids.
#Ads
| Tool | Scope | Purpose |
|---|
ads_performance | ads:read | Spend, impressions, clicks, CPC, cost per session, cost per relevant session, CPL, ROAS – per platform, campaign, ad set or ad, next to the platform's own numbers |
ads_timeseries | ads:read | The same per day/week/month |
ads_unmatched | ads:read | UTM combinations with sessions but no ad match |
ads_accounts_list, ads_sync_status | ads:read | Connected accounts, sync runs and errors |
ads_sync_run | ads:write | Queue a sync or backfill |
ads_mapping_rules_list / _create / _delete | ads:read / ads:write | Manual UTM → campaign rules |
ads_utm_templates | ads:read | URL templates per platform for exact matching |
#Configuration
| Tool | Scope | Purpose |
|---|
goals_list / goals_create / goals_update / goals_delete | analytics:read / config:write | Goals |
funnels_list / funnels_create / funnels_update / funnels_delete | analytics:read / config:write | Funnels |
questionnaires_list / questionnaires_upsert | analytics:read / config:write | Quiz definitions (questions, answer labels) |
event_schemas_upsert / event_schemas_delete | config:write | Register custom events and their props |
relevance_get_config / relevance_update_config / relevance_preview | analytics:read / config:write / analytics:read | Relevance weights and rules; preview the effect before saving (saving rescores retroactively) |
#Keys and members
| Tool | Scope | Purpose |
|---|
keys_list | org:admin | Secret keys of an organization |
keys_create / keys_roll / keys_revoke | org:admin | Manage secret keys (Claude asks you to confirm; the value is shown once – keep it in .env.local, never commit it) |
publishable_keys_list / publishable_keys_create | analytics:read / project:admin | Publishable keys of a project |
members_list | org:admin | Members and roles |
| Tool | Scope | Purpose |
|---|
docs_search | – | Full-text search over these guides; hits link to x3://docs/… |
docs_read | – | One guide as markdown |
setup_detect_stack | – | Framework, router, TypeScript, package manager, CSP and CMP hints from the files you pass |
setup_get_instructions | – | Step-by-step install recipe for a framework (optionally with proxy and consent) |
setup_generate_snippet | config:write or project:admin | The recipe filled with the project's real publishable key and API host. With a proxy: mint_proxy_key: false (used by the onboarding prompts), or a caller without project:admin + ingest:proxy, never creates a proxy key – an existing one is reported by hint, a missing one as missing: true (why); otherwise a missing key is created and shown once |
setup_verify_installation | config:write or project:admin | Fetches the site and checks snippet, key, origin, proxy and CSP; reports recent events from that origin. Stored for the onboarding's live panel; 10 checks per minute and project. Alias verify_installation |
events_validate | – | Checks an event name and props against the catalog and privacy rules before you ship |