关于 HasData Shopify
HasData 托管的 Shopify MCP 服务,可读取任意公开 Shopify 店铺的商品目录和集合。无需商家令牌,返回包含变体、SKU、价格及库存状态的结构化数据。
主要功能
- 01读取公开商品目录
- 02列出商品集合
- 03获取变体、SKU 和价格
- 04查看变体库存状态
- 05按集合筛选并分页
适用场景
- 01分析其他店铺的商品与定价
- 02比较多个店铺的商品价格
- 03检查商品变体的库存状态
- 04查看店铺如何组织商品集合
MCP 相关
该远程 MCP 服务向客户端提供读取 Shopify 商品和集合的两个工具,以结构化 JSON 返回公开店铺数据。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.hasdata.com/mcp?apis=shopifyclaude mcp add --transport http com-hasdata-shopify https://mcp.hasdata.com/mcp?apis=shopify{"mcpServers":{"com-hasdata-shopify":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=shopify"}}}在 Cursor 中打开{"servers":{"com-hasdata-shopify":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=shopify"}}}在 VS Code 中打开{"mcpServers":{"com-hasdata-shopify":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=shopify"}}}{"mcpServers":{"com-hasdata-shopify":{"serverUrl":"https://mcp.hasdata.com/mcp?apis=shopify"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.hasdata.com/mcp?apis=shopify需要授权工具
2| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pets | number | 否 | 宠物数量。 |
| neLat | number | 否 | 地图边界框东北角的纬度。提供全部四个边界框坐标后,将在框内搜索房源,而不是按位置搜索。 |
| neLng | number | 否 | 地图边界框东北角的经度。 |
| swLat | number | 否 | 地图边界框西南角的纬度。 |
| swLng | number | 否 | 地图边界框西南角的经度。 |
| adults | number | 否 | 成人数量。 |
| checkIn | string | 是 | 房源的入住日期。 |
| infants | number | 否 | 婴幼儿数量。 |
| checkOut | string | 否 | 房源的退房日期。 |
| children | number | 否 | 子女数量。 |
| location | string | 否 | 用于搜索房源的地点。除非提供完整地图边界框(neLat、neLng、swLat、swLng),否则必填。 |
| nextPageToken | string | 否 | 用于获取下一页结果的令牌。 |
详细介绍
Shopify MCP 服务
一个托管的 Model Context Protocol(MCP)服务,为 Claude、Cursor、Windsurf 和任何其他 MCP 客户端提供两个只读 Shopify 工具。只需提供 URL,即可获取任意公开 Shopify 店面的商品目录,包括变体、SKU 和价格,并列出用于组织商品的集合;所有数据均为结构化 JSON,无需安装应用,也无需商家令牌。
它读取未登录访客在任何经典 Shopify 店面上可以看到的商品目录,无论店面使用 myshopify.com 地址还是自定义域名。无头商店则通过其 myshopify.com 域名响应。
每月赠送 1,000 个免费额度,无需信用卡,按每次调用 10 个额度计算,可调用 Shopify 100 次。
https://mcp.hasdata.com/mcp?apis=shopify
目录
所需条件
一个 MCP 客户端,以及从控制面板获取的 HasData API 密钥;创建密钥免费,无需信用卡。免费额度按每次调用 10 个额度计算,每月约可调用 100 次。这是一个远程服务,因此最简单的接入方式是使用 URL 和 x-api-key 标头,无需运行容器。仅支持 stdio 的客户端可通过一个轻量启动器访问该服务,该启动器已发布到 npm(@hasdata/shopify-mcp)和 PyPI(hasdata-shopify-mcp),如下所示。
快速开始
所有客户端使用相同的服务 URL。我们已在 Claude Code 和 Claude Desktop 中实测运行。其他配置块则遵循各客户端文档中针对远程服务的格式。
| 字段 | 值 |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=shopify |
| 传输方式 | HTTP,可流式传输 |
| 身份验证标头 | x-api-key: HASDATA_API_KEY |
支持 OAuth 的客户端可以将相同的 URL 添加为连接器,然后登录,无需在配置文件中填写密钥。
Claude Code
claude mcp add --transport http shopify "https://mcp.hasdata.com/mcp?apis=shopify" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
依次点击 Settings、Connectors、Add custom connector,然后粘贴 https://mcp.hasdata.com/mcp?apis=shopify 并登录。
对于配置文件方式,Claude Desktop 只加载本地(stdio)服务,因此需要通过 stdio 启动器连接远程服务。@hasdata/shopify-mcp 包就是这个启动器,它会从环境中读取密钥。将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": ["-y", "@hasdata/shopify-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
如果使用 Python 而不是 Node,可以将启动器替换为 PyPI 包;uvx 无需手动安装即可运行它:
{
"mcpServers": {
"shopify": {
"command": "uvx",
"args": ["hasdata-shopify-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
所有项目使用 ~/.cursor/mcp.json,单个项目使用 .cursor/mcp.json:
{
"mcpServers": {
"shopify": {
"url": "https://mcp.hasdata.com/mcp?apis=shopify",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
文件路径为 ~/.codeium/windsurf/mcp_config.json。Windsurf 将该字段称为 serverUrl,而不是 url:
{
"mcpServers": {
"shopify": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=shopify",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
工作区中的 .vscode/mcp.json:
{
"servers": {
"shopify": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=shopify",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
示例提示词
每条提示词都会调用一个工具;如果第二个工具需要第一个工具返回的标识符,则会按顺序调用两个工具。
- 列出 allbirds.com 上的所有系列,并告诉我哪些系列的商品最多。
- 获取此商店的前 250 件商品,并按
product_type分组。 - 此商店中哪些变体目前缺货?
- 找出此商店中所有打折商品,比较
price和compare_at_price。 - 翻页浏览此店面的鞋类系列,并给出各尺码的价格范围。
- 比较这两家 Shopify 商店的袜子价格。
如果提示词指定的是类别而不是标识符,则需要调用两次:先列出系列,再获取匹配标识符的系列中的商品。系列工具会返回 handle,该值可直接传入商品工具的 collection 参数。
工具
| 工具 | 返回内容 |
|---|---|
hasdata_shopify_collections_getCollections | 每个系列的 id、标题、handle、body_html 描述、图片和时间戳。每次调用消耗 10 个额度 |
hasdata_shopify_products_getProducts | 商品 id、标题、handle、供应商、product_type、标签、body_html、图片、包含价格/SKU/库存状态的变体,以及时间戳。每次调用消耗 10 个额度 |
两个工具,每次成功调用消耗 10 个额度。两者都接受店面 URL,并通过 limit 和 page 翻页获取结果;limit 最大可设为 250。
获取 Shopify 商店商品
hasdata_shopify_products_getProducts
获取一个店面的商品分页。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url | 字符串 | 是 | 店面网址,例如 https://www.allbirds.com |
limit | 数字 | 每页商品数,范围为 1 到 250 | |
page | 数字 | 页码,从 1 开始 | |
collection | 字符串 | 按集合的 handle 限定为一个集合 |
返回一个 products 数组。每个商品包含 id、title、handle、body_html、vendor、product_type、tags、published_at、created_at、updated_at、一个用于说明变体差异维度的 options 数组、一个 images 数组,以及一个 variants 数组。
价格属于变体,而非商品。变体包含 id、title、sku、price、compare_at_price、available、grams、position、requires_shipping、taxable、option1 到 option3 的值,以及各自的时间戳。
{
"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
}
]
}
获取 Shopify 商店集合
hasdata_shopify_collections_getCollections
获取用于整理一个店面商品的集合。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url | 字符串 | 是 | 店面网址,例如 https://www.allbirds.com |
limit | 数字 | 每页集合数,范围为 1 到 250 | |
page | 数字 | 页码,从 1 开始 |
返回一个 collections 数组。每个条目包含 id、title、handle、description、image、products_count、published_at 和 updated_at。
这是商店发布的商品分类体系,因此,在获取任何商品之前,它是了解竞争对手如何对商品目录进行分组的最省力方式。handle 是关联到商品工具的键。
{
"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
}
错误和失败路径
请为这些情况做好准备,而不要假设一切都会顺利。
price 和 compare_at_price 是字符串,不是数字。 它们会按店面发布的原样返回,例如 "16.00"。比较或求和前请先转换,因为字符串排序会把 "9.00" 排在 "16.00" 之上。
产品本身没有价格。 任何与价格有关的内容都必须通过 variants 数组获取,而有尺码或颜色维度的产品通常会有多个价格。读取第一个 variant 并将其视为价格,是这里最常见的错误。
未打折时,compare_at_price 为 null,因此检查折扣时应先检查是否为 null,再进行比较。
available 是针对每个 variant 的,并反映调用时的状态。 缺货的是 variant,而不是产品;库存也会变化。相隔几分钟的两次调用可能返回不同结果,这正是监控时所需要的,但在对比商品目录时则要小心这一点。
集合的 products_count 可能为零。 商店会保留已发布的空集合、预发布集合和季节性集合,因此集合为空很正常,不代表调用失败。
商店发布的商品不一定都在售。 许多商店的公开商品目录中都有内部商品、已下架商品和预发布商品;有时标题中会标注,有时则不会。请根据需要进行筛选,不要假设每一行都是在售商品。
tags 的内容由商家自行填写。 有些商店把它们用作普通关键词,另一些则会将带命名空间的 metafield 字符串放进去。请将这个数组视为自由文本。
body_html 是 HTML。 为描述建立索引或生成嵌入前,请先清除其中的 HTML。
collection.image 通常为 null,variant 上的 featured_image 也可能为 null。请回退使用产品的 images 数组。
不是经典 Shopify 店面的 URL 仍会返回 200,并且仍会扣费。 此类响应中没有 products 数组,而是用 error 字符串代替;同时 requestMetadata.status 仍为 ok。读取数据前请先检查数组是否存在,因为变化的是响应结构,而不是状态。
无头 Shopify 商店在自定义域名上会失败,在其 myshopify.com 域名上则可以正常工作。 无头商店通过自己的前端提供店面,因此商品目录不会发布在公共域名下。如果你知道某家商店使用 Shopify,但返回了 error 字符串,请改用 https://<shop>.myshopify.com 重试。
包含数据的结果也会包含一个值得在联系支持时引用的 requestMetadata.id。
定价、免费套餐和限制
每次成功调用 Shopify 工具需 10 个 credits。响应大小不会影响价格,因此包含 250 件商品的页面和包含 3 件商品的页面费用相同;这意味着用最大页面镜像商品目录最划算。
免费套餐每月提供 1,000 个 credits,无需银行卡,按基础费率可调用 100 次 Shopify 工具。免费额度会随计费周期续订,因此低调用量的 Agent 可以一直使用免费套餐。
付费套餐起价为 每月 $59,包含 200,000 个 credits,即 20,000 次调用。调用量越大,单价越低:入门套餐为 每 1,000 次调用 $1.48,Basic 套餐为 $0.60,Growth 各级套餐为 $0.41。最新价格请查看定价页面。
套餐还会决定并发限制。免费套餐一次允许 1 个请求,Startup 允许 5 个,Basic 允许 15 个,Growth 各级套餐则为 50 到 500 个。对于任何无人值守的任务,遇到 429 时都应采用退避策略重试,因为在多个商店间并行发起请求的 Agent 会比你更早触及上限。
返回非 200 响应的请求不会计费。成功调用但未找到任何内容,仍然算一次调用。
工具选择
从提示提供的信息入手。关于目录本身的问题,使用产品工具。关于商店的组织方式,或提示中提到店铺面向用户的分类名称的问题,则先使用集合工具。
然后考虑页面大小。两个工具都支持最高为 250 的 limit,无论页面大小如何,费用都相同,因此 900 个产品的目录需要调用四次,而不是九十次。将 limit 保持为默认值,是你在这里最容易养成的高成本习惯。
尽可能在服务端筛选。向产品工具传入 collection 只需调用一次,并返回筛选后的子集;而拉取整个目录后再在本地筛选,则每一页都会包含你不需要的内容,每页都要调用一次。
对比
Shopify 的 Admin API 是访问商店目录的官方途径,但它回答的是另一个问题。
| Shopify Admin API | 此服务 | |
|---|---|---|
| 可访问的商店 | 你拥有或获准访问的商店 | 任何公开店面 |
| 设置 | 创建应用、申请权限范围,并为每家商店持有一个令牌 | 一个请求头 |
| 每家商店都需要凭据 | 是 | 否 |
| 库存水平 | 精确数量 | 每个变体的 available 标记 |
| 草稿和隐藏商品 | 会返回 | 不会返回,因为它们并未公开 |
| 订单和客户 | 会返回 | 不会返回 |
| 费用 | 在速率限制内免费 | 超出免费额度后收费,每次调用 10 个 credits |
决定性的一项是可访问的商店。Admin API 面向经营自己店铺的商家,需要使用只有该商家才能签发的令牌,因此不适合将自己与十个竞争对手进行比较。如果商店属于你自己,Admin API 功能更全面且免费,你应该使用它。
常见问题
Shopify 有自己的 MCP 服务吗?
有,但用途不同。每个符合条件的店面都会在自己的域名下提供一个 MCP 服务,其中的工具面向正在购物的 Agent,例如搜索目录、创建购物车和结账。它是针对单个商店的,因此要比较三十家商店的 Agent 需要建立三十个连接。此服务用于批量读取任意商店的目录,因此两者用途并不重叠。如果你的 Agent 要从一家商店购物,请使用 Shopify 的 MCP 服务。
什么是 Shopify MCP 服务?
MCP 服务会提供 AI 客户端可以调用的工具。此服务会将任何 Shopify 店面的公开目录转换为 Agent 可以推理的 JSON,无需在你的技术栈中使用浏览器或网页抓取库。
我需要 Shopify 账户、应用或商家令牌吗?
不需要。唯一需要的凭据是你的 HasData 密钥。
它适用于自定义域名吗?
对于传统店面,适用;使用自有域名的商店与使用 myshopify.com 的商店相同。无头商店是例外。它的前端由 Shopify 以外的服务提供,因此目录不会发布在自定义域名下,调用会返回空结果。请改用 https://<shop>.myshopify.com 重试。
如何判断网站是否使用 Shopify?
对该网站调用产品工具,然后查看返回数据的结构,而不是状态码。传统 Shopify 店面会返回一个 products 数组。其他情况会以 200 状态返回一个 error 字符串,且没有数组;此类响应会像其他成功调用一样计费。
我能获取库存数量吗?
不能,只能获取每个变体公开的 available 标记。精确库存水平并未公开,只能通过你所控制商店的 Admin API 获取。
如何拉取整个目录?
将 limit 设为 250 进行分页,并逐步增加 page,直到某一页返回的条目不足或为空。费用按页数而非产品数量计算,因此页面大小设为最大值始终是最省钱的方式。
我可以将它与其他 HasData API 一起使用吗?
可以。一个密钥即可用于所有 API,一个端点通过 apis 参数提供所有 API。将客户端指向 ?apis=shopify,amazon,即可在一个连接中获取两组工具;也可以指向 mcp.hasdata.com/mcp,获取完整目录。
HasData 与 Shopify 有关联吗?
没有。HasData 是一项独立服务,与 Shopify 没有关联,也未获得 Shopify 的认可或赞助。Shopify 是其各自所有者的商标。这些工具仅处理公开数据;你有责任确保使用结果时遵守所读取商店的条款以及适用于你的法律。
合规与个人数据
产品目录属于商业数据,这些工具不会返回客户、订单或联系信息。小型商店的 vendor 字段可能包含个体经营者本人的姓名,这是唯一可能出现个人信息的地方。保存竞争对手的产品目录属于商业决策,而非隐私问题,因此请阅读你要提取数据的商店条款,并确认自己承担的义务。
HasData 链接
- Shopify Scraper API,这些工具所用的 REST 端点
- API 文档
- MCP 服务文档
- 定价
- 控制面板
其他 HasData MCP 服务:Google Search、Google Maps、Google Trends、Google Flights、DuckDuckGo、YouTube、TikTok、Instagram、Amazon、Yelp、Zillow、Airbnb、Booking.com、Indeed。
开发
启动器是连接到远程服务的轻量级 stdio 桥接器,因此无需构建。
npm install
HASDATA_API_KEY=your_key_here npm test
test/ 中的测试用于断言工具契约,也就是在没有提交到此处的代码更改时仍可能发生变化的部分。它们会检查 ?apis=shopify 是否返回预期数量的工具、工具名称是否均未更改、每个工具是否仍声明了必需参数并附带说明,以及当前使用的密钥是否确实有效。最后一项检查会实际调用一个工具,花费 10 个额度,这是为确保问题能够以正确方式暴露而付出的代价。
契约测试套件还会每周定期运行,因为上游工具列表可能在无人修改此代码库的情况下发生变化。
贡献
如果工具表、响应示例或文档所述行为与实际情况不符,都值得提交问题。我们为此提供了专用模板。欢迎提交相关拉取请求,也欢迎针对启动器提交拉取请求。
许可证
MIT,详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。