Open-source B2B and marketplace ecommerce; new stores include an MCP server for AI agents.
HasData Shopify
ภาพรวม
เรียบเรียงโดย PopNx MCP จากข้อมูลของผู้ทำ
อ่านรายการสินค้าและคอลเลกชันที่เปิดสาธารณะของร้าน Shopify ใดก็ได้ ออกมาเป็นข้อมูลเรียบร้อย เหมาะกับดูร้านคู่แข่ง ต้องใช้กุญแจของ HasData
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
The public product catalogue and collections of any Shopify storefront, as structured JSON.
สามเสาของ PopNx MCP
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
- เสียงผู้ใช้iยังไม่มีรีวิวรีวิวเปิดพร้อมระบบบัญชีในขั้นถัดไป
- ผลตรวจเบื้องต้นของเราiผ่าน 4 จาก 4 ข้อตรวจจากข้อมูลที่เปิดอยู่ ยังไม่ได้สแกนโค้ด
- การใช้งานiยังใหม่มาก★ 7
ใช้ทำอะไรได้
เหมาะกับ: คนทำร้านออนไลน์ที่อยากเทียบสินค้าและราคากับร้านอื่น
ลองพิมพ์บอก AI แบบนี้
- ดึงสินค้าทั้งหมดของร้าน Shopify นี้พร้อมราคา
- ร้านนี้มีคอลเลกชันอะไรบ้าง
- เทียบราคาสินค้าคล้ายกันระหว่างสองร้านนี้
เรียบเรียงโดย PopNx MCP จากข้อมูลของผู้ทำ
ติดตั้ง
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
- รันบนคลาวด์ไม่ต้องลงโปรแกรมเพิ่ม ต่อผ่านอินเทอร์เน็ตได้เลย
- npmติดตั้ง Node.js (มีคำสั่ง npx) ในเครื่อง
เปิด Claude Desktop → Settings → Connectors → Add custom connector แล้ววางที่อยู่นี้
https://mcp.hasdata.com/mcp?apis=shopifyรันบนเครื่อง
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"-y",
"@hasdata/shopify-mcp"
],
"env": {
"HASDATA_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http shopify 'https://mcp.hasdata.com/mcp?apis=shopify' --header 'x-api-key: ใส่ค่าของคุณ'รันบนเครื่อง
พิมพ์คำสั่งนี้ใน Terminal
claude mcp add shopify --env HASDATA_API_KEY='ใส่ค่าของคุณ' -- npx -y @hasdata/shopify-mcpวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"shopify": {
"url": "https://mcp.hasdata.com/mcp?apis=shopify",
"headers": {
"x-api-key": "ใส่ค่าของคุณ"
}
}
}
}รันบนเครื่อง
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"-y",
"@hasdata/shopify-mcp"
],
"env": {
"HASDATA_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"shopify": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=shopify",
"headers": {
"x-api-key": "ใส่ค่าของคุณ"
}
}
}
}รันบนเครื่อง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"shopify": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@hasdata/shopify-mcp"
],
"env": {
"HASDATA_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}ค่าที่ต้องใส่เอง
- HasData API key, created at app.hasdata.com. 1,000 free credits every month, no card.
x-api-keyความลับ จำเป็น HTTP headerHasData API key, created at app.hasdata.com. 1,000 free credits every month, no card.
ค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ผลตรวจเบื้องต้นi
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 5 พ.ย. 2569
- ✓ ผ่าน
ตัวตนผู้ทำตรงกับ repo
ชื่อใน registry ยืนยันโดเมน hasdata.com แล้ว (registry ตรวจความเป็นเจ้าของโดเมน)
- ✓ ผ่าน
ยังมีคนดูแล
มีการแก้โค้ดล่าสุด 7 วันที่ผ่านมา
- ✓ ผ่าน
มีสัญญาอนุญาต (license)
ใช้ MIT
- ✓ ผ่าน
endpoint ตอบ
ตอบกลับใน 1891 ms (HTTP 200)
- – ไม่เกี่ยว
ล็อกอินแบบ OAuth
ไม่ต้องล็อกอิน
- … ยังไม่ตรวจ
คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง
ต้องอ่านรายการเครื่องมือของ server ก่อน จะเริ่มตรวจในขั้นถัดไป
เทียบกับตัวอื่นในหมวด ร้านค้าออนไลน์และรับเงินi
- ดาวมากกว่า 0% ของอีก 6 ตัวในหมวดนี้
- ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 50% ของอีก 6 ตัวในหมวดนี้
- ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 6 ตัวในหมวดนี้
เทียบเฉพาะ server ที่อยู่ในต้นแบบนี้ ไม่ใช่ทั้ง registry
คำถามที่พบบ่อย
HasData Shopify ปลอดภัยไหม?
จากการตรวจเบื้องต้นของเรา ผ่าน 4 จาก 4 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใช้กุญแจหรือรหัสอะไรบ้าง?
ต้องใส่ค่าเหล่านี้: HASDATA_API_KEY, x-api-key
ตัวนี้รันบนเครื่องหรือบนคลาวด์?
ได้ทั้งสองแบบ จะลงในเครื่องหรือต่อผ่านคลาวด์ก็ได้
ยังมีคนดูแลอยู่ไหม?
repo บน GitHub มีการแก้โค้ดล่าสุด 7 วันที่ผ่านมา และส่งรุ่นล่าสุด (1.0.3) เข้า registry 42 วันที่ผ่านมา
ใช้กับโปรแกรมไหนได้บ้าง?
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
มีตัวไหนใช้แทนได้บ้าง?
ในหมวดเดียวกันมี Spree Commerce: open-source B2B and marketplace ecommerce, Stripe MCP, MCP Cn Commerce
ตัวที่ใช้แทนได้
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Stripe MCP
server ทางการของ Stripe ให้ AI ดูและจัดการลูกค้า สินค้า การชำระเงิน และใบแจ้งหนี้ ต่อผ่านคลาวด์ของ Stripe และล็อกอินแบบ OAuth
MCP Cn Commerce
8 read-only MCP platform entries; support is operation-specific; merchant live acceptance pending
README จากผู้ทำ
เปิดอ่าน README
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
Shopify MCP Server
A hosted Shopify 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 100 Shopify calls at the 10-credit rate.
https://mcp.hasdata.com/mcp?apis=shopify
Contents
- What you need
- Quick start
- Example prompts
- Tools
- Errors and failure paths
- Pricing, free tier and limits
- Tool selection
- How it compares
- FAQ
- HasData links
- Development
- Contributing
- License
What you need
An MCP client and a HasData API key from the dashboard, free to create with no card, and the free tier covers about 100 calls a month at the 10-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/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.
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, 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:
{
"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:
{
"mcpServers": { "shopify": { "command": "uvx", "args": ["hasdata-shopify-mcp"], "env": { "HASDATA_API_KEY": "YOUR_KEY" } } } }
Cursor
~/.cursor/mcp.json for every project, or .cursor/mcp.json for one:
{
"mcpServers": { "shopify": { "url": "https://mcp.hasdata.com/mcp?apis=shopify", "headers": { "x-api-key": "HASDATA_API_KEY" } } } }
Windsurf
~/.codeium/windsurf/mcp_config.json. Windsurf calls the field serverUrl, not url:
{
"mcpServers": { "shopify": { "serverUrl": "https://mcp.hasdata.com/mcp?apis=shopify", "headers": { "x-api-key": "HASDATA_API_KEY" } } } }
VS Code
.vscode/mcp.json in the workspace:
{
"servers": { "shopify": { "type": "http", "url": "https://mcp.hasdata.com/mcp?apis=shopify", "headers": { "x-api-key": "HASDATA_API_KEY" } } } }
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
priceagainstcompare_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
| Tool | What it returns |
|---|---|
hasdata_shopify_collections_getCollections | Each collection's id, title, handle, body_html description, image, and timestamps. 10 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. 10 credits a call |
Two tools, 10 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
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.
{
"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
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.
{
"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 is the most common mistake here.
`compare_at_price` is null when nothing is discounted, so a discount check is a null test first and a comparison second.
`available` is per variant and reflects the moment of the call. A product is not out of stock, a variant is, and stock moves. Two calls minutes apart can disagree, which is the point when you are monitoring, and a trap when you are diffing catalogues.
A collection can report `products_count` of zero. Stores leave empty, staged and seasonal collections published, so an empty collection is normal rather than a failed call.
Stores publish things that are not for sale. Internal, retired and staging items sit in the public catalogue on plenty of stores, sometimes flagged in the title and sometimes not. Filter on what you need instead of trusting that every row is a live product.
`tags` are whatever the merchant wrote. Some stores use them as plain keywords, others push namespaced metafield strings into them. Treat the array as free text.
`body_html` is HTML. Strip it before you index or embed the description.
`collection.image` is often null, and so is featured_image on a variant. Fall back to the product images array.
A URL that is not a classic Shopify storefront still answers 200 and still bills. There is no products array in that response and an error string in its place, while requestMetadata.status stays ok. Test for the array before you read it, because the shape changes rather than the status.
**A