8-2 Claude Code に Notion・Google Drive を MCP で連携
無料Notion と Google Drive を MCP で Claude Code に接続し、議事録・ドキュメント・スプレッドシートを横断検索する知識ベース型ワークフローを構築。OAuth 設定、権限管理、活用パターンまで解説。
このレッスンで身につくこと
第 8 章の入口だった 8-1(MCP とは)では、プロトコル・スコープ・公式 8 サーバー という地図を広げました。このレッスンはその地図を持って、現場で一番費用対効果が高い 2 サーバー、つまり Notion と Google Drive を実際に繋いで使い倒すフェーズです。
このレッスンのゴール
- Notion 公式 MCP をインテグレーション発行 →
.mcp.json登録 → 動作確認まで自力で通せる - Google Drive MCP の OAuth credentials.json 取得から、Workspace 連携の落とし穴までを掴む
- Notion 実例 3 つ(DB 検索 / ページ作成 / 既存ページ更新)と Drive 実例 3 つ(ドキュメント検索 / スプレッドシート読み書き / レポート保存)を会話例まで含めて再現できる
- 「Drive で読んで Notion に書く」という 複数 MCP の組み合わせ を、1 セッションのプロンプトで完結させられる
- 個人ワークスペースと企業ワークスペースの 権限スコープ の違いと、共有禁止データの扱いを判断できる
- 「権限不足」「レート制限」「ページ存在しない」など 現場でハマる 3 大失敗 を予測して回避できる
所要時間 — 約 60 分(読むだけなら 30 分、実機で両方繋ぐなら 45〜90 分) 難易度 — ★★★☆☆(MCP は初めてでも 8-1 を読んでいれば OK) 前提 — 8-1 完了 / Notion または Google アカウント所持
連携で何が変わるか — Before / After
「Notion / Drive と Claude Code を繋ぐと何が嬉しいのか」を最初に体感しておきます。抽象論ではなく、1 週間に何分浮くか の視点で 4 ケース並べます。
Case 1 — 週次定例の議事録
| 従来のやり方 | MCP 連携後 | |
|---|---|---|
| 作業 | 会議メモを手で整形 → Notion の「議事録」DB を開く → テンプレに沿って手で入力 | 「文字起こしから議事録を作って Notion の議事録 DB に追加して」 |
| 所要時間 | 約 30 分 | 約 2 分 |
| 抜け漏れ | ありがち(参加者の名前漏れ、次回 ToDo 抜け) | テンプレ準拠で揃う |
Case 2 — 部署横断のドキュメント検索
| 従来のやり方 | MCP 連携後 | |
|---|---|---|
| 作業 | Drive を「認証 設計」で検索 → 5 件出てきた中身を 1 つずつ開く → ベスト 2 件を要約 | 「Drive で『認証 設計』を検索して、関連 3 件を比較表にまとめて」 |
| 所要時間 | 約 20〜40 分 | 約 3 分 |
Case 3 — スプレッドシートからレポート
| 従来のやり方 | MCP 連携後 | |
|---|---|---|
| 作業 | スプシをダウンロード → ピボット → Notion ページに貼り付け → 文章を書く | 「売上シートの今月分を読んで、要約を Notion レポートページに保存」 |
| 所要時間 | 約 1 時間 | 約 5 分 |
Case 4 — 過去議事録から意思決定の追跡
| 従来のやり方 | MCP 連携後 | |
|---|---|---|
| 作業 | Notion の検索で「認証」を打つ → 12 件のページを 1 つずつ読む → 結論を書き出す | 「Notion の議事録 DB から認証関連の意思決定を時系列で並べて」 |
| 所要時間 | 約 2 時間 | 約 4 分 |
MCP 連携の本質は「貼り替え作業」の絶滅。エクスポート → 整形 → コピペという、人間が一番嫌がる単純作業を消し去る。「考える時間」だけが残るのが MCP 後の働き方です。
Notion MCP の設定
Notion 公式が @notionhq/notion-mcp-server を提供しています。設定は 3 ステップ です。
Step 1 — Internal Integration の発行
ブラウザで https://www.notion.so/profile/integrations を開き、「New integration」 をクリック。
- Name — 例「claude-code」
- Associated workspace — 連携したいワークスペースを選択(個人 / 企業を間違えないこと)
- Type — Internal(個人 / 社内向け)。Public は配布用なので不要
作成後の画面で Internal Integration Token(ntn_... で始まる文字列)が表示されます。これがあとで使う API キー。Show を押して安全な場所にコピーしてください。このトークンが漏れると、接続されたページがすべて読まれます。
Step 2 — ページを Integration に「接続」する
これが Notion 連携で 9 割の人が踏むワナ です。トークンを発行しただけでは、Notion 側は どのページにアクセスして良いか分かりません。
- 連携したいページ(または DB)を Notion で開く
- 右上の 「・・・」メニュー → 「Connections」 → 「Add connections」
- 先ほど作った ==
claude-code== を選んで承認
子ページは 親で承認すれば自動継承 されます。たとえば「議事録」という親ページを承認すれば、その下の 200 件の議事録ページもすべて読めるようになります。
「Workspace ごと一括承認」はできません。Notion の仕様上、必ず「ページ単位」で Integration を追加する必要があります。「議事録」「設計ドキュメント」「タスク DB」など、Claude に読ませたい 親ページを 3〜5 個 接続するのが現実的な落としどころです。
Step 3 — .mcp.json への登録
プロジェクトルートに .mcp.json を作成(あれば追記)します。
{
"mcpServers": {
"notion": {
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer ${NOTION_TOKEN}\", \"Notion-Version\": \"2022-06-28\"}"
}
}
}
}${NOTION_TOKEN} は 環境変数経由。シェルの ~/.zshrc か direnv の .envrc に export NOTION_TOKEN=ntn_xxx と入れておきます。==トークンを .mcp.json に直書きしない== のが鉄則です。
User スコープに入れたい場合は ~/.claude/settings.json の mcpServers に同じブロックを足します。
> /quit
$ claude
> /mcp
✓ notion (15 tools)(15 tools) のように出れば成功。✗ notion の場合は、Step 1 のトークンか Step 2 の接続漏れを疑います。
Notion 実例 3 つ
接続できたら、次の 3 つのパターンを 自分のワークスペースで実際に試して みてください。会話例はそのまま貼って動きます。
実例 A — DB 検索(読み取り)
タスク管理 DB から、特定条件のレコードを取得して整形する用途です。
> Notion のタスク DB から、ステータスが「進行中」かつ
> 担当者が「私」のタスクを取得して、優先度順に
> Markdown のチェックリストで出して。Claude Code は内部で mcp__notion__search_pages か mcp__notion__query_database を呼び、JSON を 自分で整形 して返します。SQL を書く必要は 0、Notion API のフィルタ仕様を覚える必要も 0 です。
応用として、週次レビュー用の自己集計 もすぐ書けます。
> Notion のタスク DB から、今週クローズしたタスクを
> 担当者別にまとめて、各人の貢献を 1 行ずつ要約して。実例 B — 新規ページ作成(書き込み)
議事録を一発で作る用途です。
> 議事録ページを Notion の「議事録」DB に追加して。
>
> 日付: 2026-05-19
> 参加者: 山田、田中、佐藤
> 議題: Q3 の目標設定
> 決定事項:
> - 新規 LP を 6 月公開
> - 検索流入を 1.5 倍に
> 次回 ToDo:
> - 田中: 競合 5 社調査(5/26 まで)
> - 佐藤: LP ワイヤー初稿(5/30 まで)書き込み時は ==(y/n) の確認プロンプト== が出ます。ここで内容を一度確認できるので、テンプレと違うときはキャンセル → 指示を直す、というループが回せます。
Notion DB のプロパティ名はそのまま日本語で OK。Claude が API のスキーマを tools/list 経由で把握しているので、「担当者」「優先度」「ステータス」のような日本語プロパティでも正しくマッピングされます。
実例 C — 既存ページの更新
ステータス変更や、既存ページに追記する用途。
> Notion のタスク DB で、タイトルに「LP 改善」を含むタスクの
> ステータスを「完了」、完了日を今日に更新して。破壊的変更 なので、mcp__notion__update_page は ==ask permission== にしておくのが安全。「全件更新」のような事故を防げます。
{
"permissions": {
"allow": ["mcp__notion__search_pages", "mcp__notion__query_database", "mcp__notion__retrieve_page"],
"ask": ["mcp__notion__create_page", "mcp__notion__update_page", "mcp__notion__append_block_children"],
"deny": ["mcp__notion__delete_block"]
}
}読み取り全開放 / 書き込み確認 / 削除禁止 の 3 段構えが、Notion MCP の事故りにくいデフォルトです。
Google Drive MCP の設定
Google Drive MCP は OAuth ベースで、Notion より少しだけ手順が多いです。Google Cloud Console での credentials 発行 が肝になります。
Step 1 — Google Cloud Project の準備
https://console.cloud.google.com で新規プロジェクト(例「claude-mcp-personal」)を作成。既存プロジェクトに相乗りしない のが事故防止のコツです。MCP 用に専用プロジェクトを立てておけば、後で「権限を全部 revoke」が 1 クリックで済みます。
Step 2 — Drive API と Sheets API を有効化
APIs & Services → Library で次を有効化します。
- Google Drive API(必須 — ファイル検索 / 読み取り)
- Google Sheets API(推奨 — スプレッドシートの値読み書き)
- Google Docs API(任意 — Docs を構造化して読みたい場合)
Step 3 — OAuth 同意画面と credentials.json
APIs & Services → OAuth consent screen で、User Type を選択します。
- 個人 Gmail — External(Publishing status は Testing のまま、自分を Test user に追加)
- Workspace 契約あり — Internal(同一ドメインのみ承認、申請プロセスが不要)
Scopes は 読み取り 3 つ から始めます。
https://www.googleapis.com/auth/drive.readonlyhttps://www.googleapis.com/auth/spreadsheets.readonlyhttps://www.googleapis.com/auth/documents.readonly
次に Credentials → Create credentials → OAuth client ID で Desktop app を選択 → credentials.json をダウンロード → ~/.config/gdrive-mcp/credentials.json に保存します。
Step 4 — .mcp.json への登録と初回認可
{
"mcpServers": {
"gdrive": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-gdrive"],
"env": {
"GDRIVE_CREDENTIALS_PATH": "/Users/me/.config/gdrive-mcp/credentials.json",
"GDRIVE_TOKEN_PATH": "/Users/me/.config/gdrive-mcp/token.json"
}
}
}
}Claude Code を再起動すると 初回だけブラウザが開き、Google アカウントの選択 → 同意画面が出ます。「このアプリは確認されていません」と警告が出るのは Testing ステータスなら正常。「Advanced → Go to claude-mcp (unsafe)」で進めて OK。承認すると token.json が自動生成され、以後は自動再認証されます。
> /mcp
✓ gdrive (4 tools)Workspace 連携で「組織管理者の承認が必要」と出るケース は、Internal タイプにしていないか、scope が機微すぎる(drive 全権限など)可能性があります。読み取り 3 scope で始めれば、ほぼ自己承認で通ります。書き込みが必要になったら、それから IT 部門に申請するのが現実解です。
Drive 実例 3 つ
実例 A — ドキュメント検索
> Google Drive で「認証 設計」を含むドキュメントを
> 過去 3 ヶ月以内に更新されたものから 5 件探して、
> タイトル・最終更新日・要約 3 行で一覧化して。mcp__gdrive__search でメタデータを取得 → mcp__gdrive__read_file で本文を取得という 2 段呼び出し を Claude が自分で組み立てます。ユーザーは「探して要約」と言うだけで OK。
実例 B — スプレッドシートの読み書き
Sheets API が有効になっていれば、シートを DB のように 扱えます。
> 売上スプレッドシート(ID: 1AbCxYz...)の
> 「2026-05」シートを読んで、製品カテゴリ別の合計を
> 同じシートの T 列に書き込んで。書き込みが必要なときは、Step 3 の scope に ==spreadsheets (readonly でない方)を追加し、OAuth トークンを再発行します。読み取り運用のうちは readonly のまま== にしておきましょう。
実例 C — 自動レポート保存
集計結果を Drive 上の Docs に保存する用途。documents scope(書き込み版)が必要です。
> 売上スプレッドシートを読んで、月次レポートを Markdown で書いて、
> Drive の「月次レポート」フォルダに「2026-05-report.md」として保存して。書き込み系を本格運用する前に ==ask permission== を必ず設定。事故ったときに止められないのが OAuth 系 MCP の一番怖いところです。
{
"permissions": {
"allow": ["mcp__gdrive__search", "mcp__gdrive__read_file"],
"ask": ["mcp__gdrive__write_file", "mcp__gdrive__create_file"],
"deny": ["mcp__gdrive__delete_file"]
}
}複数 MCP の組み合わせ — Drive で読んで Notion に書く
ここまでは「単独で使う」例ばかりでしたが、MCP の真価は 組み合わせ にあります。Drive を 入力'、Notion を 出力'として使う 1 プロンプトを見てみます。
> Google Drive の「議事録」フォルダから、今週更新された議事録を
> すべて読み込んで、各議事録から「決定事項」と「次回 ToDo」だけを
> 抽出して、Notion の「週次サマリー」DB に
> 「2026-W20」というタイトルでページを 1 つ作成して。Claude 内部の動きはおおよそ次の流れになります。
- ==
mcp__gdrive__search== でフォルダ内 + 更新日条件のファイル一覧を取得 - 各ファイルに対して ==
mcp__gdrive__read_file== を並列実行 - ローカルで「決定事項 / 次回 ToDo」を抽出
- ==
mcp__notion__create_page== で週次サマリーページを作成 - 全文を 1 回のサマリで返す
1 セッションで複数 MCP を跨ぐとき、Claude は内部のツール呼び出し履歴をコンテキストに保持しているので、「さっき読んだ議事録の 3 番目をもう一度詳しく」のような追加指示も普通に通ります。
MCP の組み合わせは「Lego」と同じ思考。1 つの MCP は単機能のブロック。これを 2 つ 3 つと積み上げると、エンジニアじゃなくても作れなかった種類のワークフローが生まれます。「データ取得元」「中間処理」「出力先」の 3 役で考えるとプロンプトが組みやすくなります。
セキュリティ — 権限スコープ最小化と共有禁止データの扱い
便利だからといって、Notion / Drive 全部読ませる設定にすると 事故ったときに被害が桁違い になります。以下の 3 原則を守ってください。
原則 1 — 権限スコープは最小化
Notion は Integration を接続するページを絞る、Drive は ==scope を readonly で発行 が初期値。書き込みは 必要になってから後付け== が鉄則です。「全部入り」で発行すると、間違って「DB 全削除」を Claude が実行できる状態になります。
原則 2 — 個人ワークスペースと企業ワークスペースを分ける
| 区分 | Notion | Drive |
|---|---|---|
| 個人 | 個人 Notion(無料 / Plus) | 個人 Gmail |
| 企業 | Notion Business / Enterprise | Google Workspace |
Integration / OAuth Client は別々に発行 するのが原則。MCP 設定でも notion-personal と notion-work のように 別キー で登録し、それぞれ ==別 .mcp.json スコープ==(Local vs Project)に置きます。個人用 PAT を会社の .mcp.json にコミットする事故、本当によくあります。
原則 3 — 共有禁止データは MCP 経由でも触らない
給与情報 / 顧客の個人情報 / 未公開財務 など、社内ルールで AI に投入禁止のデータは、MCP 経由でも触らない判断が必要です。MCP は通信路を効率化するだけで、データを Anthropic に送る前提は変わらない。
やってはいけないこと
- Notion の親ワークスペースを丸ごと Integration に承認する
- Drive の
drivescope(全権限)を最初から要求する - 個人の PAT・OAuth トークンを
.mcp.jsonに直書きして Git にコミット - 「機密」「秘密」フォルダを除外せず Drive MCP で全件検索を許可
- 書き込み系ツールを
permissions.allowに入れる(必ずask経由)
推奨される運用
- Notion Integration は「議事録」「設計」「タスク」など 親 3〜5 ページ だけに接続
- Drive scope は最初 readonly 3 つ、書き込みは必要になってから追加
- API キー・OAuth credentials は ==環境変数 or
~/.config/== に置き、Git 管理外 - 書き込み・削除系は ==
askかdeny==、絶対にallowに入れない - 監査ログ を Notion 側(Workspace Settings → Security & Logs)/ Google Workspace 側(Admin Console)で月次確認
プロンプトテンプレート 4 つ
実際に使ってみて効果が高かったテンプレートを 4 つ置いておきます。{} の中だけ自分の業務に合わせて差し替えてください。
テンプレ 1 — 議事録 → Notion DB
> 以下の文字起こしから議事録を整形して、
> Notion の「議事録 DB」に新規ページとして追加して。
>
> ・タイトル: {YYYY-MM-DD} 定例
> ・プロパティ: 日付 / 参加者(マルチセレクト)/ 議題
> ・本文構成: 議題ごとに H2、決定事項 / ToDo を箇条書き
>
> 文字起こし:
> ---
> {貼り付け}
> ---テンプレ 2 — Drive 横断ドキュメント要約
> Google Drive で「{キーワード}」を含むドキュメントを
> 過去 {N} ヶ月以内のものから上位 {M} 件取得して、
> 各ドキュメントを以下のテンプレで要約して。
>
> | タイトル | 作成日 | 結論 1 行 | キーポイント 3 行 |
>
> 最後に「全体に共通する論点」「対立している論点」を
> それぞれ 3 行でまとめて。テンプレ 3 — タスク棚卸し
> Notion のタスク DB で「期限 < 今日」かつ「ステータス != 完了」のタスクを取得して、
> 担当者別に集計。各担当者ごとに以下を出して。
>
> ・遅延中のタスク件数
> ・最も古い遅延タスクのタイトルと経過日数
> ・優先度「High」が含まれるかテンプレ 4 — Drive → Notion クロス連携
> Google Drive の「{フォルダ名}」フォルダから今週更新されたファイルを抽出 →
> 内容を要約 → Notion の「週次サマリー」DB に
> 「{YYYY}-W{週番号}」というタイトルでページを作成。
>
> 各ファイルは「ファイル名 → 要点 3 行 → 関連リンク」の形式で本文に列挙。失敗パターン — 現場でハマる 3 大トラブル
ここからは 実際に踏むであろう失敗 を、原因と対処をセットで並べます。8-1 で扱ったような一般論ではなく、Notion / Drive 特有 のものです。
失敗 1 — 権限不足(最も多い)
症状 — tools/call が Permission denied か Object not found で返る。/mcp 自体は ✓ なのにツール実行時だけ失敗。
Notion の場合
- 9 割は Integration の接続漏れ。Notion でそのページを開き、
...→ Connections にclaude-codeがあるか確認 - 親ページに接続しても、後から「Move to Private」されたサブページは継承が切れる
- Integration の Capabilities で「Read content」「Update content」「Insert content」のチェックを確認
Drive の場合
- OAuth scope が
readonlyなのに書き込みを試している → scope を追加して再認可 - ファイルが「共有ドライブ」にある場合、Personal credentials では見えないことがある
token.jsonの有効期限切れ →token.jsonを削除して再認可
失敗 2 — レート制限
症状 — 急に Rate limit exceeded / 429 Too Many Requests が連発。
Notion は 1 Integration あたり 3 req/s の制限。Claude が並列で 10 ファイル読みに行くと即制限に当たります。プロンプトで 「順番に処理して」「1 秒待って次へ」 と指示するか、mcp__notion__* の allow に入れず ==ask 経由==で間隔を作ります。
Drive は 1 ユーザーあたり 12,000 req/分 と緩いが、Sheets API は 読み取り 60 req/分 と厳しめ。スプシ大量更新を頼むなら 1 セルずつ更新ではなく、まとめて配列で更新 するよう指示します。
> スプシのデータ更新は 1 回の API 呼び出しに集約して。
> セルごとの逐次更新は避けて、values.batchUpdate を使って。失敗 3 — ページが存在しない / ID が間違っている
症状 — 「指定したページが見つかりません」「Database not found」と返る。
- Notion — ページ ID は URL の末尾 32 文字(ハイフンなし)か、UUID 形式。「ページ URL を貼って」と頼むと Claude が抽出してくれる
- Drive — ファイル ID は URL の
/d/{ID}/edit部分。スプシなら Sheet 名(タブ名)が必要。「Sheet1」と「シート 1」など全角半角ミスは頻発
==search 系から始める== とこの問題は回避できます。「ID で直接指定」より「タイトルで検索 → ID を取得 → 操作」の方が、最終的にやり直しが少ないです。
ハマったら、まず /mcp で ✓ か ✗ を確認 → サーバー単独実行で stderr を見る → トークン / scope / 接続 の 3 つを順番にチェック。これだけで 8 割は数分で解決します。
まとめ
このレッスンで押さえてほしいポイントは次の 7 つです。
- Notion MCP は Internal Integration 発行 → ページ接続 →
.mcp.json登録の 3 ステップ。接続漏れがハマりポイント - Google Drive MCP は Cloud Project 専用化 → API 有効化 → 読み取り scope 3 つ → credentials.json → 初回ブラウザ認可
- Notion 実例 DB 検索 / 新規ページ作成 / 既存ページ更新 の 3 パターンで業務の 8 割が回る
- Drive 実例 ドキュメント検索 / スプシ読み書き / レポート保存 は scope の段階的拡張 で安全に運用
- 複数 MCP の組み合わせは「入力 / 中間処理 / 出力」の 3 役で設計すると 1 プロンプトに収まる
- セキュリティは 最小スコープ / 個人 vs 企業の分離 / 共有禁止データの除外の 3 原則
- 失敗の 9 割は 権限不足 / レート制限 / ID 間違い のどれか。
searchから始めれば多くは回避できる
MCP 連携は「設定」ではなく「設計」。何を読ませ、何を書かせるか、どこまで自動承認するか — 3 ヶ月後の自分が読み返しても判断できる粒度で permissions を書いておきましょう。それが 事故を起こさない MCP 運用 の正体です。
章末演習 — 実機で手を動かして「自分ごと」に落とし込みましょう。所要時間 30〜45 分。
- Notion Integration 発行 — 自分のワークスペースで Internal Integration を作り、テスト用に「議事録」ページを 1 つ接続
- ==
.mcp.json登録 + 動作確認 — トークンを 環境変数== で渡し、/mcpで✓ notion (N tools)を確認 - Notion 実例 A / B / C — DB 検索・新規ページ作成・既存ページ更新を 1 回ずつ実行
- Google Cloud Project 作成 — MCP 専用 で新規プロジェクトを 1 つ作成、Drive API を有効化
- Drive 実例 A 実行 — 「最近更新されたドキュメント 5 件」を検索 → 要約させる
- 組み合わせ実行 — 「Drive で読んで Notion に書く」を 1 プロンプトで完走
- ==
permissionsブロック — Notion / Drive の書き込み系をaskかdeny== に分類してsettings.jsonに追記
<Quiz question="Notion MCP を設定したのに、ツール実行時に「Object not found」が返ります。最も疑うべき原因はどれですか?" options={["Integration トークンは正しいが、対象ページに Integration が接続されていない","Notion API のレート制限に達している","Node.js のバージョンが古い"]} answer={0} />
<Quiz question="Google Drive MCP のセキュリティ設定として、最も推奨されるのはどれですか?" options={["最初は readonly scope のみで発行し、書き込みは必要になってから追加する","drive scope(全権限)を最初から有効にして将来の利便性を確保する","credentials.json を .mcp.json と同じフォルダに置いて Git で共有する"]} answer={0} />
次のレッスン 8-3: 外部ツール接続 では、GitHub / データベース / Web 検索 など、業務知識ベース以外の MCP サーバーを扱います。Notion・Drive で「ナレッジ統合」を、8-3 で「開発フロー統合」を、それぞれ別の柱として育てていきます。