View Categories

How to Query Shopify Data with Claude / Cursor via MCP (Shopify MCP Server Setup)

29 min read

MCP SERVER SHOPIFY

Query Shopify Admin data with Claude or Cursor via the Shopify MCP server.

A 5-minute shopify mcp setup that lets your AI tool ask plain-English questions about your orders, customers, products, and inventory. The Query Streams agent caches the Shopify Admin API into local SQL surfaces, so the LLM sees real tables instead of REST endpoints — and Schema Intelligence handles the data idioms (money columns stored as strings, financial_status / fulfillment_status enums, multi-currency presentment vs shop money, comma-delimited tags) so the SQL is right on the first try.

No firewall holes One key, every connector Live data, no cache lag Bring your own AI tool

Query Streams is a secure, real-time data integration platform that brings every database and SaaS API in your account into Claude, Cursor, ChatGPT, and Grok — through a single MCP key with no firewall changes. This guide walks through the shopify mcp path specifically, so your AI tool can answer plain-English questions about orders, customers, products, inventory, fulfillments, and refunds without you exporting reports out of the Shopify admin or stitching together GraphQL Admin API calls. The Network Agent pulls Shopify Admin API data into a local DuckDB cache, so the LLM sees clean SQL surfaces (orders, line_items, customers, products, variants, transactions, fulfillments) instead of raw REST envelopes — and the read-only Admin scope means this is the analytics + ops complement to the official Shopify Storefront MCP, not a replacement for it. Learn more at QueryStreams.com and sign up for free to start asking your AI tool real Shopify Admin questions.

What the Query Streams Shopify MCP server gives you

Other “Shopify MCP” servers on the open-source landscape connect the AI tool directly to the Shopify Admin REST or GraphQL API and push raw resource fetches at it. That works, but it pushes a Shopify private app token into your AI client’s config, leaves the LLM staring at REST envelopes and GraphQL types instead of SQL, scopes the AI tool to only Shopify, and gives you no audit trail of what the AI actually asked. The Query Streams shopify mcp server solves a wider problem: one key, every connector, full audit trail, the agent normalises Shopify Admin data into SQL surfaces, and the AI tool never holds your Shopify credentials.

Zero inbound firewall holes

The Network Agent opens a single outbound encrypted cloud link to Query Streams. Your AI client connects to the cloud, never to your Shopify private app token or your network. No port to open, no IP to allowlist, no VPN.

One key, every connector

The same MCP key reaches Shopify alongside every other database and SaaS API your account has connected. Add a Stripe or PostgreSQL connector tomorrow and the AI tool sees it next to your Shopify orders without re-keying. Multi-store too — each Shopify store is a separate connector under the same MCP key.

Schema Intelligence baked in

The AI sees AI-curated descriptions, semantic types (currency-string-cast for money columns, financial_status / fulfillment_status enums, multi-currency presentment vs shop money, list-string for comma-delimited tags), sample values, and discovered foreign keys for every Shopify field — not just bare REST property names. It writes accurate SQL the first try, including the total_price::DOUBLE cast that bare-schema LLMs miss.

Read-only enforced at the agent

Even a hallucinating LLM can’t issue a refund, fulfill an order, adjust inventory, or modify a product through Query Streams MCP. The Network Agent rejects anything that isn’t SELECT, WITH, or EXPLAIN before it reaches the cached Shopify tables — and Shopify Admin mutate operations are never exposed to the MCP surface in the first place.

Per-key rate limits

Default 60 requests per minute and 10 execute calls per minute, configurable per key. A runaway AI tool-call loop hits a token bucket, not your Shopify Admin API daily quota or your store’s leaky-bucket throttle.

How it works without opening firewall ports

The Query Streams Network Agent installs once on any machine with internet access (the Shopify Admin API is reachable from anywhere) and dials one outbound TLS link to the cloud; when Claude or Cursor asks a question, the agent calls the Shopify Admin API and caches the response in a local DuckDB so the AI sees clean SQL surfaces — orders, line_items, customers, products, variants, inventory_levels, transactions, fulfillments — instead of REST envelopes, while nothing inbound is ever exposed and the AI tool never sees your Shopify private app token, store domain, or API version. how the outbound-only connection works →

AI Client

Cursor, Claude,
ChatGPT, Grok

QS MCP Server

Streamable HTTP
X-MCP-Key auth

Network Agent

On your network
Cloud link out

Shopify Admin API

read-only DuckDB
cache as SQL

No inbound port required — the agent dials out, never the other way around

The MCP key you give Cursor or Claude is scoped (read / analyze / execute), revocable at any time, and rate-limited per-key. The AI tool calls these MCP tools to do its work:

querystreams-mcp · tool catalog
qs_list_organizationsread
Returns the org bound to the calling key.
qs_list_agentsread
Lists Network Agents and online state.
qs_list_connectorsread
Lists data connectors (one entry per database server, API, or Shopify store).
qs_get_connector_schemaread
Returns the cached Shopify tables and columns the AI can query (orders, line_items, customers, products, variants, inventory, transactions, fulfillments), with Schema Intelligence enrichment when available.
qs_profile_tableanalyze
Sample values, distributions, enum detection, semantic types — on demand.
qs_list_saved_queriesread
Pre-built parameterized SQL templates the team trusts. The AI runs them without ever seeing the SQL.
qs_run_saved_queryexecute
Executes a saved query by pattern_key with optional parameter overrides.
qs_run_queryexecute
Executes a SELECT against a connector. Read-only validator runs at the agent, before the cached Shopify data sees the SQL.

Why Schema Intelligence makes Query Streams MCP different

Most “MCP for Shopify” servers in the open-source landscape hand your AI tool the same field reference Shopify publishes for developers — or worse, the raw information_schema of whatever cache they keep. Field names. Data types. Maybe a primary key. The LLM is left to guess that total_price is stored as a STRING and needs to be cast to DOUBLE for arithmetic, that financial_status is an enum of pending / authorized / partially_paid / paid / partially_refunded / refunded / voided, or that tags is a comma-delimited string that needs flattening to a list. That’s why the first SQL most LLMs write against a bare Shopify schema is wrong — not because the LLM is bad, but because it doesn’t have the data it needs to be right (and “SUM is null because total_price is a string” is the kind of failure mode that becomes a wasted afternoon).

Query Streams MCP returns that same cached Shopify schema enriched with what we call Schema Intelligence (SI) — AI-curated metadata that’s generated by running profiling queries against your actual Shopify data before the AI client ever asks. When SI is enabled on the Shopify connector, every schema tool the AI calls (qs_get_connector_schema, qs_get_table_schema, qs_profile_table, qs_get_relationships) returns the bare cached schema plus six layers of curated knowledge. The LLM stops guessing.

To make this concrete, here is what the AI client gets back from a single qs_get_table_schema call against the Shopify connector’s orders table — the canonical Shopify fact table that drives 80% of analytics questions — first without Schema Intelligence, then with it.

Without Schema Intelligence data_source: captured_schema
// what the LLM sees == TABLE: orders == Columns: – id bigint NOT NULL – customer_id bigint – email varchar(255) – financial_status varchar(30) – fulfillment_status varchar(20) – total_price varchar(20) – subtotal_price varchar(20) – total_tax varchar(20) – total_discount varchar(20) – currency varchar(3) – created_at timestamp NOT NULL – tags varchar(500) Indexes: ix_created_at, ix_customer_id Foreign Keys: (none declared in cache) si_recommendation: state: “not_run” what_youre_missing_for_this_call: – total_price string-cast semantic – financial_status / fulfillment_status enum value lists – currency multi-store / multi-currency context – tags as list_string flattening – line_items unfolding from orders array
With Schema Intelligence data_source: schema_intelligence
// what the LLM sees == TABLE: orders [FACT, domain:ecommerce] == “Shopify Admin orders per customer with financial / fulfillment status, money columns stored as STRING (cast ::DOUBLE for SUM/AVG), multi-currency aware.” ai_analyzed_at: 2026-05-05 · ~340,128 rows Columns: – id bigint identifier – customer_id bigint identifier FK -> customers.id (98%, conf 0.97) – email varchar(255) email – financial_status varchar(30) status_code (enum) paid (62%) | pending (18%) | refunded (8%) partially_refunded (5%) | authorized (4%) partially_paid (2%) | voided (1%) – fulfillment_status varchar(20) status_code (enum) fulfilled (71%) | null (16%) partial (9%) | restocked (4%) – total_price varchar(20) currency_string_cast_required ⚠ STRING – cast ::DOUBLE for SUM/AVG Sample: “129.99”, “89.50”, “1450.00” – currency varchar(3) status_code (enum) USD (78%) | EUR (12%) | GBP (6%) CAD (3%) | AUD (1%) – created_at timestamp date_iso Sample: 2026-05-05, 2026-05-04 – tags varchar(500) list_string Comma-delimited – SI flattens to virtual list Sample: “vip,returning”, “first-time,wholesale”

The six layers Schema Intelligence adds

Each layer addresses a class of question the LLM would otherwise guess at. The opt-in SI profiling pass runs against your Shopify data without changing your schema or writing to your store, and refreshes incrementally when you add a new metafield definition. what Schema Intelligence adds and how it stays current →

AI-curated descriptions

Plain-English purpose for every database, schema, table, and column — generated once, refreshed when your schema changes. Confidence-scored; user-authored descriptions always win.

orders: “Shopify Admin orders with money
columns stored as STRING — cast ::DOUBLE.”

Table classifications

Each table tagged FACT (transactional events), DIM (descriptive reference), or LOOKUP (small code maps), plus a business domain — ecommerce, marketing, sales, finance, support, and 14 more.

orders [FACT, domain:ecommerce]
products [DIM, domain:ecommerce]

Semantic types per column

Eighteen types — currency, currency_string_cast_required, email, date_iso, status_code, list_string, percentage, identifier, url, and more. The AI generates dialect-correct SQL appropriate to each type, including the total_price::DOUBLE cast no bare-schema LLM gets right.

total_price: currency_string_cast_required
tags: list_string · created_at: date_iso

Sample values from real data

Random rows surfaced to the LLM so it recognises patterns no schema can show — formatting conventions, encoded values, naming styles, and the actual shape of your product titles, customer tags, and order metadata.

tags: [“vip,returning,wholesale”,
“first-time”, “subscription,monthly”]

Enum detection with distributions

Low-cardinality columns (50 or fewer distinct values, at most 5% of rows unique) mapped to their full value list with row counts. The AI never guesses casing or spelling on Shopify enums like financial_status or fulfillment_status.

financial_status: paid (62%) |
pending (18%) | refunded (8%) | …

Implicit foreign-key discovery

Cross-table data overlap analysis finds joins that aren’t declared as DDL constraints — including custom metafields linking custom objects to standard ones. Stored alongside formal FKs with confidence scores, returned by qs_get_relationships.

orders.customer_id ->
customers.id (98% overlap, conf 0.97)

Same prompt, different SQL

The proof is in the SQL the AI tool actually writes. Same Cursor session, same Claude model, same prompt — “What’s our revenue and AOV by month for the last 12 months, only paid orders, in USD?” Without Schema Intelligence the LLM has to guess. With it, the LLM knows total_price is a STRING that needs casting, the financial_status enum value is 'paid' not 'completed', and multi-currency stores need a currency filter.

Without Schema Intelligence
— LLM’s first attempt against bare schema: SELECT DATE_TRUNC(‘month’, created_at) AS month, SUM(total_price) AS revenue, AVG(total_price) AS aov FROM orders WHERE created_at >= ‘2025-05-07’ AND status = ‘completed’ GROUP BY month ORDER BY month total_price is STRING — SUM errors or returns garbage column is financial_status, not status enum value is ‘paid’, not ‘completed’ hardcoded date — “last 12 months” should be dynamic multi-currency stores mix EUR + USD into one number
With Schema Intelligence
— LLM’s first attempt with SI enabled: SELECT DATE_TRUNC(‘month’, created_at) AS month, SUM(total_price::DOUBLE) AS revenue_usd, ROUND(AVG(total_price::DOUBLE), 2) AS aov_usd, COUNT(*) AS orders FROM orders WHERE created_at >= NOW() – INTERVAL 12 MONTH AND financial_status = ‘paid’ AND currency = ‘USD’ GROUP BY month ORDER BY month 12 rows. Correct first try. total_price cast to DOUBLE (currency_string_cast_required) financial_status filtered to enum value ‘paid’ multi-currency normalised by filtering currency = ‘USD’ NOW() – INTERVAL 12 MONTH is dialect-correct DuckDB
Don’t want to run Schema Intelligence? MCP still works — schema tools return bare metadata (types, primary keys, formal foreign keys, indexes) and every degraded response carries an si_recommendation block telling the AI what it’s missing, including a one-call option to enable SI mid-conversation via qs_request_si_analysis. how Schema Intelligence runs and how long it takes →

Query Streams MCP vs Shopify Storefront MCP

Shopify ships an OFFICIAL MCP surface called Shopify Storefront MCP. It exposes the storefront API — catalog, products, collections, public-facing customer data — so AI shopping assistants can help buyers browse products, get recommendations, and check stock visibility. It’s well-designed for buyer-facing AI experiences. It does not see admin / ops / financial data. Query Streams Shopify MCP is the inverse: a read-only Admin API surface for the operations, analytics, finance, and customer-support side of Shopify. The two MCP servers solve different problem shapes — here’s how they line up.

Query Streams Shopify MCP Shopify Storefront MCP
Scope Admin API — orders, finance, ops, inventory Storefront — catalog, products, public customer
Read or write Read-only by construction Read-only
Use case Operations + analytics + finance + support Buyer-facing shopping AI
Multi-store reach Yes — multi-connector cross-store SQL Per-store
Cross-connector joins Yes — Shopify + Stripe + HubSpot + Postgres No
Schema metadata AI-curated descriptions, semantic types like currency_string_cast_required, enum value lists, AI-discovered metafield mappings Storefront API spec
Audit trail event_logs per call with org / user / key / scope / latency Shopify audit log scope-dependent
Custom data (metafields / metaobjects / Functions custom data) Yes — auto-discovered by Schema Intelligence Per-app coverage

The two MCP servers coexist well, and many Shopify Plus organisations deploy both. Use Shopify Storefront MCP for buyer-facing AI shopping experiences — AI agents that help shoppers browse catalog, get product recommendations, or answer “do you have this in my size?” Use Query Streams Shopify MCP for AI tools that talk to your team — ops, finance, support, and analytics workflows that need orders, transactions, fulfillments, customer lifetime value, inventory levels, refunds, discount codes, and gift cards alongside the rest of your business data. Different audiences, different scopes, both read-only — they complement each other rather than compete.

Nova AI

MCP not for you? Try Nova AI instead.

Skip the JSON config entirely: Nova AI is built into the Query Streams web portal and answers the same plain-English Shopify Admin questions — revenue by product, fulfillment SLAs, cohort retention — across every connector you’ve added, with the same agent, read-only enforcement, and Schema Intelligence, no MCP plumbing.

Meet Nova AI

Prerequisites

Before you start, make sure you have:

  1. A free Query Streams account at my.querystreams.com.
  2. The Query Streams Network Agent installed on a machine with internet access — see Download the Query Streams Agent. The Shopify Admin API is reachable from anywhere, so the agent doesn’t need to live on a specific network.
  3. A Shopify store connector configured against the agent — see the existing API Connector Setup guides for private app pairing. The agent holds the Shopify private app token and your store domain; the AI tool never touches either of them. Each store you want to query is a separate connector, so a multi-store account just adds connectors one at a time.
  4. Any MCP-capable AI client. We’ll show Cursor, Claude Desktop, ChatGPT, and Grok in this guide; if you use Windsurf, Zed, Continue, Cline, VS Code Copilot, Codex, or Goose, the config block is essentially the same.
  5. Five minutes.
You only set up the agent once. The same agent that powers Query Streams’ Excel and Google Sheets add-ons, the web Query Builder, and Nova AI also serves MCP. Adding MCP to an existing Query Streams account is just generating a key — the agent and connectors are already running.
1

Generate an MCP key

From the /mcp page in Query Streams, mint a key with the scopes you want.

2

Drop it into your AI client

One JSON snippet for Cursor, Claude, ChatGPT, or Grok. Same key everywhere.

3

Ask a question

“What’s our top product by revenue this month?” — the AI calls the right tools, you get the answer.

Step 1: Generate an MCP key in Query Streams

Sign in to Query Streams and open the MCP page (or sign in first at my.querystreams.com and click MCP in the left navigation). Click Generate key, give the key a recognizable name (something like cursor-laptop or claude-desktop), and pick the scopes you want this key to have:

  • read — the AI can browse connectors and read schema. Required for everything else.
  • analyze — the AI can profile tables and discover relationships (sample values, distributions, semantic types). Optional but strongly recommended for ecommerce work, where understanding the shape of your order data and money-column semantics (string-stored prices, multi-currency, enum statuses) matters.
  • execute — the AI can actually run SQL. Without this, the AI is read-only against schema metadata only.

For a typical “let Claude analyse my Shopify Admin data” workflow, all three scopes are appropriate. For a key you’re handing to a teammate or a less-trusted client, drop execute and let them browse only. You can revoke any key at any time from the same page; the AI client will see MCP_KEY_REVOKED on its next call and stop working immediately. There’s no propagation delay.

Copy the key now — Query Streams shows it once, then stores only a hash. If you lose it, generate a new one. The key looks like qsmcp_ followed by 48 random characters and is what your AI client sends in the X-MCP-Key request header.

Step 2: Add Query Streams MCP to your AI client

The configuration is the same shape across every MCP-capable client — an MCP server entry pointing at https://mcp.querystreams.com with your key in the X-MCP-Key header. Pick your client below.

Cursor
Cursor ~/.cursor/mcp.json
// Edit ~/.cursor/mcp.json
{
  "mcpServers": {
    "querystreams": {
      "url": "https://mcp.querystreams.com",
      "headers": {
        "X-MCP-Key": "qsmcp_PASTE_KEY_HERE"
      }
    }
  }
}
Claude Desktop
Claude Desktop claude_desktop_config.json
// Settings → Developer → Edit Config
{
  "mcpServers": {
    "querystreams": {
      "url": "https://mcp.querystreams.com",
      "headers": {
        "X-MCP-Key": "qsmcp_PASTE_KEY_HERE"
      }
    }
  }
}
ChatGPT
ChatGPT Apps & Connectors
// Settings → Apps & Connectors → Add MCP
Server URL  https://mcp.querystreams.com
Auth header X-MCP-Key
Header value qsmcp_PASTE_KEY_HERE

// Requires a paid ChatGPT plan
// (Plus / Pro / Team / Enterprise).
Grok
Grok Remote MCP Tools
// Grok → Settings → Tools
{
  "mcp_servers": [{
    "name": "querystreams",
    "url": "https://mcp.querystreams.com",
    "auth_header": "X-MCP-Key",
    "auth_value": "qsmcp_..."
  }]
}

Restart your AI client. On its next start it will discover the eight Query Streams MCP tools listed above and surface them in its tool palette. In Cursor and Claude Desktop you can verify by typing “list connectors” — the AI should call qs_list_connectors and return your Shopify store(s) (each store appears as its own connector if you’ve paired multiple) along with anything else you have configured.

Step 3: Ask the AI a Shopify question

You don’t write SQL — the AI does. You ask a question, the AI picks the right MCP tool, the agent runs the query against your cached Shopify Admin data, and the answer comes back as text plus tables. Three example prompts to try first:

“What’s our top product by revenue this month, broken down by sales channel?”
Revenue
The AI will call qs_get_connector_schema to discover the cached Shopify tables, then qs_run_query with a SELECT that joins orders to line_items on order_id, casts line_items.price::DOUBLE * quantity for revenue, filters financial_status = 'paid' and created_at >= DATE_TRUNC('month', NOW()), then groups by title and source_name for the channel split. You’ll see the result table inline plus a written interpretation — which products are scaling, which are stuck, and which channels each product depends on. Schema Intelligence’s enum detection on financial_status kept the AI from including refunded or pending orders in the revenue total.
“List orders that haven’t shipped within 5 days of payment, ordered by priority.”
Fulfillment SLA
The AI filters orders to rows where financial_status = 'paid', fulfillment_status is null or partial, and created_at is more than 5 days ago, then enriches with customer tier (from customers.tags — SI flattens the comma-delimited string to a list) and total order value (cast total_price::DOUBLE), and orders by VIP-tag presence first, then total value descending. Below the table the AI will typically annotate which orders look like genuine SLA misses vs. warehouse holds (drop-ship items, custom-engraved products tagged as such). The opposite query — “which fulfillment lanes have the slowest median ship time?” — is the operational half of the same workflow.
“Show me customer cohorts with declining repeat-purchase rate, segmented by acquisition channel.”
Cohort Retention
A cohort table by month-of-first-order and acquisition channel (extracted from customers.tags via SI’s list flattening), with repeat-purchase rate at 30 / 60 / 90 days. The AI tool will usually highlight the cohorts that diverge most from the channel mean — paid-social cohorts often degrade faster than organic-search cohorts on subscription stores — and propose a follow-up: “want me to drill into the worst-performing cohort by SKU mix to see what they bought first?” Schema Intelligence’s enum detection on currency ensures multi-currency stores aren’t double-counting revenue across USD and EUR orders in the same cohort.

The first time the AI calls a tool, your client may pop up a confirmation prompt asking you to approve the tool call — that’s MCP’s standard consent flow, not anything Query Streams adds. Approve once and the AI proceeds with the rest of the conversation freely. You can revisit the consent at any time in your client’s settings.

Honest billing notice: MCP usage is charged on uncompressed bytes

Query Streams’ Excel add-in, Google Sheets add-on, web Query Builder, and Nova AI all run over our compressed cloud link — we measure and bill compressedBytes against your data realm. The MCP transport (Streamable HTTP per the official MCP spec) does not reliably support compression end-to-end across every client and intermediate proxy, so we measure and bill uncompressedBytes for MCP traffic.

  • What this means: a 2.5 MB Shopify analytics query (orders + line_items joined for the last 12 months across your stores) costs ~2.5 MB of your data realm when fetched via MCP, vs. ~300–500 KB via Excel / Sheets / Nova / the Query Builder. Shopify Admin API responses are heavy on enum strings, timestamps, and product attributes — LZ4 over the cloud link typically achieves 6–8x reduction on order aggregates. The DuckDB cache freshness model deduplicates Shopify API calls so you don’t burn the daily 100k-call quota twice. Same data, different transport, different billable size.
  • What this isn’t: a markup or a punishment for using MCP. We pass through actual bytes shipped. The other clients are cheaper because compression works reliably on those transports; we don’t punish you for the protocol choice, but we have to be transparent about the cost shape.
  • What you can do: for very large recurring exports (e.g. multi-year orders + line_items + transactions cross-tabs across many stores), prefer the Excel / Sheets / Nova path. For interactive AI tool calls (the typical 100–5,000 row Shopify aggregate that fits in an LLM context), MCP is the right choice and the cost difference is in cents.

Frequently asked questions

Do I need to open ports or run a VPN to use this? +
No inbound rules, port-forwarding, NAT punchthrough, or VPN. The Network Agent makes one outbound TLS connection (port 443) and your AI client reaches https://mcp.querystreams.com from the public internet — if outbound HTTPS works on the agent host, MCP works. See how the outbound-only connection works →
Which AI tools can I use with Query Streams MCP? +
Any client that speaks the open Model Context Protocol — Claude Desktop, Claude Code, Cursor, ChatGPT (paid), Grok, Gemini CLI, Windsurf, Zed, and 500+ more. Bring your own AI tool; you don’t have to switch. Full list of supported AI clients →
Can I revoke an MCP key? +
Yes — three independent kill-switches (per-key from the /mcp page, per-org via plan settings, and platform-level), none of which need a rotation of your Shopify private app token or an agent restart. More on MCP key security →
How is MCP usage billed against my data realm? +
MCP execute calls deduct from the same data-realm budget your Excel, Google Sheets, web Query Builder, and Nova AI usage already draws on — one consumption budget across every access method. The size measured for MCP differs. The other clients run over our compressed cloud link (we bill compressedBytes); MCP runs over Streamable HTTP, which doesn’t reliably support compression end-to-end through every client and proxy, so we bill uncompressedBytes. A 2.5 MB Shopify analytics query returned to Excel typically costs ~300–500 KB of your data realm (Shopify Admin API data with repeated enum strings, timestamps, and product attributes compresses 6–8x via LZ4); the same 2.5 MB result returned to Cursor over MCP costs ~2.5 MB. We’re transparent about it because we’d rather you know up front than be surprised at the end of the billing cycle.
Does Query Streams MCP work with my Shopify Plus / Shopify Advanced / standard Shopify, multiple stores, and Shopify Functions custom data? +
Yes. All Shopify plans are supported via the Admin API (Shopify Plus / Advanced / standard / Starter / lite). The Admin API is identical across plans; you only get extra surfaces (e.g. b2b/companies, markets, metaobjects) on Shopify Plus, and Schema Intelligence picks them up automatically when present. Multi-store: each Shopify store is a separate connector with its own private app token; the LLM can query shopify_us vs shopify_eu by name, or run cross-store aggregates by combining results from multiple connectors in one SQL query. Shopify Functions custom data (metafields, metaobjects, custom shop data attached to orders / products / customers / variants) is auto-discovered by Schema Intelligence — the SI scan reads metafield_definitions and metaobject_definitions, then surfaces them as clean SQL columns with friendly names. Custom metafields on orders / products / customers are flattened automatically and queryable like any other column. Custom-object joins to standard objects (e.g. linking a custom warranty_terms metaobject to orders) work in SQL exactly like any other join.
How does this differ from running an open-source Shopify MCP server myself? +
A direct Shopify MCP server (community projects on GitHub do exist, mostly thin Admin REST or GraphQL wrappers) is one MCP per data source — and most of them dump raw REST envelopes or GraphQL types at the LLM, no SQL surface, no string-money cast layer. To get Claude reading from Shopify + your PostgreSQL + your Stripe account + your Snowflake warehouse you’d need four MCP servers configured separately in every AI client, each with its own credentials, each with its own scope model, each with its own audit story. Query Streams MCP is one key reaching every connector your account has paired, and the agent normalises Shopify Admin data into clean SQL surfaces with total_price::DOUBLE string-money cast, enum-aware filtering on financial_status / fulfillment_status, and multi-currency normalisation baked in. You also pick up Schema Intelligence, agent-layer read-only enforcement, per-key rate limits, audit trail in event_logs, and the same data-realm billing pipeline you already use — none of which a direct MCP gives you.
What happens if the AI tries to write or delete data? +
It’s rejected at the agent before the cached Shopify data sees the SQL. Every qs_run_query call is parsed by a hardcoded read-only validator that allows only SELECT, WITH, and EXPLAIN statements; anything else returns READONLY_VIOLATION and never reaches the cached Shopify tables. The validator runs in the agent process, not in the cloud, so a compromised cloud surface couldn’t bypass it. There’s a second layer of safety on top: Shopify Admin write/mutate operations (creating orders, issuing refunds, fulfilling orders, adjusting inventory, modifying products, applying discounts) are simply not exposed to the MCP surface in the first place — the agent only ever issues read-shaped Admin API calls to Shopify. So even if the validator were somehow bypassed, the LLM has nothing it could call to mutate your store.
Can I see what the AI actually asked? +
Yes. Every MCP tool call writes a row to event_logs with the org, user, key, scope, latency, and result code. The org-admin can answer “who used MCP last week, which connector, and what did they ask?” with a single query. Note that we log the tool name and metadata, not the SQL text or returned rows — those flow through the cloud link and never land in cloud logs. Shopify’s Admin API exposes its own audit log (the events resource) but it’s per-store and not always granular enough to trace a specific MCP-driven query, so for cross-store activity the agent’s event_logs is the cleanest unified audit you can get of “what did the AI ask, against which Shopify store, when?” — the answer is in your own database, not split across one Shopify admin per store.
Do I have to run Schema Intelligence to use Query Streams MCP? +
No — Schema Intelligence is opt-in per (connector, database) pair, and MCP works fine without it. The AI gets bare schema (types, primary keys, formal foreign keys, indexes) and writes basic queries. With SI enabled, the AI gets six additional layers of curated metadata: (1) AI-curated descriptions on every database, table, and column; (2) table classifications (FACT for transactional events, DIM for descriptive reference, LOOKUP for small code maps) plus a business domain tag (ecommerce, sales, marketing, finance, support, and 14 more); (3) a semantic type on every column (currency, currency_string_cast_required, email, date_iso, status_code, list_string, percentage, identifier, url, person_name, and 8 more) that drives dialect-correct SQL generation; (4) sample values from your real data so the LLM recognises patterns no schema can show; (5) enum detection with full value distributions for low-cardinality columns; and (6) AI-discovered foreign keys based on cross-table data overlap, surfaced through qs_get_relationships. Without SI, every schema-tool response also carries an si_recommendation block listing exactly what’s missing for the call — the AI can read this and offer to trigger SI mid-conversation via qs_request_si_analysis. Run time scales with table count: a small Shopify store under 100 tables (standard surfaces only, no metaobjects) completes in around 10 minutes; a typical mid-size store (a few hundred tables including metafield-flattened columns) finishes in 15–25 minutes; a Shopify Plus store with 1,500+ tables across many metaobject definitions and Shopify Functions custom data can take 45–60 minutes for a full scan. SI runs through your Network Agent against your data (never in the cloud), never writes to your Shopify store, never changes your schema, and refreshes incrementally when your schema changes — so subsequent runs after you add or alter metafield definitions are much faster than the first one. The end-to-end effect: with SI enabled, your AI client writes correct SQL on the first try far more often than it does against any “MCP for X” server that just hands the LLM information_schema.
What if I add another connector later, like Stripe or PostgreSQL? +
Nothing changes client-side — the same key reaches the new connector the moment the agent pairs it (qs_list_connectors picks it up automatically). One config block buys your whole account, present and future. Why one key covers every connector →
Do I have to set up MCP just to chat with my data? +
No — Nova AI is built into the Query Streams portal and works against every connector (Shopify included) with no MCP setup or config files. Use Nova to chat with your Shopify data inside Query Streams; use MCP when you want your own AI client (Claude, Cursor, ChatGPT, …) to reach the same data — same agent, same connectors, same Schema Intelligence underneath. Learn more about Nova AI →
Why use Query Streams MCP for Shopify data if Shopify ships the Storefront MCP? +
Different scopes entirely. Shopify Storefront MCP is OFFICIAL and exposes catalog / product / public-customer-facing data for AI shopping assistants — the buyer-facing experience. It’s designed for AI agents that help shoppers browse, get product recommendations, or check stock visibility. Storefront-scoped means it does NOT see admin / ops / financial data. Query Streams Shopify MCP is the inverse: an Admin-API-side surface for the analytics, ops, and finance side of Shopify. Three concrete differences: (1) Admin scope. Storefront MCP sees public-facing product / collection / availability data. Query Streams Shopify MCP sees orders, transactions, fulfillments, customers (with tags, lifetime spend), inventory levels, refunds, discount codes, price rules, gift cards. (2) Multi-store with cross-store SQL. Run a single Query Streams MCP query that aggregates across shopify_us, shopify_eu, and shopify_apac stores in one shot. Storefront MCP is per-store. (3) Cross-connector reach. Combine Shopify orders with your Stripe invoice data + your HubSpot CRM contacts + your Postgres product catalog in the same Claude conversation. Ask “match Shopify customers to HubSpot contacts and show me which paying customers have open support tickets” — a 3-way join across vendors. Storefront MCP only sees Shopify storefront data. They coexist well. Use Storefront MCP for buyer-facing AI shopping experiences; use Query Streams MCP for operations / finance / analytics / customer-support context AI workflows. Many Shopify Plus orgs deploy both.

Get started

Connect your AI tool to your Shopify Admin data in five minutes.

One MCP key reaches Shopify, every database, and every other API connector in your Query Streams account — with full audit trail, per-key rate limits, multi-store cross-connector queries, and zero firewall changes. Claude, Cursor, ChatGPT, and Grok all work out of the box.

Related guides: Download the Query Streams Agent | API Connector Setup | All MCP Server guides | Nova AI text-to-SQL

Category: MCP Server

Tags: mcp, claude, cursor, shopify, api-connector, ecommerce, shopify-admin, shopify-storefront-mcp, multi-store, read-only-mcp

Meta Description: Query Shopify Admin data with Claude or Cursor via MCP. Cached SQL surfaces, multi-store, no firewall holes. Free.

Updated on June 16, 2026

Powered by BetterDocs