Cisco Meraki について
Cisco Meraki は、AI アシスタントから Meraki Dashboard の組織、ネットワーク、デバイス、無線、スイッチ、アプライアンスに構造化アクセスする MCP サーバーです。既定で読み取り専用となり、書き込みや影響の大きい操作に制限を設けています。
主な機能
- 01組織、ネットワーク、デバイスの管理
- 02クライアントと無線情報の照会
- 03スイッチとアプライアンスの操作
- 04読み取り専用の既定値と書き込み制御
- 05未対応 API エンドポイントへの生リクエスト
活用シーン
- 01組織やネットワークのデバイス状態の確認
- 02無線、スイッチ、クライアント情報の調査
- 03明示的な制限の下での設定変更
MCP 対応
stdio または HTTP 経由で MCP クライアントに Meraki Dashboard のツールを公開します。ナビゲーション、状態確認、デバイスカードも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e MERAKI_API_KEY -e MERAKI_ORG_ID -e MERAKI_BASE_URL -e READ_ONLY_MODE -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/meraki-mcp:v1.1.12MERAKI_API_KEYシークレットCisco Meraki Dashboard API keyMERAKI_ORG_IDDefault Meraki organization ID (optional)MERAKI_BASE_URLOverride the Meraki API base URL (optional)READ_ONLY_MODESafety switch. When true (the default), all write operations are blocked. Set to false to enable writes.MCP_TRANSPORTTransport mode for the server. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.AUTH_MODEシークレットCredential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.LOG_LEVELLog verbosity: debug, info, warn, errorローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/wyre-ai/meraki-mcp:v1.1.12stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Meraki MCP サーバー
Model Context Protocol(MCP) サーバーです。AI アシスタントに、Cisco Meraki Dashboard(組織、ネットワーク、デバイス、クライアント、ワイヤレス、スイッチング、アプライアンスの各種操作)への構造化されたアクセスを提供します。
注記: このプロジェクトは Wyre Technology がメンテナンスしています。
クイックスタート
Claude Code(CLI):
claude mcp add meraki-mcp \
-e MERAKI_API_KEY=your-api-key \
-e MERAKI_ORG_ID=your-org-id \
-- npx -y github:WYRE-AI/meraki-mcp
Docker とソースからのインストール方法については、インストールをご覧ください。
機能
- 🔌 MCP プロトコル準拠:stdio および HTTP トランスポート経由の MCP ツールを完全にサポート
- 🌐 ネットワーク全般をカバー:組織、ネットワーク、デバイス、クライアント、ワイヤレス、スイッチング、アプライアンス(MX)の各種操作に対応するツール
- 🔍 階層をフラット化したナビゲーション:
meraki_navigateとmeraki_statusは状態を保持しない探索用ツールです。すべてのツールをいつでも呼び出せます - 🛟 デフォルトで安全:読み取り専用モードはデフォルトで ON です。書き込み操作は制限され、破壊的な操作には明示的な確認が必要です
- 🖼️ インタラクティブなデバイスカード(MCP Apps):
meraki_devices_getは MCP Apps ホスト(SEP-1865)で読み取り専用のインタラクティブカードとして表示されます。デフォルトではニュートラルな外観で、window.__BRAND__の挿入またはMCP_BRAND_*環境変数でブランド設定できます - 🧰 網羅されていないエンドポイントへの対応:
meraki_raw_requestを使うと、厳選されたツールでカバーされていない Meraki v1 エンドポイントにもアクセスできます - 🐳 Docker 対応:HTTP トランスポートとヘルスチェックを備えたコンテナーデプロイ
- 📊 構造化ログ:ログレベルを設定可能
インストール
オプション 1:Docker
イメージはコンテナー内で 0.0.0.0 をリッスンし、AUTH_MODE=gateway を設定します。ポートをループバックで公開し、サービス間シークレットを渡してください。ゲートウェイモードでは、リクエストごとに X-Meraki-Api-Key ヘッダーで API キーを渡します。
docker run -d \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-p 127.0.0.1:8080:8080 \
ghcr.io/wyre-ai/meraki-mcp:latest
オプション 2:ソースからインストール
git clone https://github.com/WYRE-AI/meraki-mcp.git
cd meraki-mcp
npm ci
npm run build
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
MERAKI_API_KEY | Meraki Dashboard API キー | — |
MERAKI_ORG_ID | デフォルトの組織 ID(任意) | — |
MERAKI_BASE_URL | Meraki API のベース URL を上書きします(任意) | — |
READ_ONLY_MODE | 安全スイッチ。true の場合、すべての書き込み操作をブロックします | true |
MCP_TRANSPORT | トランスポートモード(stdio または http) | stdio |
MCP_HTTP_HOST | シークレットが設定されている場合のバインドアドレス。未設定の場合は 127.0.0.1 にバインドします。コンテナーイメージでは 0.0.0.0 が設定されます。 | 127.0.0.1 |
MCP_HTTP_PORT | HTTP サーバーポート | 8080 |
AUTH_MODE | env は環境変数から MERAKI_* を読み取ります。gateway では、各 /mcp リクエストに X-Meraki-Api-Key が必要です。イメージと Compose では gateway が設定されます。 | env |
CONDUIT_S2S_SECRET | サービス間シークレット。HTTP の起動に必要です。空の値および既知のプレースホルダー値は拒否されます。実際の値は絶対にコミットしないでください。 | — |
MCP_ALLOW_INSECURE_DEV | CONDUIT_S2S_SECRET を使わずにローカル HTTP を使用する場合は 1 を設定します。警告をログに記録し、X-Gateway-S2S を省略して、127.0.0.1 のみをリッスンします。 | — |
LOG_LEVEL | ログレベル(debug、info、warn、error) | info |
従来の
READ_ONLY変数も引き続き有効です。READ_ONLY_MODEが優先されます。
HTTP 認証
MCP_TRANSPORT=http では、CONDUIT_S2S_SECRET が必要です。この変数が空、または既知のプレースホルダー(changeme、change-me、placeholder、secret、example、replace-me、s2s-secret、your-secret、your-s2s-secret、replace-with-a-real-secret)の場合、起動ログにエラーが記録され、ゼロ以外の終了コードで終了します。プロセスがログにシークレットを書き込むことはありません。MCP_ALLOW_INSECURE_DEV=1 を設定すると、シークレットなしで起動し、警告をログに記録して、X-Gateway-S2S をスキップし、127.0.0.1 のみでリッスンします。0.0.0.0 など、より広い範囲を指定する MCP_HTTP_HOST は無視され、その上書きについてログに記録されます。このフラグが設定されていても、プレースホルダーのシークレットは拒否されます。
MCP_HTTP_HOST が未設定の場合、サーバーは 127.0.0.1 にバインドします。シークレットが設定されている場合は、0.0.0.0 を含め、MCP_HTTP_HOST の設定が適用されます。
シークレットを設定すると、すべての /mcp リクエストに X-Gateway-S2S が必要です。値の形式は t=<unix seconds>,v1=<hex> です。v1 は、CONDUIT_S2S_SECRET を鍵として、ASCII 文字列 t=<unix seconds> の HMAC-SHA256 を計算し、小文字の 16 進数でエンコードした値です。サーバーの時刻との差が 300 秒を超えるタイムスタンプは拒否されます。ヘッダーがない場合、または無効な場合は、401 が返されます。
AUTH_MODE=gateway の場合、各 /mcp リクエストに X-Meraki-Api-Key も必要です。X-Meraki-Org-Id は任意です。これらのヘッダーが、そのリクエストの認証情報の取得元になります。API キーがない場合は、401 が返されます。
/health は認証なしで引き続き利用でき、ベンダーの認証情報を読み取りません。stdio トランスポートでは CONDUIT_S2S_SECRET を使用しません。
X-Gateway-S2S の値の例(参考値。実際のシークレットを使って生成してください):
t=1710000000,v1=<hmac-sha256 hex of "t=1710000000">
安全性モデル
このサーバーは、デフォルトで読み取り専用です。READ_ONLY_MODE=false を明示的に設定しない限り、書き込み操作(更新、再起動、削除)はブロックされます。
- 読み取りツール(
*_list、*_get)は常に利用できます。 - 影響の大きい書き込み操作(例:
meraki_networks_update、meraki_clients_update_policy)は、読み取り専用モードによって制限されます。 - 確認が必要なツールでは、
READ_ONLY_MODE=falseの場合でも、confirm_destructive_action: true引数が必要です。この確認フラグが Meraki API に転送されることはありません。該当するのは次の 2 グループです。- 不可逆 —
meraki_networks_delete、meraki_devices_remove。 - 影響範囲が大きい —
meraki_appliance_firewall_l3_update、meraki_switch_ports_update、meraki_wireless_ssids_update、meraki_devices_reboot。原理上は取り消し可能ですが、いずれも変更によって接続が切断される可能性のある同じネットワークリンク経由で適用されるため、オペレーターが変更を取り消すための接続手段を失うおそれがあります。また、meraki_appliance_firewall_l3_updateはルールセットを置き換えるため、ペイロードに含まれないルールはすべて削除されます。meraki_wireless_ssids_updateは、PSK または認証モードが変更されると、その SSID に接続しているすべてのクライアントを切断します。
- 不可逆 —
- 確認を行っても、読み取り専用モードを回避することはできません。
READ_ONLY_MODEが有効な間は、確認済みの呼び出しもブロックされます。 meraki_raw_requestの回避手段では、HTTP メソッドに基づいて呼び出しを分類します。GETは読み取り、POST/PUT/DELETEは書き込み、DELETEは破壊的操作です。
ドメイン
すべてのツールが最初から返されます。meraki_navigate を使ってドメインのツールを調べるか、meraki_status を使って接続状態と設定済みの組織を確認してください。
| ドメイン | ツール |
|---|---|
| organizations | meraki_organizations_list, meraki_organizations_get, meraki_organizations_inventory_list |
| networks | meraki_networks_list, meraki_networks_get, meraki_networks_update ⚠, meraki_networks_delete ⚠⚠ |
| devices | meraki_devices_list, meraki_devices_get, meraki_devices_reboot ⚠⚠, meraki_devices_remove ⚠⚠ |
| clients | meraki_clients_list, meraki_clients_get, meraki_clients_get_policy, meraki_clients_update_policy ⚠ |
| wireless | meraki_wireless_ssids_list, meraki_wireless_ssids_update ⚠⚠, meraki_wireless_rf_profiles_list |
| switch | meraki_switch_ports_list, meraki_switch_ports_update ⚠⚠, meraki_switch_port_statuses_list |
| appliance | meraki_appliance_firewall_l3_get, meraki_appliance_firewall_l3_update ⚠⚠, meraki_appliance_vpn_status_get |
| (その他) | meraki_raw_request ⚠⚠(DELETE の場合) |
⚠ = 読み取り専用モードで制限される影響の大きい書き込み · ⚠⚠ = さらに confirm_destructive_action: true が必要
Docker のデプロイ
.env.example を .env にコピーし、CONDUIT_S2S_SECRET を設定してください(openssl rand -hex 32)。サンプルファイルのシークレットは空のままにしてください。
Compose は 127.0.0.1:8080:8080 を公開し、CONDUIT_S2S_SECRET が未設定の場合は起動を拒否し、AUTH_MODE=gateway で実行します。このサービスには MERAKI_API_KEY、MERAKI_ORG_ID、env_file が設定されていないため、プロジェクトの .env から静的なベンダー認証情報が注入されることはありません。Compose は環境変数から CONDUIT_S2S_SECRET を補間します。
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up
単一テナントの HTTP(AUTH_MODE=env)でも S2S シークレットが必要です。そのうえで、環境変数から MERAKI_API_KEY を使用します。
docker run -d \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-e AUTH_MODE=env \
-e MERAKI_API_KEY=your-key \
-e MERAKI_ORG_ID=your-org-id \
-p 127.0.0.1:8080:8080 \
ghcr.io/wyre-ai/meraki-mcp:latest
開発
npm ci
npm run build # Build the project
npm run start # Run over stdio
# HTTP refuses to start until CONDUIT_S2S_SECRET is set
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" npm run start:http
# Local HTTP only, without a service-to-service secret (always binds 127.0.0.1)
MCP_ALLOW_INSECURE_DEV=1 npm run start:http
npm run test # Run tests
テスト
npm test
テストスイートでは、安全性の契約として、読み取り専用の強制、破壊的操作の確認、および confirm_destructive_action が SDK に転送されないことを検証します。
ライセンス
Apache 2.0 — 著作権 WYRE Technology
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。