Ask AI
REMOTE · ASK-AI-DATA-CONNECTOR.COM · SCANNED SEP 20
Ask questions across Shopify, Klaviyo, GA4 and 20+ e-commerce sources in plain English.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability62
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 22538 tokens (~346/item across 65 items; 65 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 65 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 66 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Ask AI MCP server?
Ask AI is a hosted endpoint at https://ask-ai-data-connector.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · ask-ai-data-connector.com
claude mcp add --transport http com-ask-ai-data-connector-ask-ai 'https://ask-ai-data-connector.com/mcp'
{
"mcpServers": {
"com-ask-ai-data-connector-ask-ai": {
"url": "https://ask-ai-data-connector.com/mcp"
}
}
} {
"servers": {
"com-ask-ai-data-connector-ask-ai": {
"type": "http",
"url": "https://ask-ai-data-connector.com/mcp"
}
}
} [mcp_servers.com-ask-ai-data-connector-ask-ai] url = "https://ask-ai-data-connector.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-ask-ai-data-connector-ask-ai": {
"type": "remote",
"url": "https://ask-ai-data-connector.com/mcp",
"enabled": true
}
}
} openclaw mcp add com-ask-ai-data-connector-ask-ai --url 'https://ask-ai-data-connector.com/mcp' --transport streamable-http
mcp_servers:
com-ask-ai-data-connector-ask-ai:
url: "https://ask-ai-data-connector.com/mcp" {
"McpServers": {
"com-ask-ai-data-connector-ask-ai": {
"Transport": "http",
"Url": "https://ask-ai-data-connector.com/mcp"
}
}
} assistant mcp add com-ask-ai-data-connector-ask-ai -t streamable-http -u 'https://ask-ai-data-connector.com/mcp'
{
"mcpServers": {
"com-ask-ai-data-connector-ask-ai": {
"type": "http",
"url": "https://ask-ai-data-connector.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 19 Sept 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 18 Sept 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 17 Sept 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 16 Sept 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 15 Sept 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 14 Sept 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 13 Sept 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Probed https://ask-ai-data-connector.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=ask-ai-data-connector.com | CN=YE2,O=Let's Encrypt,C=US | 23 Aug 2026 | 21 Nov 2026 | ECDSA 256 | ECDSA-SHA384 | 55eb81f25fd63ee25e0e35bf4b1b5772924 |
| SANs: ask-ai-data-connector.com | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of ask-ai-data-connector.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| ask-ai-data-connector.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://ask-ai-data-connector.com/.well-known/oauth-protected-resource"
Bearer resource_metadata="https://ask-ai-data-connector.com/.well-known/oauth-protected-resource" Protected resource metadata
| Document | https://ask-ai-data-connector.com/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://ask-ai-data-connector.com/mcp |
| Authorisation server | https://ask-ai-data-connector.com |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://ask-ai-data-connector.com/mcp | Verified | 200 | |
| http (plaintext) | http://ask-ai-data-connector.com/mcp | HTTPS enforced | 301 | https://ask-ai-data-connector.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
ask_moby ~240
ESCAPE HATCH: ask Triple Whale's own AI assistant (Moby) a free-form question, answered by Triple Whale's servers against their full dataset. Use ONLY when no structured tool covers the question — prefer get_connector_data(connector:'triple-whale') / get_marketing_performance / get_spend_reconciliation first: they're faster (Moby takes 20-60 seconds), deterministic, and carry confidence/freshness signals. Good Moby use-cases: TW-specific features we don't sync (cohort LTV projections, TW custom metrics/expressions, creative-level breakdowns), or cross-checking a number against what Triple Whale itself reports. The answer is Triple Whale's OWN computation — present it as 'Triple Whale reports…', not as independently verified.
| Name | Type | Req | Description |
|---|---|---|---|
| question | string | yes | The question, in natural language, as you would ask Triple Whale's UI assistant. Include the time window explicitly (e.g. 'in the last 30 days'). |
| store | string | – | For multi-store accounts: which store's TW instance to ask (matches the instance's store assignment). Omit for single-instance accounts. |
No output schema declared.
No examples provided.
complete_intervention ~315
TRIGGER: Call WITHOUT asking once an applied intervention's check date has passed. Find candidates with get_interventions(dueForCheckIn: true). Attaches the latest RECORDED post-fix snapshot for each tracked metric (a snapshot whose periodStart is on/after the fix's appliedAt) as the 'post' side, computes deltas vs baseline, and flags whether each metric met its expected delta. It does NOT capture live from source — so if you haven't recorded post-fix snapshots yet (via record_metric_snapshot), record them first. If NO tracked metric has a post snapshot, a measured verdict (lift_confirmed/regressed/lift_inconclusive/partial) is REFUSED rather than closing with zero measurement — record snapshots then retry, or pass force:true to close on external evidence, or verdict:'abandoned' if you never measured. Sets the intervention's verdict and status='closed'.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | Close even when no post-fix snapshot exists for any tracked metric (verdict then rests on your external evidence, with no computed delta). Default false — without it, a measured verdict is refused so… |
| interventionId | string | yes | The intervention to close. |
| notes | string | – | Optional note about what was observed, e.g. 'US clicks recovered but DE flatlined — partial win'. |
| verdict | string | yes | Your verdict. The system also computes per-metric outcomes — your verdict is the overall judgment. |
No output schema declared.
No examples provided.
get_abandoned_checkouts ~291
Get cart abandonment analytics. Reports: stats (trackedAbandonmentRecords, abandonedCheckouts, recoveredCheckouts, recoveryRate %, abandonedValue, lostRevenue, abandonedAgeDistribution — how long ago the still-unrecovered carts were abandoned: 0-24h, 24-48h, 2-7d, 7-30d, 30d+), top_products (most frequently abandoned products with count, quantity, and total value). IMPORTANT UNIVERSE: figures cover only Shopify's abandoned-checkout records; completed purchases never enter this dataset, so do NOT derive an abandonment rate from these counts or compare them to order totals. Shopify API limitations — the following are never available and will always be null/unknown: abandonedStep (contact/shipping/payment), landingPage, referrer, deviceType, browserFamily. These fields do not exist in Shopify's GraphQL abandonedCheckouts API.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| limit | integer | – | For top_products: number of products (default: 10) |
| report | string | yes | Report type |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_analytics ~1,100
Get Google Analytics (GA4) website traffic and e-commerce data. **DO NOT USE THIS FOR CHECKOUT FUNNEL OR CVR QUESTIONS** — call `get_marketing_performance` instead, which uses Shopify TrafficStat (the canonical session source) and Shopify orders. GA4 over-counts sessions (~2-3× higher than Shopify TrafficStat for many stores due to subdomain/bot inclusion) which produces a CVR roughly half the real Shopify-native rate. Use GA4 for: traffic sources (channels, referrers, AI assistants), device/country/browser splits, landing-page performance, GA4-specific event counts — things TrafficStat doesn't cover. Reports: summary (sessions, activeUsers, newUsers, pageViews, engagedSessions, conversions — with % change vs prior period — DO NOT use these sessions for funnel/CVR), trend (daily breakdown of sessions/users/pageViews — returns `charts` with four ready-to-render line specs: sessions, activeUsers, pageViews, conversions. `charts[].data` is the FULL daily series even when `items` is truncated for token budget), by_channel (sessions, users, revenue and conversions by channel group: Organic Search, Paid Search, Direct, Social, Email, etc. — returns `charts` with a sessions bar; plus a revenue bar when revenue is populated), by_source (sessions broken down by specific REFERRER source/medium — use this for 'AI traffic' / 'ChatGPT / Perplexity / Claude referrals' / 'where is my traffic coming from' / 'what changed in my traffic' questions; includes a rolled-up `aiSourceRollUp` block totalling traffic from known AI assistants, PLUS by default a `comparison` block vs the equal-length prior window: per-source previousSessions/sessionsChangePercent, `newSources` (sources with zero prior sessions), `disappearedSources`, and a `_spamReferrerFlag` when a brand-new referral domain arrives at volume — the purchased-bot-traffic signature that inflates sessions and crashes CVR in both GA4 AND Shopify TrafficStat), by_device (desktop/mobile/tablet split — returns `charts` with a sessio…
| Name | Type | Req | Description |
|---|---|---|---|
| compare | boolean | – | For by_source: attach the prior-window comparison (per-source deltas, newSources, disappearedSources, spam-referrer flag). Defaults to true; pass false to skip. |
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| limit | integer | – | For by_country, top_products, and by_campaign: number of results (default: 20; by_campaign default 50) |
| medium | string | – | For by_campaign: filter to a UTM medium, e.g. 'email' to isolate the email program. Omit to include all tagged campaigns. |
| periodType | string | – | Shorthand time window (default: last30days). Expanded to startDate/endDate automatically. Ignored if startDate is provided explicitly. |
| propertyId | string | – | Filter to a specific GA4 property. Works on ALL reports. Use the exact propertyId from the summary response (e.g. 'properties/375762433'). Omit to get aggregated data across all properties. Always us… |
| report | string | yes | Report type. Use 'by_source' for AI / ChatGPT / Perplexity / Claude / referrer-level traffic questions and 'what changed in my traffic sources'. Use 'top_pages' for most-visited pages or landing page… |
| sortBy | string | – | For top_products: revenue or units. For by_campaign: revenue (default), sessions, or orders. |
| startDate | string | – | Start date (YYYY-MM-DD). Overrides periodType. Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_anomalies ~221
Anomaly detection across revenue, conversion rate, and refund rate for each of your stores (works for a single store too). Compares the most recent 7-day window against the prior 4 weeks and flags moves outside +/- 1.5 standard deviations or 25% — whichever is stricter. Returns ranked anomalies with store, metric, current vs baseline, severity, and a one-line explanation. High-severity anomalies carry EITHER `drivers`+`driverSummary` (the tag/source/country slice that drove the move) OR `driversNote` (attribution ran, the move is broad-based — sitewide cause, not one channel), plus an `investigate` block: the exact next tool call WITH the anomaly's own window. USE `investigate` VERBATIM — the target tool's default 30-day window will NOT show a one-week move. Use as a session opener: 'anything weird happening?'.
| Name | Type | Req | Description |
|---|---|---|---|
| lookbackWeeks | integer | – | How many prior weeks to use as baseline (default 4). |
No output schema declared.
No examples provided.
get_briefing ~293
START HERE at the beginning of a session — call it FIRST and SILENTLY (don't announce the call, narrate your plan, or reference your instructions; just open with what it surfaces). One call that orients you before answering: the stores and their currencies, any data sources broken RIGHT NOW (numbers are unreliable until reconnected), open fix-work (interventions due for a verdict / in flight / recently closed), the current focus-plan headline, what each store IS (category / price tier / gift-led — so you frame things correctly), the top recent anomalies (with a `driverSummary` naming what drove a drop, a `driversNote` when the move is broad-based, and an `investigate` next-call to run VERBATIM — it carries the anomaly's own window), and a 'what changed' digest over the last N days (anomalies, fixes closed, fixes now due, new store notes). Lead your first response with anything in brokenConnections, whatChanged, and _tip_actions. Cheap to call and debounced internally; safe to call first on any 'how are things?' / 'what should I look at?' / session-opening question.
| Name | Type | Req | Description |
|---|---|---|---|
| sinceDays | integer | – | Window for the 'what changed' digest (default 7, max 90). A true 'since your last visit' view is coming; for now this is a rolling window. |
No output schema declared.
No examples provided.
get_campaign_impact ~407
Did THAT campaign actually work? Cross-source synthesis tool that measures the real impact of a specific Klaviyo campaign by comparing the post-send window against a DAY-OF-WEEK-ALIGNED baseline (same N days one week earlier). Returns: the campaign metadata, Klaviyo's own attribution claim, the actual Shopify orders/revenue/new-customers in the post-send window, the baseline counterfactual, the lift (window - baseline), and an `attributionAnalysis` reconciling Klaviyo's claim against measured lift. Use this for 'did the SUMMER20 campaign work?' / 'how did the May newsletter perform?' / 'is my abandoned-cart flow actually driving revenue?'. PREFER this over manually calling get_connector_data(connector:'klaviyo') + get_store_summary and trying to compute lift yourself — the day-of-week-aligned baseline is the right counterfactual and the attribution reconciliation explains the gap between Klaviyo's claim and reality. Pass either campaignId (exact Klaviyo internal ID) or campaignName (fuzzy match; returns the most recent match plus a disambiguation block if multiple found). Default windowDays is 7 — increase for high-consideration purchases with longer journeys.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | Klaviyo internal campaign ID (exact match). Use this when you already know it; otherwise use campaignName. |
| campaignName | string | – | Fuzzy match on campaign name (case-insensitive substring). Returns the most recent match; surfaces a disambiguation block if multiple found. |
| store | string | – | Filter to a specific store domain. Omit to query all connected stores. |
| windowDays | integer | – | Post-send measurement window in days (default 7). Klaviyo's attribution uses 5 days for campaigns; 7 captures the bulk of impact for most consumer goods. Increase for high-AOV considered purchases (m… |
No output schema declared.
No examples provided.
get_cart_affinity ~345
Co-purchase / market-basket analysis. Given an anchor product (productTitle), returns other products frequently bought with it, ranked by lift. Reports: basket (same-order co-purchase — best for bundles, 'frequently bought together' widgets, post-checkout upsells), lifetime (same-customer across all their orders — best for email flows and longer-horizon recommendations; also returns avgDaysToCoBuy for sequencing). Each pair has support, confidence, lift (>3 strong, 1.5–3 moderate, <1.5 weak), and a verdict. Co-occurrences below `minCoOccurrences` are suppressed because lift is unstable on small samples.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| limit | integer | – | Number of co-products to return (default: 10, max: 25). |
| minCoOccurrences | integer | – | Suppress pairs with fewer than this many co-occurrences (default: 3). Raise to 5–10 for high-volume stores; lower to 2 for low-volume stores or specific anchor products. |
| productTitle | string | yes | Anchor product title (case-insensitive substring match). Required. |
| report | string | yes | basket = same-order co-purchase; lifetime = same-customer across orders. |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. For lifetime: bounds anchor acquisition; candidate purchases are looked up across the customer's full history. |
No output schema declared.
No examples provided.
get_collections ~206
Get product collections and their contents, including SEO metadata. Reports: list (all collections with product counts plus seoTitle/seoDescription), products (products in a specific collection with pricing, inventory, SEO, and optional sales data). seoTitle/seoDescription correspond to Shopify's global.title_tag and global.description_tag metafields. Use for 'how many products in the sandals collection?', 'what products are in collection X?', 'which collection products sell best?', or to inspect collection/product SEO tags.
| Name | Type | Req | Description |
|---|---|---|---|
| collectionId | string | – | For products: Shopify collection ID |
| collectionTitle | string | – | For products: search by collection title (partial match) |
| endDate | string | – | For products: include sales data to this date (YYYY-MM-DD) |
| limit | integer | – | Number of results (default: 50) |
| report | string | yes | Report type |
| startDate | string | – | For products: include sales data from this date (YYYY-MM-DD) |
No output schema declared.
No examples provided.
get_complete_dashboard ~243
Get a unified dashboard with key metrics from ALL connected data sources in one call. Returns a lean snapshot of revenue, traffic, marketing, email, organic search, UX, support, reviews, subscriptions, and loyalty — only for sources that are connected. Use this for 'Give me an overview' or 'How is the business doing?' then drill into specifics with individual tools. Note: in multi-store mode, the store param filters Shopify data (revenue, orders, products, customers) to that store. Non-Shopify sources (GA4, Klaviyo, Search Console, Gorgias, etc.) are account-level and always return aggregated data regardless of store param. In multi-store workspaces, get_store_comparison gives side-by-side Shopify metrics across all stores (that tool is only present for multi-store keys).
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_connector_data ~2,176
Get data from one connected third-party connector. Pass `connector` to pick which one and `report` to pick the report within it — valid `report` values differ per connector; this is the quick index, call get_help(<topic>) for the full picker + gotchas per connector. • connector:"triple-whale" — marketing attribution (channel mix, PPS, journey events). Reports: summary, attributions, by_channel, product_attribution, channel_by_model, journey, pps. NOTE: the `source` param below is Triple Whale's OWN acquisition-source filter (e.g. "google-ads") for journey/pps reports — unrelated to `connector`. Full report picker, attribution-model guide, known limits: get_help("triple_whale"). • connector:"klaviyo" — email marketing. Reports: campaign_summary, campaigns, top_campaigns, flow_summary, flows, top_flows, list_summary, lists, product_attribution, signup_trends, available_metrics. Detail: get_help("klaviyo"). • connector:"sendy" — self-hosted email (subscriber lists only — no campaign stats, no historical trend, current-state snapshot). Reports: list_summary, lists. Detail: get_help("sendy"). • connector:"gorgias" — customer support. Reports: summary, tickets, by_channel, satisfaction, top_tags. Detail: get_help("gorgias"). • connector:"recharge" — subscriptions. Reports: summary, metrics, cancellation_reasons, upcoming_charges, failed_charges. `days` on upcoming_charges is a FORWARD-LOOKING forecast window (default 30). Detail: get_help("recharge"). • connector:"google-search-console" — SEO. Reports: summary, top_queries, top_pages, trends, by_country, by_device, keyword_movers, new_keywords, page_ranking_changes, anomalies, zero_traffic, branded_split, cannibalization. Detail: get_help("search_console"). • connector:"clarity" — UX/session analytics. Reports: summary, ux_issues, by_dimension, trends. Detail: get_help("clarity"). • connector:"youtube" — channel/video analytics + transcripts. Reports: summary, videos, top_videos, video_details (needs videoId), search_tr…
| Name | Type | Req | Description |
|---|---|---|---|
| _offset | integer | – | For gorgias tickets: pagination offset (default: 0). |
| attributionModel | string | – | For triple-whale attributions/by_channel/product_attribution: which per-order attribution model to use. |
| brandTerms | string | – | For google-search-console branded_split: comma-separated brand terms (auto-detected if omitted). |
| category | string | – | For triple-whale summary: filter to a specific metric category. |
| channel | string | – | For gorgias tickets: filter by channel. For triple-whale attributions/by_channel/product_attribution: filter by marketing channel. |
| connector | string | yes | Which third-party connector to query. Only connectors this shop has connected are valid — tools/list narrows this enum per shop; call get_data_sources if unsure. |
| customerId | string | – | For google-ads: customer ID to filter by (multi-account). Call with report='summary' first to see connected accounts. |
| days | integer | – | For recharge upcoming_charges: FORWARD forecast window (default 30). For youtube top_videos and swish demand_trends: BACKWARD lookback window (default 7 / 30 respectively). Opposite directions betwee… |
| dimension | string | – | For clarity by_dimension: dimension to break down by (required). |
| direction | string | – | For google-search-console keyword_movers/page_ranking_changes: filter by ranking direction. |
| endDate | string | – | End date (YYYY-MM-DD). Meaning/default varies slightly per connector — see get_help(connector). |
| eventType | string | – | For triple-whale journey: filter to one event type (added_to_cart, signed_up, conversion, subscription, post_purchase_survey_submitted). |
| granularity | string | – | For triple-whale by_channel: 'total' (default), 'daily', or 'by_store'. For smile points_activity: 'day', 'week', or 'month'. |
| groupBy | string | – | For triple-whale channel_by_model: aggregation level. |
| interval | string | – | For klaviyo signup_trends: time interval. |
| limit | integer | – | Number of results. Applies to: klaviyo, sendy, gorgias (tickets), recharge (cancellation_reasons), google-search-console, youtube, ringcentral (calls), reviewsio, triple-whale (attributions), smile (… |
| maxScore | integer | – | For reviewsio unanswered: only show reviews with this rating or lower. |
| metric | string | – | For klaviyo top_campaigns/top_flows: ranking metric (revenue, openRate, clickRate). |
| minImpressions | integer | – | For google-search-console cannibalization: minimum impressions (default 10). |
| model | string | – | For triple-whale channel_by_model: which attribution model to read. Defaults to 'Triple Attribution'. |
| newCustomersOnly | boolean | – | For triple-whale channel_by_model: restrict to new-customer orders only. |
| orderBy | string | – | For youtube videos: sort field. |
| periodType | string | – | For triple-whale: shorthand ROLLING time window, anchored to today (default last30days). For a specific calendar range instead (e.g. a past month), omit this and pass startDate/endDate — summary then… |
| query | string | – | For youtube search_transcripts: search query (required). |
| report | string | yes | Report type — valid values depend on `connector`. See the tool description for the per-connector list, or get_help(connector) for full detail. |
| search | string | – | For gorgias tickets: case-insensitive keyword search across ticket subject and message body. |
| siteUrl | string | – | For google-search-console: exact siteUrl from a connectedSites entry, e.g. 'sc-domain:example-store.com'. |
| sortBy | string | – | For google-search-console top_queries/top_pages: 'clicks' or 'impressions'. For smile top_members: 'pointsBalance', 'totalEarned', or 'totalSpent'. |
| source | string | – | For triple-whale journey: filter to one acquisition source (google-ads, facebook-ads, organic, klaviyo, Direct). NOT the `connector` selector above. |
| startDate | string | – | Start date (YYYY-MM-DD). Meaning/default varies slightly per connector — see get_help(connector). |
| status | string | – | For klaviyo (campaigns/flows/top_flows — top_flows includes paused and archived flows unless you pass status:'live') / gorgias (tickets) / woocommerce (orders): filter by status. |
| store | string | – | For google-search-console: Shopify store key (e.g. 'acme-store-us') to auto-resolve the assigned property. |
| surveyId | string | – | For reviewsio survey_responses: filter to specific survey. |
| videoId | string | – | For youtube video_details: YouTube video ID (required). |
| view | string | – | For triple-whale journey/pps: breakdown view (by_type/by_source/by_country/by_device/funnel for journey; by_source/by_answer/response_rate/recent for pps). |
No output schema declared.
No examples provided.
get_customer_insights ~552
Get customer behavior and retention insights. All reports are per-store in multi-store mode — use the store param to target a specific store. Reports: new_vs_returning (revenue/orders/AOV split by first-time vs repeat buyers), repeat_metrics (repeat purchase rate, avg days between purchases, BOTH avgLifetimeValue and medianLifetimeValue, lifetimeValueSkewRatio + distribution note — LEAD WITH MEDIAN when describing 'the typical customer', use mean only when distribution is symmetric; if `lifetimeValueDistributionNote` is present the mean is misleading), cohorts (monthly acquisition cohorts — counts and aggregate repeat rate), retention_curve (per-cohort cumulative retention % AND LTV at month 1/3/6/12 — the canonical e-commerce LTV view; cohorts that haven't matured to a milestone show null for that milestone, not a fake-low value), by_category (repeat rate by Shopify product_type — requires product_type to be set, returns 'Uncategorized' if not), cohorts_by_first_purchase (cohorts by first product category), top_customers (ranked by LTV or order count), lapsed_high_value (high-spending customers who haven't ordered recently — per-store, ideal for targeted win-back campaigns; rows carry a Shopify-admin adminUrl (this dataset holds no names/emails by design) and customer tags, trade-frequency accounts are flagged likelyWholesale so they're excluded from consumer win-backs, and customers inactive beyond maxDaysInactive (default 365d) are treated as churned and excluded).
| Name | Type | Req | Description |
|---|---|---|---|
| daysInactive | integer | – | For lapsed_high_value: days since last order to count as lapsed (default: 90) |
| endDate | string | – | End date (YYYY-MM-DD) |
| limit | integer | – | For top_customers and lapsed_high_value: number of results (default: 20) |
| maxDaysInactive | integer | – | For lapsed_high_value: upper bound on inactivity — customers whose last order is older than this are treated as churned, not lapsed, and excluded (default: 365). Raise to see the long tail. |
| minSpent | number | – | For lapsed_high_value: minimum lifetime spend in major units, e.g. 500 for £500 (default: 500) |
| months | integer | – | For cohorts and retention_curve: number of months to look back for acquisition (default: 6 for cohorts, 12 for retention_curve) |
| report | string | yes | Report type |
| sortBy | string | – | For top_customers: sort by totalSpent or orders (default: totalSpent) |
| startDate | string | – | Start date (YYYY-MM-DD) |
No output schema declared.
No examples provided.
get_customers ~457
Get customer analytics by dimension. Reports: segments (one-time/returning/VIP/at-risk), top (by spend or orders — includes customerId for each customer), by_country (geographic distribution — country is derived from order shipping address, not customer records; Shopify does not expose customer country without protected data access approval), customer_history (full order history with line items for a specific customer — use customerId from the 'top' report, or rank e.g. rank=1 for top customer, or tag to find by customer tag), tag_segments (size behavioural sub-segments by Shopify tag, signup year, marketing consent, and tag-overlap crosstab — BEST FOR: 'how many non-purchasers carry tag X?', 'break the newsletter list down by signup year', building differentiated nurture tracks. Defaults to the non-purchaser cohort; pass `tags` for the specific tags to count + cross-tabulate, `purchaserFilter` to change cohort). NOTE: For 'how many customers bought product X?' use get_orders(report: 'by_product') instead — it returns unique customer counts per product. This tool does NOT support product-level filtering.
| Name | Type | Req | Description |
|---|---|---|---|
| customerId | string | – | For customer_history: Shopify customer ID (from the 'top' report's customerId field) |
| limit | integer | – | Number of results (default: 10) |
| minTagVolume | integer | – | For tag_segments: also surface any other (non-requested) tag with at least this many customers in scope (default 200). |
| purchaserFilter | string | – | For tag_segments: which cohort to segment (default non_purchasers = ordersCount 0). |
| rank | integer | – | For customer_history: look up customer by rank in top customers list (e.g. 1 = top spender) |
| report | string | yes | Report type |
| sortBy | string | – | For top: totalSpent or orders (default: totalSpent) |
| tag | string | – | For customer_history: find customer by tag |
| tags | array | – | For tag_segments: tags to count explicitly and cross-tabulate (matched case-insensitively; always included even below minTagVolume). |
No output schema declared.
No examples provided.
get_daily_metrics ~674
Get daily/period numbers from one of three domains — pass `domain` to pick which, `report` to pick the report within it. `report:"daily"` exists in ALL THREE domains and means a DIFFERENT payload in each — always pass both `domain` and `report` together, never assume "daily" behaves the same across domains. • domain:"funnel" — the daily series WITH sessions/CVR/funnel steps. Reports: daily (default — { period, data, charts, presentation }, each day has revenue, sessions, visitors, cvr, aov, orders, addToCart, reachedCheckout; DEFAULT TO RENDERING THE RELEVANT CHART), traffic_breakdown (Shopify ShopifyQL traffic dimensions for the period — bySource, byDevice, topLandingPages, topReferrers; requires Shopify Plus/Advanced and traffic sync to have run). No default window — pass startDate/endDate explicitly (falls back to a 30-day window if omitted, but don't rely on that). • domain:"revenue" — REVENUE-centric (the only domain with by_channel/by_country/pnl_summary). Reports: daily (default — time-series of revenue + orders with chart specs and event context), by_channel (net sales + order count split by sales channel — requires Shopify Plus/Advanced), by_country (net sales by billing country — requires Shopify Plus/Advanced), pnl_summary (full P&L: gross/net sales, discounts, returns, shipping, taxes, payment processing fees, orders, items — requires Shopify Plus/Advanced; fee coverage can be partial, the response states it). All money values formatted currency strings. Defaults to a 30-day window ending yesterday. • domain:"operational" — the OPERATIONAL daily view (new vs returning customers, fulfillment rate, refunds, discount usage) from a pre-computed DailyStat rollup (updated by the scheduler, not a live query). Reports: daily (each day's revenue, orders, avgOrderValue, itemsSold, newCustomers, returningCustomers, discountUsageRate, fulfillmentRate, refunds), summary (period totals, daily averages, rates). Defaults to a 30-day window ending yesterday (report:"da…
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Which daily-metrics domain to query. See the tool description for the report list and defaults per domain. |
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day) when omitted. |
| limit | integer | – | For domain:"operational", report:"daily": number of days to return (default: 30). |
| report | string | – | Report type — valid values depend on `domain` (see tool description). Defaults to "daily" in every domain if omitted, but "daily" means a different payload per domain. |
| startDate | string | – | Start date (YYYY-MM-DD). Default window (if omitted) varies by domain — see tool description; domain:"funnel" has no real default, always pass this explicitly. |
No output schema declared.
No examples provided.
get_data_sources ~92
CALL THIS FIRST to see which data sources are connected and have data. Returns connection status and record counts for: Shopify (always connected), Triple Whale, Klaviyo, Gorgias, Recharge, Google Search Console, Google Analytics, Microsoft Clarity, and YouTube. Use this to understand what data is available before making other queries. If a source shows 'not_connected', those tools will return empty results.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_discounts ~164
Get discount code analytics. Reports: summary (usage rate, AOV impact), top_codes (best performing codes by revenue/usage), code_details (specific code performance — requires 'code' param), by_product (which discount codes were applied to which products — optionally filter by 'code').
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | – | For code_details: required. For by_product: optional filter by specific discount code. |
| endDate | string | – | End date (YYYY-MM-DD) |
| limit | integer | – | For top_codes/by_product: number of results (default: 10/20) |
| report | string | yes | Report type |
| sortBy | string | – | For top_codes: sort field |
| startDate | string | – | Start date (YYYY-MM-DD) |
No output schema declared.
No examples provided.
get_focus ~227
Return the merchant's current weekly plan — the committed 'what to work on now' list. Use as a session opener. The plan stays current until the merchant re-plans (say 'plan my week' / refresh: true) — it does NOT auto-expire, so re-asks return the same plan with each item's LIVE state (a 'tackle' item shows done once its finding is addressed; a 'check' item once its intervention closes). If no plan exists or refresh is requested, returns a synthesis bundle — open findings, interventions due for check-in, the outcomes summary, metric trends, AND the previous plan's unfinished items to carry forward — plus an _instruction to call save_focus blending tackle/check/watch items.
| Name | Type | Req | Description |
|---|---|---|---|
| refresh | boolean | – | Re-plan from current data ('plan my week'). Supersedes the current plan and returns a fresh synthesis bundle. Default: false (returns the current plan). |
| top | integer | – | Target number of focus items (default 5, max 10). Affects the instruction sent to the model when refresh is needed. |
No output schema declared.
No examples provided.
get_forecast ~309
Forecast a metric — answers 'what should I expect?' / 'are we on track this month?' / 'project next month'. Returns a per-store `stores` array (each in its OWN currency — never summed across currencies). Each store has: `currentMonth` (month-to-date actual + projected month-end with low/high band, built from the live daily run-rate), `horizon` (future full months with expected/low/high), `method`, `confidence`, explicit `assumptions`, `historyMonths`, and a ready-to-render `charts[0]` line spec (seriesField='series' splits actual vs forecast). HONESTY: every forecast carries a method (month_to_date_pace / linear_trend / naive_last_month / yoy_seasonal), a confidence level, and an interval — LEAD with the range and the confidence, never present the point estimate as a promise. Current-month projection works immediately from orders; forward months need calendar-month snapshot history and degrade gracefully (low confidence / declines to project when too thin). v1 metrics: revenue, orders.
| Name | Type | Req | Description |
|---|---|---|---|
| horizon | integer | – | Number of future FULL months to project after the current one (1-3). Defaults to 1. |
| metric | string | – | Metric to forecast. Defaults to 'revenue'. |
| store | string | – | Sub-store key (e.g. 'acme-store-us'). Omit to forecast every store in the workspace (each in its own currency). |
No output schema declared.
No examples provided.
get_ga4_dimensions ~108
Discovery tool: list the GA4 property's custom dimensions and custom metrics (with apiName, uiName, description), plus the standard dimension/metric API names available on the property. Call this to find valid field names before building a get_ga4_funnel report or interpreting custom events. LIVE GA4 Admin/Data API call.
| Name | Type | Req | Description |
|---|---|---|---|
| propertyId | string | – | Filter to a specific GA4 property (e.g. 'properties/375762433'). Omit to use the configured property. |
No output schema declared.
No examples provided.
get_ga4_funnel ~343
Run a real GA4 funnel report — step-by-step conversion through a sequence of events, with optional breakdown and next-action analysis. This is a LIVE call to the GA4 Data API (not synced data), so it can answer 'where do users drop off between viewing a product and purchasing?' with GA4's own funnel engine. Each step is an event name (e.g. page_view, add_to_cart, begin_checkout, purchase) or a full GA4 FilterExpression. Returns funnelTable (completions + completion rate per step), funnelVisualization, and propertyQuota. For the CANONICAL checkout funnel and CVR use get_marketing_performance / get_metrics_comparison instead — this tool is for GA4-event-level funnel shape and custom event sequences.
| Name | Type | Req | Description |
|---|---|---|---|
| breakdownDimension | string | – | Optional dimension to segment the funnel by (e.g. 'deviceCategory', 'country'). |
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (GA4 data is T-1). |
| nextActionDimension | string | – | Optional dimension to analyse what users do after each step (e.g. 'eventName', 'pagePath'). |
| propertyId | string | – | Filter to a specific GA4 property (e.g. 'properties/375762433'). Omit to use the configured property. |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
| steps | array | yes | Ordered funnel steps. Each: { name, event } for a simple event filter, or { name, filterExpression } for a full GA4 FunnelFilterExpression. |
No output schema declared.
No examples provided.
get_help ~364
Fetch the full guidance behind the server instructions, on demand. The eager instructions summarise each area in one or two lines and point here for detail — call this only when you actually need the depth (you usually won't). Topics: routing (the canonical source-of-truth map — which tool owns each metric), signals (how to read _freshness / _confidence / _anomalies / _benchmark / _dataDepth / _recentDayCaveat / _alerts / _storeNotes), conventions (money / dates / timezone / abbreviations), claims (handling numbers the user quotes), analysis (median-vs-mean, hypotheses-not-causation, partial-day, pushback discipline), multistore (per-store vs account-level data, and the propertyId/customerId/siteUrl requirement), writeback (interventions / insights / snapshots / wakeups), triple_whale (Total Impact). You can ALSO pass a METRIC NAME (ltv, order_counts, aov, cvr, cac, repeat_rate, roas, mer, nps, csat, refund_rate — synonyms accepted) for its definition + canonical tool + gotcha, or a TOOL NAME (e.g. "get_analytics", "query_orders") for that tool's worked examples. Omit topic to list the topics, metrics, and tools that have examples.
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | – | A guide topic (routing, signals, conventions, claims, analysis, multistore, writeback, triple_whale), a metric name (ltv, order_counts, aov, cvr, cac, repeat_rate, roas, mer, nps, csat, refund_rate),… |
No output schema declared.
No examples provided.
get_insights ~487
Get the business improvement checklist (the FINDINGS to act on). If insights exist, returns the current checklist with status. If no insights exist (or refresh is requested), returns a data bundle with all key metrics from connected sources — use this data to generate actionable business recommendations (typically 3–8, as many as the data supports), then call save_insights to store them. You can also call save_insights with a single insight at any time during conversation. Use report: 'thread' (with threadId or insightId) to retrieve a linked sequence of related findings as one story. NOTE: 'did the fix work' / win-rate / outcomes are NOT here — insights are observations. Once a fix ships, set_intervention flips the finding to 'addressed' and the outcome lives on the intervention; call get_interventions(report: 'outcomes') for that. Filter by category, tags, or threadId to narrow the list. Each returned item includes threadId, parentInsightId, and a threadCount so you can spot follow-up chains without an extra call.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Filter to a single category. |
| includeCompleted | boolean | – | Default true. Set to false to return only active (open) insights. |
| insightId | string | – | For report: 'thread' — resolve the threadId from this insight and return the full thread (alternative to passing threadId directly). |
| refresh | boolean | – | Set to true to generate fresh insights even if existing ones are present. Default: false — returns existing checklist. |
| report | string | – | Default: 'checklist'. 'thread' retrieves a linked sequence of related findings as one story — requires threadId or insightId. (For fix outcomes / win-rate, use get_interventions(report: 'outcomes').) |
| status | – | – | Filter by status. Pass a single value (e.g. 'open') or an array (e.g. ['open','addressed']) for OR semantics. Allowed values: open, addressed, superseded, dismissed. |
| tags | array | – | Filter to insights that contain ANY of these tags (OR semantics). E.g. ['seo'] or ['paid']. |
| threadId | string | – | Filter to a single thread (works on checklist and thread reports). Used to view a story end-to-end without category/tag filtering. |
No output schema declared.
No examples provided.
get_interventions ~410
List interventions (the actions/fixes that were shipped) and report their measured outcomes. This is the SINGLE source of truth for 'did it work' — insights (findings) never carry a verdict. Use report: 'status' for a one-call picture of 'what fix-work is open' (due for check-in / in flight / recently closed + win rate — best for 'where did we get to?' / session start); report: 'list' (default) for the full rows; report: 'outcomes' for 'fixes that worked vs didn't' (buckets closed interventions by verdict + win rate). Filter by insightId to answer 'how did the fix(es) for this finding turn out?'. Each intervention includes baseline + post snapshots and computed deltas (when closed).
| Name | Type | Req | Description |
|---|---|---|---|
| dueForCheckIn | boolean | – | If true, only return interventions whose next checkDate has passed and status is still 'applied'/'under_review'. |
| insightId | string | – | Only interventions that link back to this insight (via linkedInsightIds) — i.e. the fixes prompted by a specific finding. |
| limit | integer | – | Max results (default 30). |
| report | string | – | Default 'list'. 'status' = consolidated open-work view (dueForCheckIn + inFlight + recentlyClosed + winRate) in one call, ideal for orienting at the start of a session. 'outcomes' buckets closed inte… |
| since | string | – | Only interventions appliedAt >= this date (YYYY-MM-DD). |
| status | string | – | Filter by lifecycle status. |
| store | string | – | Filter by store key. |
| type | string | – | Filter by category (technical_seo, paid_optimization, etc.). |
| verdict | string | – | Filter by closing verdict (only for closed interventions). |
No output schema declared.
No examples provided.
get_inventory ~134
Get inventory analytics. Reports: summary (activeProducts count, totalVariants, outOfStock variant count, lowStock variant count with >0 and ≤10 units, totalUnits, active locations count), low_stock (products needing reorder — threshold defaults to 10 units), out_of_stock (zero-inventory variants), by_location (per-warehouse breakdown with location name, total SKUs tracked, units on hand).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Number of products (default: 20) |
| report | string | yes | Report type |
| threshold | integer | – | For low_stock: stock level threshold (default: 10) |
No output schema declared.
No examples provided.
get_marketing_performance ~414
Get marketing performance dashboard — INCLUDING the canonical checkout funnel. ALSO USE THIS for 'checkout funnel' / 'where do customers drop off' / 'how is my funnel performing' questions; do NOT manually stitch a funnel from get_analytics + get_store_summary. Returns: `funnel` (sessions, addToCartRate, checkoutRate, purchaseRate, cvr — sessions sourced from Shopify TrafficStat when available, GA4 fallback otherwise, pixel as last resort), `_pixelFunnel` (Triple Whale pixel-tracked equivalents with step-by-step ratios for drop-off SHAPE analysis), `channels` (revenue/sessions/cvr per channel like Google, Facebook, Email, Direct), ROAS and MER from Triple Whale, and `dailyTrends` per channel. IMPORTANT SOURCE HIERARCHY for `funnel.cvr`: (1) Shopify TrafficStat sessions + Shopify orders (Plus/Advanced — canonical), (2) GA4 sessions + Shopify orders (fallback when TrafficStat empty — slightly inflated due to GA4 pixel undercount), (3) Triple Whale pixel as last resort with explicit `_warning`. Inspect `funnel.source` and `funnel._sourceNote` before quoting CVR. `_pixelFunnel` is for FUNNEL SHAPE analysis only — compare addToCartRate vs checkoutRate vs purchaseRate to find drop-off points. Pixel absolute counts undercount real activity; never report `_pixelFunnel.cvr` as the store's conversion rate. Channels uses Triple Whale attribution when connected. Use for marketing ROI, channel comparison, and funnel-shape diagnosis — but for the actual CVR figure use get_metrics_comparison.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_markets ~207
Get Shopify Markets data — geographic market definitions and per-market revenue performance. Reports: markets (list of configured markets with their assigned countries and currencies), performance (revenue, orders, AOV, and revenue share broken down by market for a date range). Use this to understand which geographic markets are configured and how revenue is distributed across them. Note: market data requires the market sync to have run at least once; orders are attributed to markets using Shopify's market field (Plus merchants) or a country-code fallback (all merchants).
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| report | string | yes | Report type: markets (configured markets and countries) or performance (revenue by market) |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_metrics_comparison ~417
BEST FOR COMPARISONS AND THE CANONICAL CONVERSION RATE: Get core e-commerce metrics (Revenue, Sessions, CVR, AOV, Revenue per Session) with period-over-period comparisons. CVR here uses Shopify TrafficStat sessions (Plus/Advanced) — or GA4 sessions as fallback — divided by REAL Shopify orders. This is the right source for 'what's my conversion rate?' / 'how's my CVR trending?' questions. Do NOT use Triple Whale pixel CVR (from get_connector_data(connector:'triple-whale') or get_marketing_performance._pixelFunnel) as a stand-in: pixel undercounts purchases and sessions and produces misleading absolute numbers. Supports WoW (week-over-week), MoM (month-over-month), YoY (year-over-year), and custom period comparisons. Returns { period, metrics, comparison, charts, presentation }. `charts` is an array of grouped-bar specs (one per headline metric, current vs comparison) ready to drop into any plotting library. DEFAULT TO RENDERING THE RELEVANT CHART when the user is comparing periods or asks 'how is X vs Y' — bar charts are the natural fit. Use `comparison.changes` for the % delta caption. Use raw numbers from `metrics` only when the user asks for a single specific value.
| Name | Type | Req | Description |
|---|---|---|---|
| compareEndDate | string | – | For custom comparison: end date of comparison period (YYYY-MM-DD) |
| compareLabel | string | – | Label for custom comparison period (e.g., 'Last Year Black Friday Sale') |
| compareStartDate | string | – | For custom comparison: start date of comparison period (YYYY-MM-DD) |
| comparison | string | – | Comparison type: wow (week-over-week), mom (month-over-month), yoy (year-over-year), previous (equivalent previous period) |
| endDate | string | yes | End date of current period (YYYY-MM-DD) |
| startDate | string | yes | Start date of current period (YYYY-MM-DD) |
No output schema declared.
No examples provided.
get_metrics_multi_compare ~205
Get metrics with MULTIPLE comparisons at once. Perfect for questions like 'Show me revenue WoW and YoY' or 'Compare this week to last week and same week last year'. Returns { period, metrics, comparisons, charts, presentation }. `charts` is an array of grouped-bar specs (one per headline metric) with 3+ bars each (current + each comparison period). DEFAULT TO RENDERING THE RELEVANT CHART for multi-period questions — bars side-by-side communicate the deltas instantly. Pull each comparison's % change from its `changes` object for captions.
| Name | Type | Req | Description |
|---|---|---|---|
| comparisons | array | – | List of comparison types to include (default: ['wow', 'yoy']) |
| customComparisons | array | – | Custom comparison periods (e.g., last year's sale period) |
| endDate | string | yes | End date of current period (YYYY-MM-DD) |
| startDate | string | yes | Start date of current period (YYYY-MM-DD) |
No output schema declared.
No examples provided.
get_order ~140
Look up a specific order with full line item details (product, variant, SKU, quantity, price, vendor). Use orderName for user-facing IDs like '#1001', or orderId for Shopify numeric IDs. Also supports orderIds (array) to look up multiple orders at once — useful for cross-referencing with Triple Whale attribution data.
| Name | Type | Req | Description |
|---|---|---|---|
| orderId | string | – | Shopify numeric order ID e.g. '5559266041988' |
| orderIds | array | – | Array of Shopify numeric order IDs for batch lookup (max 50) |
| orderName | string | – | Order name e.g. '#1001' or '1001' |
No output schema declared.
No examples provided.
get_orders ~432
Get order analytics by dimension. Reports: by_status (order counts/revenue by financial status), by_country (geographic sales breakdown — supports compare for WoW/MoM/YoY trend, returns top rising/falling countries), by_product (BEST FOR: 'how many customers bought product X?', 'which products have the most unique buyers?', product-level customer counts. Returns uniqueCustomers, orderCount, unitsSold, and revenue per product. Use this whenever the question involves customers AND products together), by_tag (order volume per Shopify order tag with SUDDEN-DROP DETECTION — compares the last 7 days vs the prior weeks and flags tags whose order count fell significantly. BEST FOR: 'did orders with tag X drop?', 'has any marketplace/dropship channel stopped?'. Pass `tag` to focus one tag, or omit to scan all tags; returns a `drops` list plus per-tag current/baseline/change).
| Name | Type | Req | Description |
|---|---|---|---|
| compare | string | – | For by_country: attach a `comparison` block with rising/falling countries vs the WoW/MoM/YoY/previous-period window. |
| endDate | string | – | End date (YYYY-MM-DD) |
| lagDays | integer | – | For by_tag: end the windows this many days back so the current week is complete days (default 1). Raise it if a marketplace app applies its order tag with a delay. |
| limit | integer | – | For by_country: number of countries (default: 10). For by_tag: max tags returned (default: 20). |
| lookbackWeeks | integer | – | For by_tag: number of prior weekly windows to use as the baseline (default 4, range 2-12). |
| report | string | yes | Report type |
| sortBy | string | – | For by_product: sort field (default: revenue) |
| startDate | string | – | Start date (YYYY-MM-DD) |
| tag | string | – | For by_tag: focus a single order tag (case-insensitive). Omit to scan every tag and surface the ones dropping. |
No output schema declared.
No examples provided.
get_product_analytics ~240
Get Shopify product sales analytics — units sold and revenue per product from ShopifyQL. Requires Shopify Plus or Advanced. NOTE: Views, add-to-cart, and purchase funnel counts are no longer available from ShopifyQL (Shopify removed these fields) — use get_marketing_performance for funnel analysis or get_analytics(ecommerce) for GA4-based product funnel data. Reports: summary (total units/revenue), top_products (ranked by revenue or units sold), product_detail (daily units/revenue for a specific product).
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| limit | integer | – | Number of results (default: 20) |
| productId | string | – | For product_detail: Shopify product ID |
| report | string | yes | Report type |
| sortBy | string | – | For top_products: sort field (default: revenue) |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_product_catalog ~138
Get product catalog with inventory levels, pricing, cost, margins, status, and SEO metadata. Returns: title, vendor, productType, price, cost, margin, marginPercent, totalInventory, seoTitle (Shopify global.title_tag), seoDescription (Shopify global.description_tag), productUrl (full storefront URL — use this directly instead of guessing). Use for questions about products, pricing, profitability, cost price, stock levels, or SEO/meta tags.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Number of products (default: 20) |
| store | string | – | Filter to a specific store domain. Omit to query all connected stores. |
No output schema declared.
No examples provided.
get_product_health ~363
CROSS-SOURCE PRODUCT HEALTH SCAN — one call that returns per-product reviews + refunds + sales velocity + inventory + a composite 'needs attention' score (0-100). Use this for 'which products need fixing?' / 'what should I look at?' / 'are there any product issues?' / 'which products are performing badly?'. Saves the LLM from stitching get_top_products + get_refunds + get_reviews + get_inventory manually — synthesis is consistent and the composite score is grounded in the same heuristic each time. Returns each product's underlying signals (refund rate, review rating, review count, stock level, units sold, days since last sale) plus a `flags` array explaining WHY the score is what it is. Sort is by attentionScore descending so the most concerning products come first. Filter with `minAttentionScore` (default 0, set to 30 to see only flagged products). Default analyses the top 50 products by sales over the last 30 days.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End of sales window (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| limit | integer | – | Max products to analyse, ordered by recent revenue (default: 50, max: 100). |
| minAttentionScore | integer | – | Filter to products with attentionScore >= this value (default: 0 = all). Set to 30 to see only products with a flagged signal. |
| startDate | string | – | Start of sales window (YYYY-MM-DD). Defaults to 30 days ago. |
| store | string | – | Filter to a specific store domain. Omit to query all connected stores. |
No output schema declared.
No examples provided.
get_products_by_channel ~206
Get products with marketing channel attribution showing which channels drive sales for each product. Attribution uses Triple Whale last-click data joined to Shopify order line items — requires Triple Whale to be connected. When Triple Whale is not connected, all orders appear under 'unattributed'. Use for questions like 'Which channels drive sales of product X?' or 'What products does Facebook sell?'
| Name | Type | Req | Description |
|---|---|---|---|
| _offset | integer | – | Pagination offset. If a response's _pagination.hasMore is true, call again with _offset to page through the full set. |
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| limit | integer | – | Number of products to return (default: 10, max 100). |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_query_to_url ~389
Join Google Search Console queries with Shopify product sales — answers questions that pure SEO or pure sales tools can't. Reports: by_url (given a product URL, return its top driving organic queries plus the matching product's sales/orders/refunds and an implied click-to-purchase rate), unconverting_pages (URLs that received >= minClicks organic clicks but the matching product sold <= maxSales units in the same window — flags 'SEO-visible-but-not-converting' listings), top_pages_with_sales (top organic pages joined with their product sales, ranked by clicks × orderCount so high-throughput pages surface). For unconverting_pages and top_pages_with_sales, only product URLs (matching /products/{handle}) are joined to sales — collection pages and blog posts are not.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| limit | integer | – | Number of results (by_url: top queries to return; unconverting_pages / top_pages_with_sales: max URLs returned). Default 20. |
| maxSales | integer | – | For unconverting_pages: maximum units sold for the matched product in the same window (default 2). 0 means 'pages with zero sales only'. |
| minClicks | integer | – | For unconverting_pages: minimum organic clicks for a URL to be considered (default 50). Lower for low-traffic stores; raise to focus on bigger problems. |
| report | string | yes | Report type |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
| url | string | – | For by_url: the exact URL as it appears in Search Console (https:// included, with or without trailing slash to match how GSC indexed it). |
No output schema declared.
No examples provided.
get_refunds ~298
Get refund/return analytics. Reports: summary (total refunds, refund rate, % of revenue — supports compare for WoW/MoM/YoY trend), top_products (most refunded products by amount or rate), by_reason (classifies refund notes into buckets: size_fit_too_small, size_fit_too_large, quality_defect, wrong_item, shipping_late_or_lost, color_style_mismatch, comfort, changed_mind, duplicate, out_of_stock — with top affected products and sample verbatim notes per bucket. The out_of_stock bucket is a fulfilment/overselling signal, not a customer preference. Best for diagnosing high refund rates).
| Name | Type | Req | Description |
|---|---|---|---|
| compare | string | – | For summary: attach a `comparison` block showing the same metrics for the WoW/MoM/YoY/previous-period window with percentage changes. |
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| limit | integer | – | For top_products and by_reason: number of results (default: 10) |
| report | string | yes | Report type |
| sortBy | string | – | For top_products: sort field (default: amount) |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_revenue_drivers ~179
Diagnostic tool for 'why did revenue change?' questions. Bundles headline metric deltas, product mix shifts, and pre-generated ranked hypotheses into one call — so you don't have to stitch signals together yourself and risk asserting causation. Each hypothesis includes: what signal supports it, what else would be true if it's correct, and which tool to call next to confirm or rule it out. Use when the merchant asks why revenue went up or down, what's driving performance, or what changed.
| Name | Type | Req | Description |
|---|---|---|---|
| comparison | string | – | Comparison window. Default: previous (equivalent prior period). |
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday. |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window. |
| store | string | – | Filter to a specific store domain. |
No output schema declared.
No examples provided.
get_reviews ~371
Get product review analytics (Yotpo, Reviews.io, or Judge.me). Reports: summary (average rating, distribution), trends (daily volume/score), top_rated (best reviewed products), lowest_rated (worst reviewed), recent (latest reviews), by_product (all reviews for a specific product — requires productId or productTitle), search (keyword search in reviews), timing (days from purchase to review), sales_impact (reviewed vs unreviewed product sales), themes (BEST FOR 'what do customers complain about?' — aggregates review text into themes like sizing/comfort/quality/shipping with complaint counts, negative share, and sample 1-2★ quotes; pass productId/productTitle to drill into one product). Prefer themes over paging raw review text.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date (YYYY-MM-DD) |
| keyword | string | – | For search: keyword to find in review content |
| limit | integer | – | Number of results |
| maxScore | integer | – | For recent/search: maximum star rating (1-5) |
| minReviews | integer | – | For top_rated/lowest_rated: minimum review count (default: 3) |
| minScore | integer | – | For recent/search: minimum star rating (1-5) |
| productId | string | – | For by_product/themes: Shopify product ID (numeric or GID) to scope to one product |
| productTitle | string | – | For by_product/themes: product title (partial match, case-insensitive) |
| provider | string | – | Review provider (auto-detected if omitted) |
| report | string | yes | Report type |
| sku | string | – | For search: filter to specific product SKU |
| startDate | string | – | Start date (YYYY-MM-DD) |
No output schema declared.
No examples provided.
get_spend_reconciliation ~204
Reconcile ad-spend numbers between Triple Whale's pixel attribution and the ad-platform APIs (Google Ads, Meta, TikTok). Same channel, different numbers — pixel typically captures 10-30% of true spend due to ad blockers, consent banners, and iOS ATT. Returns per-channel platform-API spend, TW pixel spend, ratio, severity (match / moderate / severe / critical), trueRoas (TW revenue / platform spend), pixelRoas (from TW), and a recommendation per channel. Use whenever quoting ROAS — pixel ROAS in isolation is reliably wrong on paid channels with bad pixel coverage.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| startDate | string | – | Start date (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_store_notes ~141
Return all merchant-attached LLM context notes for a store (or all stores if omitted). Notes are authoritative caveats the merchant has added — e.g. 'one B2B customer skews retention', 'Q2 budget freeze, don't suggest more ad spend', 'pre-2026-03 data is partial'. The same notes are auto-injected into every store-scoped tool response as _storeNotes, so calling this directly is only needed when you want a full picture before answering a session-opening question.
| Name | Type | Req | Description |
|---|---|---|---|
| store | string | – | Optional. Filter to a specific store. Omit to get notes for all stores the caller has access to. |
No output schema declared.
No examples provided.
get_store_profile ~162
Return what the system understands about a store's IDENTITY — primaryCategory, priceTier, audience, positioning, giftLed (is it typically bought as a gift for others?), the revenue-weighted category mix, and price range. System-generated from the catalog + sales (refreshed ~monthly), with any merchant corrections applied on top. Use as a session opener to orient yourself before answering, or when the user asks 'what do you know about my store?'. Treat `_merchantCorrected` fields as authoritative. If the profile is wrong, call update_store_profile. Omit `store` to get every store in the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| store | string | – | Optional. Specific store (short or full domain). Omit for all stores in the workspace. |
No output schema declared.
No examples provided.
get_store_summary ~167
Get overall store metrics from Shopify order data ONLY: revenue, orders, average order value, items sold, discounts, unique customers — all for the specified period. Includes percentage changes vs prior period. Also returns all-time totals (orders, products, customers). Use this for high-level store performance questions. For an overview spanning ALL connected sources (traffic, email, support, reviews, etc.) use get_complete_dashboard instead.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date in ISO format (YYYY-MM-DD). Defaults to yesterday (last fully-closed day — today is excluded by default to avoid partial-day totals; pass an explicit endDate to include today). |
| startDate | string | – | Start date in ISO format (YYYY-MM-DD). Defaults to a 30-day window ending yesterday. |
No output schema declared.
No examples provided.
get_sync_health ~97
Report the health of every connected data source for each of your stores (works for a single store too). For each provider/instance: last successful sync timestamp, record count, freshness flag (stale if > 36h), and key-field nullability rates (e.g. % of customers without firstOrderAt populated). Use this to diagnose 'why is metric X showing 0?' or to confirm data is current before reporting numbers.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_targets ~231
List the merchant's active targets with LIVE actual-vs-target pacing, recomputed from ground truth on every call (never stored). Each target returns a `pacing` block: status (ahead / on_track / at_risk / behind / too_early / not_paceable), actualToDate, projected month-end with its interval, progressPercent, gapToTarget, currentDailyPace vs requiredDailyRunRate, and days elapsed/remaining. Live month-pacing is available for monthly revenue/orders targets scoped to a store; other targets return the goal and defer to get_yoy_monthly / query_metric_snapshots. HONESTY: the status band is derived from the forecast's low/high interval — 'behind' means behind the optimistic end — and below 25% of the period elapsed it returns 'too_early' rather than a noisy verdict. Filter with metric / period / store.
| Name | Type | Req | Description |
|---|---|---|---|
| metric | string | – | Only targets for this metric. |
| period | string | – | Only targets for this period type. |
| store | string | – | Only targets scoped to this sub-store key. |
No output schema declared.
No examples provided.
get_timeline ~224
Merged, date-ordered timeline of everything that happened to the business: interventions (changes the merchant applied, and when their verdict landed) plus store-context notes (campaign launches, migrations, budget freezes, data quirks the merchant recorded). Use this to line dated events up against a metric movement — 'revenue dipped on the 12th, what changed around then?' — instead of calling get_interventions and get_store_notes separately and stitching them yourself. Returns events sorted most-recent-first, each with a date, kind, store, and detail. Includes expired/closed items within the window so historical context isn't lost.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | Window end (YYYY-MM-DD). Defaults to today. |
| limit | integer | – | Max events to return (default 50, max 200). |
| startDate | string | – | Window start (YYYY-MM-DD). Defaults to 90 days before endDate. |
| store | string | – | Optional. Filter to a specific store (short or full domain). Omit for all stores the caller can see. |
No output schema declared.
No examples provided.
get_top_products ~312
Get top selling products ranked by revenue or quantity. Set level to 'variant' to break down by variant (size, colour, etc.) — includes SKU, discount, and profit margin when cost data is available. Set level to 'category' for a revenue / COGS / gross-profit / margin-% rollup by product TYPE (e.g. 'Sewing Machines vs Fabric') — the structured answer to category-P&L / margin-by-category questions (margin is computed only over cost-configured units, with a costCoveragePercent per category). Optionally filter variants by productTitle. Supports compare for WoW/MoM/YoY trend — returns top 5 rising/falling/new products with the comparison.
| Name | Type | Req | Description |
|---|---|---|---|
| compare | string | – | Attach a `comparison` block with the top rising/falling/new products vs the WoW/MoM/YoY/previous-period window. |
| endDate | string | – | End date (YYYY-MM-DD) |
| level | string | – | Grouping level: product (default), variant (by size/colour/SKU), or category (revenue/COGS/gross-profit/margin by product type) |
| limit | integer | – | Number of results (default: 10) |
| metric | string | – | Sort by: revenue or quantity (default: revenue) |
| productTitle | string | – | For variant level: filter to variants of a specific product (partial match) |
| startDate | string | – | Start date (YYYY-MM-DD) |
No output schema declared.
No examples provided.
get_velocity ~599
Get sales-velocity analytics from one of two angles — pass `angle` to pick which, `report` to pick the report within it. • angle:"inventory" — the INVENTORY-management angle: how fast stock is moving and what to reorder. Reports: summary (sell-through rate, turnover, health status), by_product (products sorted by sales velocity), restock (reorder quantity recommendations from velocity, lead time, and safety stock — pass leadTimeDays/safetyStockDays; the reason to pick this angle). Use when the question is "what should I reorder and how much?". • angle:"product" — the PRODUCT angle: how individual products are selling over time. Reports: summary (totalUnitsSold, revenue, productsTracked, inventoryHealth counts), by_product (per-product velocity, stock, reorder urgency), trend (daily time series for one product — requires productId), stagnant (active products with zero or near-zero sales — dead stock/zombie listings; pass maxOrders to widen from zero-sales to near-zero). Use for a single product's trend or stagnant/dead-stock questions. Both angles share `report:"summary"`/`"by_product"` (different content per angle) and the `sortBy`/`filter` params on by_product. `days` defaults to 30 in both angles (note: angle:"product", report:"summary" ignores `days` entirely — it's always a fixed trailing-30-day aggregate).
| Name | Type | Req | Description |
|---|---|---|---|
| angle | string | yes | Which velocity angle to query. See the tool description for the report list and defaults per angle. |
| days | integer | – | Days for velocity calculation (default: 30 in both angles). Ignored by angle:"product", report:"summary" — that report is always a fixed trailing-30-day aggregate. |
| filter | string | – | For by_product: filter. |
| leadTimeDays | integer | – | For angle:"inventory", report:"restock": lead time in days (default: 14). |
| limit | integer | – | For by_product: number of products (default: 20). |
| maxOrders | integer | – | For angle:"product", report:"stagnant": max orders to count as stagnant (default: 0 = zero sales only, use 1-2 for near-zero). |
| productId | string | – | For angle:"product", report:"trend": Shopify product ID (required). |
| report | string | yes | Report type — valid values depend on `angle` (see tool description): inventory has summary/by_product/restock; product has summary/by_product/trend/stagnant. |
| safetyStockDays | integer | – | For angle:"inventory", report:"restock": safety buffer days (default: 7). |
| sortBy | string | – | For by_product: sort field. |
| variantId | string | – | For angle:"product", report:"trend": Shopify variant ID (optional). |
No output schema declared.
No examples provided.
get_wakeup ~88
Retrieve a single wakeup by ID. Use this inside a Claude routine prompt: the routine fires, calls `get_wakeup({ id: 'abc-123' })`, gets the full context and benchmarks, then runs the analysis. Also auto-marks the wakeup as triggered if the trigger date has passed.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The wakeup UUID returned by save_wakeup. |
No output schema declared.
No examples provided.
What is the Ask AI MCP server?
Ask AI is an MCP server listed in the public MCP registry as com.ask-ai-data-connector/ask-ai. Ask questions across Shopify, Klaviyo, GA4 and 20+ e-commerce sources in plain English. This page covers its hosted endpoint (https://ask-ai-data-connector.com/mcp).
Is the Ask AI MCP server safe to use?
Ask AI scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Ask AI MCP server expose?
Ask AI exposes 65 tools: get_revenue_drivers, get_anomalies, get_sync_health, get_data_sources, get_complete_dashboard, and 60 more. Their descriptions and schemas cost roughly 22,504 tokens of context every time the server is loaded.
Does the Ask AI MCP server require authentication?
Yes. Ask AI asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Ask AI MCP server still maintained?
Ask AI is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.