In this article
Dockerを使ってMCPサーバーを実行する方法
MCPサーバーは、CursorやClaude Desktopなど、さまざまなMCPホストに接続するインテグレーションです。しかし、こうしたMCPインテグレーションの多くは、エンドユーザーがMCPサーバーをローカルにインストールして起動することを前提としたセットアップ手順を含んでいます。そこで役立つのがDockerです。
Dockerの説明に入る前に、STDIOインターフェースを介してローカルプロセスでMCPサーバーに接続するよう開発者に案内する方法が、どれほど一般的かを示す例をいくつか見てみましょう。
以下は、専用のvscode/mcp.jsonファイルを使った、VS CodeのMCPサーバーインテグレーションのリファレンスからの例です。
{
"servers": {
"Perplexity": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-perplexity-ask"],
"env": {
"PERPLEXITY_API_KEY": "${input:perplexity-key}"
}
}
}
}
こちらは、Cursorの.cursor/mcp.jsonファイルの例です。
{
"mcpServers": {
"npm-package-info": {
"command": "node",
"args": ["/Users/lirantal/projects/repos/mcp-server-npm"]
},
}
}これらの例は、システムプロセス(簡単に言えば「コマンド」)を起動してMCPサーバーをローカルで実行する、一般的な利用パターンに沿っています。
コマンドを実行してMCPサーバーを起動する方法が、常に最適とは限りません。他に方法はあるのでしょうか?
MCPサーバーをローカルで実行する際のセキュリティリスクと課題
MCPサーバーをローカルで実行するのは、煩わしく感じることがあります。また、実行に伴うさまざまなセキュリティ上の懸念もあります。これは、開発者やセキュリティチームが守るべき、明白なAIセキュリティ対策の課題に加わるものです。
MCPサーバーのローカル実行を求められたとき、開発者やセキュリティチームが直面する不便さの例をいくつか紹介します。
ローカル環境のセットアップ — たとえば、私はPython開発者ではないのに、接続したいMCPサーバーがPythonで構築されていて、プロジェクトのビルドと実行に上流の依存関係を取得する必要があるとします。その場合、セットアップの手間が増え、さらに苦労することになります。
OSへの依存 — よくあるトラブルシューティングの例として、Windows、macOS、Linuxのどれを使っているかによって、コマンドの指定方法や組み立て方を変える必要があります。
悪意のあるMCPサーバー — MCPサーバーのコードが悪意のあるものだった場合、開発環境内のあらゆるものに即座にアクセスされてしまいます。
Dockerを使ってMCPサーバーを実行する
この問題を回避する方法の1つは、実績のある昔ながらの手法に立ち返り、アプリケーションの成果物をDockerでラップすることです。
Dockerは、バックエンドサービスなどの成果物を標準化された再現可能な方法でビルドし、クラウドにデプロイしたいという開発者のニーズに応え、広く普及しました。また、Docker Composeファイルを使えば、マイクロサービスアーキテクチャのローカルテストや再現も簡単に行えます。
今度はDockerが、Dockerコンテナ内でMCPサーバーを起動するのにも役立ちます。いくつか例を見てみましょう。
GitHub MCPサーバーをDocker経由でQodo Genに追加する
GitHubのMCPサーバーは、GitHubアカウントへのアクセスを可能にするインテグレーションです。リポジトリのデータを照会したり、イシューを作成したりするなど、GitHub APIを通じてさまざまな操作を実行できます。
Docker経由でGitHub MCPサーバーを起動するには、通常、次のようなコマンドを実行します。
docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN=1234 ghcr.io/github/github-mcp-serverこのコマンドを正常に実行するには、次の準備が必要です。
`docker コマンドを実行できるように、Dockerをインストールする
Dockerアプリケーションが実行中であることを確認する
GitHubアカウント用の個人アクセストークン(PAT)を作成する(可能な限り権限を最小限にすることをおすすめします)
このコマンドを実行すると、GitHub Container Registryから`github-mcp-serverイメージが取得され、環境変数としてPATが渡されます。
ただし、このDockerコマンドをCLIからその都度実行する必要はありません。代わりに、プロセスSTDIOトランスポートタイプで実行されるMCPサーバーの設定として、このコマンドを指定できます。
ここでは、VS Codeとエージェント型AIコードツールのQodo Genを使って説明します。
{
"docker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "github_pat_1234"
}
}
}Qodo Genの拡張機能ビューでToolsをクリックし、左上のAdd New MCP,ボタンをクリックすると、次のNew Agentic Toolビューが表示されます。そこにJSONを貼り付けて、Saveをクリックします。

コンテナがネットワークからGitHub MCPサーバーの最新のDockerイメージを取得して起動するまで、1〜2分ほど待ちます。処理中は、次のような表示が出ます。

読み込みが完了すると、利用可能なすべてのツールを確認できます。

これで、チャットから直接、コードリポジトリについて質問できるようになります。

MCPサーバーのセキュリティに関する補足情報
この記事で紹介したMCPサーバーのセットアップの課題やセキュリティ上の懸念に心当たりがある方は、AIセキュリティ対策を万全にするため、次の記事もぜひご覧ください。
プロンプトインジェクションやその他のAI攻撃について知る
RAG(検索拡張生成)を検討している方には、RAGを安全にする方法の記事をおすすめします。
AIを安全に活用する準備はできていますか?
生成AIコードセキュリティのバイヤーズガイドをダウンロードして、GitHub Copilot、Google Gemini、Amazon CodeWhispererなどの生成AIコーディングツールをリスクなく導入しましょう。