Skip to main content
ClaudeWave

MCP server for Shopify storefronts: pull the public product catalogue and collections of any store by URL, with variants, SKUs and prices. No app, no merchant token. 1,000 free credits every month.

MCP ServersOfficial Registry0 stars0 forksJavaScriptMITUpdated today
ClaudeWave Trust Score
95/100
Verified
Passed
  • Open-source license (MIT)
  • Actively maintained (<30d)
  • Clear description
  • Topics declared
  • Documented (README)
Last scanned: 9/10/2026
Install in Claude Code / Claude Desktop
Method: Manual
Claude Code CLI
git clone https://github.com/HasData/shopify-mcp
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "shopify-mcp": {
      "command": "node",
      "args": ["/path/to/shopify-mcp/dist/index.js"]
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
💡 Clone https://github.com/HasData/shopify-mcp and follow its README for install instructions.
Use cases

MCP Servers overview

# Shopify MCP Server

<!-- mcp-name: com.hasdata/shopify -->

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.

```
https://mcp.hasdata.com/api/mcp?apis=shopify
```

[![Glama score](https://glama.ai/mcp/servers/HasData/shopify-mcp/badges/score.svg)](https://glama.ai/mcp/servers/HasData/shopify-mcp)
[![tool contract](https://github.com/HasData/shopify-mcp/actions/workflows/contract.yml/badge.svg)](https://github.com/HasData/shopify-mcp/actions/workflows/contract.yml)
[![MCP](https://img.shields.io/badge/MCP-remote%20%7C%20streamable%20HTTP-6366f1?style=flat-square)](https://mcp.hasdata.com/api/mcp?apis=shopify)
[![Tools](https://img.shields.io/badge/tools-2-10b981?style=flat-square)](#tools)
[![npm](https://img.shields.io/npm/v/@hasdata/shopify-mcp?style=flat-square&logo=npm&label=npm&color=cb3837)](https://www.npmjs.com/package/@hasdata/shopify-mcp)
[![PyPI](https://img.shields.io/pypi/v/hasdata-shopify-mcp?style=flat-square&logo=pypi&logoColor=white&label=PyPI&color=3775a9)](https://pypi.org/project/hasdata-shopify-mcp/)
[![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)

## Contents

- [What you need](#what-you-need)
- [Quick start](#quick-start)
- [Example prompts](#example-prompts)
- [Tools](#tools)
- [Errors and failure paths](#errors-and-failure-paths)
- [Pricing, free tier and limits](#pricing-free-tier-and-limits)
- [Tool selection](#tool-selection)
- [How it compares](#how-it-compares)
- [FAQ](#faq)
- [HasData links](#hasdata-links)
- [Development](#development)
- [Contributing](#contributing)
- [License](#license)

## What you need

An MCP client and a HasData API key from the [dashboard](https://app.hasdata.com/sign-up?utm_source=github&utm_medium=syndication&utm_campaign=shopify-mcp), 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.

## Quick start

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/api/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.

<details>
<summary><b>Claude Code</b></summary>

```bash
claude mcp add --transport http shopify "https://mcp.hasdata.com/api/mcp?apis=shopify" \
  --header "x-api-key: HASDATA_API_KEY"
```

</details>

<details>
<summary><b>Claude Desktop</b></summary>

Settings, then Connectors, then Add custom connector, then paste `https://mcp.hasdata.com/api/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`:

```json
{
  "mcpServers": {
    "shopify": {
      "command": "npx",
      "args": ["-y", "@hasdata/shopify-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}
```

For Python instead of Node, swap the launcher for the PyPI package, which `uvx` runs without a manual install:

```json
{
  "mcpServers": {
    "shopify": {
      "command": "uvx",
      "args": ["hasdata-shopify-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}
```

</details>

<details>
<summary><b>Cursor</b></summary>

`~/.cursor/mcp.json` for every project, or `.cursor/mcp.json` for one:

```json
{
  "mcpServers": {
    "shopify": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=shopify",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
```

</details>

<details>
<summary><b>Windsurf</b></summary>

`~/.codeium/windsurf/mcp_config.json`. Windsurf calls the field `serverUrl`, not `url`:

```json
{
  "mcpServers": {
    "shopify": {
      "serverUrl": "https://mcp.hasdata.com/api/mcp?apis=shopify",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
```

</details>

<details>
<summary><b>VS Code</b></summary>

`.vscode/mcp.json` in the workspace:

```json
{
  "servers": {
    "shopify": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/mcp?apis=shopify",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
```

</details>

## Example prompts

Each of these lands on one tool, or on two in sequence when the second needs a handle the first returns.

- List the collections on allbirds.com and tell me which ones hold the most products.
- Pull the first 250 products from this store and group them by `product_type`.
- Which variants in this store are out of stock right now?
- Find every product on this store that is discounted, comparing `price` against `compare_at_price`.
- Page through the shoes collection on this storefront and give me the price range per size.
- Compare the sock prices on these two Shopify stores.

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.

## Tools

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.

### Get Shopify store products

[`hasdata_shopify_products_getProducts`](https://docs.hasdata.com/apis/shopify/products?utm_source=github&utm_medium=syndication&utm_campaign=shopify-mcp)

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.

```json
{
  "id": 6889962537040,
  "title": "Anytime Ankle Sock - Basin Blue",
  "handle": "anytime-ankle-sock-basin-blue",
  "vendor": "Allbirds",
  "product_type": "Socks",
  "updated_at": "2026-09-09T05:25:09-07:00",
  "options": [{ "name": "Size", "position": 1, "values": ["S (W5-7)", "M (W8-10 / M8)", "L (W11 / M9-12)", "XL (M13-14)"] }],
  "variants": [
    {
      "id": 40356485202000,
      "title": "S (W5-7)",
      "sku": "A10842U001",
      "price": "16.00",
      "compare_at_price": null,
      "available": false,
      "grams": 59,
      "position": 1
    }
  ],
  "images": [
    {
      "id": 36355227844688,
      "position": 1,
      "src": "https://cdn.shopify.com/s/files/1/1104/4168/files/A10842_S24Q1_Anytime_Ankle_Sock_Basin_Blue_A-1400x1400.png?v=1776183348",
      "width": 1400,
      "height": 1400
    }
  ]
}
```

### Get Shopify store collections

[`hasdata_shopify_collections_getCollections`](https://docs.hasdata.com/apis/shopify/collections?utm_source=github&utm_medium=syndication&utm_campaign=shopify-mcp)

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.

```json
{
  "id": 135995326544,
  "title": "Accessories",
  "handle": "womens-accessories",
  "description": "You know what they say: It's all in the details. Customize your look with planet-friendly face masks, hats, and more. ",
  "published_at": "2019-08-05T14:01:17-07:00",
  "updated_at": "2026-07-08T13:39:17-07:00",
  "image": null,
  "products_count": 28
}
```

## Errors and failure paths

Plan for these rather than assuming a happy path.

**`price` and `compare_at_price` are strings, not numbers.** They arrive as `"16.00"`, exactly as the storefront publishes them. Convert before you compare or sum, because string ordering puts `"9.00"` above `"16.00"`.

**A product has no price of its own.** Anything about cost has to go through the `variants` array, and a product with a size or colour axis usually has several prices. Reading the first variant and calling it the price 
ai-agentsclaudecursorecommercehasdatallm-toolsmcpmcp-servermodel-context-protocolprice-monitoringproduct-datashopifyshopify-mcpweb-scrapingwindsurf

What people ask about shopify-mcp

What is HasData/shopify-mcp?

+

HasData/shopify-mcp is mcp servers for the Claude AI ecosystem. MCP server for Shopify storefronts: pull the public product catalogue and collections of any store by URL, with variants, SKUs and prices. No app, no merchant token. 1,000 free credits every month. It has 0 GitHub stars and its last recorded update is dated 2026-09-09.

How do I install shopify-mcp?

+

You can install shopify-mcp by cloning the repository (https://github.com/HasData/shopify-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is HasData/shopify-mcp safe to use?

+

Our security agent has analyzed HasData/shopify-mcp and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.

Who maintains HasData/shopify-mcp?

+

HasData/shopify-mcp is maintained by HasData. The last recorded GitHub activity is dated 2026-09-09, with 0 open issues.

Are there alternatives to shopify-mcp?

+

Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.

Deploy shopify-mcp to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: HasData/shopify-mcp
[![Featured on ClaudeWave](https://claudewave.com/api/badge/hasdata-shopify-mcp)](https://claudewave.com/repo/hasdata-shopify-mcp)
<a href="https://claudewave.com/repo/hasdata-shopify-mcp"><img src="https://claudewave.com/api/badge/hasdata-shopify-mcp" alt="Featured on ClaudeWave: HasData/shopify-mcp" width="320" height="64" /></a>

More MCP Servers

shopify-mcp alternatives