Shopify MCP Server について
Shopify MCP Server は、GraphQL Admin API を通じて Shopify ストアのデータを操作する TypeScript 製の MCP サーバーです。Claude や Cursor などの MCP ホストから商品、顧客、注文を扱いたい開発者に向けたものです。
主な機能
- 01商品、バリアント、オプションの作成・取得・更新・削除
- 02顧客管理と住所の操作
- 03注文の検索、キャンセル、返金、フルフィルメント
- 04メタフィールド、在庫、タグの管理
- 05カーソルページネーションと Shopify クエリ構文によるフィルタ
- 06クライアントクレデンシャルと静的アクセストークンの認証
活用シーン
- 01AI アシスタントから商品を一括作成・更新
- 02MCP ホストからの注文の確認と処理
- 03タグや累計購入額による顧客の絞り込み
MCP 対応
本プロジェクトは MCP サーバーであり、Claude や Cursor などの MCP クライアントに対して、Shopify ストアのデータを読み書きする 31 個のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Shopify MCP サーバー
(気に入ったらぜひスターを付けてください!)
Shopify API 用の MCP サーバーです。GraphQL API を通じてストアデータを操作できます。商品、顧客、注文などを管理するツールを提供します。
📦 パッケージ名:shopify-mcp
🚀 コマンド:shopify-mcp(shopify-mcp-serverではありません)
機能
- 商品管理:商品、バリエーション、オプションの完全な CRUD(8 個のツール)
- 顧客管理:完全な CRUD、統合、住所管理(8 個のツール)
- 注文管理:スマート検索、キャンセル、クローズ/オープン、支払い済みとしてマーク、フルフィルメント、返金(10 個のツール)
- メタフィールド管理:あらゆるリソースのメタフィールドの取得、設定、削除(3 個のツール)
- 在庫管理:ロケーションの在庫数を絶対値で設定(1 個のツール)
- タグ管理:タグ付け可能なあらゆるリソースのタグの追加/削除(1 個のツール)
- ページネーションと並べ替え:すべてのリストクエリでカーソルベースのページネーションとソートキーに対応
- 高度なフィルタリング:すべてのリストエンドポイントで Shopify のクエリ構文をそのまま使用可能
- GraphQL 統合:Shopify の GraphQL Admin API(2026-01)と直接連携
- 包括的なエラー処理:API と認証の問題に関する明確なエラーメッセージ
前提条件
- Node.js(バージョン 18 以降)
- カスタムアプリを設定した Shopify ストア(以下のセットアップ手順を参照)
セットアップ
認証
このサーバーは、次の 2 つの認証方法に対応しています。
オプション 1:クライアント認証情報(Dev Dashboard アプリ、2026 年 1 月以降)
2026 年 1 月 1 日以降、新しい Shopify アプリは Dev Dashboard で作成され、静的アクセストークンの代わりに OAuth クライアント認証情報を使用します。
- Shopify 管理画面で、設定 > アプリと販売チャネルに移動します
- アプリを開発 > dev dashboard でアプリを作成をクリックします
- 新しいアプリを作成し、Admin API スコープを設定します:
read_products、write_productsread_customers、write_customersread_orders、write_orders
- ストアにアプリをインストールします
- アプリの API 認証情報からクライアント IDとクライアントシークレットをコピーします
サーバーが自動的にこれらをアクセストークンと交換し、有効期限が切れる前に更新します(トークンの有効期間は約 24 時間です)。
オプション 2:静的アクセストークン(レガシーアプリ)
静的な shpat_ アクセストークンを使用する既存のカスタムアプリをお持ちの場合は、引き続きそのトークンを直接使用できます。
Claude Desktop での使用
クライアント認証情報(推奨):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"shopify-mcp",
"--clientId",
"<YOUR_CLIENT_ID>",
"--clientSecret",
"<YOUR_CLIENT_SECRET>",
"--domain",
"<YOUR_SHOP>.myshopify.com"
]
}
}
}
静的アクセストークン(レガシー):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"shopify-mcp",
"--accessToken",
"<YOUR_ACCESS_TOKEN>",
"--domain",
"<YOUR_SHOP>.myshopify.com"
]
}
}
}
Claude Desktop の設定ファイルの場所:
- MacOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json
Claude Code での使用
クライアント認証情報:
claude mcp add shopify -- npx shopify-mcp \
--clientId YOUR_CLIENT_ID \
--clientSecret YOUR_CLIENT_SECRET \
--domain your-store.myshopify.com
静的アクセストークン(レガシー):
claude mcp add shopify -- npx shopify-mcp \
--accessToken YOUR_ACCESS_TOKEN \
--domain your-store.myshopify.com
代替方法:環境変数を使用してローカルで実行
コマンドライン引数の代わりに環境変数を使用する場合:
-
Shopify の認証情報を記載した
.envファイルを作成します:クライアント認証情報:
SHOPIFY_CLIENT_ID=your_client_id SHOPIFY_CLIENT_SECRET=your_client_secret MYSHOPIFY_DOMAIN=your-store.myshopify.com静的アクセストークン(レガシー):
SHOPIFY_ACCESS_TOKEN=your_access_token MYSHOPIFY_DOMAIN=your-store.myshopify.com -
npx でサーバーを実行します:
npx shopify-mcp
直接インストール(任意)
パッケージをグローバルにインストールする場合:
npm install -g shopify-mcp
続いて実行します:
shopify-mcp --clientId=<ID> --clientSecret=<SECRET> --domain=<YOUR_SHOP>.myshopify.com
その他のオプション
--apiVersion:Shopify API のバージョンを指定します(デフォルト:2026-01)。SHOPIFY_API_VERSION環境変数でも設定できます。
**⚠️ 重要:**コマンドライン引数を使用しているときに「SHOPIFY_ACCESS_TOKEN environment variable is required」というエラーが表示される場合、別のパッケージがインストールされている可能性があります。shopify-mcp-serverではなく、shopify-mcpを使用していることを確認してください。
利用可能なツール(31)
ページネーション、並べ替え、フィルタリング
すべてのリストクエリツール(get-products、get-customers、get-orders、get-customer-orders)は、次の機能をサポートしています。
- カーソルベースのページネーション:
after/before(カーソル文字列)。レスポンスにはpageInfo(hasNextPage、hasPreviousPage、startCursor、endCursor)が含まれます。 - 並べ替え:
sortKey(各リソース固有の列挙型)とreverse(ブール値) - 高度なフィルタリング:Shopify クエリ構文を受け付ける
queryまたはsearchQueryパラメーター
商品管理(8 個のツール)
-
get-products- ページネーションと並べ替えを使って、すべての商品を取得するか、タイトルで検索します
- 入力:
searchTitle(文字列、任意):タイトルで商品を絞り込みます(title:*...*でラップします)limit(数値、デフォルト:10):返す商品の最大数query(文字列、任意):Shopify クエリ文字列(例:"status:active vendor:Nike tag:sale")sortKey(文字列、任意):CREATED_AT、ID、INVENTORY_TOTAL、PRODUCT_TYPE、PUBLISHED_AT、RELEVANCE、TITLE、UPDATED_AT、VENDORのいずれかreverse(ブール値、任意):並べ替え順を逆にしますafter/before(文字列、任意):ページネーションカーソル
-
get-product-by-id- SEO、オプション、メディア、バリエーション、コレクションなどの詳細情報を含め、IDで特定の商品を取得します
- 入力:
productId(文字列、必須):Shopify 商品 GID
- 返される値:
productType、descriptionHtml、seo、options(optionValuesを含む)、media(画像)、variants、collections、tags、vendor、価格帯、在庫
-
create-product- 新しい商品を作成します。
productOptionsを使用すると、Shopify はすべてのオプション値を登録しますが、デフォルトのバリエーションを 1 つだけ作成します(各オプションの最初の値、価格は $0)。その後、strategy: REMOVE_STANDALONE_VARIANTを指定してmanage-product-variantsを使用し、価格を設定した実際のバリエーションをすべて作成してください。 - 入力:
title(文字列、必須):商品のタイトルdescriptionHtml(文字列、任意):HTML を含む説明handle(文字列、任意):URL スラッグ。省略した場合はタイトルから自動生成されますvendor(文字列、任意):商品のベンダーproductType(文字列、任意):商品のタイプtags(文字列の配列、任意):商品タグstatus(文字列、任意):"ACTIVE"、"DRAFT"、または"ARCHIVED"。デフォルトは"DRAFT"seo(オブジェクト、任意):検索エンジン向けの{ title, description }metafields(オブジェクトの配列、任意):カスタムメタフィールド(namespace、key、value、type)productOptions(オブジェクトの配列、任意):インラインで作成するオプション。例:[{ name: "Size", values: [{ name: "S" }, { name: "M" }] }]。最大 3 個のオプションを指定できます。collectionsToJoin(文字列の配列、任意):商品を追加するコレクション GID
- 新しい商品を作成します。
-
update-product- 既存商品のフィールドを更新します
- 入力:
id(文字列、必須):Shopify 商品 GIDtitle(文字列、任意):新しいタイトルdescriptionHtml(文字列、任意):新しい説明handle(文字列、任意):新しい URL スラッグvendor(文字列、任意):新しいベンダーproductType(文字列、任意):新しい商品タイプtags(文字列の配列、任意):新しいタグ(既存のタグを上書きします)status(文字列、任意):"ACTIVE"、"DRAFT"、または"ARCHIVED"seo(オブジェクト、任意):検索エンジン向けの{ title, description }metafields(オブジェクトの配列、任意):設定または更新するメタフィールドcollectionsToJoin(文字列の配列、任意):商品を追加するコレクション GIDcollectionsToLeave(文字列の配列、任意):商品を削除するコレクション GIDredirectNewHandle(ブール値、任意):true の場合、古いハンドルから新しいハンドルへリダイレクトします
-
delete-product- 商品を削除します
- 入力:
id(文字列、必須):Shopify 商品 GID
-
manage-product-options- 商品オプション(サイズ、カラーなど)を作成、更新、または削除します
- 入力:
productId(文字列、必須):Shopify 商品の GIDaction(文字列、必須):"create"、"update"、または"delete"variantStrategy(文字列、任意):"LEAVE_AS_IS"(デフォルト)または"CREATE"— オプションの追加時に新しいバリアントの組み合わせを生成するかどうかを制御しますaction: "create"の場合:options(配列、必須):作成するオプション。例:[{ name: "Size", values: ["S", "M", "L"] }]
action: "update"の場合:optionId(文字列、必須):更新するオプションの GIDname(文字列、任意):オプションの新しい名前position(数値、任意):新しい位置valuesToAdd(文字列の配列、任意):追加する値valuesToDelete(文字列の配列、任意):削除する値の GID
action: "delete"の場合:optionIds(文字列の配列、必須):削除するオプションの GID
-
manage-product-variants- 商品のバリアントを一括作成または更新します
- 入力:
productId(文字列、必須):Shopify 商品の GIDstrategy(文字列、任意):作成時のデフォルトバリアントの処理方法です。"DEFAULT"(「Default Title」を自動的に削除)、"REMOVE_STANDALONE_VARIANT"(細かく制御する場合に推奨)、または"PRESERVE_STANDALONE_VARIANT"variants(配列、必須):作成または更新するバリアント。各バリアントには以下を指定します:id(文字列、任意):更新するバリアントの GID。新規作成する場合は省略しますprice(文字列、任意):価格。例:"49.00"compareAtPrice(文字列、任意):割引を表示するための比較価格sku(文字列、任意):SKU(inventoryItem.skuにマッピングされます)tracked(ブール値、任意):在庫を追跡するかどうか。プリント・オン・デマンドの場合はfalseに設定しますtaxable(ブール値、任意):バリアントが課税対象かどうかbarcode(文字列、任意):バーコードweight(数値、任意):バリアントの重量weightUnit(文字列、任意):"GRAMS"、"KILOGRAMS"、"OUNCES"、または"POUNDS"optionValues(配列、任意):オプションの値。例:[{ optionName: "Size", name: "A4" }]
-
delete-product-variants- 商品から1つ以上のバリアントを削除します
- 入力:
productId(文字列、必須):Shopify 商品の GIDvariantIds(文字列の配列、必須):削除するバリアントの GID
顧客管理(8 個のツール)
-
get-customers- 検索、ページネーション、並べ替えを使って顧客を一覧表示します
- 入力:
searchQuery(文字列、任意):自由形式のテキスト、または Shopify のクエリー構文(例:"country:US tag:vip orders_count:>5")limit(数値、デフォルト:10):返す顧客の最大数sortKey(文字列、任意):CREATED_AT、ID、LAST_UPDATE、LOCATION、NAME、ORDERS_COUNT、RELEVANCE、TOTAL_SPENT、UPDATED_ATのいずれかreverse(ブール値、任意):並べ替え順を逆にしますafter/before(文字列、任意):ページネーションカーソル
-
get-customer-by-id- ID を指定して、詳細情報を含む単一の顧客を取得します
- 入力:
id(文字列、必須):Shopify の顧客 ID(数値のみ、例:"6276879810626")
- 戻り値:名前、メールアドレス、電話番号、住所、タグ、メモ、免税ステータス、利用金額、注文数、メタフィールド
-
create-customer- 新しい顧客を作成します
- 入力:
firstName(文字列、任意):顧客の名lastName(文字列、任意):顧客の姓email(文字列、任意):顧客のメールアドレスphone(文字列、任意):顧客の電話番号tags(文字列の配列、任意):適用するタグnote(文字列、任意):顧客に関するメモtaxExempt(ブール値、任意):顧客が免税対象かどうかmetafields(オブジェクトの配列、任意):カスタムメタフィールド(namespace、key、value、type)addresses(オブジェクトの配列、任意):顧客の住所(address1、address2、city、provinceCode、zip、country、phone)
-
update-customer- 顧客情報を更新します
- 入力:
id(文字列、必須):Shopify の顧客 ID(数値のみ、例:"6276879810626")firstName(文字列、任意):顧客の名lastName(文字列、任意):顧客の姓email(文字列、任意):顧客のメールアドレスphone(文字列、任意):顧客の電話番号tags(文字列の配列、任意):顧客に適用するタグnote(文字列、任意):顧客に関するメモtaxExempt(ブール値、任意):顧客が免税対象かどうかemailMarketingConsent(オブジェクト、任意):メールマーケティングの同意設定marketingState(文字列、必須):"NOT_SUBSCRIBED"、"SUBSCRIBED"、"UNSUBSCRIBED"、または"PENDING"consentUpdatedAt(文字列、任意):ISO 8601 タイムスタンプmarketingOptInLevel(文字列、任意):"SINGLE_OPT_IN"、"CONFIRMED_OPT_IN"、または"UNKNOWN"
metafields(オブジェクトの配列、任意):顧客のメタフィールド
-
delete-customer- 顧客を削除します
- 入力:
id(文字列、必須):Shopify の顧客 ID(数値のみ、例:"6276879810626")
-
customer-merge- 2 件の顧客レコードを 1 件に統合します
- 入力:
customerOneId(文字列、必須):1 人目の顧客の GIDcustomerTwoId(文字列、必須):2 人目の顧客の GIDoverrideFields(オブジェクト、任意):どちらの顧客のフィールドを保持するかを指定して上書きします(firstName、lastName、email、phone、defaultAddress、note、tags)
-
manage-customer-address- 顧客の送付先住所を作成、更新、または削除します
- 入力:
customerId(文字列、必須):顧客の GIDaction(文字列、必須):"create"、"update"、または"delete"addressId(文字列、任意):住所の GID(update/delete の場合は必須)address(オブジェクト、任意):住所のフィールド(create/update の場合は必須):address1、address2、city、company、countryCode、firstName、lastName、phone、provinceCode、zipsetAsDefault(ブール値、任意):顧客のデフォルト住所に設定します
注文管理(10 個のツール)
-
get-orders- フィルタリング、ページネーション、並べ替えを使って注文を取得します
- 入力:
status(文字列、任意):"any"、"open"、"closed"、または"cancelled"。デフォルトは"any"limit(数値、デフォルト:10):返す注文の最大数query(文字列、任意):Shopify の生のクエリ文字列(例:"financial_status:paid fulfillment_status:shipped tag:rush")sortKey(文字列、任意):CREATED_AT、ORDER_NUMBER、TOTAL_PRICE、FINANCIAL_STATUS、FULFILLMENT_STATUS、UPDATED_AT、CUSTOMER_NAME、PROCESSED_AT、ID、RELEVANCEのいずれかreverse(ブール値、任意):並べ替え順を逆にしますafter/before(文字列、任意):ページネーションカーソル
-
get-order-by-id- スマート検索で特定の注文を ID から取得します。注文名(
#77235または77235)、数値 ID(8054938337547)、完全な GID(gid://shopify/Order/...)を指定できます - 入力:
orderId(文字列、必須):注文名、数値 ID、または完全な GID
- 返される情報:価格、顧客、配送先/請求先住所、明細項目、タグ、メモ、メタフィールド、キャンセル理由、返品状況、割引コード、PO 番号、タイムスタンプ
- スマート検索で特定の注文を ID から取得します。注文名(
-
update-order- 既存の注文を更新します
- 入力:
id(文字列、必須):Shopify の注文 GIDtags(文字列の配列、任意):注文に付ける新しいタグemail(文字列、任意):注文の顧客メールアドレスを更新しますnote(文字列、任意):注文メモphone(文字列、任意):注文の電話番号poNumber(文字列、任意):発注書番号customAttributes(オブジェクトの配列、任意):カスタムのキーと値の属性metafields(オブジェクトの配列、任意):注文のメタフィールドshippingAddress(オブジェクト、任意):配送先住所のフィールド
-
get-customer-orders- ページネーションと並べ替えを使って特定の顧客の注文を取得します
- 入力:
customerId(文字列、必須):Shopify の顧客 ID(数値のみ。例:"6276879810626")limit(数値、デフォルト:10):返す注文の最大数sortKey(文字列、任意):get-ordersと同じ並べ替えキーreverse(ブール値、任意):並べ替え順を逆にしますafter/before(文字列、任意):ページネーションカーソル
-
order-cancel- 返金、在庫の再入庫、顧客への通知を指定して注文をキャンセルします。取り消しできません。
- 入力:
orderId(文字列、必須):注文 GIDreason(文字列、必須):"CUSTOMER"、"DECLINED"、"FRAUD"、"INVENTORY"、"OTHER"、または"STAFF"restock(ブール値、必須):在庫を再入庫するかどうかnotifyCustomer(ブール値、デフォルト:false):顧客に通知しますstaffNote(文字列、任意):内部メモrefund(ブール値、任意):元の支払い方法に返金します
-
order-close-open- 注文をクローズまたは再オープンします
- 入力:
orderId(文字列、必須):注文 GIDaction(文字列、必須):"close"または"open"
-
order-mark-as-paid- 注文を支払い済みにします(手動/オフラインでの支払い用)
- 入力:
orderId(文字列、必須):注文 GID
-
create-fulfillment- フルフィルメントを作成し(商品を発送済みにし)、必要に応じて追跡情報を設定します
- 入力:
lineItemsByFulfillmentOrder(配列、必須):フルフィルメント対象のフルフィルメント注文と明細項目trackingInfo(オブジェクト、任意):追跡情報{ number, url, company }notifyCustomer(ブール値、デフォルト:false):配送通知を送信します
-
refund-create- オプションで在庫を戻し、全額または一部を返金します
- 入力:
orderId(文字列、必須):注文の GIDrefundLineItems(配列、任意):返金する明細。lineItemId、quantity、restockType(CANCEL/RETURN/NO_RESTOCK)、locationIdを指定しますshipping(オブジェクト、任意):送料の返金{ amount, fullRefund }note(文字列、任意):返金に関するメモnotify(ブール値、任意):返金通知を送信します
-
create-draft-order- 電話/チャットでの販売、請求書の発行、または卸売向けに下書き注文を作成します
- 入力:
lineItems(配列、必須):商品バリエーション(variantId)またはカスタム商品(title+ 価格)。最大 499 件customerId(文字列、任意):顧客の GIDemail、phone、note、tags、poNumber(任意)shippingAddress、billingAddress(オブジェクト、任意)appliedDiscount(オブジェクト、任意):注文単位の割引{ title, value, valueType }
下書き注文の管理(1 ツール)
-
complete-draft-order- 下書き注文を確定し、実際の注文に変換します
- 入力:
draftOrderId(文字列、必須):下書き注文の GIDpaymentGatewayId(文字列、任意):決済ゲートウェイの GID
メタフィールドの管理(3 ツール)
-
get-metafields- Shopify の任意のリソース(商品、注文、顧客、バリエーション、コレクションなど)のメタフィールドを取得します
- 入力:
ownerId(文字列、必須):任意のリソースの GIDnamespace(文字列、任意):名前空間で絞り込みますfirst(数値、デフォルト:25):返すメタフィールドの数after(文字列、任意):ページネーションカーソル
-
set-metafields- Shopify の任意のリソースにメタフィールドを設定します。最大 25 件のメタフィールドをアトミックに作成または更新します
- 入力:
metafields(配列、必須):設定するメタフィールド。各項目にownerId、key、valueと、任意でnamespace、typeを指定します
-
delete-metafields- Shopify の任意のリソースからメタフィールドを削除します
- 入力:
metafields(配列、必須):削除するメタフィールド。各項目にownerId、namespace、keyを指定します
在庫の管理(1 ツール)
-
inventory-set-quantities- 特定のロケーションにある商品の在庫数を指定した絶対値に設定します
- 入力:
reason(文字列、必須):変更理由(例:"correction"、"cycle_count_available")name(文字列、必須):"available"または"on_hand"quantities(配列、必須):inventoryItemId、locationId、quantityを指定した商品
タグの管理(1 ツール)
-
manage-tags- タグを付けられる任意のリソース(注文、商品、顧客、下書き注文、記事)にタグを追加または削除します
- 入力:
id(文字列、必須):リソースの GIDtags(文字列の配列、必須):追加または削除するタグaction(文字列、必須):"add"または"remove"
注文クエリのフィルターリファレンス
get-orders ツールの query パラメーターは、Shopify の検索構文に対応しています:
| フィルター | 例 |
|---|---|
name | name:#77235 |
created_at | created_at:>2024-01-01 または created_at:2024-01-01..2024-03-31 |
updated_at | updated_at:>2024-06-01 |
financial_status | financial_status:paid |
fulfillment_status | fulfillment_status:shipped |
status | status:open |
email | email:[email protected] |
tag / tag_not | tag:vip tag_not:wholesale |
discount_code | discount_code:SUMMER20 |
sku | sku:PROD-001 |
risk_level | risk_level:high |
gateway | gateway:shopify_payments |
test | test:true |
デバッグ
問題が発生した場合は、Claude Desktop の MCP ログを確認してください:
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。