Shopify MCP について
Shopify MCPは、書き込み権限を与えずにShopify Admin GraphQLのデータを参照したいエージェントやクライアント向けの読み取り専用MCPサーバーです。複数ストア、スキーマ確認、一括エクスポート、ShopifyQL分析に対応します。
主な機能
- 01読み取り専用GraphQLクエリ
- 02送信前のmutation拒否
- 03複数ストア設定
- 04スキーマイントロスペクション
- 05JSONL一括エクスポート
- 06ShopifyQL分析
活用シーン
- 01商品、注文、顧客記録の確認
- 02大量のストアデータのエクスポート
- 03ShopifyQL分析結果の確認
- 041つのサーバーから複数ストアへアクセス
MCP 対応
ストア一覧、Shopify Admin GraphQL APIのクエリとスキーマ確認、一括エクスポート、ShopifyQL利用のための6つのツールをMCPクライアントに公開します。GraphQLのmutationはShopifyへの送信前に拒否されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
6掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| refresh | boolean | いいえ |
詳細
Shopify MCP
Shopify Admin GraphQL API の読み取り機能全体(バージョン 2026-04)を、6 つの汎用ツールで提供する単一の MCP サーバーです。読み取り専用はクエリパーサーレベルで強制されます。ミューテーションは Shopify に到達する前に拒否され、単に実行を控えるよう促すだけではありません。マルチストアを前提に設計されており、1 つのサーバーインスタンスで複数のショップに対応できます。
Scalably が開発・保守しています。Model Context Protocol 上で動作します。ライセンス:MIT。
なぜパーサーレベルで読み取り専用にするのですか? AI エージェントに本番ストアへの書き込みアクセスを与えると、商品を削除したり、バリエーションの価格を間違えたりする事態につながりかねません。このサーバーは、モデルの適切な振る舞いを信頼するのでも、Shopify 側のスコープだけに頼るのでもなく、すべてのクエリを解析し、プロセスから送信される前にミューテーションを拒否することで、読み取り専用を強制します。本番環境のエージェントに実際に必要な安全境界です。(このパターンの詳細)
インストール
Claude Code:
claude mcp add shopify -e SHOPIFY_DOMAIN=my-store.myshopify.com -e SHOPIFY_ACCESS_TOKEN=shpat_... -- uvx scalably-shopify-mcp
Codex:
codex mcp add shopify --env SHOPIFY_DOMAIN=my-store.myshopify.com --env SHOPIFY_ACCESS_TOKEN=shpat_... -- uvx scalably-shopify-mcp
Claude Desktop:最新の GitHub リリースから shopify-mcp.mcpb をダウンロードして開きます。
セットアップ
単一ストア(最も簡単)
SHOPIFY_DOMAINまたはSHOPIFY_SHOP_DOMAIN-<shop>.myshopify.com- 認証方法 A:
SHOPIFY_ACCESS_TOKEN(旧形式のshpat_) - 認証方法 B:
SHOPIFY_CLIENT_ID+SHOPIFY_CLIENT_SECRET(Dev Dashboard のカスタムアプリ、クライアントクレデンシャル OAuth、24 時間有効なトークンを自動更新)
単一ストアはエイリアス default で登録されます。ツール呼び出しでは shop 引数を省略できます。
マルチストア(代理店向けの構成)
SHOPIFY_STORES に、エイリアスとストア設定を対応付ける JSON オブジェクトを設定します。
{
"main": {"domain": "my-store.myshopify.com", "client_id": "...", "client_secret": "..."},
"outlet": {"domain": "my-store-outlet.myshopify.com", "client_id": "...", "client_secret": "..."},
"legacy": {"domain": "legacy-store.myshopify.com", "access_token": "shpat_..."}
}
- 各ストアでは、
client_id+client_secret(Dev Dashboard OAuth)またはaccess_token(旧形式のshpat_)を使用できます。 - エイリアスは
[a-z0-9][a-z0-9_-]{0,63}です。読み込み時に小文字に正規化されます。 - トークンキャッシュはストアドメインごとに管理されます。1 つのストアでスロットリングが発生しても、ほかのストアには影響しません。
必要なスコープ(読み取り専用)
最低限必要なスコープ:read_products read_orders read_customers。
推奨する基本スコープ:read_products read_orders read_customers read_inventory read_locations read_fulfillments read_discounts read_content read_themes read_files read_markets read_metaobjects read_metaobject_definitions read_reports read_translations read_locales read_shipping。
60 日より前の注文履歴には read_all_orders を追加します。エージェントが顧客の個人情報を必要とする場合は、Dev Dashboard の Configuration で Protected customer data access を有効にしてください。
ツール(6)
| ツール | 機能 |
|---|---|
shopify_list_stores | このエージェントに設定されているすべての Shopify ストアを一覧表示します。最初に呼び出してください。 |
shopify_graphql_query | 任意の読み取り専用 GraphQL を実行します。ミューテーションはパーサーによって拒否されます。 |
shopify_graphql_introspect | スキーマイントロスペクションを実行します。カタログ全体または単一の型を指定できます。 |
shopify_bulk_query | 非同期の一括エクスポート(JSONL)を開始します。 |
shopify_bulk_poll | 一括操作のステータスを確認し、ダウンロード URL を取得します。 |
shopify_shopifyql | ShopifyQL 分析(SQL に似た構文。read_reports が必要です)。 |
一覧表示以外の各ツールでは、任意の shop 引数(エイリアスまたはドメイン)を指定できます。複数のストアが設定されている場合は必須で、ストアが 1 つだけの場合は自動的に選択されます。
対応範囲
Admin GraphQL API の読み取り機能全体に対応しています。トークンのスコープでアクセス可能なオブジェクト、フィールド、コネクションは、すべて shopify_graphql_query から利用できます。大規模なデータ(10,000 件を超えるレコード)には shopify_bulk_query を使用してください。分析には shopify_shopifyql を使用します。
設定
| 変数 | 必須 | 用途 |
|---|---|---|
SHOPIFY_DOMAIN, SHOPIFY_SHOP_DOMAIN | いずれか、または SHOPIFY_STORES | 単一ストアの管理ドメイン、<shop>.myshopify.com |
SHOPIFY_ACCESS_TOKEN | 上記を参照 | レガシーの shpat_ アクセストークン(単一ストア認証パス B) |
SHOPIFY_CLIENT_ID, SHOPIFY_CLIENT_SECRET | 上記を参照 | Dev Dashboard のカスタムアプリ認証情報(単一ストア認証パス A) |
SHOPIFY_STORES | いいえ | エイリアスをストア設定にマッピングする JSON オブジェクト。上記の単一ストア用変数より優先されます |
SHOPIFY_STORE_<ALIAS>_DOMAIN, _CLIENT_ID, _CLIENT_SECRET, _ACCESS_TOKEN | いいえ | マルチストア構成で SHOPIFY_STORES の代わりに使用できるプレフィックスキー。ストアエイリアスごとにキー一式を指定します |
SHOPIFY_REQUEST_TIMEOUT_SECONDS | いいえ | HTTP リクエストのタイムアウト(秒、デフォルトは 60) |
SHOPIFY_LOG_LEVEL | いいえ | INFO(デフォルト)または DEBUG |
読み取り専用の強制
すべてのクエリは送信前に graphql-core で解析されます。パーサーは次を拒否します。
subscriptionオペレーション(Admin API でもサポートされていません)bulkOperationCancel以外のトップレベルのmutation(実行中の一括ジョブをキャンセルするもので、ストアデータの書き込みは行いません)- 不正な GraphQL(構文エラー)
- 100KB を超えるクエリ
bulkOperationRunQuery は汎用パーサーの許可リストに含まれていません。正規の一括エクスポートは専用の shopify_bulk_query ツールを経由し、一括ミューテーションでラップする前に、内部クエリを同じ読み取り専用チェックで検証します。信頼できる情報源は一つであり、Shopify 側の検証には依存しません。
レート制限
ストアごとのコストベースのリーキーバケット(Shopify のモデル)を使用します。各レスポンスには extensions.cost.throttleStatus が含まれます。THROTTLED エラーが発生すると、サーバーは ceil((requestedQueryCost - currentlyAvailable) / restoreRate) 秒(最低 1 秒)待機し、エラーを返す前に最大 3 回再試行します。バケットはストアごとに独立しているため、あるストアのスロットリングが別のストアに影響することはありません。
返信の形式
ツールの返信は統一されたエンベロープではなく、基になる呼び出しの形式に準じます。shopify_list_stores は {alias, domain, name, currency, auth_mode} の JSON 配列を返します。GraphQL に基づく各ツール(shopify_graphql_query、shopify_graphql_introspect、shopify_bulk_query、shopify_bulk_poll、shopify_shopifyql)は、ラップされていない Shopify Admin API の生のレスポンス {"data": ..., "errors": ..., "extensions": ...} を返します。ツールレベルの失敗(不正な入力、編集済みのトランスポートエラー)では、通常のエラーが発生します。
制限
クエリサイズの上限は 100KB です。一括エクスポートでは、クエリごとにトップレベルのコネクションをちょうど 1 つ、コネクションの合計を最大 5 つ、深さを最大 2 にする必要があります。ネストされた各コネクションノードでは、エイリアスなしで id を選択する必要があります。API バージョンが 2025-10 以前の場合、ストアごとに一度に実行できる一括オペレーションは 1 つです。2026-01 以降では最大 5 つ実行できます。API バージョンのデフォルトは 2026-04 です。呼び出しごとに api_version="YYYY-MM" で上書きできます。
検証
各リリースでは、パッケージバージョン、.mcpb の sha256、およびそのリリースの基になった本番コミットを CHANGELOG.md に記載しています。CI では、プッシュごとにテストと、ビルドした wheel のクリーンインストールを実行します。
プライバシーポリシー
このコネクターは、お客様ご自身のマシン上で、お客様ご自身の Shopify 認証情報を使ってローカルで動作します。MCP クライアントと Shopify の Admin API をつなぐ、読み取り専用のシンプルなブリッジです。
- データ収集: このコネクターは個人データを収集せず、テレメトリー、分析、外部へのレポート機能も含みません。外部にデータを送信することはありません。
- データの利用: お客様がクエリする Shopify ストアのデータは、リクエストに応えるためローカルの MCP クライアントに返され、それ以外の目的には使用されません。
- データの保存: このコネクターはデータを永続的に保存しません。アクセストークンはプロセスの実行中のみメモリ上に保持され、ディスクに書き込まれることはありません。ネットワーク接続先は Shopify 自身の API(
*.myshopify.com)のみで、ドメインの許可リストによって制限されています。 - 第三者との共有: ありません。データはお客様のマシンと Shopify の間でのみやり取りされます。コネクターの作成者を含め、第三者がお客様のデータや認証情報を受け取ることはありません。
- 保持期間: プロセスの終了後、このコネクターがデータを保持することはありません。
- シークレットの取り扱い: アクセストークン、クライアントシークレット、および Shopify トークンのすべてのプレフィックスは、ログおよびエラーメッセージから伏せ字にされます。
- お問い合わせ: [email protected]
このポリシーの正式なホスト版:https://scalably.io/connector-privacy.html
ライセンス
MIT。Copyright Scalably.
詳細情報
本番環境で使える MCP サーバーと AI エージェントの構築について、scalably.io/blog で記事を公開しています。
- Python で MCP サーバーを構築する方法:本番環境で稼働するサーバーで使用している、ここで採用した読み取り専用の強制パターン
- MCP サーバーとは?:ホスト/クライアント/サーバーのモデル
- MCP Inspector:MCP サーバーをデバッグする:注意すべき、気づきにくい障害
参考資料
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。