Features

Plug your Shopify store into Claude and ChatGPT.

One MCP endpoint per store. Approve the scopes and your assistant reads catalog, orders and themes live, without writing a thing.

OAuth 2.1 with PKCERead-onlyFree on every plan

Shopify MCP

What it is

A remote MCP server, one per store. Every store you connect to BoostEcom gets its own endpoint, speaking Model Context Protocol over streamable HTTP. Any client that speaks MCP (Claude, ChatGPT, Claude Code, Cursor, or one you wrote yourself) can discover it, authorize against it and call its tools.

Your Shopify credentials never leave our servers. The client holds a BoostEcom token; the short-lived Shopify token the BoostEcom app delegates stays with us, encrypted at rest. Revoke the BoostEcom token and the client is out, without ever having seen a Shopify secret.

Tools your client can call
31

Read-only, each behind a scope you approve

Scopes on the consent screen
12

Grant one, a few or all of them

Calls a day on the Free plan
2,000

The relay runs no model, so it spends no credits

Clients

A connect guide for each client

Each guide takes one client from its settings screen to your first question, in that client's own words. These are the clients we test against.

Paste this in your clienturl

Add a custom connector and paste the URL. The client registers itself and opens the consent screen: no client id, no secret.

https://www.boostecom.app/api/mcp/v1/<STORE_ID>
Surfaces

Four doors. Only the dashboard writes.

Each surface reads through its own credential and its own limits. A change to your store happens in one place, behind your approval.

Your store, over MCPurl
https://www.boostecom.app/api/mcp/v1/<STORE_ID>
The market, over MCPurl
https://www.boostecom.app/api/mcp/intelligence
Our UCP profileurl
https://www.boostecom.app/.well-known/ucp-agent

You install the BoostEcom app from your Shopify admin and choose in the app what it may access. Your grant is the ceiling: we add no access of our own.

Endpoint

One URL. Your client finds the rest.

Each connected store gets its own MCP endpoint. An OAuth-aware client reads the discovery documents from its first refused call and walks you to the consent screen.

  • OAuth 2.1 with PKCE, no client secret to keep
  • Each token opens one store and is hashed at rest
  • A static key for CI and headless runs
Your storeurl

Replace STORE_ID with the id shown in store settings, under connectors.

https://www.boostecom.app/api/mcp/v1/<STORE_ID>
Discoveryhttp
GET https://www.boostecom.app/.well-known/oauth-authorization-server
GET https://www.boostecom.app/.well-known/oauth-protected-resource/api/mcp/v1/<STORE_ID>
GET https://www.boostecom.app/api/mcp/<STORE_ID>/.well-known/oauth-protected-resource
Authorization

Standard OAuth, from the first refused call

Nothing proprietary for a client to learn. Every step is a published standard, and every step is visible on the wire.

  1. Your client calls the endpoint without a token and gets a 401 whose WWW-Authenticate header points at our discovery documents (RFC 9728).

  2. It reads the protected-resource document, which names this origin as the authorization server.

  3. It reads the authorization-server metadata (RFC 8414) to find the register, authorize, token and revocation endpoints.

  4. It identifies itself with a Client ID Metadata Document, an https URL we fetch and verify, or through dynamic registration (RFC 7591). No secret is issued and PKCE S256 is mandatory.

  5. You approve a consent screen that lists the permissions in plain words, showing only the ones your grant to the BoostEcom app can satisfy.

  6. The client trades its one-time code for an access token that expires after 60 minutes, and a refresh token that rotates on every use.

  7. A tool outside the grant answers 403 with the exact scope to ask for: the client re-authorizes for that one scope and retries.

  8. Disconnect the client and it calls the revocation endpoint (RFC 7009): the token dies on our side too, not only in the client's memory.

Each token opens one store: a token issued for store A is refused on store B, and organization membership is checked again on every call. Tokens are stored as SHA-256 hashes, never in a form we could read back.

First call, no tokenhttp
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="BoostEcom MCP",
  resource_metadata="https://www.boostecom.app/.well-known/oauth-protected-resource/api/mcp/v1/<STORE_ID>",
  scope="boostecom:store.read boostecom:catalog.read …"
After you approvejson
{
  "access_token": "<ACCESS_TOKEN>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "<REFRESH_TOKEN>",
  "scope": "boostecom:store.read boostecom:catalog.read"
}
A tool outside the granthttp
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer error="insufficient_scope",
  scope="boostecom:orders.read",
  resource_metadata="https://www.boostecom.app/.well-known/oauth-protected-resource/api/mcp/v1/<STORE_ID>"
Read-only

Your assistant reads. Every write waits for you.

The relay refuses every mutation before it reaches Shopify and logs the attempt. Changes happen in the dashboard, where you approve each one.

  • Mutations refused before Shopify sees them
  • Every write attempt lands in your audit log
  • Changes go through the dashboard approval flow
Requestgraphql
tools/call shopifyAdminGraphQL

mutation {
  productUpdate(product: { id: "gid://shopify/Product/1", title: "New title" }) {
    product { id }
  }
}
Responsejson
{
  "isError": true,
  "content": [
    {
      "type": "text",
      "text": "Refused: this mutation is classified destructive (product/price updates, discounts, inventory, …). This connector is read-only: every write requires human approval. Run it from the BoostEcom dashboard chat, where the approval flow lives."
    }
  ]
}
Tools

31 tools, and what to ask each one

Most cover the paths an agent walks every day. One is a passthrough onto the whole Admin API read surface, with Shopify's own cost and throttle figures returned beside the data.

getStoreContextScope NoneNo Shopify scope gatePlan, currency, timezone, markets, locales, themes, legal policies, catalog counts and your granted scopes, in one call.“Where am I? Give me the store setup.”
getShopInfoScope NoneNo Shopify scope gateStore name, plan, currency, timezone and primary domain.“What plan and currency is this store on?”
runAuditScope read_themes · write_themes · write_theme_codeScopedShop, themes and a product sample in one round trip, so the model reasons over the whole store at once.“Give me the state of the store.”
listProductsScope read_products · write_productsScopedProducts, optionally filtered by status.“Which products are still in draft?”
getProductScope read_products · write_productsScopedOne product by its numeric id.“Show me every field of this product.”
listOrdersScope read_orders · write_ordersScopedRecent orders, optionally filtered by status.“Summarize the orders that are still open.”
listPagesScope read_content · write_contentScopedThe store's CMS pages.“List the CMS pages. Do we have a returns policy page?”
getMetafieldsScope NoneNo Shopify scope gateThe metafields of one resource, by its Admin GraphQL id, optionally filtered to one namespace.“What custom data is attached to this product?”
listMetaobjectDefinitionsScope NoneNo Shopify scope gateEvery metaobject definition: type, fields and how many entries exist.“What structured content types does this store define?”
listMetaobjectsScope NoneNo Shopify scope gateThe entries of one metaobject type, with Shopify's own pagination cursor.“List the entries of the FAQ metaobject.”
listThemesScope read_themes · write_themes · write_theme_codeScopedEvery theme on the store, the published one included.“Which theme is published right now?”
getThemeScope read_themes · write_themes · write_theme_codeScopedOne theme by its numeric id.“Which theme is this, and is it the published one?”
runShopifyQLScope read_analytics · read_reportsScopedA ShopifyQL table: sales, sessions, conversion or inventory, over any period you name.“What were my sales last month?”
introspectSchemaScope NoneNo Shopify scope gateAny Admin GraphQL type, with nested input types and enums resolved inline.“What fields does ProductInput take?”
shopifyAdminGraphQLScope Shopify enforcesNo Shopify scope gateAny read the Admin API allows: metafields, markets, translations, inventory. Cost and throttle status come back with the data.“Pull the metafields on my best-selling variants.”
getStudioSectionScope NoneNo Shopify scope gateOne Studio section: concepts, QC or cockpit. Each call checks the caller's own Studio permission for that section.“Which concepts are waiting on QC?”
getStudioProductionScope NoneNo Shopify scope gateThe store's production board: work in flight, renders, concepts and economics. One Studio permission per block.“What is my brand producing right now?”
listStudioGenerationsScope NoneNo Shopify scope gateEvery render this store asked for, with its real status, model and artifact. Costs only with the economics permission.“Which renders failed this week, and what did they cost?”
getStudioPricingScope NoneNo Shopify scope gateWhat one generation costs per composer mode, in USD, before you ask for it. No MCP tool starts a generation.“How much does a short video cost?”
getStoreIntelligenceScope NoneNo Shopify scope gateWhat BoostEcom has observed about this store's domain: traffic, inferred economics, catalog, stack, ad creatives, reviews, social audience and brand.“What does BoostEcom know about my store's traffic and stack?”
listThemeUpdatesScope NoneNo Shopify scope gateThe store's themes as the BoostEcom app sees them: detected theme and version, the latest approved version, and whether an update is available.“Is there an update for my theme?”
getUpdateJobScope NoneNo Shopify scope gateOne theme update job in the BoostEcom app: status, current step, progress, error and the merge decisions by kind.“How far along is my theme update, and did it fail?”
listBackupsScope NoneNo Shopify scope gateThe store's backups, of themes and of data categories: status, date and size. Metadata only, never the backed-up content.“When was my theme last backed up?”
getUptimeScope NoneNo Shopify scope gateThe latest uptime checks of the storefront, from the BoostEcom app: status, response time and outages.“Was my store down this week?”
getAppEmbedStatusScope NoneNo Shopify scope gateWhether the BoostEcom Web Vitals app embed is on in the published theme, or in a theme you name, with the link that turns it on.“Is the Web Vitals embed on in my published theme?”
getDomainHealthScope NoneNo Shopify scope gateThe health of the store's custom domain: registration (RDAP, expiry) and DNS resolution, with findings.“When does my domain expire, and does its DNS resolve?”
getActionRequestScope NoneNo Shopify scope gateThe status of an action the merchant was asked to confirm inside the BoostEcom app: pending, confirmed, declined, expired or failed.“Did the backup restore I was asked to confirm go through?”
searchDocsScope NoneNo Shopify scope gateThe documentation pages that cover a topic, each with its title and its link.“How do I connect my Shopify store?”
getDocScope NoneNo Shopify scope gateThe title and link of one documentation page, by slug.“Show me the credits page in full.”
helmListModelsScope NoneNo Shopify scope gateThe models of the Helm theme: section presets, block presets and page templates, each with its id, name, category and what it contains. No Shopify call.“Which Helm section models can I start a hero from?”
helmPlanSectionScope NoneNo Shopify scope gateThe template JSON a Helm section would add, built from one section model and checked against the theme's schema. Nothing is written; an unknown model or setting is refused.“Plan a Helm hero section with my headline, without writing anything.”
Use cases

What people actually ask it

The tool list matters less than this: the assistant you already have open knows your store.

  • State of the storeOne runAudit call returns the shop, its themes and a product sample together, so the model reasons over the whole store instead of stitching four requests.
  • Catalog questionsWhich products are still drafts, what is out of stock, which handles collide: answered against live data, not a stale export pasted into a chat.
  • Anything the Admin API readsMetafields, markets, translations, inventory: one passthrough tool, with Shopify's own cost figures returned so the model paces itself.
  • Reporting where you workSummarize the week's orders in the client you already have open, without exporting customer data into a spreadsheet first.
Reach

One tool opens the whole read API

Most tools cover the paths an agent walks every day. One more is a passthrough onto the entire Shopify Admin GraphQL API, for every read no dedicated tool covers.

  • The scopes you granted the BoostEcom app decide what succeeds, and Shopify enforces them on every query
  • Shopify's own cost and throttle figures come back with the data, so the model paces itself
  • A mutation sent through it is refused like any other write
A read no dedicated tool coversgraphql
tools/call shopifyAdminGraphQL

query {
  markets(first: 5) { nodes { name handle } }
  shop { metafields(first: 5) { nodes { key value } } }
}
What comes backjson
{
  "data": { "markets": { … }, "shop": { … } },
  "cost": { "requestedQueryCost": <n>, "actualQueryCost": <n> },
  "throttleStatus": {
    "maximumAvailable": <n>,
    "currentlyAvailable": <n>,
    "restoreRate": <n>
  }
}
How it works

Connected in 4 steps

The same path for every client. Only where you paste the URL changes from one client to the next.

  1. Connect the store

    Create your account and install the BoostEcom app from your Shopify admin, in one click. The access you choose in the app caps everything that follows.

    Shopify grants that open tools

    • read_products
    • read_orders
    • read_content
    • read_themes
    • read_analytics
    • read_reports
  2. Paste the URL in your client

    Claude and ChatGPT take it as a custom connector. Claude Code and Cursor take it in their config, then open the same consent screen.

    The URL to pasteurl
    https://www.boostecom.app/api/mcp/v1/<STORE_ID>
  3. Approve the scopes

    The consent screen names each permission in plain words and offers only what you granted the BoostEcom app.

    What your client asks forhttp
    GET https://www.boostecom.app/oauth/authorize
      ?response_type=code&client_id=<CLIENT_ID>
      &resource=https://www.boostecom.app/api/mcp/v1/<STORE_ID>
      &scope=boostecom:store.read boostecom:catalog.read
      &code_challenge=<S256>&code_challenge_method=S256
  4. Ask about your store

    Your client lists the tools your grant opened and calls them whenever a question needs live data.

    What your client can list

    • getStoreContext
    • getShopInfo
    • runAudit
    • listProducts
    • getProduct
    • listOrders
    • listPages
    • getMetafields
    • listMetaobjectDefinitions
    • listMetaobjects
    • listThemes
    • getTheme
    • runShopifyQL
    • introspectSchema
    • shopifyAdminGraphQL
    • getStudioSection
    • getStudioProduction
    • listStudioGenerations
    • getStudioPricing
    • getStoreIntelligence
    • listThemeUpdates
    • getUpdateJob
    • listBackups
    • getUptime
    • getAppEmbedStatus
    • getDomainHealth
    • getActionRequest
    • searchDocs
    • getDoc
    • helmListModels
    • helmPlanSection
Scopes

12 scopes, one per family of tools

Two gates, and both must pass: the scope you approve for this client, and what you granted the BoostEcom app in Shopify. Narrow either one and the tool list narrows with it.

boostecom:store.readStore identity & setupREADPlan, currency, timezone, primary domain, markets, locales, legal policies and the Admin schema.getShopInfo · getStoreContext · introspectSchemaAny connected store
boostecom:catalog.readCatalogREADProducts and their variants, including drafts and archived items.listProducts · getProductread_products · write_products
boostecom:orders.readOrdersREADRecent orders and their status.listOrdersread_orders · write_orders
boostecom:content.readPages & contentREADThe storefront's CMS pages.listPagesread_content · write_content
boostecom:metadata.readMetafields & metaobjectsREADCustom data attached to your resources, and the structured-content shapes your store declares. Read only.getMetafields · listMetaobjectDefinitions · listMetaobjectsAny connected store
boostecom:themes.readThemesREADThemes on the store, published or not, and the audit that reads them.listThemes · getTheme · runAuditread_themes · write_themes · write_theme_code
boostecom:analytics.readAnalyticsREADShopifyQL queries: sales, sessions, conversion and inventory over any period.runShopifyQLread_analytics · read_reports
boostecom:graphql.readAdmin API passthroughREADAny read the Admin API allows. Shopify enforces your scopes on every single query.shopifyAdminGraphQLAny connected store
boostecom:studio.readStudioREADThe production floor: creative concepts, the QC queue and the economics cockpit. Each section still asks for your own Studio permission.getStudioSection · getStudioProduction · listStudioGenerations · getStudioPricingAny connected store
boostecom:docs.readDocumentationREADFind pages of the public BoostEcom documentation. Grants nothing private: docs.boostecom.app already serves them to anyone.searchDocs · getDoc · helmListModels · helmPlanSectionAny connected store
boostecom:intelligence.readStore intelligenceREADWhat BoostEcom has observed about this store's domain: traffic, inferred economics, catalog, tech stack, ad creatives, reviews, social audience and brand. Read-only, and only for this store.getStoreIntelligenceAny connected store
boostecom:app.readBoostEcom Shopify appREADWhat the BoostEcom app records for this store: theme updates, backups, uptime checks, the Web Vitals embed, the health of the domain and the actions the merchant was asked to confirm. Read-only, and only for this store.listThemeUpdates · getUpdateJob · listBackups · getUptime · getAppEmbedStatus · getDomainHealth · getActionRequestAny connected store

Tokens issued before this catalog existed carry the legacy mcp grant. It keeps the Shopify read tools it already had and never opens a BoostEcom system: Studio, store intelligence and the docs tools need a scope approved on the consent screen.

Intelligence MCP

Ask about the market in the same conversation

A second, public MCP server reads the Shopify store graph: rank a category, look up a domain, find similar stores. Add it beside your store's endpoint.

  • No account, no key: 60 calls a minute per IP
  • A bei_ key raises it to 6,000 a minute, per organization
  • Public records only
Add it to your clientjson
{
  "mcpServers": {
    "boostecom-intelligence": {
      "url": "https://www.boostecom.app/api/mcp/intelligence"
    }
  }
}
Read its tool listbash
curl -s https://www.boostecom.app/api/mcp/intelligence/manifest

See what Intelligence reads

Versus

Against Shopify's own connector

Both pointed at the same store in one session, read-only. Shopify's connector writes and searches the shopify.dev docs. This one reads further into the store.

 BoostEcomShopify's connector
Scopes granted
Measured on the same store through currentAppInstallation.
18358
Scopes the other lacks
The official set is a strict subset: it holds nothing ours does not.
1250
Fields on one store-info call
getShopInfo against get-shop-info, same store.
488
Pixels and script tags
Tracking and consent surfaces. The official connector has no pixel scope at all.
✓—
Payouts, disputes, bank accounts
The Shopify Payments read surface.
✓—
GDPR, audit events, consent
Privacy settings, audit log, customer events.
✓—
Storefront and Customer Account APIs
The unauthenticated_* and customer_* scope families.
✓—
Cart Transform and Shopify Functions
Bundles, delivery and payment customizations, discount allocators.
✓—
ShopifyQL analytics
Same query, same result: ours runs through the GraphQL passthrough.
✓✓
Schema introspection
__type and __schema resolve through the passthrough.
✓✓
Cost and throttle returned to the model
Shopify's own figures, so an agent paces itself instead of guessing.
✓—
Writes to the store
Ours is read-only: changes go through the dashboard approval flow.
—✓
shopify.dev docs search
The official connector ships a documentation search, ours does not.
—✓

Measured on a store connected through a merchant's Custom App: a store that grants fewer scopes gets fewer. With the BoostEcom app, the ceiling is what you grant the app.

Rate limits

Free on every plan, capped against abuse

The relay forwards a Shopify API call and runs no model, so it spends no credits. Limits count per organization: stores in one organization share a budget.

 FreeProMax 5xMax 20x
Calls per minute
505001,0005,000
Calls per day
2,00050,000100,000No daily cap

Custom plans run uncapped. A refused call names the plan, the limit it hit and what to do next.

Limits

What it does not do

Read these before you connect a store. Each one is deliberate.

  • It does not write. Every mutation is refused and logged. A change to your store goes through the dashboard, where you approve it.
  • It stays inside what you granted the app. A tool your Shopify grant cannot satisfy is never registered, so your client never sees it.
  • A static key stops at 15 tools. A key names a store, never a person. Studio, store intelligence, the BoostEcom app's records and the docs tools need an OAuth sign-in.
  • One request, 30 seconds. A tool call that runs longer is cut off. Long work belongs in a dashboard workflow, not in a tool call.
  • No API or SDK of our own. The supported surfaces are this endpoint, the Intelligence MCP server and the Intelligence REST API. The GraphQL you reach is Shopify's, through the passthrough.
Support

Questions people ask

Ask @Atlas below, or talk to a human: both land in the same thread.

Which AI clients can connect?Clients
Any client that speaks MCP over HTTP. We test against Claude, ChatGPT custom connectors, Claude Code and Cursor, and each one has a connect guide. All four sign in over OAuth from the URL alone; a static key is there for CI and headless runs.
Can my assistant change my store through it?Safety
No. The relay refuses every mutation before it reaches Shopify, including any document it cannot prove only reads. Changes go through the BoostEcom dashboard, where you approve each one.
Does the AI client ever see my Shopify token?Security
No. The client signs in to BoostEcom, never to Shopify. The Shopify tokens the BoostEcom app delegates to us are short-lived, stay encrypted on our side and are decrypted per request. Revoke the BoostEcom token and the client is cut off, with nothing to change in Shopify.
What does it cost?Pricing
Nothing, on every plan, Free included. The relay forwards a Shopify Admin API call and runs no model, so it spends no credits. The rate limits exist to stop abuse.
How do I limit what an agent can reach?Scopes
With two gates. On the consent screen, approve only the scopes you want: grant the catalog alone and the order, theme and analytics tools disappear for that client. In Shopify, what you grant the BoostEcom app caps every client at once.
What happens when a tool needs a scope I did not grant?Consent
The call is refused with the exact scope to ask for, and your client re-authorizes for that one scope: you approve it, and nothing else changes. When the BoostEcom app was not granted that access, the refusal says so instead, and the fix is to grant it in the app, from your Shopify admin.
How does authorization work?Authorization
Standard OAuth 2.1 with PKCE. A first call without a token is refused with a pointer to our discovery documents. The client registers itself, sends you to the consent screen, then trades a one-time code for a token bound to this store. Its refresh token rotates on every use.
Is there a REST API, a GraphQL API or an SDK?Surface
There is no GraphQL API or SDK of our own. The supported surfaces are the per-store MCP endpoint, the public Intelligence MCP server and the Intelligence REST API with its own keys. The GraphQL you reach is Shopify's Admin API, through the passthrough tool.

Point it at your store and ask.

Describe what you want your agent to read, and @Atlas tells you which tool and which scope it needs.