The public product catalogue and collections of any Shopify storefront, as structured JSON.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
A hosted Model Context Protocol (MCP) server that gives Claude, Cursor, Windsurf and any other MCP client two read-only Shopify tools. Pull the product catalogue of any public Shopify storefront by its URL, with variants, SKUs and prices, and list the collections that organise it, all as structured JSON, with no app to install and no merchant token.
It reads the catalogue a signed-out visitor can see, on any classic Shopify storefront, whether it sits on a myshopify.com address or a custom domain. A headless store answers on its myshopify.com domain.
1,000 free credits every month, no card required, which is 200 Shopify calls at the 5-credit rate.
An MCP client and a HasData API key from the dashboard, free to create with no card, and the free tier covers about 200 calls a month at the 5-credit rate. This is a remote server, so the simplest path is a URL and an x-api-key header, with no container to run. A client that only speaks stdio reaches it through a thin launcher, published as @hasdata/shopify-mcp on npm and hasdata-shopify-mcp on PyPI, shown below.
The server URL is the same for every client. We run it hands-on in Claude Code and Claude Desktop. The other blocks follow each client's own documented format for a remote server.
| Field | Value |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=shopify |
| Transport | HTTP, streamable |
| Auth header | x-api-key: HASDATA_API_KEY |
Clients with OAuth support can add the same URL as a connector and sign in without putting a key in a config file.
Settings, then Connectors, then Add custom connector, then paste https://mcp.hasdata.com/mcp?apis=shopify and sign in.
For the config-file route, Claude Desktop loads only local (stdio) servers, so it reaches a remote server through a stdio launcher. The @hasdata/shopify-mcp package is that launcher, and it reads the key from the environment. Add this to claude_desktop_config.json:
For Python instead of Node, swap the launcher for the PyPI package, which uvx runs without a manual install:
~/.cursor/mcp.json for every project, or .cursor/mcp.json for one:
~/.codeium/windsurf/mcp_config.json. Windsurf calls the field serverUrl, not url:
.vscode/mcp.json in the workspace:
Each of these lands on one tool, or on two in sequence when the second needs a handle the first returns.
product_type.price against compare_at_price.A prompt that names a category rather than a handle takes two calls, one to list the collections and one to pull the products in the matching handle. The collection tool returns handle, and that value goes straight into the collection argument of the product tool.
| Tool | What it returns |
|---|---|
hasdata_shopify_collections_getCollections | Each collection's id, title, handle, body_html description, image, and timestamps. 5 credits a call |
hasdata_shopify_products_getProducts | Product id, title, handle, vendor, product_type, tags, body_html, images, variants with prices/SKUs/inventory status, and timestamps. 5 credits a call |
Two tools, 5 credits per successful call. Both take a storefront URL and page through the results with limit and page, where limit accepts up to 250.
hasdata_shopify_products_getProducts
A page of products from one storefront.
| Parameter | Type | Required | Notes |
|---|---|---|---|
url | string | yes | The storefront, such as https://www.allbirds.com |
limit | number | Products per page, 1 to 250 | |
page | number | Page number, starting at 1 | |
collection | string | Restrict to one collection, by its handle |
Returns a products array. Each product carries id, title, handle, body_html, vendor, product_type, tags, published_at, created_at, updated_at, an options array naming the axes the variants vary on, an images array, and a variants array.
The price lives on the variant, never on the product. A variant carries id, title, sku, price, compare_at_price, available, grams, position, requires_shipping, taxable, the option1 through option3 values and its own timestamps.
hasdata_shopify_collections_getCollections
The collections that organise one storefront.
| Parameter | Type | Required | Notes |
|---|---|---|---|
url | string | yes | The storefront, such as https://www.allbirds.com |
limit | number | Collections per page, 1 to 250 | |
page | number | Page number, starting at 1 |
Returns a collections array. Each entry carries id, title, handle, description, image, products_count, published_at and updated_at.
This is the merchandising taxonomy as the store publishes it, which makes it the cheapest way to see how a competitor groups a catalogue before pulling any products. The handle is the join key into the product tool.
Plan for these rather than assuming a happy path.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/hasdata-shopify)<a href="https://allmcps.com/mcp/hasdata-shopify"><img src="https://allmcps.com/api/badge/hasdata-shopify?style=directory" alt="HasData Shopify on AllMCPs" /></a>