{"name":"io.github.A1-x-Tech/mcp-shopify-admin","slug":"a1-x-tech-mcp-shopify-admin","title":"Shopify Admin MCP","description":"MCP server for the Shopify Admin API: products, orders, customers, inventory, discounts.","url":"https://mcp.market/server/a1-x-tech-mcp-shopify-admin","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"ecommerce","tags":["ecommerce"],"presence":{"score":28,"stars":0,"forks":0,"downloads_week":117,"last_push_at":"2026-11-01T12:23:21.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/A1-x-Tech/mcp-shopify-admin","website":"https://github.com/A1-x-Tech/mcp-shopify-admin#readme","version":"1.2.2","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"mcp-shopify-admin","version":"1.2.2","transport":{"type":"stdio"},"environmentVariables":[{"description":"Permanent store host, e.g. my-store.myshopify.com (a bare store name works too).","isRequired":true,"name":"SHOPIFY_STORE_DOMAIN"},{"description":"Ready-made Admin API access token (legacy apps created before 2026-01-01). Alternative to the client id/secret pair.","isSecret":true,"name":"SHOPIFY_ACCESS_TOKEN"},{"description":"Client id of a Dev Dashboard app; with the secret the server mints and refreshes its own token.","name":"SHOPIFY_CLIENT_ID"},{"description":"Client secret of that app. Treat it as a secret.","isSecret":true,"name":"SHOPIFY_CLIENT_SECRET"},{"description":"Admin API version: a quarterly YYYY-MM release or unstable.","default":"2026-01","name":"SHOPIFY_API_VERSION"},{"description":"Full http/https URL of the GraphQL endpoint, replacing host and version (e.g. a local mock).","name":"SHOPIFY_API_BASE"},{"description":"Per-request timeout in milliseconds.","default":"30000","name":"SHOPIFY_TIMEOUT_MS"},{"description":"Retries on THROTTLED/429 (always) and on 5xx / network errors for reads only.","default":"4","name":"SHOPIFY_MAX_RETRIES"},{"description":"Re-mint the token this many seconds before it expires.","default":"300","name":"SHOPIFY_TOKEN_LEEWAY_SECONDS"}]}],"tools":[{"name":"cancel_order","description":"НЕОБРАТИМО отменяет заказ. Два решения обязательны и не имеют значений по умолчанию: refund — вернуть ли деньги покупателю, restock — вернуть ли позиции на склад. notifyCustomer управляет письмом покупателю. Отмена выполняется фоновой задачей: в ответе job, а не обновлённый заказ — итог стоит проверить через get_order. Уже выданный (fulfilled) заказ Shopify отменить не даст — это придёт ошибкой us","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_basic_discount","description":"Создаёт базовую промокодную скидку: один код, процент (percentage, доля 0..1: 0.2 = −20%) ИЛИ фиксированная сумма (amount в валюте магазина) — ровно одно из двух, для всех клиентов на все товары. startsAt по умолчанию — сейчас, то есть код начинает действовать немедленно; отложенный запуск задаётся явным startsAt. usageLimit — общий лимит применений, appliesOncePerCustomer — не больше раза на клие","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_product","description":"Создаёт товар и возвращает его с дефолтным вариантом, который Shopify добавляет сам. Товар НЕ появляется на витрине: созданные через API товары не опубликованы ни в одном канале продаж, и публикация делается отдельной операцией publishablePublish (её здесь нет — только через graphql_request). Статус по умолчанию — ACTIVE, но это не публикация: status: \"DRAFT\" дополнительно помечает товар черновико","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_customer","description":"Возвращает одного клиента целиком: контакты, адреса, заметку, теги и его 10 последних заказов с суммами. Принимает числовой id или gid://shopify/Customer/<id>; клиент по email ищется через list_customers с query \"email:...\". Несуществующий клиент — это data: null, а не ошибка.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_order","description":"Возвращает один заказ целиком: позиции (до 100), суммы (итог, доставка, возвраты), адрес доставки, заметку, теги, отгрузки с трек-номерами. Принимает числовой id или gid://shopify/Order/<id> — id, не «номер» вида #1001 (номер ищется через list_orders с query \"name:#1001\"). Несуществующий заказ — это data: null, а не ошибка.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_product","description":"Возвращает один товар целиком: описание (HTML), опции, до 100 вариантов с ценами, остатками, SKU и id inventoryItem (этот id нужен инструменту set_inventory). Принимает числовой id или gid://shopify/Product/<id>. Несуществующий товар — это data: null, а не ошибка. Медиафайлы и метаполя не возвращает — за ними graphql_request.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_shop","description":"Возвращает магазин, к которому привязан сервер: название, myshopifyDomain, основной домен витрины, валюту, тариф (plan), контактный email, часовой пояс, число товаров и список локаций (id локаций нужны инструменту set_inventory). Аргументов не принимает — магазин задан в SHOPIFY_STORE_DOMAIN и не выбирается для отдельного вызова. Как и у всех инструментов здесь, в ответе есть cost: состояние cost-","write_action":false,"price_micros":0,"input_schema":null},{"name":"graphql_request","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_customers","description":"Возвращает страницу клиентов (имя, email, телефон, число заказов, потраченная сумма, город) плюс count — число клиентов под тем же фильтром. Пагинация курсорная: hasNextPage/endCursor в ответе, следующий вызов передаёт endCursor в after. query — строка поиска Shopify: \"email:ivan@example.com\", \"phone:+79001234567\", \"state:enabled\", \"created_at:>=2026-01-01\". Клиентов не создаёт и не меняет — запис","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_discounts","description":"Возвращает страницу скидок магазина — промокодных и автоматических: тип (__typename), название, статус, период действия, лимит использований, для кодовых — до 5 кодов и счётчик применений. Пагинация курсорная (hasNextPage/endCursor → after). query — строка поиска Shopify: \"status:active\", \"type:code\", \"title:BLACKFRIDAY\". Ничего не создаёт и не выключает.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_locations","description":"Возвращает локации магазина (склады и точки), включая неактивные: id, название, адрес, активность, выполняет ли онлайн-заказы. Именно id локации нужен инструменту set_inventory. У большинства магазинов локаций одна-две, так что страницы по умолчанию хватает.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_orders","description":"Возвращает страницу заказов, новые первыми (номер, дата, финансовый статус, статус выдачи, сумма, клиент) плюс count под тем же фильтром. Пагинация курсорная: hasNextPage/endCursor в ответе, следующий вызов передаёт endCursor в after. query — строка поиска Shopify: \"financial_status:pending\", \"fulfillment_status:unfulfilled\", \"created_at:>=2026-08-01\", \"email:ivan@example.com\". Нужен scope read_or","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_products","description":"Возвращает страницу товаров магазина (id, название, handle, статус, вендор, тип, теги, общий остаток, до 5 вариантов с ценами) плюс count — число товаров под тем же фильтром. Пагинация курсорная: в ответе pageInfo-поля hasNextPage и endCursor, следующий вызов передаёт endCursor в after; параметра \"номер страницы\" у Shopify нет. query — строка поиска Shopify, например \"status:active\", \"vendor:Nike ","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_inventory","description":"Устанавливает АБСОЛЮТНЫЙ доступный остаток (available) позиций на локациях — «стало N», не «изменить на N»: повторный вызов с теми же числами ничего не меняет. Каждый элемент quantities несёт inventoryItemId (id inventoryItem варианта — он в ответе get_product, это НЕ id варианта), locationId (из list_locations) и quantity >= 0. reason — из закрытого словаря Shopify, по умолчанию correction. Истор","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_product","description":"Перезаписывает переданные поля товара (название, описание, вендор, тип, теги, статус) и не трогает остальные. tags замещают весь список тегов, а не добавляются к нему. Цены и остатки здесь не меняются — цены через update_variant, остатки через set_inventory. status: DRAFT снимает товар с витрины, ARCHIVED архивирует (обратимо — вернуть можно, снова передав ACTIVE). Провал приходит как ошибка с use","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_variant","description":"Задаёт цену и/или зачёркнутую цену (compareAtPrice) вариантам одного товара — до 250 вариантов за вызов, каждый элемент variants несёт id варианта и новые значения. Суммы — десятичные строки в валюте магазина (\"1999.00\"); compareAtPrice: null убирает зачёркнутую цену. Больше ничего в варианте не меняет (SKU, штрихкод, опции — через graphql_request). Требуется id товара-родителя: он есть в ответах ","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-11-01T13:28:06.502Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-01T13:28:06.470Z","components":{"code":{"score":25,"max":25,"notes":["14 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"mcp-shopify-admin","version":"1.2.2","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-11-01T12:21:07.216Z","repositoryUrl":"git+https://github.com/A1-x-Tech/mcp-shopify-admin.git","weeklyDownloads":117}],"repo":{"found":true,"owner":"A1-x-Tech","repo":"mcp-shopify-admin","archived":false,"pushedAt":"2026-11-01T12:23:21Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/313355570?v=4","ownerCreatedAt":"2026-08-05T09:29:33Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/313355570?v=4&s=128","source":"registry","width":128,"height":128},"presence":{"stars":0,"forks":0,"downloadsWeek":117,"license":"MIT","lastPushAt":"2026-11-01T12:23:21.000Z","score":28}}}},"grade_history":[],"reviews":[]}