list_sites
List every site on the authenticated account (id, name, domain, trackingMode). trackingMode is cookieless (default, visitor identity rotates every UTC day) or cookie. Read-only.
Takes no parameters.
com.xpmetricPublished by xpmetric.comv0.1.4Updated Oct 29, 2026
Ask your AI about your site's traffic, channels, revenue, goals and funnels (XPmetric analytics).
XPmetric's local MCP server, published by xpmetric.com; no sign-in required; STDIO; 24 tools.
No AI overview yet: these facts come from the registry entry and the server itself.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
List every site on the authenticated account (id, name, domain, trackingMode). trackingMode is cookieless (default, visitor identity rotates every UTC day) or cookie. Read-only.
Takes no parameters.
List goals for a site with completion counts and cvr for the chosen period. period is today | yesterday | 7d | 30d | all | custom (also now, 24h, 12m, wtd, mtd, ytd). custom requires start and end as YYYY-MM-DD. On cookieless sites a multi-day cvr is a conservative floor because visitor identity rotates every UTC day. Optional filters: JSON array [{ "d": "country", "o": "is", "v": ["DE"] }]. Values OR within a dimension, AND across dimensions. Region uses country:region (e.g. US:CA). Acquisition filters select entry-session cohorts; downstream events need no UTMs. Read-only.
endstartperiodsiteIdrequiredfiltersCreate a goal for a custom event. eventName is immutable after creation and must match window.xpmetric('eventName') exactly (case-sensitive). (siteId, eventName) is unique — a duplicate returns 409. At most 10 goals can be active per site. A goal for an event that never fires sits at 0 completions indefinitely and reads as broken — add the track call first (get_tracking_snippet) unless discover_goal_candidates already shows the event.
namerequiredemojisiteIdrequiredisActiveeventNamerequiredUpdate a goal's name, emoji, or isActive. eventName cannot be changed. At most 10 goals can be active per site. Read-modify via list_goals first.
nameemojigoalIdrequiredsiteIdrequiredisActiveDelete a goal by id. Custom events already stored are kept. Takes siteId and goalId from list_goals.
goalIdrequiredsiteIdrequiredIntended first call when a user asks what to track. Returns custom events already firing on the site in the last 30 days that have no goal attached ({ eventName, count }). Read-only.
siteIdrequiredList funnels for a site. Funnels have no natural key and allow duplicate names, so this is a required first call before update or delete — those take a funnel id. Read-only.
siteIdrequiredCreate a funnel (2–8 steps: pageview {path, match?, hostname?, label?} or event {eventName, label?}). At most 10 funnels per site. On cookieless sites (the default) visitor identity resets every UTC day, so visitor scope cannot complete across days. Use session scope, or windowHours ≤ 24, or ask the user to switch the site to cookie mode. Never silently rewrite scope or windowHours Duplicate names are allowed.
namerequiredscopestepsrequiredsiteIdrequiredwindowHoursUpdate a funnel by id from list_funnels. On cookieless sites (the default) visitor identity resets every UTC day, so visitor scope cannot complete across days. Use session scope, or windowHours ≤ 24, or ask the user to switch the site to cookie mode. Never silently rewrite scope or windowHours Changing steps recomputes from existing events; history is not deleted.
namescopestepssiteIdrequiredfunnelIdrequiredwindowHoursDelete a funnel by id from list_funnels. ClickHouse events are kept.
siteIdrequiredfunnelIdrequiredStep counts, conversionRate, totalEntered, setupSuspect, and identityWindowExceeded for a funnel id. period is today | yesterday | 7d | 30d | all | custom (also now, 24h, 12m, wtd, mtd, ytd); custom requires start and end as YYYY-MM-DD. Optional filters: JSON array [{ "d": "country", "o": "is", "v": ["DE"] }]. Values OR within a dimension, AND across dimensions. Region uses country:region (e.g. US:CA). Acquisition filters select entry-session cohorts; downstream events need no UTMs. Read-only.
endstartperiodsiteIdrequiredfiltersfunnelIdrequiredReturn the exact client snippet for a custom event. The MCP server never writes files — paste this with your editor tools after the action succeeds (signup, checkout, CTA). Requires p.js on the page. eventName must match the goal exactly (case-sensitive).
eventNamerequiredPeriod totals for a site: pageviews, visitors, bounce rate, avg session time, optional revenue, optional compare window. Optional filters: JSON array [{ "d": "country", "o": "is", "v": ["DE"] }]. Values OR within a dimension, AND across dimensions. Region uses country:region (e.g. US:CA). Revenue is absent (not zero) when no payment provider is connected. compare is previous | yoy | custom; custom needs compareStart and compareEnd (YYYY-MM-DD). Read-only.
endstartformatperiodsiteIdrequiredcomparefilterscompareEndcompareStartBucketed traffic series (visitors, pageviews, bounce, session time per bucket). Optional filters: JSON array [{ "d": "country", "o": "is", "v": ["DE"] }]. Values OR within a dimension, AND across dimensions. Region uses country:region (e.g. US:CA). granularity is hourly | daily | weekly | monthly (coerced to what the period allows). On cookieless sites newVisitors and returningVisitors are null — the API notes field says: "newVisitors and returningVisitors are null: cookieless visitor hashes rotate daily, so new vs returning would be a salt artifact, not a person." Read-only.
endstartformatperiodsiteIdrequiredfiltersgranularityRanked breakdown for one dimension: pages, sources, countries, regions, cities, devices, browsers, goals, etc. dim must be one of the schema enum values. Optional filters: JSON array [{ "d": "country", "o": "is", "v": ["DE"] }]. Values OR within a dimension, AND across dimensions. Region uses country:region (e.g. US:CA). Source dimensions use session entry; visitors can overlap across source rows and must not be summed as a period total. viewsMetric labels views as sessions, pageviews, or events. Rows are sorted by primaryMetric from the response: views for path, hostname, entry_page, exit_page; visitors for all other dims — re-sorting on the other column disagrees with the dashboard. Read-only.
dimrequiredendlimitstartformatperiodsiteIdrequiredfiltersRead/export separate search metrics, crawl/index observations, fixed prompt observations and Bing AI citation totals. Filters provider, inclusive measured date, canonical page and experiment. Includes collection method, coverage, lag, source and retrieval time; unavailable/stale never means zero. Google Web includes Google AI surfaces; citation visibility is not traffic. Never sum different exports or uniques.
endpagestartreportsiteIdrequiredproviderexperimentRead site-scoped server crawler hits by provider/category/path/status and period, including 404s. path supports * wildcards and must be a sanitized path without query strings. Agent labels are classifications, never verified identity from user agent alone. UTC server hit timestamps; unavailable returns an error, not zero traffic.
endpathstartperiodsiteIdrequiredstatuscategoryproviderList chart annotations visible in the dashboard. Filter by period or stable external experiment id. date is UTC chart day; occurredAt is optional exact event time (null means unavailable); source distinguishes API/dashboard creation.
endstartperiodsiteIdrequiredexternalIdCreate an annotation visible on dashboard charts. Required externalId is a stable experiment/deployment key unique within site: retries return the same original marker without changing it. Use update_chart_marker for corrections. date is UTC chart day; optional occurredAt records actual event time. Keep label public and URL free of queries, credentials and fragments.
urldaterequiredkindrequiredemojilabelrequiredsiteIdrequiredexternalIdrequiredoccurredAtUpdate an existing chart marker id from list_chart_markers. Stable externalId and creation source are preserved. URLs must be public HTTP paths without query strings/credentials/fragments.
urldatekindemojilabelsiteIdrequiredmarkerIdrequiredoccurredAtExport private XPmetric measured-landing evidence for a server milestone producer. Defaults to v1; opt into v2 for a SHA-256 proof of the currently stored eligible measured population at the requested cutoff. The proof does not establish total browser delivery or an ingestion watermark. Owned cookie-tracked site only. Returns each browser's exact first eligible measured landing since experiment launch, then filters the inclusive UTC period. Maximum 90 days from launch and 100,000 measured session entries; excess or query failure is an error, never truncated evidence. Contains browser hashes: keep private and do not paste into public logs. This proves measured arrivals, not account activation or complete consent coverage.
formatsiteIdrequiredperiodEndrequiredperiodStartrequiredexperimentIdrequiredobservedThroughList owned acquisition experiments and persisted cohort/report definitions. Filter stable externalId. Server milestone integration is pending until the application supplies confirmed account/task milestones; browser goals cannot establish activation.
siteIdrequiredexternalIdRead an owned experiment plus separate leading evidence, human arrivals, server-confirmed activation and mature paid outcomes. Reviews require full 30/60/90 day sampling plus outcome maturation. Unknown/partial/zero activation yields null cost per activation; no causal claim. Same-browser consented attribution only. Revenue uses existing PaymentEvent billing windows and net refunds, separate currencies.
asOfsiteIdrequiredreviewDaysexperimentIdrequiredSave a public experiment definition with stable site-scoped externalId. Retries preserve id. Tie annotationId to an owned existing chart marker. Record public hypothesis, primary/guardrails, URLs/cohort, rollout/control, launch/change, windows, spend/time, evidence/decision/rollback and ACO roadmap/task references only. Do not include private task/user text or credentials.
cohortrequiredsiteIdrequiredstatusrequiredacoRefsrolloutrequiredchangeAtcurrencydecisionlaunchAtrequiredcontrolRefexternalIdrequiredhypothesisrequired+13 more65% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.
Declare a license in the repository or the registry entry.