返回技能列表

containerize-mcp-server

pjt222
更新于 2 days ago
5 次查看
17
2
17
在 GitHub 上查看
文档aimcp

关于

This skill helps developers containerize R-based MCP servers using Docker for portable deployment. It covers mcptools integration, port exposure, transport configuration, and connecting Claude Code to containerized servers. Use it when you need reproducible MCP environments, want to run servers alongside other containerized services, or need to distribute MCP servers without requiring local R installations.

快速安装

Claude Code

推荐
主要方式
npx skills add pjt222/agent-almanac -a claude-code
插件命令备选方式
/plugin add https://github.com/pjt222/agent-almanac
Git 克隆备选方式
git 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が失敗した場合、gitlibgit2-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 psr-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: truetty: 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 仓库

pjt222/agent-almanac
路径: i18n/ja/skills/containerize-mcp-server
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

相关推荐技能

railway-docs

文档

Railway Docs Skill可实时获取最新的Railway官方文档,确保回答的准确性。当开发者询问Railway功能特性、工作原理或分享docs.railway.com链接时,应优先使用此技能。它通过专门的LLM优化文档源提供最新信息,避免依赖过时记忆来回答技术问题。

查看技能

n8n-code-python

文档

该Skill为在n8n平台的Python代码节点中编写代码提供专家指导,特别适用于需要使用_input/_json/_node语法、Python标准库或了解n8n中Python限制的场景。它强调JavaScript应作为首选方案,仅当需要特定Python功能或对Python语法更熟悉时才使用Python。Skill提供了快速入门模板和关键注意事项,帮助开发者在n8n中高效编写Python代码。

查看技能

archon

文档

Archon Skill为开发者提供了基于RAG的语义搜索和项目任务管理功能,可通过REST API访问知识库。它支持文档搜索、网站爬取、文件上传和版本控制,适用于技术文档查询和项目管理场景。首次使用时需要配置Archon主机地址,建议在处理外部文档时优先使用该Skill。

查看技能

n8n-code-javascript

文档

这个Skill为n8n工作流中的JavaScript代码节点提供专业指导,涵盖数据处理、HTTP请求和日期操作等核心场景。它详细解释了如何正确使用n8n特有的`$input`/`$json`语法、`$helpers`工具以及DateTime对象,并包含关键的错误排查和模式选择建议。开发者通过该Skill能快速掌握Code节点的正确返回格式、数据访问方法和常见陷阱解决方案。

查看技能