mcpField
S
Slide

Slide

ローカル
github.comファイル・ストレージ06 日前に更新

Slide について

Slide は、AI アシスタントや WYRE Conduit ゲートウェイから Slide のバックアップ/災害復旧データを確認する MCP サーバーです。アカウント、デバイス、スナップショット、復元などを読み取り専用で扱い、応答から機密認証情報を除外します。

主な機能

  1. 01アカウント、顧客、ユーザーの確認
  2. 02エージェント、デバイス、ネットワークの確認
  3. 03バックアップ、スナップショット、アラートの検索
  4. 04ファイルおよびイメージ復元内容の閲覧
  5. 05請求情報と監査ログの参照
  6. 06機密フィールドを除外する読み取り専用ツール

活用シーン

  1. 01保護対象デバイスとバックアップ状況の確認
  2. 02アラートや監査記録の調査
  3. 03復元状況の確認とファイルの閲覧
  4. 04デバイスのネットワーク設定と VLAN の確認

MCP 対応

MCP サーバーとして、バックアップ、デバイス、ネットワーク、復元、監査など、Slide API の構造化データを扱う読み取り専用ツールを公開します。HTTP と stdio に対応し、ゲートウェイ経由でリクエストごとに API トークンを受け取れます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"wyre-ai-slide": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SLIDE_API_TOKEN",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-ai/slide-mcp:v1.0.2"
],
"env": {
"SLIDE_API_TOKEN": "<SLIDE_API_TOKEN>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"AUTH_MODE": "<AUTH_MODE>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
起動コマンドdocker run -i --rm -e SLIDE_API_TOKEN -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/slide-mcp:v1.0.2
設定が必要な環境変数
SLIDE_API_TOKENシークレットStatic bearer API token issued per-account in the Slide Console (Settings > API Keys). Sent as Authorization: Bearer <token> to api.slide.tech.
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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/wyre-ai/slide-mcp:v1.0.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Slide MCP サーバー

Slide のバックアップ/BDR(事業継続/災害復旧)API 用 MCP サーバーです。アカウント、エージェント、デバイス、ネットワーク、バックアップ、スナップショット、復元を可視化し、AI アシスタントと WYRE Conduit ゲートウェイに対応します。

認証

Slide は、Slide Console(Settings > API Keys)でアカウントごとに発行される静的なベアラー API トークンで認証します。OAuth ではありません。このコネクターはトークンを発行も更新もせず、有効なトークンのみを保持し、Authorization: Bearer <token> として api.slide.tech に送信します。ゲートウェイモードでは、トークンはリクエストごとに X-Slide-Api-Token ヘッダー経由で渡され、そのヘッダーがないリクエストは拒否されます。ローカル/stdio モードと、HTTP の AUTH_MODE=env では、SLIDE_API_TOKEN から読み込みます。

設定

.env.example をコピーし、以下の変数を設定します。このファイルでは CONDUIT_S2S_SECRET を空のままにしてください。

Env var説明
SLIDE_API_TOKENSlide Console で発行される静的なベアラー API トークンです。stdio と HTTP の AUTH_MODE=env で必須です。ゲートウェイの Compose サービスでは設定されません。
MCP_TRANSPORTstdio(デフォルト)または http です。
AUTH_MODEenv(デフォルト。SLIDE_API_TOKEN を読み込みます)または gateway(各 /mcp リクエストに X-Slide-Api-Token が必要で、環境変数へのフォールバックはありません)です。Docker イメージと Compose ファイルでは gateway が設定されています。
CONDUIT_S2S_SECRETHTTP で必須です。/mcp の X-Gateway-S2S 用 HMAC キーです。openssl rand -hex 32 で生成してください。空の場合、または既知のプレースホルダー(changeme、your-s2s-secret、replace-with-a-real-secret、その他の公開されているサンプル値)の場合、HTTP サーバーはエラーをログに記録し、ゼロ以外の終了コードで終了します。値がログに記録されることはありません。未設定または空の場合、Compose は起動しません。
MCP_ALLOW_INSECURE_DEVCONDUIT_S2S_SECRET なしで HTTP を起動するには、正確に 1 を設定します。警告をログに記録し、X-Gateway-S2S を必須にせず、127.0.0.1 のみでバインドします(より広い範囲を指定した MCP_HTTP_HOST は無視されます)。既知のプレースホルダー秘密鍵を指定した場合は、引き続き起動を拒否します。ローカル開発専用です。
MCP_HTTP_HOSTMCP_TRANSPORT=http の場合のバインドアドレスです。デフォルトは 127.0.0.1 です。CONDUIT_S2S_SECRET が設定されている場合に有効です。コンテナーイメージでは 0.0.0.0 が設定されています。秘密鍵がない場合、リスナーは 127.0.0.1 のみで待ち受けます。
MCP_HTTP_PORTHTTP ポートです。デフォルトは 8080 です。
LOG_LEVELdebug | info(デフォルト)| warn | error です。

/health と /healthz は認証なしで利用でき、認証情報を読み込みません。stdio トランスポートでは CONDUIT_S2S_SECRET を使用しません。

HTTP 認証

MCP_TRANSPORT=http で CONDUIT_S2S_SECRET が設定されている場合、すべての /mcp リクエストに X-Gateway-S2S を含める必要があります。チェック処理は src/s2s-verify.ts の verifyS2sHeader です。ヘッダー値は t=<unix seconds>,v1=<hex> で、<hex> は CONDUIT_S2S_SECRET をキーとして、リテラル文字列 t=<unix seconds> を HMAC-SHA256 でハッシュした値(64 文字の小文字の 16 進数)です。タイムスタンプはサーバーの時刻から 300 秒以内である必要があります。ヘッダーがない場合、または無効な場合、Slide トークンの読み込み前に HTTP 401 が返されます。

TS=$(date +%s)
SIG=$(printf 't=%s' "$TS" | openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" -hex | awk '{print $NF}')
curl -sS http://127.0.0.1:8080/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H "X-Gateway-S2S: t=${TS},v1=${SIG}" \
  -H "X-Slide-Api-Token: $SLIDE_API_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

AUTH_MODE=gateway では、/mcp に X-Slide-Api-Token も必要です。このヘッダーが、リクエストで使用される唯一の認証情報です。ヘッダーがない場合、HTTP 401 が返され、SLIDE_API_TOKEN へのフォールバックは行われません。

AUTH_MODE=env でも有効な X-Gateway-S2S ヘッダーが必要です。そのうえで、リクエストに X-Slide-Api-Token が含まれていない場合は、SLIDE_API_TOKEN が使用されます。

リクエスト制限
  • HTTP リクエストボディは 256 KiB(262144 バイト)に制限されています。X-Gateway-S2S のチェックと(AUTH_MODE=gateway の場合は)X-Slide-Api-Token の存在チェックに合格した後、Content-Length が上限を超えていると、JSON-RPC エラーを伴う 413 が返されます。Content-Length のないボディは MCP SDK トランスポートによって制限されます。認証されていないリクエストには、引き続き最初に 401 が返されます。
  • tools/call の引数は 10,000 要素に制限されています(どの深さでも、すべての配列項目とオブジェクトキーが対象です)。上限を超える入力には isError ツール結果が返され、ディスパッチされることはありません。

これらの制限は、CVE-2026-111768 / GHSA-46jr-4wx8-v453(検証中のメモリ枯渇)および GHSA-f897-62hf-6gxq(リクエストボディ/バッチの上限がない問題)に対処します。

ツール

アカウント
  • slide_list_accounts - アカウントを一覧表示します。作成日で絞り込めます。
  • slide_get_account - ID を指定して単一のアカウントを取得します。
エージェント
  • slide_list_agents - エージェント(保護対象システム)を一覧表示します。デバイス、クライアント、タイプ、ペアリング日で絞り込めます。
  • slide_get_agent - ID を指定して単一のエージェントを取得します(バックアップスケジュール、保持期間、ボリューム、アラート設定)。
  • slide_search_agent_files - エージェントの保護対象システム上でインデックス化されたファイルパスを検索します。
  • slide_get_agent_file_versions - エージェント上のファイルパスで利用可能なスナップショットのバージョンを取得します。
  • slide_get_agent_services - エージェント上で検出された、バックアップ対象のサービスを取得します。
アラート
  • slide_list_alerts - アラートを一覧表示します。デバイス、エージェント、解決済みかどうか、作成日で絞り込めます。
  • slide_get_alert - ID を指定して単一のアラートを取得します。
監査
  • slide_list_audit_logs - 監査ログエントリを一覧表示します。アクション、リソースタイプ、クライアント、時間範囲で絞り込めます。
  • slide_list_audit_actions - 監査アクション名の全一覧を取得します。
  • slide_list_audit_resource_types - 監査リソースタイプ名の全一覧を取得します。
  • slide_get_audit_log - ID を指定して単一の監査ログエントリを取得します。
バックアップ
  • slide_list_backups - バックアップの試行を一覧表示します。エージェント、スナップショット、デバイス、時間範囲で絞り込めます。
  • slide_get_backup - ID を指定して単一のバックアップ試行を取得します。
請求
  • slide_list_billing_credit_memos - 請求のクレジットメモを一覧表示します。
  • slide_list_billing_invoices - 請求書を一覧表示します。
  • slide_list_billing_subscriptions - サブスクリプションとデバイスライセンスを一覧表示します。
クライアント
  • slide_list_clients - クライアント(MSP のエンドカスタマー)を一覧表示します。作成日で絞り込めます。
  • slide_get_client - ID を指定して単一のクライアントを取得します。
デバイス
  • slide_list_devices - デバイス(物理/仮想の Slide Box)を一覧表示します。クライアントと作成日で絞り込めます。
  • slide_get_device - ID を指定して単一のデバイスを取得します。
  • slide_get_device_network - デバイスのネットワーク設定を取得します。
  • slide_list_device_vlans - デバイスに設定された VLAN を一覧表示します。
  • slide_get_device_vlan - ID を指定してデバイス上の単一の VLAN を取得します。
ネットワーク
  • slide_list_networks - ディザスタリカバリ用ネットワークを一覧表示します。クライアントと作成日で絞り込めます。
  • slide_get_network - ID を指定して単一のネットワークを取得します(ポートフォワーディング、IPsec 接続、WireGuard ピア)。
復元(ファイル)
  • slide_list_file_restores - ファイルの復元を一覧表示します。作成日で絞り込めます。
  • slide_get_file_restore - ID を指定して単一のファイル復元を取得します。
  • slide_browse_file_restore - ファイル復元で公開されたファイル/フォルダーを参照します。
  • slide_list_file_restore_pushes - ファイル復元のプッシュ操作を一覧表示します。時間範囲で絞り込めます。
  • slide_get_file_restore_push - 単一のファイル復元プッシュのステータスを取得します。
復元(イメージ)
  • slide_list_image_exports - イメージのエクスポートを一覧表示します。作成日で絞り込めます。
  • slide_get_image_export - ID を指定して単一のイメージエクスポートを取得します。
  • slide_browse_image_export - イメージエクスポートで公開されたファイル/フォルダーを参照します。
復元(仮想マシン)
  • slide_list_virtual_machines - スナップショットから作成された仮想マシンを一覧表示します。作成日で絞り込めます。
  • slide_get_virtual_machine - ID を指定して単一の仮想マシンを取得します。
スナップショット
  • slide_list_snapshots - スナップショットを一覧表示します。エージェント、場所/削除状態、時間範囲で絞り込めます。
  • slide_get_snapshot - ID を指定して単一のスナップショットを取得します。
  • slide_get_snapshot_service_verification - スナップショットのサービス検証結果を取得します。
ユーザー
  • slide_list_users - ユーザーを一覧表示します。作成日で絞り込めます。
  • slide_get_user - ID を指定して単一のユーザーを取得します。
  • slide_get_user_avatar - ユーザーのアバター画像を取得します(base64 データ URL)。

対象範囲

意図的に読み取り専用とし、認証情報を公開しない v1 のインターフェースです。Slide の、秘密情報を公開しない GET エンドポイント全 43 件を対象としています。Slide はバックアップ/DR インフラストラクチャです。実際のエンドポイントの中にはライブの秘密情報を返すものが複数あり、変更を伴うエンドポイントはすべて v1 の対象外です。除外した内容は、見落としではなく設計上の判断により、実装していません。バックアップ/DR インフラストラクチャのデータ(クライアント環境、デバイスインベントリ、ネットワークトポロジー)の機密性を踏まえ、Conduit の配線ではすべてのツールを isAdmin: true に分類しています。

有用なレスポンスから除去する秘密情報を含むフィールド。パススルーとして実装することはありません。

  • Agent.passphrases[].passphrase(エージェント暗号化に使うライブのパスフレーズ)- slide_list_agents/slide_get_agent から除去します。パスフレーズの name と agent_passphrase_id は保持します。
  • Network.ipsec_conns[].psk(ライブの IPsec 事前共有鍵)- slide_list_networks/slide_get_network から除去します。
  • Network.wg_peers[].wg_private_key(ライブの WireGuard 秘密鍵)- 同じ 2 つのツールから除去します。wg_public_key は秘密情報ではないため、保持します。
  • VirtualMachine.vnc_password(ライブの VNC パスワード)- slide_list_virtual_machines/slide_get_virtual_machine から除去します。vnc 接続情報配列(ホスト/ポート/WebSocket URI)と vnc_enabled は秘密情報ではないため、保持します。
  • ImageExport.password(エクスポートされた共有のライブの Samba パスワード)- slide_list_image_exports/slide_get_image_export から除去します。このフィールドは Slide の主要な「秘密情報」エンドポイントの対象ではありませんが、上記 4 項目と同じ種類のライブ認証情報であるため、同じ基準で扱います。

対象外(変更を伴う操作) - すべての POST/PATCH/PUT/DELETE エンドポイントは実装しません。クライアント、ネットワーク、デバイス、エージェント、VLAN の作成/更新、バックアップの開始、ファイル/イメージ/VM の復元やプッシュ操作の作成、IPsec 接続、ポートフォワード、WireGuard ピアの管理、エージェントのパスフレーズの追加/削除、デバイスの再起動/電源オフ、およびすべてのタグにおけるその他すべての書き込み操作が含まれます。これらは実際のインフラストラクチャに対する破壊的/変更を伴う操作(クライアントの削除、ネットワークの削除、復元の削除、デバイスの再起動)であり、設計上 v1 の対象外です。

v1 の対象外(認証情報/プロビジョニング関連ではなく、このコネクタの構造化データの対象範囲に含まれないもの):

  • GET /v1/billing/credit-memo/{id}/pdf (BillingCreditMemoPDF) - 生の application/pdf バイナリを返し、構造化データではありません。
  • GET /v1/billing/invoice/{id}/pdf (BillingInvoicePDF) - 同様です。

需要があれば、意図的に対象範囲を決定したうえで、後から追加できます。デフォルトでは追加しません。

認証情報のスコープ

このコネクター自体のコードは、設計上、読み取り専用です。ただし、Slide では基盤となる認証情報自体も読み取り専用にする方法が実際に用意されており、利用を推奨します。

Slide では、Account Owner、Account Admin、Business Continuity Technician、Billing、Read Only(すべてのリソースへの読み取り専用アクセス)の6つのアカウントロールが説明されています。API トークンは、Slide Console(Settings → API Keys)でトークンを生成したユーザーのロールを継承します。

推奨:このコネクターの API トークンは、Account Owner/Admin ユーザーではなく、Read Only ロールを持つ専用ユーザーから生成してください。 これにより、トークンが万一、Conduit の管理外で漏えいした場合(認証情報ストアの侵害、ログの設定ミスなど)でも、バックアップ、復元、ネットワーク、デバイスを削除するために使用できません。唯一の安全策としてコネクターのコードに頼るのではなく、このコネクター自体の読み取り専用コードと読み取り専用の認証情報を組み合わせられます。

確信度を分けた、別個の2つの説明です。

  • 構造的に検証済み(直接確認済みで、確信を持って述べられます): このコネクター自体のコードは変更を伴う呼び出しを一切行いません(client.ts にある HTTP 動詞関数は doGet のみです)。また、すべてのレスポンスから、ツールの結果に渡される前に、稼働中の5つのシークレットフィールド(エージェントのパスフレーズ、IPsec PSK、WireGuard の秘密鍵、VM の VNC パスワード、イメージエクスポート用 Samba パスワード)を削除します。詳細は secret-redaction.test.ts を参照してください。
  • ベンダーの説明に基づくもので、独自の検証は未実施(意図的に断定を避けています): Read Only ロールの制限が、変更を伴うすべてのエンドポイントに対してサーバー側で適用されるか(コンソールの UI 上で非表示になるだけではないか)は、稼働中の Read Only アカウントでテストしていません。また、このロールは明示的な選択が必要で、デフォルトではありません。新規アカウントで一般的な Account Owner/Admin ユーザーのトークンには、このような制限はありません。

このコネクターやこの README を、Slide のすべてのトークンが読み取り専用であることを確認したものとして扱わないでください。 確認できているのは、このコネクター自体のコードが変更を一切試みないことと、Slide には認証情報自体も読み取り専用にする方法が用意されている(ただしデフォルトではない)ことだけです。

開発

npm install
npm run build
npm test
npm run lint   # tsc --noEmit

Docker

イメージはコンテナー内で 0.0.0.0(MCP_HTTP_HOST)をリッスンし、デフォルトでは AUTH_MODE=gateway を使用します。ポートをループバックに公開し、S2S シークレットを渡してください。ゲートウェイモードでは、Slide トークンは各リクエストの X-Slide-Api-Token として送信されます。環境変数から読み込まれることはありません。

docker build -t slide-mcp .
docker run \
  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
  -p 127.0.0.1:8080:8080 \
  slide-mcp

CONDUIT_S2S_SECRET が未設定または空の場合、Compose は起動を拒否します。ゲートウェイサービスは SLIDE_API_TOKEN を設定せず、env_file も使用しないため、プロジェクトの .env から静的なベンダー認証情報が注入されることはありません。ただし、Compose は引き続きそのファイルから CONDUIT_S2S_SECRET を補間します。公開ポートは 127.0.0.1:8080:8080 です。

CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up

シングルテナント HTTP(AUTH_MODE=env)でも S2S シークレットが必要です。そのうえで SLIDE_API_TOKEN を使用します。

docker run \
  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
  -e AUTH_MODE=env \
  -e SLIDE_API_TOKEN="$SLIDE_API_TOKEN" \
  -p 127.0.0.1:8080:8080 \
  slide-mcp

シークレットを使用しないローカル HTTP は、開発専用です。127.0.0.1 のみをバインドします(0.0.0.0 を含む、ループバック以外の MCP_HTTP_HOST は無視され、上書きされたことがログに記録されます)。また、警告がログに記録されます。

MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm run start:http

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。