スキル一覧に戻る

containerize-mcp-server

pjt222
更新日 2 days ago
7 閲覧
17
2
17
GitHubで表示
メタaimcpdesign

について

このスキルは、開発者がDockerを使用してRベースのMCPサーバーをコンテナ化できるようにし、ローカルにRをインストールする必要をなくします。再現可能な環境を作成するためのmcptoolsの統合、ポート設定、およびトランスポート方法(stdio/HTTP)について説明しています。他のサービスと一緒にポータブルなMCPサーバーをデプロイしたり、他の開発者に配布したりするためにご利用ください。

クイックインストール

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にコピー&ペーストしてスキルをインストールします

ドキュメント

Containerize MCP Server

Package R MCP server into Docker container for portable deployment.

When Use

  • Deploy R MCP server without requiring local R installation
  • Create reproducible MCP server environment
  • Run MCP servers alongside other containerized services
  • Distribute MCP server to other developers

Inputs

  • Required: R MCP server implementation (mcptools-based or custom)
  • Required: Docker installed, running
  • Optional: Additional R packages server needs
  • Optional: Transport mode (stdio or HTTP)

Steps

Step 1: Create Dockerfile for MCP Server

FROM rocker/r-ver:4.5.0

# Install system dependencies
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/*

# Install R packages
RUN R -e "install.packages(c( \
    'remotes', \
    'ellmer' \
    ), repos='https://cloud.r-project.org/')"

# Install mcptools
RUN R -e "remotes::install_github('posit-dev/mcptools')"

# Set working directory
WORKDIR /workspace

# Expose MCP server ports
EXPOSE 3000 3001 3002

# Environment variables
ENV R_LIBS_USER=/workspace/renv/library
ENV RENV_PATHS_CACHE=/workspace/renv/cache

# Default: start MCP server
CMD ["R", "-e", "mcptools::mcp_server()"]

Got: Dockerfile exists in project root with rocker/r-ver base image, system dependencies, mcptools installation, MCP server as default command.

If fail: Verify base image tag matches your R version. remotes::install_github fails? Check git and libgit2-dev are in system dependencies layer.

Step 2: Create 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

Using network_mode: "host" ensures MCP server ports accessible on localhost.

Got: docker-compose.yml in project root with MCP server service, volume mounts for project files and renv cache, stdin_open/tty enabled for stdio transport.

If fail: Volume paths invalid? Adjust /path/to/projects to actual project directory. On Windows/WSL, use /mnt/c/... or /mnt/d/... paths.

Step 3: Build and Start

docker compose build
docker compose up -d

Got: Container starts with MCP server running.

If fail: Check logs with docker compose logs mcp-server. Common issues:

  • Missing R packages: Add to Dockerfile RUN install step
  • Port already in use: Change exposed port or stop conflicting service

Step 4: Connect Claude Code to Container

For stdio transport (container must stay running with stdin):

claude mcp add r-mcp-docker stdio "docker" "exec" "-i" "r-mcp-server" "R" "-e" "mcptools::mcp_server()"

For HTTP transport (if MCP server supports it):

{
  "mcpServers": {
    "r-mcp-docker": {
      "type": "http",
      "url": "http://localhost:3000/mcp"
    }
  }
}

Got: Claude Code MCP configuration includes r-mcp-docker server entry. claude mcp list shows new server.

If fail: Stdio transport? Ensure container name matches (r-mcp-server) and container running with docker ps. HTTP transport? Verify port exposed, reachable with curl http://localhost:3000/mcp.

Step 5: Verify Connection

# Check container is running
docker ps | grep mcp-server

# Test R session inside container
docker exec -it r-mcp-server R -e "sessionInfo()"

# Verify mcptools is available
docker exec -it r-mcp-server R -e "library(mcptools)"

Got: docker ps shows r-mcp-server container running. sessionInfo() returns expected R version. library(mcptools) loads without error.

If fail: Container not running? Check docker compose logs mcp-server for startup errors. mcptools fails to load? Rebuild image to ensure package installed correctly.

Step 6: Add Custom MCP Tools

To add project-specific MCP tools, mount R scripts:

volumes:
  - ./mcp-tools:/mcp-tools

Load them in CMD:

CMD ["R", "-e", "source('/mcp-tools/custom_tools.R'); mcptools::mcp_server()"]

Got: Custom R scripts accessible inside container at /mcp-tools/. MCP server loads them on startup alongside default tools.

If fail: Verify volume mount path correct with docker exec -it r-mcp-server ls /mcp-tools/. Scripts fail to source? Check missing package dependencies in custom tools.

Checks

  • Container builds without errors
  • MCP server starts inside container
  • Claude Code can connect to containerized server
  • MCP tools respond correctly to requests
  • Container restarts cleanly
  • Volume mounts allow access to project files

Pitfalls

  • stdin/tty requirements: MCP stdio transport requires stdin_open: true and tty: true
  • Network isolation: Default Docker networking may prevent localhost access. Use network_mode: "host" or expose specific ports.
  • Package versions: Pin mcptools to specific commit for reproducibility
  • Large image size: mcptools + dependencies can be large. Consider multi-stage builds for production.
  • Windows Docker paths: Running Docker Desktop on Windows with WSL? Path mapping differs

See Also

  • create-r-dockerfile - base Dockerfile patterns for R
  • setup-docker-compose - compose configuration details
  • configure-mcp-server - MCP server configuration without Docker
  • troubleshoot-mcp-connection - debugging MCP connectivity issues

GitHub リポジトリ

pjt222/agent-almanac
パス: i18n/caveman/skills/containerize-mcp-server
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

関連スキル

content-collections

メタ

このスキルは、Content Collections(Markdown/MDXファイルを型安全なデータコレクションに変換するTypeScriptファーストのツール)の本番環境でテストされた設定を提供します。Zodバリデーションによる型安全性を実現し、ブログ、ドキュメントサイト、コンテンツ重視のVite + Reactアプリケーション構築時にご利用ください。Viteプラグインの設定、MDXコンパイルから、デプロイ最適化、スキーマバリデーションまで、すべてを網羅しています。

スキルを見る

polymarket

メタ

このスキルは、開発者がPolymarket予測市場プラットフォームを活用したアプリケーション構築を可能にします。API統合による取引や市場データの取得に加え、WebSocketを介したリアルタイムデータストリーミングにより、ライブ取引や市場活動を監視できます。取引戦略の実装や、ライブ市場更新を処理するツールの作成にご利用ください。

スキルを見る

creating-opencode-plugins

メタ

このスキルは、開発者がコマンド、ファイル、LSP操作など25種類以上のイベントタイプにフックするOpenCodeプラグインを作成することを支援します。JavaScript/TypeScriptモジュール向けに、プラグイン構造、イベントAPI仕様、および実装パターンを提供します。カスタムイベント駆動ロジックでOpenCode AIアシスタントのライフサイクルをインターセプト、監視、または拡張する必要がある場合にご利用ください。

スキルを見る

sglang

メタ

SGLangは、高性能なLLMサービングフレームワークであり、RadixAttentionプレフィックスキャッシュを活用したJSON、正規表現、エージェントワークフロー向けの高速で構造化された生成を特長とします。特にプレフィックスが繰り返されるタスクにおいて、大幅に高速な推論を実現し、複雑な構造化出力やマルチターン対話に最適です。制約付きデコードが必要な場合や、広範なプレフィックス共有を伴うアプリケーションを構築する場合は、vLLMなどの代替案ではなくSGLangを選択してください。

スキルを見る