BlueAI株式会社BlueAI
カリキュラム/第8章: MCP 連携/8-2 Claude Code に Notion・Google Drive を MCP で連携

8-2 Claude Code に Notion・Google Drive を MCP で連携

無料

Notion と Google Drive を MCP で Claude Code に接続し、議事録・ドキュメント・スプレッドシートを横断検索する知識ベース型ワークフローを構築。OAuth 設定、権限管理、活用パターンまで解説。

8章: MCP 連携60分
酒井歩乃加
監修: 酒井歩乃加

フリーランス編集者・ライター / 元マイベスト編集ディレクター

平原尚樹
監修: 平原尚樹

株式会社BlueAI 代表取締役CEO / ソフトウェアエンジニア

このレッスンで身につくこと

第 8 章の入口だった 8-1(MCP とは)では、プロトコル・スコープ・公式 8 サーバー という地図を広げました。このレッスンはその地図を持って、現場で一番費用対効果が高い 2 サーバー、つまり NotionGoogle 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 後の働き方です。

loading diagram…

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 — 連携したいワークスペースを選択(個人 / 企業を間違えないこと)
  • TypeInternal(個人 / 社内向け)。Public は配布用なので不要

作成後の画面で Internal Integration Tokenntn_... で始まる文字列)が表示されます。これがあとで使う 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 の .envrcexport NOTION_TOKEN=ntn_xxx と入れておきます。==トークンを .mcp.json に直書きしない== のが鉄則です。

User スコープに入れたい場合は ~/.claude/settings.jsonmcpServers に同じブロックを足します。

> /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_pagesmcp__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.readonly
  • https://www.googleapis.com/auth/spreadsheets.readonly
  • https://www.googleapis.com/auth/documents.readonly

次に Credentials → Create credentials → OAuth client IDDesktop 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 内部の動きはおおよそ次の流れになります。

  1. ==mcp__gdrive__search== でフォルダ内 + 更新日条件のファイル一覧を取得
  2. 各ファイルに対して ==mcp__gdrive__read_file== を並列実行
  3. ローカルで「決定事項 / 次回 ToDo」を抽出
  4. ==mcp__notion__create_page== で週次サマリーページを作成
  5. 全文を 1 回のサマリで返す

1 セッションで複数 MCP を跨ぐとき、Claude は内部のツール呼び出し履歴をコンテキストに保持しているので、「さっき読んだ議事録の 3 番目をもう一度詳しく」のような追加指示も普通に通ります。

気づき

MCP の組み合わせは「Lego」と同じ思考。1 つの MCP は単機能のブロック。これを 2 つ 3 つと積み上げると、エンジニアじゃなくても作れなかった種類のワークフローが生まれます。「データ取得元」「中間処理」「出力先」の 3 役で考えるとプロンプトが組みやすくなります。


セキュリティ — 権限スコープ最小化と共有禁止データの扱い

便利だからといって、Notion / Drive 全部読ませる設定にすると 事故ったときに被害が桁違い になります。以下の 3 原則を守ってください。

原則 1 — 権限スコープは最小化

Notion は Integration を接続するページを絞る、Drive は ==scope を readonly で発行 が初期値。書き込みは 必要になってから後付け== が鉄則です。「全部入り」で発行すると、間違って「DB 全削除」を Claude が実行できる状態になります。

原則 2 — 個人ワークスペースと企業ワークスペースを分ける

区分NotionDrive
個人個人 Notion(無料 / Plus)個人 Gmail
企業Notion Business / EnterpriseGoogle Workspace

Integration / OAuth Client は別々に発行 するのが原則。MCP 設定でも notion-personalnotion-work のように 別キー で登録し、それぞれ ==別 .mcp.json スコープ==(Local vs Project)に置きます。個人用 PAT を会社の .mcp.json にコミットする事故、本当によくあります。

原則 3 — 共有禁止データは MCP 経由でも触らない

給与情報 / 顧客の個人情報 / 未公開財務 など、社内ルールで AI に投入禁止のデータは、MCP 経由でも触らない判断が必要です。MCP は通信路を効率化するだけで、データを Anthropic に送る前提は変わらない

Bad

やってはいけないこと

  • Notion の親ワークスペースを丸ごと Integration に承認する
  • Drive の drive scope(全権限)を最初から要求する
  • 個人の PAT・OAuth トークンを .mcp.json に直書きして Git にコミット
  • 「機密」「秘密」フォルダを除外せず Drive MCP で全件検索を許可
  • 書き込み系ツールを permissions.allow に入れる(必ず ask 経由)
Good

推奨される運用

  • Notion Integration は「議事録」「設計」「タスク」など 親 3〜5 ページ だけに接続
  • Drive scope は最初 readonly 3 つ、書き込みは必要になってから追加
  • API キー・OAuth credentials は ==環境変数 or ~/.config/== に置き、Git 管理外
  • 書き込み・削除系は ==askdeny==、絶対に 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/callPermission deniedObject 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 が連発。

Notion1 Integration あたり 3 req/s の制限。Claude が並列で 10 ファイル読みに行くと即制限に当たります。プロンプトで 「順番に処理して」「1 秒待って次へ」 と指示するか、mcp__notion__*allow に入れず ==ask 経由==で間隔を作ります。

Drive1 ユーザーあたり 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 つです。

  1. Notion MCP は Internal Integration 発行 → ページ接続.mcp.json 登録の 3 ステップ。接続漏れがハマりポイント
  2. Google Drive MCPCloud Project 専用化 → API 有効化 → 読み取り scope 3 つ → credentials.json → 初回ブラウザ認可
  3. Notion 実例 DB 検索 / 新規ページ作成 / 既存ページ更新 の 3 パターンで業務の 8 割が回る
  4. Drive 実例 ドキュメント検索 / スプシ読み書き / レポート保存scope の段階的拡張 で安全に運用
  5. 複数 MCP の組み合わせは「入力 / 中間処理 / 出力」の 3 役で設計すると 1 プロンプトに収まる
  6. セキュリティは 最小スコープ / 個人 vs 企業の分離 / 共有禁止データの除外の 3 原則
  7. 失敗の 9 割は 権限不足 / レート制限 / ID 間違い のどれか。search から始めれば多くは回避できる
気づき

MCP 連携は「設定」ではなく「設計」。何を読ませ、何を書かせるか、どこまで自動承認するか — 3 ヶ月後の自分が読み返しても判断できる粒度で permissions を書いておきましょう。それが 事故を起こさない MCP 運用 の正体です。

章末演習

章末演習 — 実機で手を動かして「自分ごと」に落とし込みましょう。所要時間 30〜45 分。

  1. Notion Integration 発行 — 自分のワークスペースで Internal Integration を作り、テスト用に「議事録」ページを 1 つ接続
  2. ==.mcp.json 登録 + 動作確認 — トークンを 環境変数== で渡し、/mcp✓ notion (N tools) を確認
  3. Notion 実例 A / B / C — DB 検索・新規ページ作成・既存ページ更新を 1 回ずつ実行
  4. Google Cloud Project 作成MCP 専用 で新規プロジェクトを 1 つ作成、Drive API を有効化
  5. Drive 実例 A 実行 — 「最近更新されたドキュメント 5 件」を検索 → 要約させる
  6. 組み合わせ実行 — 「Drive で読んで Notion に書く」を 1 プロンプトで完走
  7. ==permissions ブロック — Notion / Drive の書き込み系を askdeny== に分類して 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 で「開発フロー統合」を、それぞれ別の柱として育てていきます。