新座のマックでコーヒーだけで一日中作業していた日のことだ。
Claude Codeでメールを読み、カレンダーを確認し、Chatworkに返信し、GitHubにpushした。ブラウザは一度も開かなかった。ふと気づいて、自分のMac画面を見直した。ターミナルしかない。
「これ、全部ここで完結してるじゃん」
そのとき繋いでいたMCPサーバーの数を数えたら、10個だった。
何を繋いだのか
選定基準はシンプルで、「毎日ブラウザで開いているサービス」を全部MCPに置き換えた。メール、カレンダー、チャット、ドキュメント管理、バージョン管理——日常業務で触るものは全部APIが公開されている。なら繋がない理由がない。
Claude Code(VS Code拡張)
├── Gmail MCP .............. メール検索・閲覧・送信
├── Google Calendar MCP .... 予定の取得・作成・更新
├── Google Drive MCP ....... ドキュメント検索
├── Chatwork MCP ........... メッセージ閲覧・投稿・タスク管理
├── Chatwork MCP (2nd) ..... 別アカウント(事務局用)
├── GitHub MCP ............. リポジトリ操作・Issue・PR
├── Notion MCP ............. ページ検索・作成・更新
├── NotebookLM MCP ......... ノートブック検索・質問
├── Spotify MCP ............ 再生コントロール・検索
└── Gemini API ............. 画像生成・補完(ラッパースクリプト経由)
正直、最初は3つくらいで十分だと思っていた。Gmail、カレンダー、GitHub。でも繋ぎ始めると止まらない。「これもAPIあるじゃん」の連鎖。気づいたら10個になっていた。
各MCPの設定とハマりどころ
1. Gmail MCP
パッケージ: @gongrzhe/server-gmail-autoauth-mcp
GmailのMCPは選択肢が複数ある。公式のAnthropicホスティッド版もあるが、ローカル版を選んだ。フィルタ作成やラベル管理まで手が届くからだ。
{
"gmail": {
"command": "npx",
"args": ["-y", "@gongrzhe/server-gmail-autoauth-mcp"],
"env": {
"GMAIL_OAUTH_PATH": "~/.gmail-mcp/gcp-oauth.keys.json"
}
}
}
ハマった:
- GCPのOAuth同意画面を本番公開しないと、7日でトークンが切れる。テストモードだと毎週認証し直し。これに気づくまで3回やり直した
-
gmail.modifyスコープを忘れるとラベル操作で権限エラー。地味にハマる
朝イチで「今日の未読メールまとめて」と打つだけで、ブリーフィングに組み込める。返信のドラフトも作れる。メーラーを開く回数が激減した。
2. Google Calendar MCP
パッケージ: @cocal/google-calendar-mcp
{
"google-calendar": {
"command": "npx",
"args": ["-y", "@cocal/google-calendar-mcp"],
"env": {
"GOOGLE_OAUTH_CREDENTIALS": "/path/to/gcp-oauth.keys.json"
}
}
}
GmailとOAuthキーを共有できる。同じGCPプロジェクトで両方のスコープを入れておけば、認証ファイルは1つで済む。これは楽。
毎朝「今日と明日の予定」を自動取得して、空き時間の確認もターミナルから。
3. Google Drive MCP
パッケージ: @modelcontextprotocol/server-gdrive
{
"gdrive": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-gdrive"],
"env": {
"GDRIVE_OAUTH_PATH": "/path/to/gcp-oauth.keys.json",
"GDRIVE_CREDENTIALS_PATH": "/path/to/credentials.json"
}
}
}
注意: デフォルトパスだと認証ファイルが見つからないバグがある。環境変数で明示的にパスを指定しないと動かない。ドキュメントにも書いてないので、ソース読んで気づいた。
4. Chatwork MCP
パッケージ: @chatwork/mcp-server(npm公式)
{
"chatwork": {
"command": "npx",
"args": ["-y", "@chatwork/mcp-server"],
"env": {
"CHATWORK_API_TOKEN": "your-api-token"
}
}
}
うちはChatworkのルームが954個ある。ブラウザで巡回していたら日が暮れる。
面白いのは、同じパッケージで複数アカウントを同時接続できること。サーバー名とAPIトークンを変えるだけでいい。
{
"chatwork": { "env": { "CHATWORK_API_TOKEN": "main-token" } },
"chatwork-jlwa": { "env": { "CHATWORK_API_TOKEN": "jimukyoku-token" } }
}
メインと事務局アカウントを使い分けている。954ルームの中から特定の相手のメッセージを一発で引っ張れるのは、正直めちゃくちゃ助かっている。
5. GitHub MCP
パッケージ: @modelcontextprotocol/server-github
{
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-pat"
}
}
}
gh CLIが認証済みなら、そのOAuthトークンをPATとして使える。わざわざ新しいトークンを発行しなくていい。
6. Notion MCP
パッケージ: Notion公式ホスティッド(HTTP型)
{
"notion": {
"type": "url",
"url": "https://mcp.notion.com/mcp"
}
}
他のMCPと違い、ローカルでnpxを走らせるんじゃなくてNotion側がホスティングしている。設定はURLを書くだけ。楽。
ただしVS Codeセッションとの同期がたまに切れる。「接続済み」と表示されてるのにツールが見つからない。再起動すれば直るが、ちょっとモヤる。
7. NotebookLM MCP — ゾンビ127体との戦い
パッケージ: notebooklm-mcp@latest(非公式・PleasePrompto版)
ここが一番ヤバかった。
ある日、VS Codeが異常に重くなった。ファンが回りっぱなし。アクティビティモニタを開いて血の気が引いた。
$ ps aux | grep notebooklm-mcp | wc -l
127
127個のゾンビプロセス。CPU使用率230%超。
セッションが切れるたびに新しいプロセスが立ち上がるのに、古いやつが死なない。非公式MCPあるあるだと思うが、まさかここまでとは。
# 全駆除
pkill -9 -f "notebooklm-mcp"
これを打った瞬間、ファンが止まった。静寂。
今は普段は無効化して、使うときだけ有効にしている。使用後は必ずpkillで掃除。非公式APIなのでGoogle側の変更で動かなくなるリスクもある。爆弾を抱えている感覚。
8. Spotify MCP
パッケージ: sespinosa/spotify-mcp(GitHub clone)
「おしゃれでしょ?」と上司に見せたら笑われた。でも作業BGMの選曲をターミナルからやれるのは地味に快適。
落とし穴: 2026年2月のSpotify APIポリシー変更で、Development Modeだとプレイリスト作成APIが使えなくなった。Extended Quota Modeの申請には組織が必要。個人開発者は実質アウト。
プレイリストはローカルファイルで管理して、Spotifyアプリで手動保存する運用に切り替えた。
9. Gemini API(ラッパースクリプト)
MCPではないが、Claude Codeから呼び出せるようにしている。
#!/bin/bash
# tools/gemini.sh
curl -s "https://generativelanguage.googleapis.com/v1beta/models/$1:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d "{\"contents\":[{\"parts\":[{\"text\":\"$2\"}]}]}"
Claudeが苦手な画像生成をGeminiに投げる。Claude × Geminiのハイブリッド。AIにAIを呼ばせる構成、なかなかシュール。
GCPプロジェクトは1つにまとめろ
Gmail・Google Calendar・Google Driveは全部同じGCPプロジェクトで管理している。
GCPプロジェクト: ai-management
├── OAuth同意画面(本番公開済み)
├── OAuthクライアントID
│ ├── Gmail MCP用
│ ├── Google Calendar MCP用
│ └── Google Drive MCP用
└── APIキー
└── Gemini API用
同意画面を本番公開しておくこと。テストモードだと7日でトークンが失効する。これ、2回ハマった。2回目は自分が悪い。
毎朝、こうなる
- ターミナルで「おはよう」と打つ
- Google Calendar → 今日・明日の予定を取得
- Gmail → 未読・未返信メールを確認
- Chatwork → 重要ルームの未読を確認
- 全部まとめて朝のブリーフィングとして出てくる
この流れはCLAUDE.mdに定義してある。Claude Codeは起動時にCLAUDE.mdを読むので、「おはよう」の一言でMCPが連鎖的に動く。
# CLAUDE.md(抜粋)
## セッション開始プロトコル
ユーザーが「おはよう」と発言したとき:
1. Google Calendar MCPで今日+明日の予定を取得
2. Gmail MCPで未読・未返信メールを確認
3. Chatwork MCPで重要ルームの未読を確認
4. 全てをまとめて朝のブリーフィングとして報告
CLAUDE.mdにプロトコルを書いておけば、MCPの呼び出し順序をClaudeが勝手に判断してくれる。個別のスクリプトを組む必要がない。これがMCP連携の真価だと思う。
ブラウザのタブを10個開く生活とはおさらばだ。コーヒーだけで一日中ターミナルと向き合っていられる。
10個繋いで気づいたこと
コンテキストウィンドウは有限
MCPを増やすほど、ツール定義だけでトークンを食う。10個繋ぐと数千トークンが定義で消える。
対策は2つ。使用頻度の低いMCP(NotebookLM等)は普段無効化。あとCLAUDE.mdを分割して本体を軽量化した(634行→278行に圧縮した話は次回書く)。
認証ファイルの管理
10サービス分のOAuthトークン・APIキーを管理することになる。環境変数で管理して.gitignoreで除外。ここをサボると事故る。
バックアップもlaunchdで自動化している。変更があれば毎日2回、勝手にcommit & pushされる。
#!/bin/bash
# auto-backup.sh — 変更があれば自動でcommit & push
cd "/path/to/project" || exit 1
if [ -z "$(git status --porcelain)" ]; then
exit 0 # 変更なし
fi
DATE=$(date '+%Y-%m-%d %H:%M')
git add -A
git commit -m "自動バックアップ: ${DATE}"
git push
認証ファイルは.gitignoreに入っているので、うっかりpushされる心配はない。
迷ったら繋げ
最初は「Spotifyとか要る?」と思っていた。繋いでみたら使い道が見つかった。MCPの追加コストはほぼゼロ。APIは無料枠で足りる。迷ったら繋いでおくのが正解。繋がなかったことを後悔することはあっても、繋いで後悔することはない。
次回予告
この10連携を束ねるCLAUDE.mdの設計術——634行を278行に圧縮しながら、むしろ機能は増やした話を書く。
→ 書きました:CLAUDE.mdが634行になって関係が壊れた話