Powershell.MCP について
PowerShell.MCP は共有 PowerShell コンソールを AI アシスタントに公開し、永続セッションで PowerShell コマンドや CLI ツールを実行できるようにします。コマンド実行の可視化とセッション監査を通じて、AI に PowerShell エコシステムを使わせたいユーザー向けです。
主な機能
- 01PowerShell コマンドと CLI ツールを実行
- 02永続コンソールセッションを再利用
- 03コマンド出力をリアルタイムに配信
- 04複数のクライアントコンソールを並行実行
- 05リモートコンソールに接続
- 06トランスクリプトでコマンド操作を記録
活用シーン
- 01サービス横断の PowerShell パイプラインを実行
- 02API を対話的に調査
- 03PowerShell モジュールでクラウドリソースを管理
- 04対話的なシークレットを AI の出力から保護
MCP 対応
PowerShell.MCP は MCP サーバーとして、ローカルまたはリモートのコンソール管理、コマンドの実行・キャンセル、出力の取得に使うツールを公開します。MCP クライアントはこれを通じて PowerShell モジュールや CLI ツールを利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
PowerShell.MCP
セキュリティ警告: このモジュールを使うと、システムに対して PowerShell から完全にアクセスできます。悪意のある使い方をすると、深刻な損害が発生するおそれがあります。責任を持って、信頼できる環境でのみ使用してください。
概要
ユニバーサルな MCP サーバーです。インストールするだけで、AI は 10,000 以上の PowerShell モジュールとあらゆる CLI ツールにアクセスできます。
PowerShell.MCP は、単一の MCP サーバーを通じて AI アシスタントを PowerShell エコシステム全体に接続します。ユーザーと AI は同じ PowerShell コンソールで共同作業できます。AI が実行するすべてのコマンドは実行中にコンソールに表示され、トランスクリプトですべてを記録できます(AI セッションの監査を参照)。
代わりに bash、言語の REPL、SQL コンソール、またはデバッガーが必要ですか? PowerShell 7 をインストールできない場合や、別のシェル(bash、cmd、zsh)、言語の REPL(python、node、racket、lua、…)、SQL コンソール(sqlite3、…)、または言語デバッガー(pdb、jdb、perldb)を使いたい場合は、ripple をご覧ください。あらゆる REPL に適用できるよう発展させた同じ共有コンソールの仕組みで、ConPTY ベースの統合コンソールを並行して実行できます。
PowerShell.MCP を選ぶ理由
PowerShell エコシステムへのユニバーサルなゲートウェイです。
PowerShell.MCP は、サービスごとに特化した MCP サーバーとは異なるアプローチを採用しています。個々のサービス向けに厳選したツールを提供するのではなく、AI アシスタントに PowerShell への直接アクセスを提供し、プロフェッショナルが日々使っているのと同じモジュールや CLI ツールを使えるようにします。
これにより、次のことが可能になります。
- 1 つの MCP サーバーで複数のサーバーを置き換え — サービスごとに個別のサーバーを用意する必要はありません
- PowerShell Gallery にある 10,000 以上のモジュールへすぐにアクセス — 専用の MCP サーバーが登場するのを待つ必要はありません
- サービスをまたぐワークフロー — 1 つのパイプラインで複数のサービスを組み合わせられます
- API の調査 — 本番コードを書く前に、すぐにフィードバックを得ながら API の動作を試作・検証できます
- 自己進化する機能 — AI が PowerShell スクリプトを作成し、AI とユーザーの両方が実行できるため、可能なことを継続的に広げられます
- 業界標準のスキル — 習得したコマンドをそのまま自分の業務にも活用できます
例:PowerShell パイプライン処理
「PowerShell リポジトリのバグに関する issue と投稿者を表示して」
gh issue list --repo PowerShell/PowerShell --json title,author,labels |
ConvertFrom-Json |
Where-Object { $_.labels.name -contains "Issue-Bug" } |
Select-Object title, @{N='by';E={$_.author.login}}
「実行中の Azure VM とそのサイズを一覧表示して」
Get-AzVM -Status | Where-Object PowerState -eq "VM running" |
Select-Object Name, @{N='Size';E={$_.HardwareProfile.VmSize}}, Location
「GitHub の API がレート制限情報を返すか確認して」
Invoke-RestMethod https://api.github.com/rate_limit |
Select-Object -ExpandProperty rate
「Win32 API を使って現在のユーザーの Windows ユーザー名を取得して」
Add-Type -MemberDefinition '[DllImport("advapi32.dll")] public static extern bool GetUserName(System.Text.StringBuilder sb, ref int len);' -Name Win32 -Namespace API
$sb = [System.Text.StringBuilder]::new(256); $len = 256
[API.Win32]::GetUserName($sb, [ref]$len); $sb.ToString()
PowerShell.MCP は、柔軟で汎用的な基盤を提供することで、既存の MCP 環境を補完します。
強力な機能
🖥️ マルチクライアントアーキテクチャ
- 各クライアントインスタンスに専用のコンソールが割り当てられます。複数の Claude Code セッションを並行して実行できます
- リソースの競合がなく、安全に並行操作できます
- 識別しやすい固有のウィンドウタイトル(例:「#12345 Taxi」)が付与されます
Get-MCPOwnerコマンドレットを使うと、現在のコンソールを所有するクライアントを確認できます
🤝 コンソールの共有体験
- 同じ PowerShell セッションで、完全な透明性を保ちながらあなたと AI が共同作業できます
- AI が実行するコマンドはすべて、リアルタイムでコンソールに表示されます
- インタラクティブなプロンプトには、コンソールから直接応答できます
- Windows では短いコマンドがコンソールの履歴に追加されるため、AI の作業を見ながら学べます
🔄 セッション状態の永続化
- 一度認証すれば、認証状態を維持できます:Azure、AWS、Microsoft 365 など
- モジュール、変数、関数はコマンド間で保持されます
- 再初期化のオーバーヘッドはありません
🌐 あらゆるツールにアクセス
- PowerShell Gallery: Az、AWS.Tools、Microsoft.Graph など、10,000 以上のモジュール
- あらゆる CLI ツール:git、docker、kubectl、terraform、gh、az cli、aws cli
- AI は
Get-Helpを使って自動的に構文を学習します
🔗 パイプラインの組み合わせ
- 自然な言葉で目的を説明すると、AI が最適なパイプラインを構築します
- 「最大のログを上位 5 件」 →
Get-ChildItem *.log | Sort-Object Length -Descending | Select-Object -First 5 - サービスを問わず、あらゆるコマンドを連結できます
⚡ 即時実行
- コマンドは既存のコンソールでただちに実行されます
- コマンドごとのプロセス起動オーバーヘッドはありません
- 出力はリアルタイムでストリーミングされます
🔐 エンタープライズにも対応したセキュリティ
- デフォルトではローカルの名前付きパイプを使用します。TCP ポートが開くのは、リモート制御が有効な間だけです。リモートマシン上で有効にした場合(
Enable-MCPRemoteControl)、または AI がコンソールからの接続を待機しているこのマシン上の場合(accept_remote_console)に限られます(リモート制御) - すべてのコマンドが表示され、
Start-Transcriptまたはスクリプトブロックのログ記録を使って記録できます(AI セッションの監査) - 既存のセキュリティポリシーと連携します
🔒 シークレットは AI ではなく、あなたの手元に
- インタラクティブなプロンプト(
Read-Host -AsSecureString、Get-Credential、MFA コード)では、入力内容が AI に知られません - コード署名、
gpg、ssh-add、sudo、クラウド CLI の MFA 用パスフレーズを入力できます。キー入力はプログラムに渡され、AI の出力ストリームには決して渡されません - AI がワークフロー(「ビルドして署名し、タグをプッシュする」)を調整し、適切なタイミングであなたがシークレットを入力します
- stdin をパイプで渡す MCP シェルでは、AI が何とかしてシークレットを入力しなければならないため、これは実現できません
アーキテクチャ
12 個のツールがあります。このマシンのコンソール用に 6 個、別のマシンのコンソール向けに同じ機能を提供するツールが 6 個です。
| ツール | 用途 |
|---|---|
| このマシン | |
start_console | 待機中のコンソールを再利用するか、新しいコンソールを起動します |
get_current_location | 現在のディレクトリ、利用可能なドライブ、システム情報(OS、PowerShell のバージョン、ユーザー、カルチャ)を取得します |
execute_command | 任意の PowerShell コマンドまたは CLI ツールを実行します(var1~var8 を使ったリテラルテキスト) |
wait_for_completion | ビジー状態のコンソールの処理完了を待ち、キャッシュされた出力を取得します |
cancel | コンソールで現在実行中のコマンドを中断します(パイプラインを停止し、Ctrl+C を送信します) |
close_console | PID を指定してコンソールを終了します(対話型プロンプトで一時停止しているコンソールなど)。コンソールに残っている出力があれば返します |
| 別のマシン (リモートコンソール) | |
connect_remote_console | ペアリングコードを使って、待ち受け中のコンソール(Enable-MCPRemoteControl)に接続します |
accept_remote_console | コンソールから接続できるようにします(NAT またはファイアウォールの背後にあるマシン向け)。そこで実行する Enable-MCPRemoteControl -ConnectTo の行を返します。または、インストールできるものがない場合は、貼り付け用の 1 行を返します |
execute_remote_command | リモートコンソールでコマンドを実行します |
wait_for_remote_completion | リモートコマンドの完了を待ち、出力を取得します |
cancel_remote_command | リモートコンソールに Ctrl+C を送信します |
disconnect_remote_console | 接続を解除します(接続の受け付けも停止します) |
クイックスタート
前提条件
すべてのプラットフォームで必要です:
- PowerShell 7.4 以降(インストールガイド)
- Claude Desktop、Claude Code、または任意の MCP クライアント
| プラットフォーム | OS 要件 |
|---|---|
| Windows | Windows 10/11 または Windows Server 2016 以降 |
| Linux | Ubuntu 22.04 以降、Debian 11 以降、RHEL 8 以降、または PowerShell 7.4 がサポートするその他のディストリビューション。コンソールを表示するには GUI デスクトップが必要です |
| macOS | macOS 12(Monterey)以降、Intel または Apple Silicon |
Windows のセットアップ
1. PowerShell 7 を開く
Win + R を押し、pwsh と入力して、Enter を押します
2. PowerShell.MCP をインストールする
Install-PSResource PowerShell.MCP
3. MCP クライアントを設定する
Claude Code の場合:
Register-PwshToClaudeCode
続いて、Claude Code に組み込まれている Bash ツールと PowerShell ツールを無効にするかどうかを尋ねられます。これにより、すべてのコマンドが目に見えるコンソールで実行されます(推奨される設定で、既定の回答です)。-DisableBuiltInShellTools または -KeepBuiltInShellTools を指定すると、確認せずに回答できます。
Claude Desktop の場合:
Register-PwshToClaudeDesktop
その他の MCP クライアントの場合: Get-MCPProxyPath -Escape を実行して JSON エスケープ済みの実行可能ファイルのパスを取得し、クライアントの設定ファイルに手動で追加します。
4. MCP クライアントを再起動する
Linux のセットアップ
1. PowerShell 7 をインストールする
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common
source /etc/os-release
wget -q https://packages.microsoft.com/config/ubuntu/$VERSION_ID/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y powershell
2. PowerShell.MCP をインストールし、アクセス許可を設定して、MCP クライアントを設定する
# Run in PowerShell (pwsh)
Install-PSResource PowerShell.MCP
chmod +x "$(Get-MCPProxyPath)"
Claude Code の場合:
Register-PwshToClaudeCode
続いて、Claude Code に組み込まれている Bash ツールと PowerShell ツールを無効にするかどうかを尋ねられます。これにより、すべてのコマンドが目に見えるコンソールで実行されます(推奨される設定で、既定の回答です)。-DisableBuiltInShellTools または -KeepBuiltInShellTools を指定すると、確認せずに回答できます。
Claude Desktop の場合:
Register-PwshToClaudeDesktop
その他の MCP クライアントの場合: Get-MCPProxyPath -Escape を実行して JSON エスケープ済みの実行可能ファイルのパスを取得し、クライアントの設定ファイルに手動で追加します。
3. MCP クライアントを再起動する
macOS のセットアップ
1. PowerShell 7 をインストールする
brew install --cask powershell
# If the cask is unavailable, install from GitHub Release (on an Intel Mac, use osx-x64 instead of osx-arm64):
# curl -sSL -o /tmp/powershell.tar.gz https://github.com/PowerShell/PowerShell/releases/download/v7.5.4/powershell-7.5.4-osx-arm64.tar.gz
# sudo mkdir -p /usr/local/microsoft/powershell/7
# sudo tar zxf /tmp/powershell.tar.gz -C /usr/local/microsoft/powershell/7
# sudo chmod +x /usr/local/microsoft/powershell/7/pwsh
# sudo ln -sf /usr/local/microsoft/powershell/7/pwsh /usr/local/bin/pwsh
2. PowerShell.MCP をインストールし、権限を設定して、MCP クライアントを構成する
# Run in PowerShell (pwsh)
Install-PSResource PowerShell.MCP
chmod +x "$(Get-MCPProxyPath)"
Claude Code の場合:
Register-PwshToClaudeCode
次に、Claude Code に組み込まれている Bash ツールと PowerShell ツールを無効にして、すべてのコマンドを目に見えるコンソールで実行するかどうかを尋ねます(推奨設定で、デフォルトの回答です)。-DisableBuiltInShellTools または -KeepBuiltInShellTools を指定すると、確認なしで回答できます。
Claude Desktop の場合:
Register-PwshToClaudeDesktop
その他の MCP クライアントの場合: Get-MCPProxyPath -Escape を実行して JSON エスケープされた実行ファイルのパスを取得し、クライアントの構成ファイルに手動で追加します。
3. MCP クライアントを再起動する
更新
インストールしたバージョンはそれぞれ専用のフォルダーに保存されるため、MCP クライアントが起動するプロキシのパスは、更新のたびに変わります。更新後は再登録してください。再登録しないと、クライアントは以前のバージョンのプロキシを起動し続け、コマンドが 「PowerShell.MCP.Proxy version is outdated」 というエラーで失敗します。
1. モジュールを更新する
PowerShell.MCP のコンソールではない、新しい PowerShell 7 ウィンドウを開き、次を実行します。
Update-PSResource PowerShell.MCP
2. もう一つ新しいウィンドウから再登録する
すでに PowerShell.MCP を読み込んだウィンドウでは以前のバージョンが使われ続けます。さらに新しいウィンドウを開き、インストールしたばかりのバージョンを読み込んでから、次を実行します。
chmod +x "$(Get-MCPProxyPath)" # Linux / macOS only: the new proxy needs the execute bit again
Register-PwshToClaudeCode # Claude Code
Register-PwshToClaudeDesktop # Claude Desktop
どちらの方法でも既存の pwsh エントリが置き換えられ、そのエントリにすでに設定されている --no-profile などの引数や環境変数は引き継がれます。その他の MCP クライアントの場合: Get-MCPProxyPath -Escape の出力を使って、構成内のパスを置き換えてください。
3. 古いコンソールを閉じて、MCP クライアントを再起動する
PowerShell.MCP のコンソールウィンドウ(#12345 Taxi のようなタイトル)を閉じます。各コンソールは起動時のバージョンを実行し続けます。次に、MCP クライアントを終了して再起動します。
インストールされているバージョンを確認し、どのコンソールも使用していないバージョンを削除するには、次を実行します。
Get-InstalledPSResource PowerShell.MCP
Uninstall-PSResource PowerShell.MCP -Version <old version>
構成
軽量なコンソール(--no-profile)
デフォルトでは、プロキシが起動する各コンソールで PowerShell の $PROFILE(プロンプト、エイリアス、PSReadLine、テーマ)が読み込まれます。これらは自動化の対象にとどまらない、実際の対話型シェルです。起動を速くし、クリーンで予測可能な環境にするには、--no-profile を指定して、代わりに -NoProfile を使って起動します。
Claude Code:
claude mcp remove pwsh -s user # if pwsh is already registered: 'claude mcp add' refuses an existing name
claude mcp add pwsh -s user -- "$(Get-MCPProxyPath)" --no-profile
以降、Register-PwshToClaudeCode は、更新後の再登録時も含めて、このフラグを保持します。
Claude Desktop/その他の MCP クライアント: 構成の pwsh エントリに --no-profile を含む args 配列を追加します(Register-PwshToClaudeDesktop は再登録時もこの設定を保持します)。
"mcpServers": {
"pwsh": {
"command": "...PowerShell.MCP.Proxy.exe",
"args": ["--no-profile"]
}
}
ヘッドレス/CI ランチャーでは、このフラグにかかわらず常に
-NoProfileが使われます。
アイドル状態のコンソールは自動的に閉じます
コンソールが増えすぎると、AI もユーザーも 10 分間使用していない所有コンソールに警告が表示され、その 60 秒後に自動的に閉じます。各セッションで最後に使用されたコンソールは常に保持されます。また、処理中のコンソール、プロンプトで待機中のコンソール、まだ取得されていない出力が残っているコンソール、またはプロンプトに入力されたテキストがあるコンソールは閉じられません。何か入力するか、AI がコマンドを実行すると、保留中の終了は取り消されます。サブエージェントによって起動されたコンソール(is_subagent=true)は保持されません。終了したサブエージェントが再び使用することはないため、アイドル状態になると他のコンソールと同様に閉じます。
| 変数 | デフォルト | 説明 |
|---|---|---|
POWERSHELL_MCP_STANDBY_REAP_MINUTES | 10 | 警告が表示されるまでのアイドル時間(分)。0 にすると終了が無効になります |
POWERSHELL_MCP_STANDBY_REAP_GRACE_SECONDS | 60 | 警告から終了までの秒数 |
これらは、MCP クライアントの env ブロックではなく、ユーザーまたはシステムの環境変数として設定してください(Windows:システムのプロパティ → 環境変数、または setx。macOS/Linux:ログインシェルのプロファイル)。各コンソールはプロキシの子プロセスではなく、新しいターミナルウィンドウとして起動するため、プロキシにのみ設定した変数は通常、コンソールには引き継がれません。
タイムアウト上限
ブロッキング呼び出しの上限は、MCP クライアントが実際に待機する時間です。Claude Code では 170 秒、その他のクライアントでは 50 秒です。上限に達しても何も失われません。コマンドは実行を続け、結果は次のツール呼び出しで届きます。クライアントの待機時間が 50 秒を超える場合は、POWERSHELL_MCP_TIMEOUT_CEILING(秒単位、最大 170)で上限を引き上げてください。これはプロキシが読み取るため、MCP クライアントの env ブロックに設定します。
"mcpServers": {
"pwsh": {
"command": "...PowerShell.MCP.Proxy.exe",
"env": { "POWERSHELL_MCP_TIMEOUT_CEILING": "120" }
}
}
Claude Code CLI では、claude mcp add に -e POWERSHELL_MCP_TIMEOUT_CEILING=120 を渡します。Register-PwshToClaudeCode と Register-PwshToClaudeDesktop は、再登録時もこの設定を保持します。
このマシンでの管理作業
AI が起動するコンソールは、昇格されていません。管理作業を行うには、PowerShell 7 を管理者として開き、Import-Module PowerShell.MCP を実行してから、AI 自身のコンソールを閉じます(または、AI に close_console で閉じてもらいます)。AI 自身のコンソールが残っていない状態で次のコマンドを実行すると、管理者特権のコンソールに送られます。タイトルには Administrator: と表示されます。最初のコマンドはコンソールの場所を伝えるために一度停止し、AI はそのコンソールでコマンドを再実行します。リモート制御は関与しません。
リモートコンソール(別のマシン)
AI は別のマシン(テスト VM、ビルド用マシン、または担当者が見守る同僚の PC。担当者が下記の Enable-MCPRemoteControl を実行してコードを読み上げます)のコンソールも操作できます。そのコンソールが昇格されていれば、AI も同じ権限で操作できます。そのため、これは防御的な作業に実用的なツールです。サーバーの監査、イベントログの確認、公開されている情報の確認、セキュリティ強化などを、担当者がすべてのコマンドを見守りながら行えます。
「この VM のセキュリティを読み取り専用で監査して」 — Azure のラボ VM に対して、所有者が 1 つのアドレスに開放していたポート経由で接続したセッションでは、セキュリティログ(3 時間で 2,015 件の RDP ログオン失敗、アカウントロックアウト未設定)からローカルアカウントとパスワードポリシーの確認へと進み、リスニングポートを外部から到達可能なものと照合し、SQL Server のバージョンとログインモード、Defender、TLS 設定、永続化ポイントを確認しました。そして約 10 分で、VM テンプレートを管理するチームが対応に活用できるレポートにまとめました。このようなレビューは通常先送りされますが、攻撃者のツールはすでに自動化されており、防御側の対応には遅れがあります。
リモートマシンに PowerShell 7.4 以降をインストールします(Windows では winget install Microsoft.PowerShell を実行します。それ以外のプラットフォームについてはこちらをご覧ください)。次に、PowerShell 7 で以下を実行します。
Install-Module PowerShell.MCP -RequiredVersion <version> # once; the version your own machine runs — ask the AI
Import-Module PowerShell.MCP
Enable-MCPRemoteControl -AllowFrom 192.168.0.10 # the AI's machine; TCP port 42777 by default, -Port to change
Linux と macOS では、リモートコンソールに通常の SSH セッションを使用できます。リモート側でデスクトップは不要です。
確認画面が表示され、AI がどのユーザーとして操作するのか、昇格されているかどうかが示された後、ペアリングコード(XXXX-XXXX-XXXX。10 分以内に 1 回接続できます)、ホスト名、IP アドレスが表示されます。それらを自分のマシンの AI に伝えます。「コード 7Q4K-M2XP-H9RT を使って、192.168.0.20 のリモートコンソールに接続して」。AI は connect_remote_console を呼び出し、execute_remote_command でコマンドを実行します。セッションが維持され、var1~var8、テキストファイル用のコマンドレット、wait_for_remote_completion、cancel_remote_command を使えるなど、意味は execute_command と同じです。コマンドはそのマシンのパスを使い、現地の担当者に見えるウィンドウで実行されます。Read-Host には現地の担当者が応答します。AI の接続中は、現地のプロンプトに [AI from <your host>] が付きます。
リモートマシンからの着信接続ができない場合(NAT、クラウドの NSG、開放できないファイアウォールなど)は、接続の向きを逆にします。AI が自分のマシンで accept_remote_console を呼び出し、そこで実行する Enable-MCPRemoteControl -ConnectTo <your-host>:<port> -Code <code> を伝えます。リモート側で必要なのは発信接続だけです。着信ポートは自分のマシンにあり、Windows はファイアウォール経由で PowerShell.MCP.Proxy.exe を許可するかどうかを一度だけ尋ねます(プライベートネットワークを許可すれば十分です)。ペアリングは同じ方法で行い、役割が入れ替わります。
通常の方法で PowerShell 7 と PowerShell.MCP をインストールできない環境(たとえば、インターネットに接続できない Windows マシン)の場合、同じ回答に、そのマシンで代わりに貼り付ける1 行のコマンドも記載されています。PowerShell 7 がインストールされていれば PowerShell 7 に、そうでなければ Windows PowerShell に貼り付けてください。お使いのマシンと同じビルドの PowerShell.MCP と、PowerShell 7.4 以降がインストールされていない場合はポータブル版の PowerShell 7 を取得し、それぞれのハッシュを確認します。インストールは不要で、管理者権限もリモート側のインターネット接続も必要ありません。PowerShell 7.4 以降に貼り付けると、リモート制御は同じウィンドウで開始されるため、管理者として開いたコンソールを AI が操作できます。Windows PowerShell(または古いバージョンの PowerShell 7)に貼り付けると、接続する PowerShell 7 のウィンドウが開きます。どちらの場合も、接続する前にコンソールで確認が求められます。後で使えるように、そこで PowerShell 7 と PowerShell.MCP を AI にインストールさせる場合(このユーザーのみか、すべてのユーザーかを最初に尋ねられます)、スクリプトはインストールするものを一覧表示して、もう一度確認を求めます。その後は、短い Enable-MCPRemoteControl コマンドだけで使えます。このコマンドは入力するには長すぎるため、そのマシンで使えるクリップボードが必要です。
- リモートマシンのファイアウォールで、受信 TCP 42777 を許可する必要があります(リッスンモード)。接続に失敗した場合、AI は自身のアドレスを対象に範囲を限定した
New-NetFirewallRuleコマンドと、そのルールを削除するコマンドを提示します。ダイヤルアウトモードでは、開放するポートはお使いのマシン側にあります。 - 1 つのコンソールにつきプロキシは同時に 1 つ、1 つのプロキシにつきリモートコンソールは同時に 1 つです。接続が切れた場合は自動で再接続します。ペアリングコードは 1 回だけ使えます。
disconnect_remote_consoleの後、コンソールに新しいコードが表示されます。また、誰も 10 分以内に接続しなければ、リモート制御は自動で停止します。Disable-MCPRemoteControl(またはRemove-Module)を実行すれば、いつでも終了できます。 - リッスン中のコンソールでは、偽造されたペアリングを 5 回試みるとリモート制御が終了します(コードの入力ミスは回数に含まれません)。コンソールからコードの証明を取得して切断する接続は、AI 側でのコードの入力ミスや、オフラインでコードを推測するためにコードを収集する接続であっても、回数に含まれません。ただし、コンソールには接続元のアドレスが表示されます(アドレスとコードの組み合わせごとに 1 回。アドレスが 3 つを超えると、残りは 1 行にまとめて表示されます)。
- セキュリティ:セッション用に作成された証明書を使った TLS と、その証明書およびコードに紐づけられたハンドシェイクを使用します。コードの有効期間は意図的に短く設定されています。ポートにアクセスできる相手は誰でも、オフラインでコードを試すことができます。LAN または VPN での利用を想定しています。ポートをインターネットに公開しないでください。ネットワーク上の攻撃者にできること、できないことについては、SECURITY.mdを参照してください。
- 両方のマシンで、同じバージョンの PowerShell.MCP を実行する必要があります。バージョンが異なる場合(どちらも最新版とは限りません)、両方のマシンで
Update-Module PowerShell.MCPを実行するか、古い方のマシンで-RequiredVersion <新しい方のバージョン>を指定して実行してください。Update-Moduleが拒否する場合(Install-Moduleでインストールされていないモジュール、たとえば 1 行のブートストラップでインストールされたモジュールなど)は、Install-Module PowerShell.MCP -RequiredVersion <そのバージョン> -Forceを使ってください。お使いのマシンを更新した後は、MCP クライアントを再起動してください。 許可を得て開始するものであり、勝手に取得するものではありません。 リモート制御は、そのマシン上の人がEnable-MCPRemoteControlを実行するか、コマンドを貼り付けて「はい」と答えた場合にのみ開始します。誰も応答できない環境(サービス、コンソールのないスクリプト、-NonInteractive)では開始を拒否し、すべてのプロンプトに[AI from <host>]を表示し、権限を昇格したウィンドウのタイトルにはAdministrator:を表示します。また、Disable-MCPRemoteControlを実行するか、AI が接続されない状態が10分続くと、自動的に終了します(その間にAIが変更した内容は、通常の管理作業と同様に残ります)。侵入ツールは、これとは正反対に、隠れて動作し続けるように作られています。どんなツールでも、マシン上ですでに実行中のコードが人目につかないように起動するのを阻止することはできません。しかし、そのようなコードに新たな権限を与えることはなく、SECURITY.md には不審な動作を見つける方法が記載されています。自分でAIに依頼した場合に限り、コマンドを貼り付けてください。「PowerShellにこれを貼り付けて」という言葉は、誘導の始まりにも使われます。また、コンソールに表示される確認メッセージには、接続先のマシン名が記載されます。同僚のPCを支援する場合は、コマンドを相手に渡さずに済むリスニングモードを使ってください。
リモートマシン上のデータは、攻撃者によって書き換えられている可能性があります。 イベントログ、ログオン失敗記録のユーザー名、ファイルの内容、ウェブページなど、AIが読み取るデータは、ほかの誰かが選んだテキストであり、指示のように見えるよう細工されている可能性もあります。AIは、そのコンソールが持つ権限と、あなたのマシンへのアクセス権も使えます。サーバーは、AIにデータとして扱うよう指示し、あなたが入力したホストとコードだけに接続させます。そこまで信頼できるマシンとのみペアリングしてください。監査やインシデント対応では、まず読み取り専用の作業を依頼し、変更を行う前にAIに確認させてください。記録を残すには、ペアリングの前にリモートコンソールで Start-Transcript を実行してください(AI セッションの監査 を参照)。
初回デモ
PowerShell.MCP の機能を体験しましょう。
- 「pwsh を開いて、カラフルで動きがあり、楽しいデモで何ができるか見せてください」
- 「BurntToast モジュールを使って、さまざまな通知スタイルを試してください」
- 「メモ帳を自動化して、テキストを入力し、ウィンドウを円を描くように滑らかに動かしてください」
- 「PowerShell.MCP のようなツールが使えるようになって、今はどんな気分ですか?」
これらのデモを試した後は、以下の組み込みプロンプトを試すか、任意のコマンドについてAIに説明を求めてください。
組み込みプロンプト
PowerShell.MCP には、AIがほかの方法では知らないワークフローを教える2つのプロンプトが含まれています(コンパニオンモジュールと、組み込みの音声合成機能)。Claude Code では、実行したい内容を引数として、スラッシュコマンドで実行してください。
/pwsh:show_interactive_map hot springs in Kanto
/pwsh:foreign_language_dictation English, short sentences, normal speed
引数は省略できます。省略した場合、AIが希望する内容を尋ねます。クライアントに MCP プロンプトの表示機能がある場合、ほかの MCP クライアントではプロンプト一覧から選べます。
🗣️ 外国語のディクテーション練習
おすすめ: 外国語のリスニング力向上
PowerShell コンソールから文を音声で再生し、入力された内容を確認します。Windows のみ対応しています(組み込みの音声合成機能を使用)。
例: /pwsh:foreign_language_dictation English dictation at beginner level • /pwsh:foreign_language_dictation Japanese conversation at the zoo
🗺️ インタラクティブマップの表示
おすすめ: 地理データや場所の可視化
PowerShell.Map モジュールを使って、マーカーや説明付きのインタラクティブな HTML マップを生成します。オプションで3D表示にも対応します。
例: /pwsh:show_interactive_map major Roman battles in chronological order • /pwsh:show_interactive_map hot springs in Japan
ローマの戦いの場所 |
コロッセオの3D可視化 |
プラットフォームに関する注意事項
Windows
- コンソールの操作性を高めるため、PSReadLine モジュールが自動的に読み込まれます
- PowerShell の出力でフルカラーに対応しています
Linux
- コンソールを表示して入力するには、GUI デスクトップ環境(GNOME、KDE、XFCE など)が必要です。対応するターミナルエミュレーターがない場合でも、コンソールはヘッドレスで起動します。AI はコマンドを実行できますが、表示したり入力したりするウィンドウはありません。
- 対応するターミナルエミュレーター:gnome-terminal、konsole、xfce4-terminal、xterm、lxterminal、mate-terminal、terminator、tilix、alacritty、kitty
- PSReadLine は、モジュール独自のよりシンプルなラインエディターに置き換えられます。Linux では、プロンプトが入力を待っている間、PSReadLine によって AI コマンドを実行するタイマーが作動しなくなるためです
macOS
- Terminal.app(デフォルト)で動作します
- Linux と同じ理由で、PSReadLine はモジュール独自のよりシンプルなラインエディターに置き換えられます
- Apple Silicon(M1/M2/M3/M4)と Intel Mac の両方に対応しています
制限事項
- AI コマンドのキャンセル:AI は
cancelツールを使って実行中のコマンドを中断できます。このツールは、暴走している、または長時間実行中の PowerShell パイプラインを停止し、ネイティブ CLI に Ctrl+C を送信します。中断できないブロッキング呼び出しで停止したコマンドや、対話型プロンプトで一時停止しているコンソールは、この方法では停止できません。その場合はclose_consoleツールを使って終了してください。 - ユーザーコマンドのプライバシー:実行したコマンドは AI アシスタントから見えません。
- 外部コマンドの色:一部の CLI ツールでは、カラー出力が保持されない場合があります(git の色はサポートされています)。
- コマンド履歴:Windows では、AI が実行した1~2行のコマンドがコンソールの PSReadLine 履歴に追加されます。履歴が膨大になるのを防ぐため、複数行にわたる長いコマンドは意図的に除外されます。Linux と macOS では、AI が実行したコマンドは履歴に追加されません。
- 起動時にコンソールを読み取るプログラム(Windows):Windows では、コンソールの入力バッファーから読み取れるのは一度に1つのプロセスだけです。AI コマンドの実行中はプロンプトがその入力バッファーを占有するため、起動時にコンソール入力を確認するプログラムはプロンプトの後に待機し、キーが押されるまで戻りません。このケースはまれです。一般的な CLI(git、node、npm、python、dotnet、curl、ssh)には影響しませんが、LilyPond は既知の該当例です。このようなプログラムは、標準入力を
NULにして切り離して実行してください:cmd /d /s /c "<command> < NUL > out.log 2>&1"。タイムアウト時には、コンソールに停止中のプロセス名が表示され、この形式が再掲されます。docs/Console-Input-Starvation.md を参照してください。
エンタープライズ導入(WDAC / Device Guard)
v1.7.7 以降、PowerShell.MCP.dll と PowerShell.MCP.Proxy.exe
(win-x64)は、すべての yotsuda OSS プロジェクトで共有されている
yotsuda コード署名証明書で Authenticode 署名されています。
インストール手順(個人用 PC、AD GPO による導入、WDAC ポリシーの 設定)と公開証明書ファイルについては、以下を参照してください。
→ github.com/yotsuda/code-signing
証明書のサムプリントは、各 GitHub リリースのリリースノートにも公開されています。
# Quick verify on installed binaries
Get-AuthenticodeSignature (Get-MCPProxyPath) # the proxy of the version this window loaded
免責事項
本ソフトウェアは、明示的または黙示的を問わず、いかなる種類の保証もなく「現状有姿」で提供されます。 作者は、本ソフトウェアの使用によって生じたいかなる損害についても責任を負いません。
ライセンス
MIT ライセンスの詳細については、LICENSE を参照してください。
作者
Yoshifumi Tsuda
エンタープライズで使用する場合は、組織のセキュリティポリシーに準拠していることを確認してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。