結論: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ツールを呼び出します。
-
Notion MCP の
searchツールでチケットID-142を検索し、仕様詳細を取得 -
PostgreSQL MCP の
queryツールでSELECT * FROM users LIMIT 5を実行 - ローカルファイルを編集してバリデーションロジックを修正
-
GitHub MCP の
create_branch→create_pull_requestでPR作成 -
Slack MCP の
send_messageで通知を送信 -
Notion MCP の
update_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.json の permissions セクションでプロジェクト単位の制御も可能です。
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の同時接続から始めて、徐々に拡張していくことをおすすめします。