2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

複数MCP Serverを束ねて『マルチエージェント開発環境』を構築する ― Notion・GitHub・Slack・DBを横断するClaude Code運用の実践ガイド

2
Posted at

結論:MCP Serverは「束ねてこそ」真価を発揮する

MCP Serverを1つ繋いで満足していませんか?――Notion・GitHub・Slack・PostgreSQLの4つのMCP Serverを同時接続し、Claude Codeを 「社内の全システムを横断できるAIエージェント」 に進化させた構築手順と運用ノウハウを公開します。

この記事を読むと、以下のことがわかります。

  • 4つのMCP Serverを同時接続するアーキテクチャ設計と具体的な設定ファイル
  • 「Notionの仕様書を読み → GitHubにPR作成 → Slackに通知 → DBからテストデータ取得」を一気通貫で実行するフロー
  • マルチMCP環境特有のセキュリティ・コスト・トラブルシューティングの実践知見

環境・前提条件

項目 バージョン / 条件
Claude Code 最新版(CLI)
Node.js v20 以上
OS macOS / Linux(WSL2可)
各サービスのAPIキー Notion Integration Token, GitHub PAT, Slack Bot Token, PostgreSQL接続情報
MCP Server実装 各公式 or コミュニティ製のstdio型サーバー

1. なぜマルチMCPか:単一ツール連携の限界

MCP Serverを1つだけ繋ぐ構成では、Claude Codeは 「特定のツールに詳しいだけのアシスタント」 にとどまります。

たとえば、GitHub MCP Serverだけを接続した場合を考えてみましょう。

  • ✅ PRの作成、Issueの検索はできる
  • ❌ 「どの仕様書に基づくPRか」はNotionを見ないとわからない
  • ❌ PRを作ったことをチームに通知できない
  • ❌ テストに必要なDBのサンプルデータを取得できない

現実の開発ワークフローは、必ず複数のツールをまたぐのです。マルチMCPにすることで、Claude Codeは「ツール間の文脈を理解し、横断的に判断・実行するエージェント」へと進化します。

2. アーキテクチャ設計:4つのMCP Serverの役割分担

設計の要点は「役割の分離」 です。各MCP Serverに明確な責務を割り当てます。

MCP Server 主な責務 権限方針
Notion 仕様書・ドキュメントの読み取り、ステータス更新 特定DBのみアクセス可
GitHub Issue参照、PR作成、コードレビュー 対象リポジトリを限定
Slack チーム通知、進捗レポート 投稿先チャンネルを限定
PostgreSQL テストデータ・マスタデータの参照 読み取り専用(最重要)

3. 構築Step 1:各MCP Serverのセットアップ

設定ファイルの全体像

Claude Codeでは、プロジェクトルートの .mcp.json またはホームディレクトリの ~/.claude.json でMCP Serverを定義します。以下はプロジェクト単位での設定例です。

// .mcp.json(プロジェクトルートに配置)
{
  "mcpServers": {
    "notion": {
      "command": "npx",
      "args": ["-y", "@notionhq/mcp-server"],
      "env": {
        "NOTION_API_TOKEN": "${NOTION_API_TOKEN}",
        "NOTION_DATABASE_IDS": "db_id_1,db_id_2"
      }
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PAT}"
      }
    },
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}"
      }
    },
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "${DATABASE_URL}"
      ]
    }
  }
}

環境変数の管理

APIキーを直接JSONに書くのは危険です。環境変数として管理しましょう。

# .envrc(direnv使用の場合)
export NOTION_API_TOKEN="ntn_xxxxxxxxxxxx"
export GITHUB_PAT="ghp_xxxxxxxxxxxx"
export SLACK_BOT_TOKEN="xoxb-xxxxxxxxxxxx"
export DATABASE_URL="postgresql://readonly_user:pass@localhost:5432/mydb"

重要: PostgreSQLの接続ユーザーは必ず読み取り専用ユーザーを使ってください。後述のセキュリティ設計で詳しく解説します。

接続確認

Claude Codeを起動し、各MCP Serverが認識されているか確認します。

claude
# 起動後に /mcp コマンドで確認
> /mcp

4つのMCP Serverすべてが connected 状態になっていれば成功です。

4. 構築Step 2:CLAUDE.mdでマルチMCP利用時のルールを定義

マルチMCP環境では、Claude Codeが どのMCP Serverをどの順番で使うべきか を明確に指示することが重要です。CLAUDE.md にルールを記述します。

# CLAUDE.md

## MCP Server利用ルール

### 利用可能なMCP Server
1. **notion** — 仕様書・設計ドキュメントの参照とステータス更新
2. **github** — Issue参照、ブランチ作成、PR作成、コードレビュー
3. **slack** — チーム通知(#dev-notifications チャンネルのみ)
4. **postgres** — テストデータ・マスタデータの参照(SELECT文のみ)

### 必須ルール
- PostgreSQLに対してDELETE/UPDATE/INSERT文は絶対に実行しない
- Slackへの投稿は #dev-notifications チャンネルのみに限定する
- 外部APIへの書き込み操作を行う前に、必ず実行内容をユーザーに確認する
- 1つのタスクで全MCP Serverを使う必要はない。必要なものだけ使う

### タスク実行の推奨フロー
1. まずNotionで関連する仕様書・チケットを確認
2. GitHubで関連Issue・既存コードを確認
3. 必要に応じてPostgreSQLでデータ構造・サンプルデータを確認
4. コード実装・PR作成
5. 完了したらSlackで通知

この CLAUDE.mdマルチMCPオーケストレーションの要 です。ルールが曖昧だと、Claude Codeが不要なMCP Serverを呼び出してトークンを浪費したり、意図しない書き込みを行うリスクがあります。

5. 構築Step 3:実践ユースケース ― 一気通貫フロー

ここからが本番です。以下のプロンプト1つで、4つのMCP Serverを横断するワークフローを実行します。

プロンプト例

Notionのデータベース「Sprint Backlog」からステータスが「Ready」のチケットID-142を確認して、
その仕様に基づいてuser-profileのバリデーション修正をGitHubにPRとして作成してください。
PRの内容をSlackの#dev-notificationsに通知し、
PostgreSQLのusersテーブルからテストに使えるサンプルデータを5件取得してPRの説明に含めてください。

実行フロー

実際のClaude Codeの動き

Claude Codeは上記のプロンプトを受け取ると、以下の順序でMCPツールを呼び出します。

  1. Notion MCPsearch ツールでチケットID-142を検索し、仕様詳細を取得
  2. PostgreSQL MCPquery ツールで SELECT * FROM users LIMIT 5 を実行
  3. ローカルファイルを編集してバリデーションロジックを修正
  4. GitHub MCPcreate_branchcreate_pull_request でPR作成
  5. Slack MCPsend_message で通知を送信
  6. Notion MCPupdate_page でチケットステータスを更新

各ステップで権限チェックの承認プロンプトが表示されるため、意図しない操作を防げます。

6. セキュリティ設計:MCP Server毎の権限分離

マルチMCPで最も注意すべきはセキュリティです。LLMに全権限を渡すのは危険です。

権限設計の3原則

1. 最小権限の原則

-- PostgreSQL: 読み取り専用ユーザーを作成
CREATE USER mcp_readonly WITH PASSWORD 'secure_password';
GRANT CONNECT ON DATABASE mydb TO mcp_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;
-- INSERT/UPDATE/DELETE権限は絶対に付与しない

2. スコープの限定

  • Notion: Integration(API連携)で公開するページ・データベースを最小限に
  • GitHub: PAT(Fine-grained token)で対象リポジトリと権限を限定
  • Slack: Bot Tokenのスコープを chat:write(指定チャンネルのみ)に制限

3. Claude Code の権限システムを活用

Claude Codeには --allowedTools フラグがあり、使用可能なMCPツールを制限できます。

# GitHub MCP の read 系ツールのみ許可する場合
claude --allowedTools "mcp__github__search_repositories,mcp__github__get_file_contents"

また、.claude/settings.jsonpermissions セクションでプロジェクト単位の制御も可能です。

7. トラブルシューティング

MCP Server間の競合

症状: 複数のMCP Serverが同時にレスポンスを返そうとしてエラーになる

対処: Claude Codeは内部でMCPツール呼び出しを逐次実行しているため、真の並行競合は発生しにくいです。エラーが出る場合は、MCP Server側のプロセスが異常終了している可能性があります。

# MCP Serverの状態を確認
> /mcp

# 特定のMCP Serverを再起動
> /mcp restart notion

タイムアウト

症状: PostgreSQLへのクエリが遅く、MCP Server接続がタイムアウトする

対処: 重いクエリの実行を避けるルールを CLAUDE.md に明記します。

## PostgreSQL利用時の制約
- LIMITなしのSELECT文は禁止
- JOINは最大2テーブルまで
- 実行時間が5秒を超えるクエリは避ける

コンテキストウィンドウ溢れ

症状: 4つのMCP Serverからの情報を詰め込みすぎて、コンテキストが溢れる

対処: これがマルチMCP最大の課題です。以下の対策が有効です。

  • CLAUDE.md に「MCP Serverからの取得データは要約して保持すること」と明記
  • Notionからの取得は該当セクションのみに限定(ページ全体を取得しない)
  • PostgreSQLのクエリ結果は LIMIT 5 を基本とする
  • /compact コマンドでコンテキストを定期的に圧縮

8. コスト管理:トークン消費を最適化する3つのテクニック

マルチMCPは便利ですが、MCP Serverからのレスポンスがすべてコンテキストに載るため、トークン消費が跳ね上がりがちです。

テクニック1:必要なMCP Serverだけを有効化する

タスクに応じて、不要なMCP Serverを無効化します。

# コーディングだけの作業なら、GitHub MCPだけ有効にする
> /mcp off notion
> /mcp off slack
> /mcp off postgres

テクニック2:CLAUDE.mdで「段階的取得」を指示する

## データ取得の原則
1. 最初は概要(タイトル・ステータス)のみ取得する
2. 詳細が必要な場合のみ、本文を取得する
3. 一度に取得するレコードは最大10件とする

テクニック3:/compactコマンドの活用

長いセッションでは、定期的にコンテキストを圧縮しましょう。

# コンテキストを要約して圧縮
> /compact

特にMCP Serverからの大量のレスポンス(Notionの長いドキュメント、DBの多数のレコード)を取得した後は、すぐに /compact を実行するのが効果的です。

まとめ:マルチMCP環境は「AIエージェントのインフラ」になる

  • マルチMCPの本質は「ツール横断の文脈理解」。単一MCP Serverでは実現できない、仕様確認→実装→通知→データ検証の一気通貫フローがプロンプト1つで動く
  • セキュリティは「最小権限 × スコープ限定 × 承認フロー」の3層で守る。特にDB接続は読み取り専用ユーザーが必須
  • コスト管理の鍵は「必要なMCP Serverだけ有効化」と「段階的取得」。CLAUDE.mdでのルール定義がトークン最適化に直結する

マルチMCP環境は、もはや「便利なツール連携」ではありません。Claude Codeを組織の業務基盤に組み込むためのインフラです。まずは2つのMCP Serverの同時接続から始めて、徐々に拡張していくことをおすすめします。

参考リンク

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?