API ВЕГА

Shopify MCP Server

Хостинговый сервер Model Context Protocol (MCP), который предоставляет Claude, Cursor, Windsurf и любому другому MCP-клиенту два инструмента Shopify только для чтения. Получайте каталог товаров любого публичного магазина Shopify по его URL, включая варианты, SKU и цены, а также просматривайте коллекции, в которых сгруппированы товары. Результаты представлены в виде структурированного JSON. Устанавливать приложение или получать токен продавца не нужно.

Сервер считывает каталог, доступный посетителю без входа в аккаунт, в любом классическом магазине Shopify — как на адресе myshopify.com, так и на собственном домене. Если магазин работает в режиме headless, запросы к нему обрабатываются на домене myshopify.com.

1 000 бесплатных кредитов каждый месяц, банковская карта не требуется — этого хватит на 200 вызовов Shopify по 5 кредитов за вызов.

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

Содержание

  • Что понадобится

  • Быстрый старт

  • Примеры запросов

  • Инструменты

  • Ошибки и возможные сбои

  • Цены, бесплатный тариф и ограничения

  • Выбор инструмента

  • Сравнение с другими решениями

  • FAQ

  • Ссылки HasData

  • Разработка

  • Участие в разработке

  • Лицензия

Что понадобится

MCP-клиент и API-ключ HasData, который можно бесплатно создать в панели управления; банковская карта не требуется. Бесплатного тарифа хватит примерно на 200 вызовов в месяц при стоимости 5 кредитов за вызов. Это удалённый сервер, поэтому для подключения достаточно URL и заголовка x-api-key — запускать контейнер не нужно. Если клиент поддерживает только stdio, подключиться к серверу можно через лёгкий лаунчер. Он опубликован в npm как @hasdata/shopify-mcp, а в PyPI — как hasdata-shopify-mcp. Примеры приведены ниже.

Быстрый старт

URL сервера одинаков для всех клиентов. Мы проверили подключение в Claude Code и Claude Desktop. Примеры для остальных клиентов соответствуют их документированному формату настройки удалённых серверов.

ПолеЗначение
URLhttps://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" }
    }
  }
}

Если вместо Node вы используете Python, замените лаунчер на пакет из 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, потребуются два вызова: сначала нужно получить список коллекций, затем — товары из коллекции с подходящим handle. Инструмент для работы с коллекциями возвращает handle; это значение можно напрямую передать в аргумент collection инструмента для получения товаров.

Инструменты

ИнструментЧто возвращает
hasdata_shopify_collections_getCollectionsДля каждой коллекции возвращает id, title, handle, описание body_html, изображение и временные метки. 5 кредитов за вызов
hasdata_shopify_products_getProductsВозвращает id, title, handle, vendor, product_type, tags, body_html, изображения, варианты с ценами, SKU и статусом наличия, а также временные метки. 5 кредитов за вызов

Доступны два инструмента; успешный вызов каждого стоит 5 кредитов. Оба принимают URL магазина и позволяют постранично получать результаты с помощью параметров limit и page. Для limit можно задать значение до 250.

Получение товаров магазина Shopify

hasdata_shopify_products_getProducts

Возвращает страницу товаров одного магазина.

ПараметрТипОбязательныйОписание
urlstringдаURL магазина, например https://www.allbirds.com
limitnumberКоличество товаров на странице: от 1 до 250
pagenumberНомер страницы, начиная с 1
collectionstringОграничивает результаты одной коллекцией по её 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

Возвращает коллекции, в которых сгруппированы товары одного магазина.

ПараметрТипОбязательныйОписание
urlstringдаURL магазина, например https://www.allbirds.com
limitnumberКоличество коллекций на странице: от 1 до 250
pagenumberНомер страницы, начиная с 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. У товара с вариантами размера или цвета обычно несколько цен. Самая частая ошибка — прочитать первый вариант и считать его цену ценой товара.

Если скидки нет, compare_at_price равен null. Поэтому сначала проверьте значение на null и только потом сравнивайте цены.

Параметр available относится к отдельному варианту и отражает состояние на момент вызова. Товар не бывает «нет в наличии» — таким может быть конкретный вариант, и запасы меняются. Два вызова с разницей в несколько минут могут вернуть разные значения: это нормально при мониторинге, но может стать проблемой при сравнении каталогов.

Значение products_count у коллекции может быть равно нулю. Магазины оставляют опубликованными пустые, подготовительные и сезонные коллекции, поэтому пустая коллекция — обычная ситуация, а не ошибка вызова.

В магазинах публикуют товары, которые не продаются. Во многих каталогах есть внутренние, снятые с продажи и тестовые товары. Иногда это указано в названии, иногда — нет. Фильтруйте результаты по нужным условиям, а не считайте, что каждая запись — это товар, доступный для покупки.

tags — это произвольный текст, добавленный продавцом. Одни магазины используют теги как обычные ключевые слова, другие добавляют туда строки метаполей с пространствами имён. Считайте массив произвольным текстом.

body_html содержит HTML. Удалите HTML перед индексацией или встраиванием описания.

Значение collection.image часто равно null, как и featured_image у варианта. В таких случаях используйте массив images товара.

Даже если URL ведёт не на классическую витрину Shopify, сервер вернёт статус 200 и спишет оплату. В ответе не будет массива products, вместо него будет строка error, а requestMetadata.status останется равным ok. Перед чтением данных проверьте наличие массива: меняется структура ответа, а не его статус.

В headless-магазине Shopify запрос к собственному домену завершится ошибкой, а к домену myshopify.com — сработает. Headless-магазины обслуживают витрину через собственный интерфейс, поэтому каталог не опубликован на публичном домене. Если для магазина, который, как вы знаете, работает на Shopify, вернулась строка error, повторите запрос, используя https://.myshopify.com.

В ответах с данными также есть requestMetadata.id — указывайте его при обращении в поддержку.

Стоимость, бесплатный тариф и лимиты

Каждый инструмент Shopify стоит 5 кредитов за успешный вызов. Размер ответа на стоимость не влияет: страница с 250 товарами и страница с 3 товарами обходятся одинаково. Поэтому получить каталог целиком дешевле всего, запросив страницы максимального размера.

Бесплатный тариф включает 1 000 кредитов в месяц, банковская карта не требуется. По базовой ставке этого хватит на 200 вызовов Shopify. Кредиты обновляются в начале расчётного периода, поэтому агент с небольшим объёмом запросов может пользоваться бесплатным тарифом неограниченно долго.

Платные тарифы начинаются от $59 в месяц за 200 000 кредитов — этого хватит на 40 000 вызовов. При большем объёме стоимость единицы снижается: от $1.48 за 1 000 вызовов на начальном тарифе до $0.60 на Basic и $0.41 на тарифах Growth. Актуальные цены смотрите на странице с тарифами.

Тариф также определяет количество одновременных запросов. На бесплатном тарифе разрешён 1 запрос за раз, на Startup — 5, на Basic — 15, а на тарифах Growth — от 50 до 500. Для автоматических запросов при ответе 429 используйте повторные попытки с увеличивающимися интервалами: агент, который отправляет запросы сразу в несколько магазинов, упрётся в лимит раньше, чем вы успеете отреагировать.

Неуспешный запрос с ответом, отличным от 200, не тарифицируется. Успешный вызов, который ничего не нашёл, всё равно считается вызовом.

Выбор инструмента

Отталкивайтесь от того, что указано в запросе. Если вопрос касается самого каталога, используйте инструмент для товаров. Если нужно узнать, как организован магазин, или в запросе названа категория так, как её видят покупатели, сначала используйте инструмент для коллекций.

Затем выберите размер страницы. Оба инструмента принимают параметр limit до 250, и стоимость вызова при этом не меняется. Поэтому для получения каталога из 900 товаров потребуется четыре вызова, а не девяносто. Оставлять limit по умолчанию — одна из самых затратных привычек при работе с этим сервером.

По возможности фильтруйте данные на сервере. Если передать параметр collection инструменту для товаров, на получение нужной выборки потребуется один вызов. Если сначала загрузить весь каталог и фильтровать его локально, придётся запрашивать каждую страницу с данными, которые вам не нужны.

Сравнение с другими решениями

Shopify Admin API — официальный способ получить доступ к каталогу магазина, но он решает другую задачу.

Shopify Admin APIЭтот сервер
Доступные магазиныТе, которыми вы владеете или к которым вам предоставили доступЛюбая публичная витрина
НастройкаСоздание приложения, запрос разрешений, хранение токена для каждого магазинаОдин заголовок
Учётные данные для каждого магазинаДаНет
Уровни запасовТочные значенияФлаг available для каждого варианта
Черновики и скрытые товарыДоступныНедоступны, поскольку не опубликованы
Заказы и клиентыДоступныНедоступны
СтоимостьБесплатно в пределах лимитов запросовПосле бесплатного тарифа — платно, 5 кредитов за вызов

Главное различие — доступные магазины. Admin API предназначен для продавца, который работает со своим магазином, и требует токен, который может выдать только этот продавец. Поэтому этот API не подойдёт, если нужно сравнить свой магазин с десятью конкурентами. Если магазин принадлежит вам, Admin API предоставляет больше возможностей и доступен бесплатно — используйте его.

Часто задаваемые вопросы

Есть ли у Shopify собственный MCP-сервер?

Да, но он предназначен для других задач. У каждой подходящей витрины есть собственный MCP-сервер на её домене, а его инструменты рассчитаны на агента, который совершает покупки: например, ищет товары, собирает корзину и оформляет заказ. Такой сервер привязан к конкретному магазину, поэтому агенту, который сравнивает тридцать магазинов, понадобятся тридцать подключений. Этот сервер предназначен для массового чтения каталогов разных магазинов, поэтому задачи этих серверов не пересекаются. Если ваш агент покупает товары в одном магазине, используйте сервер Shopify.

Что такое Shopify MCP-сервер?

MCP-сервер предоставляет инструменты, которые может вызывать AI-клиент. Этот сервер преобразует публичный каталог любой витрины Shopify в JSON, с которым агент может работать без браузера и библиотек для скрейпинга в вашем стеке.

Нужны ли мне аккаунт Shopify, приложение или токен продавца?

Нет. Единственные учётные данные, которые понадобятся, — ваш ключ HasData.

Работает ли сервер с собственными доменами?

Для классической витрины — да: магазин на собственном домене работает так же, как магазин на myshopify.com. Исключение — headless-магазины. Их интерфейс обслуживается не Shopify, поэтому каталог не опубликован на собственном домене и запрос вернёт пустой результат. Для таких магазинов повторите запрос, используя https://.myshopify.com.

Как узнать, работает ли сайт на Shopify?

Вызовите инструмент для товаров и проверьте структуру ответа, а не его статус. Классическая витрина Shopify вернёт массив products. В остальных случаях сервер ответит статусом 200, строкой error и без массива. Такой ответ тарифицируется как любой другой успешный вызов.

Можно ли получить точное количество товаров в наличии?

Нет, доступен только флаг available, который публикуется для каждого варианта. Точные сведения об остатках не являются общедоступными: их можно получить через Admin API магазина, которым вы управляете.

Как загрузить каталог целиком?

Запрашивайте страницы с limit, равным 250, и увеличивайте page, пока не получите страницу с меньшим количеством результатов или пустую страницу. Стоимость зависит от количества страниц, а не товаров, поэтому максимальный размер страницы всегда позволяет получить каталог дешевле всего.

Можно ли использовать этот сервер вместе с другими API HasData?

Да. Один ключ подходит для всех API, а один эндпоинт обслуживает их через параметр apis. Укажите для клиента ?apis=shopify,amazon, чтобы подключить оба набора инструментов, или используйте mcp.hasdata.com/api/mcp, чтобы получить доступ ко всему каталогу.

Связана ли HasData с Shopify?

Нет. HasData — независимый сервис, не связанный с Shopify и не одобренный и не спонсируемый этой компанией. Shopify — товарный знак соответствующего владельца. Инструменты работают только с общедоступными данными. Вы несёте ответственность за использование полученных данных в соответствии с условиями магазинов, к которым обращаетесь, и применимым законодательством.

Соблюдение требований и персональные данные

Каталог товаров содержит коммерческие данные, а эти инструменты не возвращают сведения о клиентах, заказах или контактную информацию. В небольшом магазине поле vendor может содержать имя индивидуального предпринимателя — это единственное место, где могут встречаться сведения о человеке. Сохранение каталога конкурента — коммерческое, а не связанное с конфиденциальностью решение. Ознакомьтесь с условиями магазина, данные которого загружаете, и проверьте, какие обязательства лежат на вас.

Ссылки HasData

Другие MCP-серверы HasData: 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 возвращает ожидаемое количество инструментов, названия инструментов не изменились, для каждого инструмента указаны обязательные параметры и описание, а используемый API-ключ действительно принимается. Последняя проверка выполняет реальный вызов инструмента и стоит 5 кредитов — такова цена контрольного запроса, который может завершиться ошибкой по ожидаемой причине.

Набор тестов контракта также запускается еженедельно по расписанию: список инструментов на стороне сервиса может измениться, даже если никто не вносит изменений в этот репозиторий.

Участие в разработке

Если таблица инструментов, пример ответа или описанное поведение не соответствуют действительности, создайте issue — для этого есть специальный шаблон. Pull request’ы с такими исправлениями, а также с изменениями в запускателе, приветствуются.

Лицензия

MIT. См. LICENSE.