EC-CUBE 4用のMCP(Model Context Protocol)サーバーです。 EC-CUBEのGraphQL APIを通じて、ClaudeなどのAIアシスタントから商品の検索・在庫確認・在庫更新ができるようになります。
- EC-CUBE 4.3以上
- Web APIプラグイン(Api42)インストール済み
- Node.js 18以上
- Claude Desktop または Claude Code(どちらか一方)
- 最新リリース からランチャーをダウンロード
- Mac:
launcher-mac.zipを展開してeccube-mcp-setup.commandをダブルクリック - Windows:
launcher-windows.zipを展開してeccube-mcp-setup.batをダブルクリック
- Mac:
- ブラウザが自動で開きます。EC-CUBEのURLとアクセストークンを入力して「Claudeに登録する」ボタンを押すだけです
- Claudeを再起動すると利用できるようになります
Mac の注意: 初回起動時にセキュリティ警告が出る場合は、右クリック→「開く」を選択してください。
Node.js が必要です: ランチャーを起動するには Node.js 18以上 がインストールされている必要があります。未インストールの場合はアラートが表示されます。
リリースから配布パッケージを取得する場合:
- 最新リリース から
eccube-mcp-server-vX.X.X.zipをダウンロードして展開 - 展開したディレクトリで以下を実行:
npm install --omit=dev # 実行に必要な依存パッケージのみインストール
npm run setupリポジトリをクローンする場合:
git clone https://github.com/kurozumi/eccube-mcp-server.git
cd eccube-mcp-server
npm install
npm run setupEC-CUBE管理画面で 設定 → API管理 → OAuth管理 からOAuthクライアントを登録し、アクセストークンを取得してください。
登録後、Claude DesktopまたはClaude Codeを再起動するとEC-CUBEが利用できるようになります。
| ツール | 説明 |
|---|---|
search_products |
キーワード(商品名・商品コード)で商品を検索。価格・在庫情報も取得 |
check_stock |
商品名または商品コードを指定して在庫数を確認 |
update_stock |
商品規格コードを指定して在庫数を更新。在庫無制限の設定も可能 |
analyze_sales |
指定期間の売上を日次・月次で集計。注文件数・売上合計・平均注文金額を取得 |
get_sales_ranking |
指定期間の売れ筋商品を販売数量・売上金額でランキング表示 |
~/.eccube-mcp/custom-tools.json にツール定義を記述するだけで、独自の集計ツールを MCP に追加できます。ファイルが存在しない場合はエラーなく通常起動します。
定義ファイル: ~/.eccube-mcp/custom-tools.json
{
"tools": [
{
"name": "get_monthly_revenue",
"description": "月別売上を集計",
"query": "{ orders { id totalPrice } }",
"inputSchema": {
"type": "object",
"properties": {
"from": { "type": "string", "description": "開始日(YYYY-MM-DD)" },
"to": { "type": "string", "description": "終了日(YYYY-MM-DD)" }
},
"required": ["from", "to"]
}
}
]
}フィールド一覧:
| フィールド | 必須 | 説明 |
|---|---|---|
name |
Yes | ツール名 |
description |
Yes | ツールの説明。Claude がツールを選択する際に参照される |
query |
Yes | 実行する GraphQL クエリ |
inputSchema |
No | 入力パラメーターのスキーマ定義 |
inputSchema.properties の各フィールドには以下のキーを指定できます:
| キー | 説明 |
|---|---|
type |
型(string、number など) |
description |
Claude がパラメーターの意味を理解して適切な値を渡してくれる。具体的に書くほど精度が上がる |
Claudeは複数のMCPサーバーやツールを同時に持っていることがあります。サーバー名を指定しない場合、どのシステムへの操作か曖昧になりClaudeが確認を求めることがあります。設定時に登録したサーバー名(デフォルトは eccube)を会話の冒頭に含めると、迷わずEC-CUBEを操作してもらえます。
# 曖昧な例(どのシステムへの操作か不明なため確認が入ることがある)
「商品一覧を表示して」
「在庫を確認して」
# 明確な例(サーバー名 eccube を先頭に付ける)
「eccube の商品一覧を表示して」
「eccube で在庫が10個以下の商品を教えて」
「eccube の商品コードABC-001の在庫を50個に更新して」
「EC-CUBEで〜」と明示する方法も同様に有効です。
Claudeに以下のような指示ができます:
- 「eccube で在庫が10個以下の商品を教えて」
- 「eccube で〇〇という商品の在庫を確認して」
- 「eccube の商品コードABC-001の在庫を50個に更新して」
- 「eccube で△△を検索して価格と在庫を一覧で見せて」
- 「eccube で先月の売上を月次で集計して」
- 「eccube で今月の売れ筋商品トップ10を売上順で教えて」
本番環境とステージング環境など、複数のEC-CUBEを登録して使い分けることができます。
セットアップ画面の「サーバー名」に区別できる名前を入力して、それぞれ登録します。登録済みのサーバーはセットアップ画面上部に一覧表示されるので、名前を忘れても確認できます。
| サーバー名 | 用途 |
|---|---|
eccube-production |
本番環境 |
eccube-staging |
ステージング環境 |
サーバー名をそのまま会話で伝えるだけで、Claudeが対応するEC-CUBEを使い分けます。
「eccube-staging の在庫を確認して」
→ ステージング環境のEC-CUBEに接続して在庫を確認
「eccube-production の商品コードABC-001の在庫を50個に更新して」
→ 本番環境のEC-CUBEに接続して在庫を更新
サーバー名を省略した場合は、Claudeが登録されているEC-CUBEを自動的に選択します。
| 変数名 | 必須 | 説明 |
|---|---|---|
ECCUBE_API_URL |
Yes | EC-CUBEサイトのURL(例: https://your-eccube-site.com) |
ECCUBE_ACCESS_TOKEN |
Yes | Web APIプラグインで発行したアクセストークン |
ECCUBE_REFRESH_TOKEN |
No | アクセストークン自動更新用のリフレッシュトークン |
ECCUBE_CLIENT_ID |
No | OAuth クライアントID |
ECCUBE_CLIENT_SECRET |
No | OAuth クライアントシークレット |
ECCUBE_REFRESH_TOKEN・ECCUBE_CLIENT_ID・ECCUBE_CLIENT_SECRET の3つをすべて設定すると、アクセストークンの有効期限(1時間)が切れたときに自動でトークンを更新します。
GUIセットアップを使わずに手動で設定することもできます。
~/.claude.json を編集:
{
"mcpServers": {
"eccube": {
"type": "stdio",
"command": "node",
"args": ["/path/to/eccube-mcp-server/build/index.js"],
"env": {
"ECCUBE_API_URL": "https://your-eccube-site.com",
"ECCUBE_ACCESS_TOKEN": "your-access-token",
"ECCUBE_REFRESH_TOKEN": "your-refresh-token",
"ECCUBE_CLIENT_ID": "your-client-id",
"ECCUBE_CLIENT_SECRET": "your-client-secret"
}
}
}
}macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"eccube": {
"command": "node",
"args": ["/path/to/eccube-mcp-server/build/index.js"],
"env": {
"ECCUBE_API_URL": "https://your-eccube-site.com",
"ECCUBE_ACCESS_TOKEN": "your-access-token",
"ECCUBE_REFRESH_TOKEN": "your-refresh-token",
"ECCUBE_CLIENT_ID": "your-client-id",
"ECCUBE_CLIENT_SECRET": "your-client-secret"
}
}
}
}リフレッシュトークンを使わない場合は ECCUBE_REFRESH_TOKEN・ECCUBE_CLIENT_ID・ECCUBE_CLIENT_SECRET の3行を省略できます。
- 在庫更新は即座にデータベースに反映され、取り消せません。 実行前に必ず内容を確認してください。
- アクセストークンの有効期限は1時間です。リフレッシュトークンを設定すると自動更新されます。
- 顧客・受注情報へのアクセスは個人情報保護の観点から実装していません。
EC-CUBEをローカル環境でHTTPS(自己署名証明書)で運用している場合、Node.jsの fetch はデフォルトでTLSエラーになります。
推奨: 自己署名証明書を信頼させる
# 環境変数に証明書パスを設定する
NODE_EXTRA_CA_CERTS=/path/to/your/cert.pem node build/index.jsClaude Code の設定に追記する場合:
"env": {
"ECCUBE_API_URL": "https://your-store.example.com",
"ECCUBE_ACCESS_TOKEN": "your-access-token",
"NODE_EXTRA_CA_CERTS": "/path/to/your/cert.pem"
}注意:
NODE_TLS_REJECT_UNAUTHORIZED=0は TLS 検証を完全に無効化するため、中間者攻撃(MITM)のリスクがあります。本番環境では使用しないでください。
GPL-2.0
Akira Kurozumi info@a-zumi.net