containerize-mcp-server
について
このスキルは、開発者がRベースのMCPサーバーをDockerでコンテナ化し、移植可能なデプロイを実現するための支援を行います。mcptoolsの統合、ポート公開、トランスポート設定、Claude Codeのコンテナ化サーバーへの接続について網羅しています。再現可能なMCP環境が必要な場合、他のコンテナ化サービスと並行してサーバーを実行したい場合、またはローカルにR環境をインストールせずにMCPサーバーを配布する必要がある場合にご利用ください。
クイックインストール
Claude Code
推奨npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/containerize-mcp-serverこのコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします
ドキュメント
name: containerize-mcp-server description: > Dockerを使用してRベースのMCP(Model Context Protocol)サーバーをコンテナ化する。 mcptools統合、ポート公開、stdio vs HTTPトランスポート、およびコンテナ化されたサーバーへの Claude Code接続をカバーする。ローカルR環境なしでR MCPサーバーをデプロイする場合、 再現可能なMCPサーバー環境の構築、他のコンテナ化されたサービスと並行してMCPサーバーを実行する場合、 またはMCPサーバーを他の開発者に配布する際に使用する。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: advanced language: Docker tags: docker, mcp, mcptools, claude, container locale: ja source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16
MCPサーバーのコンテナ化
R MCPサーバーをDockerコンテナにパッケージ化し、ポータブルなデプロイを実現する。
使用タイミング
- ローカルR環境なしでR MCPサーバーをデプロイする場合
- 再現可能なMCPサーバー環境の構築
- 他のコンテナ化されたサービスと並行してMCPサーバーを実行する場合
- MCPサーバーを他の開発者に配布する場合
入力
- 必須: R MCPサーバー実装(mcptoolsベースまたはカスタム)
- 必須: Dockerがインストールされ実行中であること
- 任意: サーバーに必要な追加Rパッケージ
- 任意: トランスポートモード(stdioまたはHTTP)
手順
ステップ1: MCPサーバー用Dockerfileの作成
FROM rocker/r-ver:4.5.0
# システム依存関係のインストール
RUN apt-get update && apt-get install -y \
libcurl4-openssl-dev \
libssl-dev \
libxml2-dev \
libgit2-dev \
libssh2-1-dev \
git \
curl \
&& rm -rf /var/lib/apt/lists/*
# Rパッケージのインストール
RUN R -e "install.packages(c( \
'remotes', \
'ellmer' \
), repos='https://cloud.r-project.org/')"
# mcptoolsのインストール
RUN R -e "remotes::install_github('posit-dev/mcptools')"
# 作業ディレクトリの設定
WORKDIR /workspace
# MCPサーバーポートの公開
EXPOSE 3000 3001 3002
# 環境変数
ENV R_LIBS_USER=/workspace/renv/library
ENV RENV_PATHS_CACHE=/workspace/renv/cache
# デフォルト: MCPサーバーの起動
CMD ["R", "-e", "mcptools::mcp_server()"]
期待結果: プロジェクトルートにrocker/r-verベースイメージ、システム依存関係、mcptoolsインストール、デフォルトコマンドとしてMCPサーバーを含むDockerfileが存在する。
失敗時: ベースイメージタグがRバージョンと一致していることを確認する。remotes::install_githubが失敗した場合、gitとlibgit2-devがシステム依存関係レイヤーに含まれていることを確認する。
ステップ2: docker-compose.ymlの作成
version: '3.8'
services:
mcp-server:
build:
context: .
dockerfile: Dockerfile
container_name: r-mcp-server
image: r-mcp-server:latest
volumes:
- /path/to/projects:/workspace
- renv-cache:/workspace/renv/cache
stdin_open: true
tty: true
network_mode: "host"
environment:
- TERM=xterm-256color
- R_LIBS_USER=/workspace/renv/library
restart: unless-stopped
volumes:
renv-cache:
driver: local
network_mode: "host"を使用することで、MCPサーバーのポートがlocalhostでアクセス可能になる。
期待結果: プロジェクトルートにMCPサーバーサービス、プロジェクトファイルとrenvキャッシュのボリュームマウント、stdioトランスポート用のstdin_open/tty有効化を含むdocker-compose.ymlファイルが存在する。
失敗時: ボリュームパスが無効な場合、/path/to/projectsを実際のプロジェクトディレクトリに調整する。Windows/WSLでは/mnt/c/...または/mnt/d/...パスを使用する。
ステップ3: ビルドと起動
docker compose build
docker compose up -d
期待結果: MCPサーバーが実行中のコンテナが起動する。
失敗時: docker compose logs mcp-serverでログを確認する。よくある問題:
- Rパッケージの不足: DockerfileのRUNインストールステップに追加する
- ポートが既に使用中: 公開ポートを変更するか競合するサービスを停止する
ステップ4: Claude Codeのコンテナへの接続
stdioトランスポートの場合(コンテナはstdinで実行中の状態を維持する必要がある):
claude mcp add r-mcp-docker stdio "docker" "exec" "-i" "r-mcp-server" "R" "-e" "mcptools::mcp_server()"
HTTPトランスポートの場合(MCPサーバーがサポートしている場合):
{
"mcpServers": {
"r-mcp-docker": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}
期待結果: Claude CodeのMCP設定にr-mcp-dockerサーバーエントリが含まれ、claude mcp listで新しいサーバーが表示される。
失敗時: stdioトランスポートの場合、コンテナ名が一致していること(r-mcp-server)とdocker psでコンテナが実行中であることを確認する。HTTPトランスポートの場合、ポートが公開されてcurl http://localhost:3000/mcpで到達可能であることを確認する。
ステップ5: 接続の確認
# コンテナの実行確認
docker ps | grep mcp-server
# コンテナ内のRセッションテスト
docker exec -it r-mcp-server R -e "sessionInfo()"
# mcptoolsの利用可能性を確認
docker exec -it r-mcp-server R -e "library(mcptools)"
期待結果: docker psでr-mcp-serverコンテナが実行中と表示され、sessionInfo()が期待されるRバージョンを返し、library(mcptools)がエラーなく読み込まれる。
失敗時: コンテナが実行されていない場合、docker compose logs mcp-serverで起動エラーを確認する。mcptoolsの読み込みに失敗した場合、パッケージが正しくインストールされたことを確認するためイメージをリビルドする。
ステップ6: カスタムMCPツールの追加
プロジェクト固有のMCPツールを追加するには、Rスクリプトをマウントする:
volumes:
- ./mcp-tools:/mcp-tools
CMDでそれらを読み込む:
CMD ["R", "-e", "source('/mcp-tools/custom_tools.R'); mcptools::mcp_server()"]
期待結果: カスタムRスクリプトがコンテナ内の/mcp-tools/でアクセス可能で、MCPサーバーが起動時にデフォルトツールと一緒にそれらを読み込む。
失敗時: docker exec -it r-mcp-server ls /mcp-tools/でボリュームマウントパスが正しいことを確認する。スクリプトのsourceに失敗する場合、カスタムツールに不足しているパッケージ依存関係を確認する。
バリデーション
- コンテナがエラーなくビルドされる
- MCPサーバーがコンテナ内で起動する
- Claude Codeがコンテナ化されたサーバーに接続できる
- MCPツールがリクエストに正しく応答する
- コンテナがクリーンに再起動する
- ボリュームマウントでプロジェクトファイルにアクセスできる
よくある落とし穴
- stdin/ttyの要件: MCP stdioトランスポートには
stdin_open: trueとtty: trueが必要 - ネットワーク分離: デフォルトのDockerネットワーキングではlocalhostアクセスが妨げられる場合がある。
network_mode: "host"を使用するか特定のポートを公開する - パッケージバージョン: 再現性のためmcptoolsを特定のコミットに固定する
- 大きなイメージサイズ: mcptoolsとその依存関係は大きくなりうる。本番環境ではマルチステージビルドを検討する
- WindowsのDockerパス: Windows上のDocker DesktopとWSLを使用する場合、パスマッピングが異なる
関連スキル
create-r-dockerfile- R用の基本的なDockerfileパターンsetup-docker-compose- compose設定の詳細configure-mcp-server- DockerなしのMCPサーバー設定troubleshoot-mcp-connection- MCP接続の問題のデバッグ
GitHub リポジトリ
関連スキル
railway-docs
ドキュメントこのスキルは、Railwayの機能や仕様、特定のドキュメントURLに関する質問に答えるために、最新のRailwayドキュメントを取得します。開発者がRailwayの公式情報源から正確かつ最新の情報を直接受け取れるようにします。ユーザーがRailwayの動作方法について尋ねたり、Railwayドキュメントを参照する際にご利用ください。
n8n-code-python
ドキュメントこのClaudeスキルは、n8nのコードノードでPythonコードを記述するための専門的なガイダンスを提供します。具体的には、Pythonの標準ライブラリの使用方法や、`_input`、`_json`、`_node`といったn8n独自の構文の扱い方を解説します。n8n環境内におけるPythonの制限事項を開発者が理解できるよう支援し、ほとんどのワークフローではJavaScriptの使用を推奨しながらも、特定のデータ変換ニーズに対応するPythonソリューションを提案します。
archon
ドキュメントArchonスキルは、RAGを活用したセマンティック検索とプロジェクト管理をREST APIを通じて提供します。ドキュメントの検索、階層的なプロジェクト/タスクの管理、ドキュメントアップロード機能を備えたナレッジ検索の実行にご利用いただけます。外部ドキュメントを検索する際は、他の情報源を利用する前に常にArchonを最優先で使用してください。
n8n-code-javascript
ドキュメントこのClaudeスキルは、n8nのCodeノードでJavaScriptコードを書くための専門的なガイダンスを提供します。`$input`/`$json`変数、HTTPヘルパー、DateTime処理などの重要なn8n固有の構文を網羅し、一般的なエラーのトラブルシューティングも行います。CodeノードでカスタムJavaScript処理を必要とするn8nワークフローを開発する際にご利用ください。
