MCPサーバーを「1つのツール専用」で使っていませんか?複数サービスを横断接続した瞬間、Claude Codeは単なるコード生成ツールから**「開発プロセス全体を動かすエージェント」**に進化します。
この記事でわかること
結論:GitHub・Notion・SlackのMCPサーバーを同時接続すると、「Issue起票 → 実装 → PR作成 → Slack通知 → Notionタスク更新」の一連のワークフローをClaude Codeが自律的に実行できるようになります。 構築にかかる時間は、各サービスのAPIトークンが揃っていれば約1日です。
この記事では、以下を実際の設定ファイル付きで解説します。
- 3つのMCPサーバーのセットアップ手順と権限設計
- Claude Codeからの統合呼び出し方法(CLAUDE.mdの設計含む)
- 本番運用で踏むハマりどころと対策
環境・前提条件
| 項目 | バージョン / 要件 |
|---|---|
| Claude Code | 最新版(CLIでインストール済み) |
| Node.js | v18以上 |
| GitHub | Personal Access Token(Fine-grained推奨) |
| Notion | Internal Integration Token |
| Slack | Bot Token(xoxb-)+ App Manifest |
| OS | macOS / Linux(Windowsの場合はWSL2推奨) |
1. 完成イメージ — 全自動開発ワークフロー
まず、最終的にどんな体験になるのかを示します。
開発者が一言指示するだけで、4つのサービスを横断した処理が一気に完了します。
2. MCPサーバーの基本アーキテクチャとマルチツール接続の仕組み
MCPとは
MCP(Model Context Protocol)は、AIモデルが外部ツールやデータソースと安全に通信するための標準プロトコルです。各MCPサーバーは「どんな操作ができるか(ツール定義)」をClaude Codeに公開し、Claude Codeが必要に応じて呼び出します。
マルチ接続のアーキテクチャ
重要なポイントは以下の3つです。
- 各MCPサーバーは独立したプロセスとして動作し、Claude Codeがstdio経由で通信する
- Claude Codeは複数のMCPサーバーを同時に認識でき、タスクに応じて適切なサーバーのツールを呼び分ける
- 認証情報は各MCPサーバーが個別に管理するため、Claude Code本体にAPIキーを渡す必要がない
3. ステップ1:GitHub MCP Serverのセットアップ
3-1. トークンの発行
GitHub > Settings > Developer settings > Fine-grained personal access tokens で発行します。
推奨スコープ(最小権限の原則):
| スコープ | 用途 |
|---|---|
contents: read/write |
ブランチ作成・コードプッシュ |
pull_requests: read/write |
PR作成・更新 |
issues: read/write |
Issue読み取り・コメント |
metadata: read |
リポジトリ情報の取得 |
⚠️ Classic tokenでrepoスコープを全開放するのは避けてください。Fine-grainedでリポジトリ単位に絞るのがベストプラクティスです。
3-2. Claude Codeへの登録
claude mcp add github-mcp \
--env GITHUB_PERSONAL_ACCESS_TOKEN=ghp_xxxxxxxxxxxx \
-- npx -y @modelcontextprotocol/server-github
3-3. 動作確認
Claude Codeを起動して以下のように聞いてみます。
> リポジトリ my-org/my-app のオープンなIssue一覧を取得して
Issue一覧が返ってくれば接続成功です。
4. ステップ2:Notion MCP Serverでタスク管理DBと双方向同期する
4-1. Notion Internal Integrationの作成
- Notion Integrations で「New integration」を作成
- 「Content Capabilities」で Read content / Update content / Insert content を有効化
- 対象のNotionデータベースページで「コネクト」からこのIntegrationを追加
4-2. データベース設計のポイント
Claude Codeと連携するデータベースは、以下のプロパティを持たせると便利です。
| プロパティ名 | タイプ | 用途 |
|---|---|---|
| Title | タイトル | タスク名 |
| Status | セレクト |
Todo / In Progress / In Review / Done
|
| GitHub Issue | URL | GitHub Issueへのリンク |
| GitHub PR | URL | PRへのリンク |
| Assignee | ピープル | 担当者 |
4-3. Claude Codeへの登録
claude mcp add notion-mcp \
--env OPENAPI_MCP_HEADERS='{"Authorization":"Bearer ntn_xxxxxxxxxxxx","Notion-Version":"2022-06-28"}' \
-- npx -y @notionhq/notion-mcp-server
4-4. 動作確認
> Notionのタスクデータベースから、ステータスが「Todo」のタスク一覧を取得して
タスク一覧が返ってくれば成功です。データベースIDは、Claude Codeが検索ツールで自動的に特定してくれる場合もありますが、CLAUDE.mdに明記しておくとより確実です。
5. ステップ3:Slack MCP Serverで通知・承認フローを組み込む
5-1. Slack Appの作成
Slack API で新規アプリを作成し、以下のBot Token Scopesを付与します。
| スコープ | 用途 |
|---|---|
chat:write |
メッセージ送信 |
channels:read |
チャンネル一覧取得 |
reactions:write |
リアクション追加(承認フロー用) |
users:read |
ユーザー情報取得 |
5-2. Claude Codeへの登録
claude mcp add slack-mcp \
--env SLACK_BOT_TOKEN=xoxb-xxxxxxxxxxxx \
--env SLACK_TEAM_ID=T0XXXXXXX \
-- npx -y @anthropic/mcp-server-slack
5-3. 動作確認
> Slackの #dev-notifications チャンネルに「テスト通知です」と送信して
メッセージが届けば接続完了です。
6. Claude Codeからの統合呼び出し — CLAUDE.mdの設計
すべてのMCPサーバーが接続できたら、CLAUDE.mdで統合的なワークフローを定義します。これがマルチMCP運用の肝です。
6-1. 設定ファイルの確認
.claude/settings.json(またはプロジェクト直下の.mcp.json)に3つのMCPサーバーが登録されていることを確認します。
{
"mcpServers": {
"github-mcp": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxx"
}
},
"notion-mcp": {
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\":\"Bearer ntn_xxxxxxxxxxxx\",\"Notion-Version\":\"2022-06-28\"}"
}
},
"slack-mcp": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-slack"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-xxxxxxxxxxxx",
"SLACK_TEAM_ID": "T0XXXXXXX"
}
}
}
}
6-2. CLAUDE.mdのプロンプト設計
プロジェクトルートにCLAUDE.mdを配置し、ワークフローのルールを記述します。
# 開発ワークフロー規約
## MCP連携ルール
### GitHub Issue実装フロー
1. 指定されたGitHub Issueの内容を `github-mcp` で取得する
2. Issue番号に基づいてブランチ `feature/issue-{番号}` を作成する
3. 実装完了後、テストを実行してパスすることを確認する
4. PRを作成する(タイトルに `closes #{番号}` を含める)
5. `notion-mcp` でNotionタスクDBの該当タスクのステータスを「In Review」に更新し、PRリンクを記録する
6. `slack-mcp` で #dev-notifications チャンネルにPR作成を通知する
### Notionデータベース情報
- タスクDB ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- ステータス遷移: Todo → In Progress → In Review → Done
### Slack通知フォーマット
- チャンネル: #dev-notifications
- 形式: 「🚀 PR作成: {PRタイトル} - {PR URL}(Issue #{番号})」
6-3. 実際の呼び出し例
> Issue #42 の内容を確認して、実装からPR作成、Slack通知、Notion更新まで一気にやって
CLAUDE.mdにフローが定義されているため、Claude Codeはこの一言で以下を自律的に実行します。
7. トラブルシューティングと本番運用Tips
よくあるエラーと対処法
| 症状 | 原因 | 対処 |
|---|---|---|
MCP server connection failed |
npxのキャッシュ問題 |
npx clear-npx-cache 後に再起動 |
| GitHub APIで403 | トークンのスコープ不足 | Fine-grained tokenのPermissionsを確認 |
| Notion APIで400 | データベースIDの指定ミス | NotionのURLからIDをコピーし直す(ハイフン除去不要) |
Slack投稿でchannel_not_found
|
Botがチャンネルに未参加 | Slackチャンネルで /invite @bot名 を実行 |
レート制限への対策
- GitHub: 認証済みで5,000リクエスト/時。通常の開発フローなら問題ないが、大量Issue一括処理時は注意
-
Notion: 3リクエスト/秒の制限あり。バッチ更新時は
CLAUDE.mdに「Notion操作は1件ずつ間隔を空けて」と指示を入れる -
Slack: Tier制に基づく制限。
chat:writeは1秒1メッセージ程度が安全ライン
認証トークンのローテーション
本番運用では、トークンの定期ローテーションが必須です。
# トークン更新時のコマンド例
claude mcp remove github-mcp
claude mcp add github-mcp \
--env GITHUB_PERSONAL_ACCESS_TOKEN=ghp_新しいトークン \
-- npx -y @modelcontextprotocol/server-github
推奨運用:
- GitHub Fine-grained tokenは有効期限を90日以下に設定
- Notion / Slackトークンはローテーション機能がないため、定期的にregenerateして差し替え
- 環境変数で管理し、
.envファイルは.gitignoreに追加
ログ監視
MCPサーバーの通信ログは以下で確認できます。
# macOS
ls ~/Library/Application\ Support/claude/logs/
# Linux
ls ~/.config/claude/logs/
エラー発生時はこのログで、どのMCPサーバーのどのツール呼び出しが失敗したかを特定できます。
まとめ
- MCPサーバーの複数接続により、Claude Codeは「コード生成ツール」から「開発ワークフロー全体を駆動するエージェント」に進化する。 GitHub・Notion・Slackの3つを繋ぐだけで、Issue起票から通知・タスク管理まで一気通貫で自動化できます。
- CLAUDE.mdによるワークフロー定義が成功の鍵。 各MCPサーバーの接続だけでなく、「どの順番で何をするか」をCLAUDE.mdに明文化することで、Claude Codeの行動精度が大幅に向上します。
- 本番運用ではトークン管理とレート制限対策を忘れずに。 Fine-grained tokenによる最小権限の原則、定期ローテーション、ログ監視の3点を押さえれば、安定した運用が可能です。