Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Shopify Admin MCP

NPM · MCP-SHOPIFY-ADMIN · SCANNED SEP 20

MCP server for the Shopify Admin API: products, orders, customers, inventory, discounts.

Available components

+3 this week 81 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 96 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability67
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3746 tokens (~234/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
  • Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 16 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Shopify Admin MCP server?

Shopify Admin MCP runs locally as an npm package, launched with npx -y mcp-shopify-admin. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · mcp-shopify-admin

# add to Claude Code
claude mcp add a1-x-tech-mcp-shopify-admin -- npx -y mcp-shopify-admin
// .cursor/mcp.json
{
  "mcpServers": {
    "a1-x-tech-mcp-shopify-admin": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-shopify-admin"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "a1-x-tech-mcp-shopify-admin": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-shopify-admin"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add a1-x-tech-mcp-shopify-admin -- npx -y mcp-shopify-admin
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "a1-x-tech-mcp-shopify-admin": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mcp-shopify-admin"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add a1-x-tech-mcp-shopify-admin --command npx --arg -y --arg mcp-shopify-admin
# ~/.hermes/config.yaml
mcp_servers:
  a1-x-tech-mcp-shopify-admin:
    command: "npx"
    args: ["-y", "mcp-shopify-admin"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "a1-x-tech-mcp-shopify-admin": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "mcp-shopify-admin"
      ]
    }
  }
}
# add to Vellum
assistant mcp add a1-x-tech-mcp-shopify-admin -t stdio -c npx -a -y mcp-shopify-admin
// mcp.json
{
  "mcpServers": {
    "a1-x-tech-mcp-shopify-admin": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-shopify-admin"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

  • 8 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

  • 6 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

  • 3 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/mcp-shopify-admin@1.1.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 96 packages
Packages resolved 96
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 16 exposed · ~3,262 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
cancel_order ~278

НЕОБРАТИМО отменяет заказ. Два решения обязательны и не имеют значений по умолчанию: refund — вернуть ли деньги покупателю, restock — вернуть ли позиции на склад. notifyCustomer управляет письмом покупателю. Отмена выполняется фоновой задачей: в ответе job, а не обновлённый заказ — итог стоит проверить через get_order. Уже выданный (fulfilled) заказ Shopify отменить не даст — это придёт ошибкой userErrors. Расформировать отмену нельзя; частичные возвраты этот инструмент не делает.

NameTypeReqDescription
notifyCustomerbooleanОтправить ли покупателю письмо об отмене.
orderIdstringyesId заказа: число или gid://shopify/Order/<id>.
reasonstringyesПричина отмены: CUSTOMER (просьба покупателя), DECLINED (платёж отклонён), FRAUD, INVENTORY (нет товара), STAFF (ошибка персонала), OTHER.
refundbooleanyesВернуть ли платёж покупателю. Обязательное решение.
restockbooleanyesВернуть ли позиции заказа на склад. Обязательное решение.
staffNotestringВнутренняя заметка к отмене (покупателю не видна).

No output schema declared.

No examples provided.

create_basic_discount ~363

Создаёт базовую промокодную скидку: один код, процент (percentage, доля 0..1: 0.2 = −20%) ИЛИ фиксированная сумма (amount в валюте магазина) — ровно одно из двух, для всех клиентов на все товары. startsAt по умолчанию — сейчас, то есть код начинает действовать немедленно; отложенный запуск задаётся явным startsAt. usageLimit — общий лимит применений, appliesOncePerCustomer — не больше раза на клиента. Скидки на отдельные коллекции/сегменты, BXGY и бесплатная доставка здесь не создаются (graphql_request), выключение скидки — тоже. Повторный вызов с тем же кодом провалится userErrors: код должен быть уникален.

NameTypeReqDescription
amountstringФиксированная сумма скидки в валюте магазина, например "500.00".
appliesOncePerCustomerbooleanНе больше одного применения на клиента.
codestringyesПромокод, который вводит покупатель, например BLACKFRIDAY. Уникален в магазине.
endsAtstringКонец действия, ISO-8601. Без него скидка бессрочная.
percentagenumberДоля скидки 0..1 (0.2 = −20%). Ровно одно из percentage/amount.
startsAtstringНачало действия, ISO-8601. По умолчанию — немедленно.
titlestringyesВнутреннее название скидки (видно в админке).
usageLimitintegerОбщий лимит применений кода.

No output schema declared.

No examples provided.

create_product ~273

Создаёт товар и возвращает его с дефолтным вариантом, который Shopify добавляет сам. Товар НЕ появляется на витрине: созданные через API товары не опубликованы ни в одном канале продаж, и публикация делается отдельной операцией publishablePublish (её здесь нет — только через graphql_request). Статус по умолчанию — ACTIVE, но это не публикация: status: "DRAFT" дополнительно помечает товар черновиком. Цена задаётся следующим вызовом update_variant по id созданного дефолтного варианта (он есть в ответе). Варианты, изображения и остатки этот инструмент не создаёт. Повторный вызов создаст второй такой же товар. Провал приходит как ошибка с userErrors — HTTP-статус Shopify всегда 200.

NameTypeReqDescription
descriptionHtmlstringОписание в HTML.
productTypestringТип товара в свободной форме.
statusstringACTIVE (по умолчанию; товар всё равно не опубликован в каналах продаж) | DRAFT (черновик) | ARCHIVED.
tagsarrayТеги.
titlestringyesНазвание товара.
vendorstringВендор/бренд.

No output schema declared.

No examples provided.

get_customer ~106

Возвращает одного клиента целиком: контакты, адреса, заметку, теги и его 10 последних заказов с суммами. Принимает числовой id или gid://shopify/Customer/<id>; клиент по email ищется через list_customers с query "email:...". Несуществующий клиент — это data: null, а не ошибка.

NameTypeReqDescription
idstringyesId клиента: число или gid://shopify/Customer/<id>.

No output schema declared.

No examples provided.

get_order ~136

Возвращает один заказ целиком: позиции (до 100), суммы (итог, доставка, возвраты), адрес доставки, заметку, теги, отгрузки с трек-номерами. Принимает числовой id или gid://shopify/Order/<id> — id, не «номер» вида #1001 (номер ищется через list_orders с query "name:#1001"). Несуществующий заказ — это data: null, а не ошибка.

NameTypeReqDescription
idstringyesId заказа: число или gid://shopify/Order/<id> (не номер #1001).

No output schema declared.

No examples provided.

get_product ~116

Возвращает один товар целиком: описание (HTML), опции, до 100 вариантов с ценами, остатками, SKU и id inventoryItem (этот id нужен инструменту set_inventory). Принимает числовой id или gid://shopify/Product/<id>. Несуществующий товар — это data: null, а не ошибка. Медиафайлы и метаполя не возвращает — за ними graphql_request.

NameTypeReqDescription
idstringyesId товара: число или gid://shopify/Product/<id>.

No output schema declared.

No examples provided.

get_shop ~143

Возвращает магазин, к которому привязан сервер: название, myshopifyDomain, основной домен витрины, валюту, тариф (plan), контактный email, часовой пояс, число товаров и список локаций (id локаций нужны инструменту set_inventory). Аргументов не принимает — магазин задан в SHOPIFY_STORE_DOMAIN и не выбирается для отдельного вызова. Как и у всех инструментов здесь, в ответе есть cost: состояние cost-бакета GraphQL (actualQueryCost — сколько стоил запрос, currentlyAvailable/maximumAvailable — остаток и размер бакета, restoreRate — восстановление в секунду).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

graphql_request ~305

Выполняет произвольный GraphQL-документ против Admin API магазина — для всего, чему нет отдельного инструмента (метаполя, медиа, коллекции, вебхуки, сегменты, bulk-операции). Токен, магазин и версию API подставляет сервер; переменные — через variables. Помечен destructive, потому что документ может быть мутацией; query безопасен. ВАЖНО: у мутаций Shopify HTTP 200 не значит успех — реальный вердикт в userErrors внутри data, и здесь он возвращается как есть, без интерпретации: поле userErrors нужно проверить самому. Ретраев для мутаций нет (повтор мог бы применить изменение дважды) — вид операции определяется разбором документа, поэтому мутация с фрагментом перед ней тоже не повторяется; THROTTLED повторяется сам после паузы. Стоимость запроса видна в cost ответа — глубокие вложенные выборки стоят дорого, а дороже 1000 очков запрос отклоняется валидатором Shopify.

NameTypeReqDescription
operationNamestringИмя операции — обязательно, если документ содержит больше одной; без него сервер GraphQL не знает, какую выполнять.
querystringyesGraphQL-документ, например "query { shop { name } }" или мутация.
variablesobjectПеременные документа, объект JSON.

No output schema declared.

No examples provided.

list_customers ~217

Возвращает страницу клиентов (имя, email, телефон, число заказов, потраченная сумма, город) плюс count — число клиентов под тем же фильтром. Пагинация курсорная: hasNextPage/endCursor в ответе, следующий вызов передаёт endCursor в after. query — строка поиска Shopify: "email:ivan@example.com", "phone:+79001234567", "state:enabled", "created_at:>=2026-01-01". Клиентов не создаёт и не меняет — записи с персональными данными изменяются только через graphql_request. Нужен scope read_customers.

NameTypeReqDescription
afterstringendCursor предыдущей страницы — продолжить с него.
firstintegerРазмер страницы, 1..250. По умолчанию 20.
querystringСтрока поиска Shopify: "email:ivan@example.com", "state:enabled", "created_at:>=2026-01-01".

No output schema declared.

No examples provided.

list_discounts ~175

Возвращает страницу скидок магазина — промокодных и автоматических: тип (__typename), название, статус, период действия, лимит использований, для кодовых — до 5 кодов и счётчик применений. Пагинация курсорная (hasNextPage/endCursor → after). query — строка поиска Shopify: "status:active", "type:code", "title:BLACKFRIDAY". Ничего не создаёт и не выключает.

NameTypeReqDescription
afterstringendCursor предыдущей страницы — продолжить с него.
firstintegerРазмер страницы, 1..250. По умолчанию 20.
querystringСтрока поиска Shopify: "status:active", "type:code", "title:BLACKFRIDAY".

No output schema declared.

No examples provided.

list_locations ~96

Возвращает локации магазина (склады и точки), включая неактивные: id, название, адрес, активность, выполняет ли онлайн-заказы. Именно id локации нужен инструменту set_inventory. У большинства магазинов локаций одна-две, так что страницы по умолчанию хватает.

NameTypeReqDescription
firstintegerРазмер страницы, 1..250. По умолчанию 20.

No output schema declared.

No examples provided.

list_orders ~216

Возвращает страницу заказов, новые первыми (номер, дата, финансовый статус, статус выдачи, сумма, клиент) плюс count под тем же фильтром. Пагинация курсорная: hasNextPage/endCursor в ответе, следующий вызов передаёт endCursor в after. query — строка поиска Shopify: "financial_status:pending", "fulfillment_status:unfulfilled", "created_at:>=2026-08-01", "email:ivan@example.com". Нужен scope read_orders; заказы старше 60 дней требуют ещё read_all_orders — без него они просто не приходят.

NameTypeReqDescription
afterstringendCursor предыдущей страницы — продолжить с него.
firstintegerРазмер страницы, 1..250. По умолчанию 20.
querystringСтрока поиска Shopify: "financial_status:paid", "fulfillment_status:unfulfilled", "created_at:>=2026-08-01".

No output schema declared.

No examples provided.

list_products ~237

Возвращает страницу товаров магазина (id, название, handle, статус, вендор, тип, теги, общий остаток, до 5 вариантов с ценами) плюс count — число товаров под тем же фильтром. Пагинация курсорная: в ответе pageInfo-поля hasNextPage и endCursor, следующий вызов передаёт endCursor в after; параметра "номер страницы" у Shopify нет. query — строка поиска Shopify, например "status:active", "vendor:Nike created_at:>=2026-01-01", "title:*shirt*". Страница first до 250 за один вызов дешевле по cost-бакету, чем много мелких страниц.

NameTypeReqDescription
afterstringendCursor предыдущей страницы — продолжить с него.
firstintegerРазмер страницы, 1..250. По умолчанию 20.
querystringСтрока поиска Shopify, как есть: "status:active", "vendor:Nike", "tag:sale", "created_at:>=2026-01-01".

No output schema declared.

No examples provided.

set_inventory ~215

Устанавливает АБСОЛЮТНЫЙ доступный остаток (available) позиций на локациях — «стало N», не «изменить на N»: повторный вызов с теми же числами ничего не меняет. Каждый элемент quantities несёт inventoryItemId (id inventoryItem варианта — он в ответе get_product, это НЕ id варианта), locationId (из list_locations) и quantity >= 0. reason — из закрытого словаря Shopify, по умолчанию correction. Историю движений не пишет и резервы не трогает. Провал приходит как ошибка с userErrors — например, если позиция не отслеживается (inventory tracking выключен) или не привязана к локации.

NameTypeReqDescription
quantitiesarrayyesПозиции и их новые абсолютные остатки.
reasonstringПричина изменения из словаря Shopify (correction, received, damaged, restock, …). По умолчанию correction.

No output schema declared.

No examples provided.

update_product ~211

Перезаписывает переданные поля товара (название, описание, вендор, тип, теги, статус) и не трогает остальные. tags замещают весь список тегов, а не добавляются к нему. Цены и остатки здесь не меняются — цены через update_variant, остатки через set_inventory. status: DRAFT снимает товар с витрины, ARCHIVED архивирует (обратимо — вернуть можно, снова передав ACTIVE). Провал приходит как ошибка с userErrors.

NameTypeReqDescription
descriptionHtmlstringНовое описание в HTML.
idstringyesId товара: число или gid://shopify/Product/<id>.
productTypestringНовый тип.
statusstringACTIVE | DRAFT | ARCHIVED.
tagsarrayПолный новый список тегов (замещает старый).
titlestringНовое название.
vendorstringНовый вендор.

No output schema declared.

No examples provided.

update_variant ~175

Задаёт цену и/или зачёркнутую цену (compareAtPrice) вариантам одного товара — до 250 вариантов за вызов, каждый элемент variants несёт id варианта и новые значения. Суммы — десятичные строки в валюте магазина ("1999.00"); compareAtPrice: null убирает зачёркнутую цену. Больше ничего в варианте не меняет (SKU, штрихкод, опции — через graphql_request). Требуется id товара-родителя: он есть в ответах list_products и get_product. Провал приходит как ошибка с userErrors.

NameTypeReqDescription
productIdstringyesId товара-родителя: число или gid://shopify/Product/<id>.
variantsarrayyesВарианты одного товара с новыми ценами.

No output schema declared.

No examples provided.

Common questions

What is the Shopify Admin MCP server?

Shopify Admin MCP is listed in the public MCP registry as io.github.A1-x-Tech/mcp-shopify-admin. MCP server for the Shopify Admin API: products, orders, customers, inventory, discounts. This page covers its npm package (mcp-shopify-admin).

Is the Shopify Admin MCP server safe to use?

Shopify Admin MCP scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Shopify Admin MCP server expose?

Shopify Admin MCP exposes 16 tools: get_shop, list_products, get_product, create_product, update_product, and 11 more. Their descriptions and schemas cost roughly 3,262 tokens of context every time the server is loaded.

Is the Shopify Admin MCP server still maintained?

Shopify Admin MCP is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Shopify Admin MCP server under?

Shopify Admin MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.