mcpField
M
MCP VS Code

MCP VS Code

ローカル
github.com/flujo-app開発ツール18 週間前に更新

MCP VS Code について

MCP VS Codeは、セルフホスト可能なCode OSS/OpenVSCodeワークベンチをMCPサーバーとともに実行し、人とモデルが同じワークスペースを操作できるようにします。ホストの権限や設定に応じて、埋め込み、ピクセルストリーミング、別タブで本物のワークベンチを表示します。

主な機能

  1. 01ワークスペース、エディター、診断の共有
  2. 02コマンド、拡張機能、ターミナルセッション
  3. 03埋め込み、ストリーミング、ブラウザー表示
  4. 04プライベートなOpenVSCodeランタイムへのゲートウェイ
  5. 05ファイル、Git、ターミナルのMCPツール

活用シーン

  1. 01モデルとワークスペースを確認・編集
  2. 02ホストが許可する場合のワークベンチ埋め込み
  3. 03実験的なピクセルストリーミングでの表示
  4. 04別のブラウザータブでワークベンチを開く

MCP 対応

MCPサーバーがMCPツールをOpenVSCodeワークベンチに接続し、MCP AppのUIも提供します。stdioまたはStreamable HTTPで接続でき、エディター関連ツールの利用にはランタイムとブリッジの稼働が必要です。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"mario-andreschak-mcp-vscode": {
"command": "npx",
"args": [
"-y",
"@mario.andreschak/mcp-vscode"
],
"env": {
"MCP_VSCODE_WORKSPACE": "<MCP_VSCODE_WORKSPACE>",
"MCP_VSCODE_RENDER_MODE": "<MCP_VSCODE_RENDER_MODE>",
"MCP_VSCODE_STREAM_BROWSER": "<MCP_VSCODE_STREAM_BROWSER>",
"MCP_VSCODE_STREAM_NO_SANDBOX": "<MCP_VSCODE_STREAM_NO_SANDBOX>"
}
}
}
}
起動コマンドnpx -y @mario.andreschak/mcp-vscode
設定が必要な環境変数
MCP_VSCODE_WORKSPACEAbsolute path to the workspace directory exposed through VS Code and MCP tools.
MCP_VSCODE_RENDER_MODESet to 'stream' to opt into experimental genuine-workbench pixel streaming; omit for normal iframe/browser behavior.
MCP_VSCODE_STREAM_BROWSEROptional absolute path to an installed Edge, Chrome, or Chromium executable used by experimental streaming.
MCP_VSCODE_STREAM_NO_SANDBOXUnsafe container-only escape hatch: set to 1 to launch streaming Chromium without its process sandbox.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@mario.andreschak/mcp-vscode0.2.2

ツール

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

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

詳細

MCP VS Code

MCP VS Code は、セルフホスト可能な Code OSS/OpenVSCode ワークベンチを MCP サーバーの隣で実行します。これにより、人間とモデルが同じワークスペース、開いているエディター、診断情報、コマンド、拡張機能、ターミナルセッションを操作できます。 これは、別途インストールされたデスクトップ版 VS Code をリモート操作するものではありません。対応するディストリビューションには、独自の OpenVSCode ランタイムとブリッジ拡張機能が含まれています。Microsoft がホストする vscode.dev はフレーム内での表示を許可していないため、使用しません。

image

ざっくりとした全体像

構成要素は4つあります。

  1. MCP ホスト—たとえば FLUJO や Claude Desktop—が、外側のサンドボックスとセキュリティポリシーを管理します。
  2. 小さな MCP App ドキュメントが、ワークベンチのオリジンへのアクセスと、デフォルトモードでのフレーム表示についてホストに許可を求めます。
  3. mcp-vscode ゲートウェイが、プライベートランタイムへのアクセスに必要なルートのみを公開します。
  4. OpenVSCode プロセスが MCP サーバーのマシン上で実行され、ループバックにバインドして、設定されたワークスペースを開き、ブリッジ拡張機能を MCP サーバーに接続します。
flowchart LR
    H["MCP host"] <-->|"stdio or Streamable HTTPS"| S["mcp-vscode server"]
    H --> A["sandboxed MCP App"]

    A -->|"default: allowed frameDomains"| I["OpenVSCode iframe"]
    A <-->|"opt-in: authenticated /stream WebSocket"| C["pixel canvas"]
    A -->|"honest fallback: openLink"| X["separate browser tab"]

    I --> G["browser-reachable gateway origin"]
    X --> G
    C <-->|"JPEG frames + input"| B["server-side system Chromium"]
    B --> O["loopback OpenVSCode"]
    G --> O
    O <-->|"authenticated /bridge WebSocket"| S
    S --> W["confined workspace and PTYs"]
    O --> W

デフォルトの iframe およびブラウザータブ経由の表示では、OpenVSCode を直接表示します。実験的なストリーミング機能では、サーバー上の既存の Edge、Chrome、または Chromium を起動し、同じ OpenVSCode ランタイムを開いて、その映像とユーザー入力を転送します。キャンバスはリモートディスプレイであり、別のエディター実装ではありません。

レンダリングモード

モード選択条件必要なホスト機能ユーザーに表示されるもの
embeddedホストが宣言されたワークベンチのオリジンを許可し、死活確認に成功した場合のデフォルトネストされたドキュメント用の frameDomainsMCP App 内に表示される本物の OpenVSCode
streamMCP_VSCODE_RENDER_MODE=stream の場合のみconnectDomains で許可された到達可能な WebSocket。ネストされたフレームの許可は不要サーバー側の Chromium でレンダリングされ、ピクセルとして MCP App に描画される本物の OpenVSCode
browser要求されたインラインモードが拒否された場合、到達不能な場合、または利用できない場合の適切なフォールバックホストがサポートする openLink、またはデバッグページ上の通常のリンク別のタブに表示される、同じ本物の OpenVSCode ワークベンチ

probing は一時的な UI 状態であり、レンダラーではありません。

デフォルトの動作:iframe またはブラウザー

レンダリングモードの環境変数が設定されていない場合、App は次の処理を行います。

  1. バンドルされた OpenVSCode ランタイムが起動するまで待ちます。
  2. ホストから情報を取得できる場合は、ワークベンチのオリジンと、ホストが報告する有効な frameDomains を比較します。
  3. ホストがオリジンを明示的に拒否した場合は、iframe の読み込みを直ちに中止します。
  4. それ以外の場合は iframe に移動し、注入された mcp-vscode:workbench-alive メッセージを待ちます。
  5. その肯定的なシグナルを受け取った後にのみ embedded を確定します。または、
  6. ポリシー、ネットワーク、ランタイムの正確な原因を示す browser カードを表示します。

CSP によってブロックされた iframe は、有用な load イベントも error イベントも発生させないことがあります。そのため、通常の iframe イベントだけでは成功と判断しません。死活確認のタイムアウトにより、画面が永久に空白のままになることを防ぎます。

MCP サーバーの CSP 宣言は許可の要求であり、ホストに優先するためのものではありません。ホストは要求を許可、制限、または拒否できます。mcp-vscode の CORS ヘッダーでは、外側のホストが決定した frame-src の設定を修正できません。

実験的なストリーミング

設定します:

MCP_VSCODE_RENDER_MODE=stream

ストリーミングは、そのプロセスで iframe を使うかどうかの判断を意図的に置き換えるものであり、自動フォールバックではありません。ストリーミングを開始できない場合、App は失敗を報告し、別のエディターをひそかに選択するのではなく、正直なブラウザーオプションに切り替えます。

サーバーは以下を行います:

  • 既存の Microsoft Edge、Google Chrome、または Chromium のインストールを検出するか、MCP_VSCODE_STREAM_BROWSER を使用します。
  • 専用の一時的なユーザーデータディレクトリを使って、ヘッドレスで起動します。
  • POSIX サーバーが root として実行され、Chromium のサンドボックスが有効な場合、/etc/passwd から固定の node アカウントを読み取り、そのプライベートプロファイルの所有権を移譲し、Chromium の子プロセスのみをゼロ以外の uid/gid に切り替えて実行します。
  • Chromium の作業ディレクトリ、HOME、TMPDIR、XDG ディレクトリを、サーバーアカウントのパスを引き継ぐのではなく、同じ一時プロファイル内に設定します。
  • Chrome DevTools Protocol のリスナーを 127.0.0.1 のみにバインドします。
  • サーバーが選択した内部 OpenVSCode URL に移動します。App は Chromium を移動させたり、任意の DevTools コマンドを発行したりできません。
  • 最大 12 フレーム/秒で JPEG のスクリーンキャストフレームを送信します。
  • サイズ変更、ポインター、ホイール、キーボード、テキスト入力のメッセージを、制限付きで受け付けます。
  • アクティブなビューアーを 1 つだけ許可します。

/stream WebSocket は、独自のランダムな 256 ビットのベアラートークンを使用します。トークン付きのストリーム URL と高エントロピーの /ide/<key> URL は、モデルに表示されるツールテキストと structuredContent から除外され、ツール結果の _meta を通じて MCP App にのみ渡されます。ログにストリームトークンは含まれません。

ホストが connectDomains を許可する一方で frameDomains を拒否する場合、ストリーミングが役立ちます。これは、上流報告書の草案に記載されている、ローカル設定の Claude Desktop stdio コネクターで確認された動作です。

ストリーミングは引き続き実験的な機能です:

  • JPEG フレームは CPU と帯域幅をより多く消費し、直接 iframe を使う場合ほど即時性がありません。
  • 音声には対応しておらず、ビューアーは 1 つだけです。
  • 基本的なマウス、キーボード、ホイール、貼り付け入力は動作しますが、クリップボードからのコピーと複雑な IME の文字入力は完全には対応していません。
  • システムに Chromium 系ブラウザーが追加で必要です。このモードでは、プロジェクトがブラウザーをダウンロードしたりバンドルしたりすることはありません。
  • ゲートウェイの WebSocket にブラウザーから到達できる必要があります。ストリーミングによって、プライベートな Fly Machine のポートが突然到達可能になるわけではありません。
失敗は失敗として扱う

表示される 3 つの結果は、いずれも実際の OpenVSCode ランタイムを指しています。そのランタイムが存在しないか、失敗している場合、表示できるエディター UI はありません。ファイル、Git、ターミナルの MCP ツールは、該当する場合は引き続き動作することがありますが、稼働中のブリッジを必要とするエディター、診断、コマンド、拡張機能のツールは、明示的に失敗します。

macOS 専用のエディターへのフォールバックはありません。OpenVSCode Server ランタイムがなければ、埋め込み、ストリーミング、外部ブラウザービューのいずれでもワークベンチを表示できません。

設定

ユーザー向け環境変数
変数デフォルト用途
MCP_VSCODE_WORKSPACEプロセスの作業ディレクトリ絶対パスで指定するワークスペースのルートです。明示的に設定することをおすすめします。--workspace が優先されます。
MCP_VSCODE_OPENVSCODE_ROOTプラットフォームのランタイムパッケージまたは同梱ランタイムOpenVSCode ランタイムディレクトリを上書きします。--openvscode-root が優先されます。
MCP_VSCODE_RENDER_MODEdefault実験的なワークベンチのピクセルストリーミングを有効にするには、正確に stream を設定します。default、空、または未設定の場合は iframe/ブラウザー動作を使用します。それ以外の値では起動に失敗します。
MCP_VSCODE_STREAM_BROWSER自動検出ストリーミングに使用する Edge、Chrome、または Chromium の絶対パスです。
MCP_VSCODE_STREAM_NO_SANDBOX0制限されたコンテナーで Chromium 独自のサンドボックスを実行できない場合に限り、最後の手段として明示的に 1 または true を設定してください。POSIX では、root 権限で実行される mcp-vscode プロセスは、デフォルトで Chromium のみを安全な node アカウントに切り替えます。

FLUJO が管理するホスト子プロセスには、FLUJO_MCP_APP_RUNTIME_REGISTER_URL と FLUJO_MCP_APP_RUNTIME_REGISTER_TOKEN も渡される場合があります。これらは有効期間の短い内部ブローカー機能であり、ユーザー設定ではありません。mcp-vscode はその所持を証明し、許可リストに登録されたルートマニフェストを登録した後、OpenVSCode の起動前に両方の変数を消去します。また、ベアラートークンをワークベンチに公開することはありません。

Claude Desktop の例

デフォルトモードでは、テスト済みの Claude Desktop ホストがローカルループバックの frameDomains リクエストを拒否すると、正しくブラウザーにフォールバックします。

{
  "mcpServers": {
    "vscode": {
      "command": "npx",
      "args": ["-y", "@mario.andreschak/[email protected]", "--stdio"],
      "env": {
        "MCP_VSCODE_WORKSPACE": "C:\\path\\to\\repository"
      }
    }
  }
}

インラインの本物のストリーミングをテストするには、次のようにします。

{
  "mcpServers": {
    "vscode": {
      "command": "npx",
      "args": ["-y", "@mario.andreschak/[email protected]", "--stdio"],
      "env": {
        "MCP_VSCODE_WORKSPACE": "C:\\path\\to\\repository",
        "MCP_VSCODE_RENDER_MODE": "stream",
        "MCP_VSCODE_STREAM_BROWSER": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"
      }
    }
  }
}

インストール済みブラウザーが検出される場合、ブラウザーのパスの上書きは任意です。ホストの動作は時間の経過とともに変わります。現在の観察結果を恒久的なものと見なさず、使用する Claude Desktop のバージョンそのものに対して手動テストマトリックスを再実行してください。

FLUJO と Fly.io へのデプロイ

ユーザーは try.flujo.com.co のような人間向けサイトにアクセスできますが、ブラウザーは内部で追加のセキュリティオリジンを使用します。サンドボックス化された MCP App とその入れ子のワークベンチを、デプロイを簡単に見せるためだけに、単一の文字どおりのブラウザーオリジンにまとめることは安全ではありません。

FLUJO が管理する stdio 子プロセスでは、ランタイムブローカーとのハンドシェイクにより、プライベートポートの問題を解決します。

  1. FLUJO は子プロセスに、1 回限りのループバック登録機能を渡します。
  2. mcp-vscode はその機能の所持を証明し、ワークベンチの HTTP および WebSocket トラフィックを含む、ランダムな /ide/<key> プレフィックスのみを登録します。
  3. ストリーミングが有効な場合は、正確な /stream WebSocket ルートのみも登録します。
  4. ブローカーはブラウザーから到達可能な、App ごとの HTTPS オリジンを返します。mcp-vscode は、訪問者に 127.0.0.1 を公開する代わりに、そのオリジンを MCP App の CSP メタデータと App 専用の結果メタデータで使用します。
  5. 外部プロキシは /mcp、/bridge、/healthz、/app、/session.json、および一時的な証明ルートをプライベートのままにします。

ホスト型のデプロイには、引き続き次の要件があります。

  • App ごとのオリジン方式に対応するワイルドカード DNS と TLS。
  • ランダムな OpenVSCode プレフィックスに対する HTTP および WebSocket のプロキシ。
  • 実験的なストリーミングが有効な場合の /stream に対する WebSocket のプロキシ。
  • サンドボックスとワークベンチが想定する Upgrade、Host、Origin、Referer の動作を保持すること。
  • 対応するストリーム URL が wss: になるよう、ブラウザーから到達可能な https: オリジン。

Fly でストリーミングを利用するには、Machine イメージに Edge、Chrome、または Chromium をインストールしてください。コンテナー全体を非特権ユーザーで実行することを推奨します。FLUJO が mcp-vscode を root として実行する必要がある場合、イメージには、uid と gid が 0 以外である node アカウントを正確に 1 つと、安全な共有 /tmp(root が所有し、アクセス可能で、グループまたはその他のユーザーに書き込み可能な場合はスティッキービットが設定されているもの)が含まれている必要があります。mcp-vscode は、その親ディレクトリの下に高エントロピーのプロファイルを作成し、プロファイルのみの所有者を変更し、サンドボックスを維持したままブラウザーのみを node として起動します。アカウントまたは一時ディレクトリのデータが見つからないか、安全でない場合は、ストリーミングを利用できないことを示すエラーが表示されます。--no-sandbox が暗黙的に追加されることはありません。MCP_VSCODE_STREAM_NO_SANDBOX=1 は、通常のデプロイ設定ではなく、明示的に選択する最終手段のセキュリティ上の妥協として引き続き使用できます。

FLUJO のブローカーを使わずに mcp-vscode をリモートにデプロイする場合、--public-url には同等の、ブラウザーから到達可能なゲートウェイオリジンを指定する必要があります。また、リバースプロキシは同じワークベンチの HTTP/WebSocket トラフィックと、任意で /stream の WebSocket トラフィックを転送する必要があります。CORS 設定だけではルーティングの代わりになりません。

ゲートウェイの HTTP インターフェイス

ローカルゲートウェイが提供するルートは次のとおりです。

ルート認証/公開範囲目的
GET /healthzローカルのデプロイポリシー稼働状態と OpenVSCode/ブリッジの状態
GET /session.json--auth-token が設定されている場合は ?token=デバッグブラウザーのセッションペイロード
GET /app--auth-token が設定されている場合は ?token=MCP App ドキュメントのデバッグ用バージョン
ALL /mcp設定されている場合は Authorization: BearerStreamable HTTP MCP トランスポート
HTTP/WS /ide/<random>/...プロセスごとの高エントロピーなパス。FLUJO では限定的にブローカー経由で公開本物の OpenVSCode ワークベンチ、アセット、API、ソケットへのプロキシ
WS /bridge認証済みのブリッジハンドシェイクOpenVSCode ブリッジ拡張機能の JSON-RPC チャネル。FLUJO では公開ブローカー経由で公開されません
WS /streamクエリ内の独立したトークン。閲覧者は 1 人。ストリーミング有効時のみ実験的な JPEG フレームおよび入力チャネル
GET /.well-known/flujo/mcp-app-runtimeFLUJO の一時的な 1 回限りの証明。その後は無効化ホスト型ランタイムの登録のみ

ブローカー経由で公開されるオリジンには、MCP App 用に明示的に登録されたルートのみが公開され、ローカルのインターフェイス全体が公開されることはありません。

機能

  • 本物のセルフホスト可能な Code OSS/OpenVSCode ワークベンチです。
  • 人による編集、ナビゲーション、ソース管理、コマンド、拡張機能、Webview、ターミナル操作に対応します。
  • OpenVSCode ブリッジを通じて、ライブエディターの状態、選択範囲、未保存バッファー、診断情報、ファイル変更を MCP ツールから確認できます。
  • 利用可能な場合はターゲットネイティブの PTY を使用し、利用できない場合はパイプベースのフォールバックを使用する共有ターミナルセッションです。
  • パストラバーサルおよびシンボリックリンクによる脱出を防ぐワークスペースの隔離機能です。
  • SHA-256 バージョンハッシュを使用した競合安全なファイル書き込みです。
  • 同じ実行ファイルから stdio および Streamable HTTP/HTTPS トランスポートを利用できます。
  • ライブワークベンチに登録されたコマンドを実行するための汎用 vscode_execute_command エスケープハッチです。

サーバーは次のグループにわたって 27 個のツールを公開します。

グループツール
アプリ/セッションvscode_open、workspace_status
ファイルfs_list、fs_read、fs_write、fs_delete、fs_move、fs_search
エディターeditor_open、editor_state、editor_set_selection、editor_apply_edits
言語サービスdiagnostics_get
コマンドvscode_list_commands、vscode_execute_command
拡張機能extensions_list、extensions_install、extensions_uninstall
ターミナルterminal_create、terminal_list、terminal_read、terminal_write、terminal_resize、terminal_kill
Gitgit_status、git_diff、git_run

エディター、診断情報、コマンド、拡張機能のツールは、常に本物の OpenVSCode ブリッジを対象にします。破壊的なツールとオープンワールドのツールには注釈が付けられており、互換性のある MCP ホストは承認ポリシーを適用できます。

スタンドアロンリリースをインストールする

ご使用のプラットフォーム用のリリースアーカイブをダウンロードして展開します。

Windows x64:

.\bin\mcp-vscode.cmd --stdio --workspace C:\path\to\repository

Linux x64 または ARM64:

./bin/mcp-vscode --stdio --workspace /absolute/path/to/repository

アーカイブには、独自の Node.js および OpenVSCode ランタイムが含まれています。デフォルトの iframe/ブラウザー操作には、VS Code、Node.js、Docker、またはシステム全体へのパッケージインストールは不要です。実験的なストリーミングには、Chromium 系ブラウザーのインストールも必要です。

npm から実行する

Node.js 22 以降では、Windows x64、Linux x64、Linux ARM64 上で npx を実行すると、バンドルされた stdio サーバーが起動します。

npx -y @mario.andreschak/[email protected] --stdio --workspace "C:\path\to\repository"
npx -y @mario.andreschak/[email protected] --stdio --workspace "/path/to/repository"

ワークスペースを明示的に指定してください。--workspace または MCP_VSCODE_WORKSPACE を指定しない場合、サーバーはプロセスの作業ディレクトリを使用し、その選択を stderr に報告します。ホームディレクトリ、ボリュームのルート、または無関係なチェックアウトを誤って公開しないでください。

@mario.andreschak/mcp-vscode は、Windows x64、Linux x64、Linux ARM64 用のオプションのプラットフォームパッケージを宣言しているため、npm は該当する OpenVSCode ランタイムのみをダウンロードします。Darwin ランタイムパッケージは公開されていません。

vscode_open を呼び出すと MCP App が開きます。全画面表示ボタンを押すと、ホストの全画面表示モードを要求します。許可するかどうかはホストが決定します。

HTTPS 経由で実行する

./bin/mcp-vscode \
  --http \
  --https \
  --host 0.0.0.0 \
  --port 8443 \
  --workspace /work/my-repository \
  --public-url https://editor.example.com:8443 \
  --auth-token "$MCP_VSCODE_TOKEN" \
  --cert /run/secrets/tls.crt \
  --key /run/secrets/tls.key

MCP エンドポイントは https://editor.example.com:8443/mcp です。TLS とベアラートークンの両方が設定されていない場合、ループバック以外へのバインドは拒否されます。代わりに、TLS 終端リバースプロキシをループバック HTTP 子プロセスの前段に配置できますが、その場合は公開 URL と WebSocket ルーティングを正しく設定する必要があります。

MCP ホストの要件

ホストは、安定版 MCP Apps 拡張機能 io.modelcontextprotocol/ui と text/html;profile=mcp-app リソースをサポートする必要があります。

デフォルトのインライン埋め込みでは、宣言された frameDomains を許可し、フレーム内のワークベンチ独自のスクリプト、ワーカー、サービスワーカー、アセット、WebSocket を許可する必要があります。現在の MCP App バンドルは自己完結型であるため、resourceDomains は要求しません。この権限は App が直接読み込むリソースを対象とし、ネストされたワークベンチフレームを許可するものではありません。ホストがフレームの許可を制限している場合、App はその判断を報告し、ブラウザーで開く方法を提示します。

実験的なストリーミングでは、connectDomains を通じて宣言されたゲートウェイ WebSocket を許可し、ツールの結果に含まれる _meta を App に保持し、通常の canvas 画像デコードをサポートする必要があります。ストリーミングに frameDomains は必要ありません。

ソースからビルド

開発に必要なもの:Node.js 22 以降。システムにインストールされた Chromium 系ブラウザーは任意です。存在する場合に限り、実際のストリーミング統合テストで使用されます。

npm ci
npm run check

便利なコマンド:

npm run dev -- --http --port 3001 --workspace . --ide-url http://127.0.0.1:3999
npm run dev:mock-ide -- --port 3999
npm run runtime:fetch -- linux-x64
npm run runtime:build -- win32-x64
npm run package:standalone -- linux-x64
npm run package:standalone -- win32-x64
npm run npm:platform-package -- linux-x64

npm run typecheck は、Node サーバー、MCP App のブラウザーコード、ブリッジ拡張機能を対象とします。npm test はユニットテストとセキュリティポリシーをテストし、npm run test:integration はゲートウェイと実際のシステムブラウザーを使ったスクリーンキャストのスモークテストを実行します(ブラウザーがインストールされていない場合はスキップされます)。

ランタイムフェッチャーは OpenVSCode 1.109.5 を固定し、展開前に上流の Linux SHA-256 ダイジェストを検証します。Windows ビルドでは、設定された上流コミットを固定し、Code OSS の Windows リモート Web ビルドターゲットを呼び出します。ランタイムとスタンドアロンの出力ディレクトリは Git の対象外です。

リリースの自動化

Release Please は、Conventional Commits(fix:、feat:、および破壊的変更を示す type!:)に基づいてリリースプルリクエストを維持します。そのプルリクエストをマージすると、次の v* タグと GitHub Release が作成されます。このタグによって Release CI が開始され、すべてのプラットフォームのアーティファクトがビルドされ、npm の Trusted Publishing を通じて、プラットフォームに依存しないディスパッチャーより先にランタイムパッケージが公開されます。通常のリリースでは、ローカルのアーティファクト、npm トークン、npm login、ブラウザー認証は必要ありません。

Release Please は、作成したタグで Release CI を開始できるよう、リポジトリにスコープを限定した GitHub App を使用します。App の設定は一度だけ行います。Contents、Issues、Pull requests への読み取り/書き込みアクセスを設定し、このリポジトリのみにインストールしてから、次を追加します。

  • リポジトリ変数 RELEASE_APP_CLIENT_ID — App の Client ID。
  • リポジトリシークレット RELEASE_APP_PRIVATE_KEY — App の PEM 秘密鍵。

これらの値が設定されていない場合、Release Please ワークフローは設定に関する通知を出して正常に終了し、リリース処理は行いません。npm 側では引き続きシークレットは不要です。各パッケージは、flujo-app/mcp-vscode-mcpapp の .github/workflows/release.yml を信頼し、npm-publish 環境に制限しています。

通常のリリース手順:

  1. 通常の変更を、Conventional Commit に準拠した squash タイトルで main にマージします。
  2. 自動的に維持される Release Please のプルリクエストを確認してマージします。
  3. タグによって開始される Release ワークフローに従います。ワークフローによってプラットフォームアーカイブが作成・アップロードされ、署名付き provenance とともに npm に公開されます。
npm の手動復旧

npm run npm:publish は、ビルド済みの GitHub Release アーティファクトの検証または公開の再開にのみ使用します。アーティファクトのビルドやダウンロードは行いません。

gh release download v0.2.4 \
  --dir release-artifacts-v0.2.4 \
  --pattern '*.npm.tgz*'
npm run npm:publish -- release-artifacts-v0.2.4 --dry-run
npm run npm:publish -- release-artifacts-v0.2.4

便利な認証コマンド:

npm run npm:whoami
npm run npm:login
npm run npm:publish:wait -- release-artifacts-v0.2.4
npm run npm:publish -- release-artifacts-v0.2.4 --no-login

公開スクリプトは、認証の前にアーティファクトのハッシュとパッケージ内部の名前/バージョンを検証します。tarball の整合性が完全に一致するレジストリバージョンのみをスキップするため、中断した実行を再開できます。監査済みの tarball を再ビルドすることはありません。また、新しいリリースの後に古い失敗リリースを再試行した場合、latest や beta などの dist-tag が古いバージョンに戻ることも防ぎます。

MCP Registry に公開する

MCP Registry に保存されるのはメタデータのみであるため、npm パッケージはすでに公開されている必要があります。

npm run mcp:validate
npm run mcp:publish

スクリプトはアップロードの前に、package.json、server.json、公開済み npm メタデータ、名前空間の認可、固定されたパブリッシャーバイナリを確認します。レジストリのバージョンは変更できません。--force が指定されていない限り、既存のバージョンはスキップされます。

認証方法は次のとおりです。

npm run mcp:publish -- --login github-oidc
npm run mcp:publish -- --login dns --domain example.com --private-key <hex>
npm run mcp:publish -- --relogin
npm run mcp:publish -- --token <github-pat>
npm run mcp:publish -- --no-login
npm run mcp:publish -- --registry http://localhost:8080

セキュリティモデル

  • すべてのファイルパスは、設定されたワークスペースルートの配下に解決されます。アクセス前に、既存のシンボリックリンクは正規化されます。
  • MCP ツールを通じてワークスペースルートを削除することはできません。
  • OpenVSCode はループバックでリッスンし、ランダムな高エントロピーのパスで公開されます。
  • OpenVSCode ブリッジは別個のランダムなトークンを使用し、アクティブなブリッジ接続を1つだけ受け付けます。
  • ストリームチャネルは独立したランダムなトークンを使用し、DevTools エンドポイントを公開せず、ビューアーを1つに制限し、認証情報はアプリ専用の結果メタデータに保持されます。
  • サーバー側でストリーミングする Chromium はループバックの DevTools リスナーと一時的なプロファイルを使用し、シャットダウン時またはクラッシュ時にそのプロファイルは削除されます。
  • POSIX の root 環境へのデプロイでは、サンドボックス化された Chromium のみが非特権の node uid/gid で起動されます。その HOME と XDG パスは、その一時的なプロファイルの配下に制限されます。
  • リモートリスナーには HTTPS とベアラートークン認証が必要です。ストリーミングされたピクセルと入力は、信頼できる TLS/WSS ルーティングを経由する必要があります。
  • MCP_VSCODE_STREAM_NO_SANDBOX=1 は多層防御を弱めるため、コンテナ設定の問題に対するデフォルトの対処法にしないでください。
  • git_run では Git フックが無効になっています。任意の VS Code コマンド、拡張機能のインストール、シェル入力は引き続き強力な操作であり、ホストによる承認が必要です。
  • ブラウザー UI がサンドボックス化されているという理由だけで、MCP ホストの承認を無効にしないでください。ターミナルと拡張機能ホストはサーバー側で実行されます。

報告とデプロイに関するガイダンスについては、SECURITY.md を参照してください。

上流プロジェクトと商標

OpenVSCode Server と Code OSS は、MIT ライセンスの上流プロジェクトです。MCP VS Code は独立したプロジェクトであり、Microsoft または Gitpod と提携しておらず、両社からの推奨も受けていません。「Visual Studio Code」と「VS Code」は Microsoft Corporation の商標です。

ライセンス

MIT。LICENSE と THIRD_PARTY_NOTICES.md を参照してください。

コメント

MCP は初めてですか?

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

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