
Profitpather
Connects Claude to unsampled, first-party Shopify analytics via 26 read-only tools running on Cloudflare Workers with D1 storage. You get session traces, multi-touch attribution (including Markov models), funnel analysis, revenue leak diagnostics, and UTM tracking that survives Shopify's cross-domain checkout. Useful when GA4 sampling isn't cutting it or you need to debug cart abandonment and attribution in chat instead of exporting CSVs. OAuth 2.1 auth, streamable HTTP transport, works in Claude Desktop and Cursor after you install their Custom Pixel on your store. Tools like pp_diagnose_leaks and pp_acquisition let you ship fixes from the same conversation where you found the problem.
- tools
- 27
- transport
- HTTP
- last updated
- May 19, 2026
Tools
27 toolsPublic tool metadata for what this MCP can expose to an agent.
projects.listList all Clamp projects this credential can access. Returns each project's id, name, and plan ('free', 'pro', or 'growth'). Use this when the user asks "which sites do you see" or when the agent needs a project_id to disambiguate before calling another tool — most other tools...
List all Clamp projects this credential can access. Returns each project's id, name, and plan ('free', 'pro', or 'growth'). Use this when the user asks "which sites do you see" or when the agent needs a project_id to disambiguate before calling another tool — most other tools...
No parameter schema in public metadata yet.
traffic.overviewHigh-level snapshot of website traffic over a period: total pageviews, unique visitors, sessions, bounce rate (%), and average session duration (seconds). Always includes a comparison block with the same metrics for the previous period of equal length plus the absolute and per...12 params
High-level snapshot of website traffic over a period: total pageviews, unique visitors, sessions, bounce rate (%), and average session duration (seconds). Always includes a comparison block with the same metrics for the previous period of equal length plus the absolute and per...
channelstringcountrystringdevice_typestringpathnamestringperiodstringproject_idstringreferrer_hoststringutm_campaignstringutm_contentstringutm_mediumstringutm_sourcestringutm_termstringevents.listGet custom event counts. Without a `name` filter, returns every event name in the period with its total count and unique-visitor count (excludes "pageview" and the SDK-internal "pageview_end"). With a `name` filter, returns the count for that single event, optionally filtered...19 params
Get custom event counts. Without a `name` filter, returns every event name in the period with its total count and unique-visitor count (excludes "pageview" and the SDK-internal "pageview_end"). With a `name` filter, returns the count for that single event, optionally filtered...
channelstringcountrystringdevice_typestringgroup_bystringgroup_by_typestringstring · number · booleanlimitnumbernamestringpathnamestringperiodstringproject_idstringpropertystringreferrer_hoststringutm_campaignstringutm_contentstringutm_mediumstringutm_sourcestringutm_termstringvaluestringvalue_typestringstring · number · booleanevents.observed_schemaReturn what's actually firing into ingest as a structured signature, for diffing against the project's authored `event-schema.yaml`. Different shape from the YAML — this is observation, not declaration. Response shape: ``` { period: "30d", events: [ { name: "checkout", count:...3 params
Return what's actually firing into ingest as a structured signature, for diffing against the project's authored `event-schema.yaml`. Different shape from the YAML — this is observation, not declaration. Response shape: ``` { period: "30d", events: [ { name: "checkout", count:...
include_pageviewsbooleanperiodstringproject_idstringrevenue.sumSum revenue from Money-typed event properties. Returns per-currency totals, optionally grouped by a traffic dimension (referrer_host, channel, country, device_type, pathname, utm_source/medium/campaign). Different currencies are never mixed in a single sum — each row is one (g...17 params
Sum revenue from Money-typed event properties. Returns per-currency totals, optionally grouped by a traffic dimension (referrer_host, channel, country, device_type, pathname, utm_source/medium/campaign). Different currencies are never mixed in a single sum — each row is one (g...
attribution_modelstringlast_touch · first_touchchannelstringcountrystringdevice_typestringeventstringgroup_bystringreferrer_host · channel · country · device_type · pathname · utm_sourcelimitnumberpathnamestringperiodstringproject_idstringpropertystringreferrer_hoststringutm_campaignstringutm_contentstringutm_mediumstringutm_sourcestringutm_termstringusers.journeyChronological session history for a single visitor (anonymous_id). Each session collapses to one row showing the start and end timestamps, entry page, channel, referrer host, UTMs, country, device type, pageview count, and the distinct custom event names fired in that session....4 params
Chronological session history for a single visitor (anonymous_id). Each session collapses to one row showing the start and end timestamps, entry page, channel, referrer host, UTMs, country, device type, pageview count, and the distinct custom event names fired in that session....
anonymous_idstringlimitintegerperiodstringproject_idstringerrors.listRecent error events with full context. One row per occurrence, returned newest-first. Each row carries the error itself (message, type, stack, fingerprint, handled flag) plus the standard event context (url, browser/OS/device, country, anonymous_id, session_id) — same shape in...10 params
Recent error events with full context. One row per occurrence, returned newest-first. Each row carries the error itself (message, type, stack, fingerprint, handled flag) plus the standard event context (url, browser/OS/device, country, anonymous_id, session_id) — same shape in...
browserstringcountrystringdevice_typestringdesktop · mobile · tablet · botfingerprintstringhandledstringtrue · falselimitnumbermessagestringosstringperiodstringproject_idstringerrors.groupsErrors deduplicated by server-computed fingerprint, with counts and first/last-seen timestamps. The triage view: which bugs are firing most often, affecting the most users, or showing up newly in the period. Each group is one fingerprint (a bug). `count` is total occurrences i...4 params
Errors deduplicated by server-computed fingerprint, with counts and first/last-seen timestamps. The triage view: which bugs are firing most often, affecting the most users, or showing up newly in the period. Each group is one fingerprint (a bug). `count` is total occurrences i...
limitnumberperiodstringproject_idstringsort_bystringcount · users_affected · last_seen · first_seenerrors.timelineError count over time, bucketed hourly or daily. Optionally scoped to one fingerprint. Use this to spot regressions ("when did this bug start firing?") or post-deploy spikes ("did the deploy at 14:00 break something?"). Returns a series of { bucket, count } rows. The bucket fi...4 params
Error count over time, bucketed hourly or daily. Optionally scoped to one fingerprint. Use this to spot regressions ("when did this bug start firing?") or post-deploy spikes ("did the deploy at 14:00 break something?"). Returns a series of { bucket, count } rows. The bucket fi...
fingerprintstringintervalstringhour · dayperiodstringproject_idstringerrors.contextBreadcrumbs leading to one error: the events from the same session, before the error timestamp, in chronological order. The "what was the user doing right before this broke" view that turns a stack trace into a story. Given an anonymous_id and the error's timestamp, finds the...4 params
Breadcrumbs leading to one error: the events from the same session, before the error timestamp, in chronological order. The "what was the user doing right before this broke" view that turns a stack trace into a story. Given an anonymous_id and the error's timestamp, finds the...
anonymous_idstringbefore_timestampstringlimitintegerproject_idstringtraffic.timeseriesEvent counts over time as date buckets. Returns [{ date, count }] sorted ascending. Granularity is automatic based on period length (hourly for ≤2 days, daily for ≤90 days, weekly for ≤365 days, monthly beyond) and can be overridden via `granularity`. Filterable to a specific...16 params
Event counts over time as date buckets. Returns [{ date, count }] sorted ascending. Granularity is automatic based on period length (hourly for ≤2 days, daily for ≤90 days, weekly for ≤365 days, monthly beyond) and can be overridden via `granularity`. Filterable to a specific...
channelstringcountrystringdevice_typestringeventstringgranularitystringhour · day · week · monthpathnamestringperiodstringproject_idstringpropertystringreferrer_hoststringutm_campaignstringutm_contentstringutm_mediumstringutm_sourcestringutm_termstringvaluestringfunnels.createCreate and immediately evaluate a conversion funnel. A funnel measures how many unique visitors complete an ordered sequence of steps. Returns step-by-step counts, per-step conversion rates (vs the previous step), and overall conversion (last step / first step). The funnel is...3 params
Create and immediately evaluate a conversion funnel. A funnel measures how many unique visitors complete an ordered sequence of steps. Returns step-by-step counts, per-step conversion rates (vs the previous step), and overall conversion (last step / first step). The funnel is...
namestringproject_idstringstepsarrayfunnels.listRetrieve and re-evaluate a previously created funnel against current data for the specified period. Without a `name`, lists all funnels saved for the project. With a `name`, returns the same step-by-step counts and conversion rates as funnels.create, recomputed for the request...13 params
Retrieve and re-evaluate a previously created funnel against current data for the specified period. Without a `name`, lists all funnels saved for the project. With a `name`, returns the same step-by-step counts and conversion rates as funnels.create, recomputed for the request...
channelstringcountrystringdevice_typestringnamestringpathnamestringperiodstringproject_idstringreferrer_hoststringutm_campaignstringutm_contentstringutm_mediumstringutm_sourcestringutm_termstringcohorts.createCreate and persist a named cohort — a group of visitors defined by an event in a period, optionally narrowed by a property filter. The cohort is stored by name; subsequent retention/compare queries reference it without re-specifying the definition. Membership is recomputed at...3 params
Create and persist a named cohort — a group of visitors defined by an event in a period, optionally narrowed by a property filter. The cohort is stored by name; subsequent retention/compare queries reference it without re-specifying the definition. Membership is recomputed at...
definitionobjectnamestringproject_idstringcohorts.listList saved cohorts for the project. With `name`, returns one cohort with its current size; without, returns every cohort with their definitions. Use to discover cohort handles before calling retention or compare. Examples: - "what cohorts do I have" → no params - "show me the...2 params
List saved cohorts for the project. With `name`, returns one cohort with its current size; without, returns every cohort with their definitions. Use to discover cohort handles before calling retention or compare. Examples: - "what cohorts do I have" → no params - "show me the...
namestringproject_idstringcohorts.retentionCompute the retention curve for a saved cohort. For each requested window (e.g. day 1, 7, 14, 30 after the cohort's anchor event), returns how many cohort members fired any non-pageview-end event in that day's window, and the rate vs the cohort size. Use this to answer "did th...3 params
Compute the retention curve for a saved cohort. For each requested window (e.g. day 1, 7, 14, 30 after the cohort's anchor event), returns how many cohort members fired any non-pageview-end event in that day's window, and the rate vs the cohort size. Use this to answer "did th...
namestringperiodsstringproject_idstringcohorts.compareCompare two saved cohorts side-by-side on retention. Returns each cohort's size and retention curve over the same period set, so you can read "did this week's signups retain better than last week's?" or "is this experiment cohort behaving differently than control?" without com...4 params
Compare two saved cohorts side-by-side on retention. Returns each cohort's size and retention curve over the same period set, so you can read "did this week's signups retain better than last week's?" or "is this experiment cohort behaving differently than control?" without com...
astringbstringperiodsstringproject_idstringcohorts.deleteDelete a saved cohort by name. Irreversible — the agent should confirm intent with the user before calling this. The underlying event data isn't touched; only the cohort definition row is removed. Examples: - "delete the test cohort" → name="test_cohort" Limitations: irreversi...2 params
Delete a saved cohort by name. Irreversible — the agent should confirm intent with the user before calling this. The underlying event data isn't touched; only the cohort definition row is removed. Examples: - "delete the test cohort" → name="test_cohort" Limitations: irreversi...
namestringproject_idstringalerts.createCreate a metric alert that fires when a condition crosses its threshold. The alert monitors one metric (pageviews, visitors, sessions, bounce_rate, or avg_duration) over a rolling period and is re-evaluated every time an MCP session connects — alerts surface in-thread when the...6 params
Create a metric alert that fires when a condition crosses its threshold. The alert monitors one metric (pageviews, visitors, sessions, bounce_rate, or avg_duration) over a rolling period and is re-evaluated every time an MCP session connects — alerts surface in-thread when the...
conditionstringabove · below · drops_by · increases_bymetricstringpageviews · visitors · sessions · bounce_rate · avg_durationpathnamestringperiodstringproject_idstringthresholdnumberalerts.listList all alerts configured for a project. Returns each alert's id (UUID), metric, condition, threshold, period, optional pathname scope, and created_at timestamp. Use before alerts.delete to find the id you want to remove, or to show the user every monitor currently active. Re...1 params
List all alerts configured for a project. Returns each alert's id (UUID), metric, condition, threshold, period, optional pathname scope, and created_at timestamp. Use before alerts.delete to find the id you want to remove, or to show the user every monitor currently active. Re...
project_idstringalerts.deleteDelete an alert by its id. Find the id by calling alerts.list first. The deletion is irreversible — there is no soft-delete or undo, and the agent should confirm intent with the user before calling this on a non-trivial alert. Returns 404 if no alert with that id exists for th...2 params
Delete an alert by its id. Find the id by calling alerts.list first. The deletion is irreversible — there is no soft-delete or undo, and the agent should confirm intent with the user before calling this on a non-trivial alert. Returns 404 if no alert with that id exists for th...
alert_idstringproject_idstringtraffic.breakdownAggregate visitors and pageviews grouped by a single dimension. The `dimension` parameter chooses what to group by — page paths, traffic sources, geography, devices, or marketing attribution. Results are sorted by visitors descending and capped by `limit` (default 10, max 50)....14 params
Aggregate visitors and pageviews grouped by a single dimension. The `dimension` parameter chooses what to group by — page paths, traffic sources, geography, devices, or marketing attribution. Results are sorted by visitors descending and capped by `limit` (default 10, max 50)....
channelstringcountrystringdevice_typestringdimensionstringpathname · entry_page · exit_page · referrer_host · channel · countrylimitnumberpathnamestringperiodstringproject_idstringreferrer_hoststringutm_campaignstringutm_contentstringutm_mediumstringutm_sourcestringutm_termstringtraffic.compareCompare one metric across two arbitrary periods side-by-side. Returns both period values plus absolute delta and percentage delta. Periods do not need to be the same length — the percentage delta normalizes by ratio so longer/shorter comparisons remain meaningful. Use when the...14 params
Compare one metric across two arbitrary periods side-by-side. Returns both period values plus absolute delta and percentage delta. Periods do not need to be the same length — the percentage delta normalizes by ratio so longer/shorter comparisons remain meaningful. Use when the...
astringbstringchannelstringcountrystringdevice_typestringmetricstringpageviews · visitors · sessions · bounce_rate · avg_durationpathnamestringproject_idstringreferrer_hoststringutm_campaignstringutm_contentstringutm_mediumstringutm_sourcestringutm_termstringsessions.pathsAggregate (entry_page → exit_page) session pairs. Returns the top pairs with how many sessions followed each path, average pages per session, average duration in seconds, and a bounce flag. Use to answer "what do visitors do after landing on /pricing", "where do sessions end",...14 params
Aggregate (entry_page → exit_page) session pairs. Returns the top pairs with how many sessions followed each path, average pages per session, average duration in seconds, and a bounce flag. Use to answer "what do visitors do after landing on /pricing", "where do sessions end",...
channelstringcountrystringdevice_typestringlimitnumbermin_pagesintegerpathnamestringperiodstringproject_idstringreferrer_hoststringutm_campaignstringutm_contentstringutm_mediumstringutm_sourcestringutm_termstringpages.engagementPer-page metrics with a selectable detail level. The `view` parameter chooses what comes back: - view="summary" (default): pathname, pageviews, visitors. Cheap; use as the standard "top pages" call. - view="engagement": adds avg_engagement_seconds (active tab time from the SDK...14 params
Per-page metrics with a selectable detail level. The `view` parameter chooses what comes back: - view="summary" (default): pathname, pageviews, visitors. Cheap; use as the standard "top pages" call. - view="engagement": adds avg_engagement_seconds (active tab time from the SDK...
channelstringcountrystringdevice_typestringlimitnumberpathnamestringperiodstringproject_idstringreferrer_hoststringutm_campaignstringutm_contentstringutm_mediumstringutm_sourcestringutm_termstringviewstringsummary · engagement · sectionstraffic.liveSee who is on the site in the last N minutes. Returns the active visitor count plus top pages, top referrers, and top countries within that window. Defaults to 5 minutes; max 60. Use during incidents ("is anyone hitting the broken page right now"), launches ("is the new post g...2 params
See who is on the site in the last N minutes. Returns the active visitor count plus top pages, top referrers, and top countries within that window. Defaults to 5 minutes; max 60. Use during incidents ("is anyone hitting the broken page right now"), launches ("is the new post g...
project_idstringwindow_minutesintegerdocs.searchKeyword-search the Clamp documentation index for setup, SDK, MCP, concepts, and skills pages. Returns ranked entries with url, title, and a short description. Each match scores higher when query terms appear in the title than the description; results are capped by `limit` (def...2 params
Keyword-search the Clamp documentation index for setup, SDK, MCP, concepts, and skills pages. Returns ranked entries with url, title, and a short description. Each match scores higher when query terms appear in the title than the description; results are capped by `limit` (def...
limitintegerquerystringSponsors
Readme
Profitpather — MCP server
Profitpather is a first-party, unsampled analytics layer for Shopify stores. This is its public Model Context Protocol server — 26 tools that give AI agents live, raw, every-event access to merchant traffic, attribution, funnels, and revenue-leak diagnostics.
Details
- Repository
- github.com/profitpather/mcp
- Categories
- Monitoring & Observability, Finance & Commerce
- Transport
- HTTP
- Registry
- MCP registry, active