🤖

Dev Container で Claude Code × MCP Server を動かしてみた

に公開

Dev Container で Claude Code × MCP Server を動かしてみた

※この記事では、VS Code の Dev Container 上で Claude Code を利用し、
GitHub / Bitbucket / AWS(aws-knowledge / aws-diagram / cloudwatch / aws-api)などの MCP Server を動かすための環境構築手順をまとめています。


1. はじめに

普段は VS Code の Dev Container を使って開発しています。
ローカル環境を汚さずに済むし、どこでも同じ状態を再現できるので、新しい技術を触るときもまず Dev Container を作るのが定番になっています。

今回は、そんな普段の開発環境に Claude Code(VS Code 用の Claude 拡張) を組み込んで、
GitHub / Bitbucket / AWS の MCP Server をまとめて扱えるようにしてみました。

なお、この記事は Claude Code が利用可能なアカウント(Pro / Max / Team / Enterprise)を持っている前提 で進めます。
無料プランでは Claude Code(VS Code から使う機能)は利用できないので注意してください。

本記事の目的は:

  • Dev Container の中で MCP Server を動かせる環境を整備し
  • VS Code の Claude Code から
    GitHub / Bitbucket / AWS(aws-knowledge / aws-diagram / cloudwatch / aws-api)
    を直接扱えるようにすること

です。


2. 全体の流れとアーキテクチャ

今回の記事で行う手順をまとめると次のとおりです:

  1. Dev Container を用意
  2. Dev Container 内に uv + 各 MCP Server をインストール
  3. VS Code に Claude Code 拡張 をインストール
  4. Claude の設定(ユーザースコープ)に MCP Server を登録
  5. GitHub / Bitbucket / AWS を Claude Code から呼び出す

🖼 全体像イメージ(Mermaid 図)


3. 事前準備(環境・前提)

必要なもの

  • VS Code
  • Dev Containers 拡張
  • Docker Desktop(または同等の環境)
  • Claude Code が利用可能な Claude アカウント
    ※無料プランでは VS Code から使えません
  • GitHub / Bitbucket / AWS アカウント

🔐 認証情報(今回の構成)

環境内で MCP Server を使うため、以下の認証情報を準備しています。

● GitHub

  • Personal Access Token(PAT)
  • リポジトリ参照ができればよいので、読み取り専用で OK

● Bitbucket

  • Atlassian API Token(App Password)
  • 認証は ユーザー名 + App Password
  • 読み取り権限で OK

● AWS

  • ローカルの ~/.aws/credentials を Dev Container にマウント
  • aws-diagram / cloudwatch / aws-api では IAM 権限が必要
  • aws-knowledge は認証不要

4. Dev Container 環境の構築

今回の Dev Container 構成は次の 5 つで成り立っています。

  • .devcontainer/devcontainer.json
  • .devcontainer/docker-compose.yml
  • .devcontainer/Dockerfile
  • .devcontainer/.env
  • .devcontainer/scripts/setup.sh

4-1. devcontainer.json(全文)

// .devcontainer/devcontainer.json
{
  "name": "AI MCP Agent",
  "dockerComposeFile": "docker-compose.yml",
  "service": "app",
  "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",

  "remoteEnv": {
    "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}",
    "PATH": "/home/vscode/.local/bin:/home/vscode/.local/share/aquaproj-aqua/bin:${containerEnv:PATH}"
  },

  "features": {
    "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {
      "version": "latest",
      "enableNonRootDocker": "true",
      "moby": "true"
    },
    "ghcr.io/devcontainers-extra/features/aws-cdk:2": {},
    "ghcr.io/aquaproj/devcontainer-features/aqua-installer:0.1.6": {
      "aqua_version": "v2.53.3"
    },
    "ghcr.io/devcontainers/features/node:1": {
      "version": "24",
      "nodeGypDependencies": true
    },
    "ghcr.io/devcontainers/features/python:1": {
      "version": "3.12",
      "installTools": true,
      "installJupyterlab": false
    }
  },

  "customizations": {
    "vscode": {
      "extensions": [
        "Anthropic.claude-code",
        "GitHub.copilot",
        "GitHub.copilot-chat",
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode",
        "ms-vscode.vscode-typescript-next",
        "amazonwebservices.aws-toolkit-vscode",
        "ms-azuretools.vscode-docker",
        "eamodio.gitlens",
        "mhutchie.git-graph",
        "ms-python.python",
        "ms-python.vscode-pylance",
        "christian-kohler.path-intellisense",
        "streetsidesoftware.code-spell-checker",
        "redhat.vscode-yaml",
        "ms-ceintl.vscode-language-pack-ja"
      ]
    }
  },

  "postCreateCommand": "bash ${PWD}/.devcontainer/scripts/setup.sh",

  "mounts": [
    { "source": "/var/run/docker.sock", "target": "/var/run/docker.sock", "type": "bind" },
    { "source": "${localEnv:HOME}/.gitconfig", "target": "/home/vscode/.gitconfig", "type": "bind", "consistency": "cached" },
    { "source": "${localEnv:HOME}/.ssh", "target": "/home/vscode/.ssh", "type": "bind", "consistency": "cached" },
    { "source": "${localEnv:HOME}/.aws", "target": "/home/vscode/.aws", "type": "bind", "consistency": "cached" },
    { "source": "${localEnv:HOME}/.claude", "target": "/home/vscode/.claude", "type": "bind", "consistency": "cached" },
    { "source": "${localEnv:HOME}/.claude.json", "target": "/home/vscode/.claude.json", "type": "bind", "consistency": "cached" }
  ],

  "remoteUser": "vscode"
}

4-2. docker-compose.yml(全文)

# .devcontainer/docker-compose.yml
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile

    env_file:
      - .env

    volumes:
      - /var/run/docker.sock:/var/run/docker-host.sock
      - ../..:/workspaces:cached

    entrypoint: /usr/local/share/docker-init.sh
    command: sleep infinity
    container_name: ai-mcp-agent-dev

4-3. Dockerfile(全文)

# .devcontainer/Dockerfile
FROM mcr.microsoft.com/devcontainers/base:bookworm

ENV DEBIAN_FRONTEND=noninteractive
ENV LANG=ja_JP.UTF-8
ENV LANGUAGE=ja_JP:ja
ENV LC_ALL=ja_JP.UTF-8

RUN apt-get update && \
    apt-get install -y locales && \
    sed -i -E 's/# (ja_JP.UTF-8)/\1/' /etc/locale.gen && \
    locale-gen ja_JP.UTF-8 && \
    update-locale LANG=ja_JP.UTF-8 && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /workspace

4-4. マウントポイントと構成の考え方

以下のフォルダをマウントする構成にしています。

  • /var/run/docker.sock
    → コンテナ内で Docker を使うため
  • ~/.gitconfig
    → Git 設定を引き継ぐため
  • ~/.ssh
    → private repo などを扱うため
  • ~/.aws
    → AWS profile をそのまま利用
  • ~/.claude / ~/.claude.json
    → Claude Code の設定をホスト側と共有

4-5. setup.sh(全文)

# .devcontainer/scripts/setup.sh
#!/bin/bash
set -e

echo "🚀 Setting up development environment..."

# aqua でツールをインストール
echo "📦 Installing tools with aqua..."
aqua install -a

# Python パッケージのインストール(MCP から使う可能性のあるもの)
echo "🐍 Installing Python packages..."
pip3 install --user boto3 pytest requests

# uv ツールを導入(Python パッケージ管理を高速化)
curl -LsSf https://astral.sh/uv/install.sh | sh

echo "✅ Dev container ready!"

4-6. .env(全文)

NETWORK_DRIVER=bridge
TZ=Asia/Tokyo

AWS_PROFILE=your-profile
AWS_REGION=ap-northeast-1
AWS_CREDENTIAL_PATH_HOST=~/.aws

GITHUB_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ATLASSIAN_USER_EMAIL="your.name@example.com"
ATLASSIAN_API_TOKEN="atlassian_xxxxxxxxxxxxxxxxxxxxxxxxx"

5. MCP Server のインストール(Dev Container 内)

この章では、Dev Container の中に MCP Server をインストールしていきます。

5-1. GitHub MCP(remote 形式)

GitHub MCP は公式レポジトリから直接インストールしています。

uv pip install git+https://github.com/modelcontextprotocol/github-mcp

remote 版の利点

  • 最新版をすぐ利用できる
  • 修正や追加 API に追従しやすい
  • Claude Code での検証に向いている

5-2. Bitbucket MCP

Bitbucket は PyPI 配布版を利用します。

uv pip install mcp-bitbucket

主な用途:

  • プロジェクト一覧
  • リポジトリ一覧
  • ブランチ取得
  • ファイル取得

認証は ATLASSIAN_USER_EMAIL + ATLASSIAN_API_TOKEN を利用します。


5-3. AWS 系 MCP(4 種)

AWS では 4 つの MCP を使います。

● 1️⃣ aws-knowledge(HTTP:インストール不要)

AWS 公式の Knowledge Base(仕様・ドキュメント検索)を扱う MCP。
インストール不要で、設定ファイルに URL を書くだけで使えます。

● 2️⃣ aws-diagram(stdio)

AWS リソースの構成図(Mermaid / PlantUML)を生成する MCP。

uv pip install mcp-aws-diagram

● 3️⃣ cloudwatch(stdio)

CloudWatch Logs / Metrics を取得する MCP。

uv pip install mcp-aws-cloudwatch

● 4️⃣ aws-api(stdio)

AWS API を直接叩く MCP(任意のサービス・アクションを実行可能)。

uv pip install mcp-aws-api

IAM 認証が必要な MCP では、
AWS_PROFILE / AWS_REGION を環境変数として指定する構成を取っています。


5-4. MCP Server インストールまとめ

カテゴリ MCP 名 インストール方法
GitHub github-mcp remote install
Bitbucket mcp-bitbucket uv install
AWS aws-knowledge インストール不要(HTTP MCP)
AWS aws-diagram uv install
AWS cloudwatch uv install
AWS aws-api uv install

6. VS Code で Claude 拡張をセットアップ


6-1. ❗ VS Code の settings.json に MCP を書いても動かない


6-2. MCP 設定ファイルの保存場所

スコープ パス 説明
ユーザースコープ(今回採用) ~/.claude.json 全プロジェクト共通
プロジェクトスコープ <project>/.mcp.json プロジェクト専用

6-3. 今回のセットアップ方針

あなたの環境では /home/vscode/.claude.json をマウントしているため、
ユーザースコープで管理するのが最適 です。


6-4. ~/.claude.json(全文)

{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp",
      "headers": {
        "Authorization": "Bearer ${GITHUB_TOKEN}"
      }
    },
    "bitbucket": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@aashari/mcp-server-atlassian-bitbucket"
      ],
      "env": {
        "ATLASSIAN_USER_EMAIL": "${ATLASSIAN_USER_EMAIL}",
        "ATLASSIAN_API_TOKEN": "${ATLASSIAN_API_TOKEN}"
      }
    },
    "aws-diagram": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "awslabs.aws-diagram-mcp-server@latest"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      }
    },
    "aws-knowledge": {
      "type": "http",
      "url": "https://knowledge-mcp.global.api.aws"
    },
    "cloudwatch": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "awslabs.cloudwatch-mcp-server@latest"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR",
        "AWS_PROFILE": "${AWS_PROFILE}",
        "AWS_DEFAULT_REGION": "${AWS_DEFAULT_REGION}",
        "AWS_REGION": "${AWS_REGION}"
      }
    },
    "aws-api": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "awslabs.aws-api-mcp-server@latest"
      ],
      "env": {
        "AWS_PROFILE": "${AWS_PROFILE}",
        "AWS_REGION": "${AWS_REGION}"
      }
    }
  }
}

6-6. 正しく設定されるとこうなる(UI)


7. MCP サーバーの動作確認


7-1. GitHub MCP


7-2. Bitbucket MCP


7-3. AWS Diagram MCP


7-4. AWS Knowledge MCP


7-5. AWS API MCP


8. まとめ

本記事では次の内容を構築しました。

  • Dev Container + uv ベースの MCP 実行環境
  • GitHub / Bitbucket / AWS MCP Server の導入
  • Claude Code(VS Code 拡張)からの MCP 呼び出し
  • AWS 図生成(aws-diagram)、API 呼び出し(aws-api)、CloudWatch 参照(cloudwatch)

これにより、VS Code 内で:

  • リポジトリ解析
  • AWS 図の自動生成
  • CloudWatch ログ調査
  • GitHub / Bitbucket の Issue 自動化

などを Claude にそのまま任せられる環境 が整いました。

株式会社ソニックムーブ

Discussion