Shopify Admin MCP
NPM · MCP-SHOPIFY-ADMIN · SCANNED SEP 20
MCP server for the Shopify Admin API: products, orders, customers, inventory, discounts.
Available components
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
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 28 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
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
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
claude mcp add a1-x-tech-mcp-shopify-admin -- npx -y mcp-shopify-admin
{
"mcpServers": {
"a1-x-tech-mcp-shopify-admin": {
"command": "npx",
"args": [
"-y",
"mcp-shopify-admin"
]
}
}
} {
"servers": {
"a1-x-tech-mcp-shopify-admin": {
"command": "npx",
"args": [
"-y",
"mcp-shopify-admin"
]
}
}
} codex mcp add a1-x-tech-mcp-shopify-admin -- npx -y mcp-shopify-admin
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"a1-x-tech-mcp-shopify-admin": {
"type": "local",
"command": [
"npx",
"-y",
"mcp-shopify-admin"
],
"enabled": true
}
}
} openclaw mcp add a1-x-tech-mcp-shopify-admin --command npx --arg -y --arg mcp-shopify-admin
mcp_servers:
a1-x-tech-mcp-shopify-admin:
command: "npx"
args: ["-y", "mcp-shopify-admin"] {
"McpServers": {
"a1-x-tech-mcp-shopify-admin": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"mcp-shopify-admin"
]
}
}
} assistant mcp add a1-x-tech-mcp-shopify-admin -t stdio -c npx -a -y mcp-shopify-admin
{
"mcpServers": {
"a1-x-tech-mcp-shopify-admin": {
"command": "npx",
"args": [
"-y",
"mcp-shopify-admin"
]
}
}
} 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.
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 →
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 →
cancel_order Отменить заказ ~278
НЕОБРАТИМО отменяет заказ. Два решения обязательны и не имеют значений по умолчанию: refund — вернуть ли деньги покупателю, restock — вернуть ли позиции на склад. notifyCustomer управляет письмом покупателю. Отмена выполняется фоновой задачей: в ответе job, а не обновлённый заказ — итог стоит проверить через get_order. Уже выданный (fulfilled) заказ Shopify отменить не даст — это придёт ошибкой userErrors. Расформировать отмену нельзя; частичные возвраты этот инструмент не делает.
| Name | Type | Req | Description |
|---|---|---|---|
| notifyCustomer | boolean | – | Отправить ли покупателю письмо об отмене. |
| orderId | string | yes | Id заказа: число или gid://shopify/Order/<id>. |
| reason | string | yes | Причина отмены: CUSTOMER (просьба покупателя), DECLINED (платёж отклонён), FRAUD, INVENTORY (нет товара), STAFF (ошибка персонала), OTHER. |
| refund | boolean | yes | Вернуть ли платёж покупателю. Обязательное решение. |
| restock | boolean | yes | Вернуть ли позиции заказа на склад. Обязательное решение. |
| staffNote | string | – | Внутренняя заметка к отмене (покупателю не видна). |
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: код должен быть уникален.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | – | Фиксированная сумма скидки в валюте магазина, например "500.00". |
| appliesOncePerCustomer | boolean | – | Не больше одного применения на клиента. |
| code | string | yes | Промокод, который вводит покупатель, например BLACKFRIDAY. Уникален в магазине. |
| endsAt | string | – | Конец действия, ISO-8601. Без него скидка бессрочная. |
| percentage | number | – | Доля скидки 0..1 (0.2 = −20%). Ровно одно из percentage/amount. |
| startsAt | string | – | Начало действия, ISO-8601. По умолчанию — немедленно. |
| title | string | yes | Внутреннее название скидки (видно в админке). |
| usageLimit | integer | – | Общий лимит применений кода. |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| descriptionHtml | string | – | Описание в HTML. |
| productType | string | – | Тип товара в свободной форме. |
| status | string | – | ACTIVE (по умолчанию; товар всё равно не опубликован в каналах продаж) | DRAFT (черновик) | ARCHIVED. |
| tags | array | – | Теги. |
| title | string | yes | Название товара. |
| vendor | string | – | Вендор/бренд. |
No output schema declared.
No examples provided.
get_customer Карточка клиента ~106
Возвращает одного клиента целиком: контакты, адреса, заметку, теги и его 10 последних заказов с суммами. Принимает числовой id или gid://shopify/Customer/<id>; клиент по email ищется через list_customers с query "email:...". Несуществующий клиент — это data: null, а не ошибка.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Id клиента: число или 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, а не ошибка.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Id заказа: число или 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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Id товара: число или 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 Произвольный GraphQL-запрос ~305
Выполняет произвольный GraphQL-документ против Admin API магазина — для всего, чему нет отдельного инструмента (метаполя, медиа, коллекции, вебхуки, сегменты, bulk-операции). Токен, магазин и версию API подставляет сервер; переменные — через variables. Помечен destructive, потому что документ может быть мутацией; query безопасен. ВАЖНО: у мутаций Shopify HTTP 200 не значит успех — реальный вердикт в userErrors внутри data, и здесь он возвращается как есть, без интерпретации: поле userErrors нужно проверить самому. Ретраев для мутаций нет (повтор мог бы применить изменение дважды) — вид операции определяется разбором документа, поэтому мутация с фрагментом перед ней тоже не повторяется; THROTTLED повторяется сам после паузы. Стоимость запроса видна в cost ответа — глубокие вложенные выборки стоят дорого, а дороже 1000 очков запрос отклоняется валидатором Shopify.
| Name | Type | Req | Description |
|---|---|---|---|
| operationName | string | – | Имя операции — обязательно, если документ содержит больше одной; без него сервер GraphQL не знает, какую выполнять. |
| query | string | yes | GraphQL-документ, например "query { shop { name } }" или мутация. |
| variables | object | – | Переменные документа, объект 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.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | endCursor предыдущей страницы — продолжить с него. |
| first | integer | – | Размер страницы, 1..250. По умолчанию 20. |
| query | string | – | Строка поиска 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". Ничего не создаёт и не выключает.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | endCursor предыдущей страницы — продолжить с него. |
| first | integer | – | Размер страницы, 1..250. По умолчанию 20. |
| query | string | – | Строка поиска Shopify: "status:active", "type:code", "title:BLACKFRIDAY". |
No output schema declared.
No examples provided.
list_locations Список локаций ~96
Возвращает локации магазина (склады и точки), включая неактивные: id, название, адрес, активность, выполняет ли онлайн-заказы. Именно id локации нужен инструменту set_inventory. У большинства магазинов локаций одна-две, так что страницы по умолчанию хватает.
| Name | Type | Req | Description |
|---|---|---|---|
| first | integer | – | Размер страницы, 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 — без него они просто не приходят.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | endCursor предыдущей страницы — продолжить с него. |
| first | integer | – | Размер страницы, 1..250. По умолчанию 20. |
| query | string | – | Строка поиска 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-бакету, чем много мелких страниц.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | endCursor предыдущей страницы — продолжить с него. |
| first | integer | – | Размер страницы, 1..250. По умолчанию 20. |
| query | string | – | Строка поиска 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 выключен) или не привязана к локации.
| Name | Type | Req | Description |
|---|---|---|---|
| quantities | array | yes | Позиции и их новые абсолютные остатки. |
| reason | string | – | Причина изменения из словаря 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.
| Name | Type | Req | Description |
|---|---|---|---|
| descriptionHtml | string | – | Новое описание в HTML. |
| id | string | yes | Id товара: число или gid://shopify/Product/<id>. |
| productType | string | – | Новый тип. |
| status | string | – | ACTIVE | DRAFT | ARCHIVED. |
| tags | array | – | Полный новый список тегов (замещает старый). |
| title | string | – | Новое название. |
| vendor | string | – | Новый вендор. |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| productId | string | yes | Id товара-родителя: число или gid://shopify/Product/<id>. |
| variants | array | yes | Варианты одного товара с новыми ценами. |
No output schema declared.
No examples provided.
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.