本記事は /setup と /setup/mcp が完了している前提で書かれています。Google Cloud Console で OAuth クライアントが作成済み、mcp-server-gcal が npm 経由で入っている状態です。
第1章朝、もう一度同じ場所で躓いた
Play 04 で /daily-schedule を組んだ翌週。月曜の朝、満を持してターミナルに打ち込みました。
ところが、出てきた工程表をよく見ると、ありもしない予定が並んでいるんです。今日入っていないはずの会議が、しれっと9時に座っている。Claude は memory と knowledge はちゃんと読んでいました。でも肝心の 今日のカレンダー だけ、読めていなかったんです。
考えてみれば当たり前でした。Claude Code は、まだ Google カレンダーと一度もつながっていない。つなぐための部品(MCP)を入れていない。ただそれだけのことです。
でも、この空っぽの工程表を見た瞬間、はっきり分かりました。話し相手でいるだけじゃ、もう足りない。本当に仕事を任せるなら、AIに 本物のデータを触らせるしかない。次の章で、その「つなぐ」を実際にやります。
第2章Claude が、初めて外のデータを読む日
ここまでの Play 01〜04 でやってきたのは、Claude に あなた自身のことを覚えさせる作業でした。文体も、今週の優先度も、抱えてる案件も、ぜんぶ手元のテキストファイルに書いてあった情報です。家の中の話、と言ってもいい。
この Play 05 で、初めて家の外に手が伸びます。Claude が、自分の Google アカウントの中身を読みにいく。今日つなぐのは Google カレンダーです。Gmail も Slack も Notion も、つなぎ方の基本はぜんぶ同じ。これがその記念すべき1本目になります。
つなぐ部品の名前は MCP(Model Context Protocol)といいます。難しそうな名前ですが、Claude が外のサービスを覗くための共通プラグ、くらいに思っておけば十分です。コンセントの形が合えば刺さる。中身の仕組みは知らなくていい。次の章で、その「プラグ」を1ファイル書いて差し込みます。
第3章36行の設定で、つなぐ
やることは、ファイルを1つ書くだけです。Claude Code の MCP 設定ファイルに、Google カレンダー用の数行を書き足します。下の中身を、まるごと写してみてください。
{
"mcpServers": {
"gcal": {
"command": "mcp-server-gcal",
"env": {
"GCAL_CLIENT_ID": "123...xyz.apps.googleusercontent.com",
"GCAL_CLIENT_SECRET": "GOCSPX-...",
"GCAL_SCOPES": "https://www.googleapis.com/auth/calendar.readonly",
"GCAL_TIMEZONE": "Asia/Tokyo"
}
}
}
}
本当にこれだけです。途中に出てくる長い鍵のような文字列は、あなたの Google アカウントを Claude に貸し出すための合鍵だと思ってください。これは準備ガイドの /setup/mcp で取ったものを、そのまま貼り付けます。そして calendar.readonly の1行。これが 読むだけ、書き換えはしないという宣言です。だから Claude が勝手に予定を増やしたり消したりすることは、起きません。書き込みが要る場面は、ずっと先の Play でそのとき足します。
36行で済んでしまうのは、面倒な処理を MCP サーバーが裏で全部引き受けてくれているからです。あなたが書くのは どこにつなぐか、それだけ。書けたら、次の章で実際に走らせます。
第4章/daily-schedule が、本物で動く
書けたら、Claude Code を一度閉じて、開き直してください。あとは Play 04 で作った /daily-schedule を、何も変えずにそのまま打つだけです。
$ claude > /daily-schedule # 数秒後、画面に流れ出すのは、もはや仮データではありません。 09:00 ─ Play 05 草稿 (memory/priorities.md から) 10:30 ─ 取引先 A 月次面談 (gcal から ← NEW) 12:00 ─ 昼休み 14:00 ─ 商談準備 ・ B社 (gcal から ← NEW) 16:00 ─ MCP検証 ・ Slack統合 (memory/priorities.md から)
気づいてほしいのは、Play 04 で書いた /daily-schedule の手順書(50行)を、1文字も触っていないことです。プラグを1つ差しただけ。それだけで、コマンドが拾ってくる予定が、ニセモノから本物に入れ替わりました。
これが、このシリーズで何度も出てくる感覚です。AIの動きを変えたいのに、コードはいじらない。つなぐ先を差し替えるだけで、出てくるものが変わる。次の章で、これがなぜタダで動くのかを見ておきます。
第5章月¥0 で動く理由
カレンダーを読みにいく窓口(Google Calendar API)は、Google アカウントさえあれば無料の範囲で使えます。あなたが朝に1回コマンドを打つくらい、1日に数十回呼ぶ程度では、その無料枠にはかすりもしません。
つなぎ役の MCP サーバー(mcp-server-gcal)も、誰でもタダで使える公開ソフトです。Claude Code が Pro プランの中で動くのも、これまでどおり変わりません。
だから、Play 05 でかかった追加費用も ¥0。「AIを仕事に組み込む」と聞くと、毎月数万円の利用料を覚悟する方が多いはずです。そこが空振りする、というのがこの章の言いたいことです。安心したら、次は逆に、私がここで踏んだ失敗を2つ見てください。
第6章2回踏んだ、失敗
カレンダーに「書き込み」の権限まで渡してしまった。
最初、サンプルをそのままコピーして https://www.googleapis.com/auth/calendar、つまり読みも書きも全部できる権限でつないでいました。動かして3日目。Claude の出力にまぎれて "calling: events.update(...)" というログが流れてきたんです。ぞっとしました。実際に書き換わってはいなかったけれど、Claude は確かに何かをいじろうとしていた。しかも何をしようとしたのか、追えなかった。その時点ではログを残す設定すらしていなかったからです。
すぐに権限を calendar.readonly に絞り直し、Google Cloud Console で合鍵を作り直して、つなぎ直しました。それ以降、あのログは一度も出ていません。教訓はシンプルで、最初は読むだけにしておく。書き込みが本当に要る Play が来たら、そのとき、その Play のためだけに権限を足す。あなたも、まず readonly から始めてください。
時差の設定を、書き忘れた。
初めて試したのは土曜の夜22時でした。/daily-schedule を打つと、翌週月曜の予定に「月曜 02:00 ・ 取引先 A 月次面談」と出てくる。深夜2時に面談、なわけがない。これ、時刻が 世界標準時のままだったんです。本当は11:00の面談が、9時間ずれて02:00に表示されていた。mcp.json に GCAL_TIMEZONE="Asia/Tokyo" を1行足したら、あっさり直りました。
外のサービスをつなぐときは、時差・通貨・言語。この3つだけは、最初の設定ではっきり書いておいてください。動かし始めてから直すと、それまでに見ていた数字が全部「ほんとに合ってた?」と疑わしくなります。ここまで来たら、いよいよ本物の朝です。
第7章動き出した、本物の朝
翌週の月曜。ターミナルを開いて、/daily-schedule。
取引先 A の月次面談も、商談の準備時間も、画面に出てきたのは全部、本物のスケジュールでした。コードは一行も書き直していません。
ここで、はっきり手応えが来ます。さっきまで「AIと話していた」はずが、いつのまにか業務システムを動かしている。その境目を、自分の朝でまたいだ瞬間です。
次からは、いま開いたこの MCP という入口に、別のサービスを順番に差していきます。Gmail、Slack、Notion。1つ差すごとに、片付く仕事が1つ増える。すぐ下のカードが、その2本目です。読み終えたら、そのまま進んでください。