毎週月曜の朝、議事録からタスクを手で転記する虚無の30分。それが消えました。
この記事では、Claude Code と Notion MCP サーバーを組み合わせて、議事録の投入からタスク生成・優先度付け・実装指示ドラフトの作成までを全自動化した方法を紹介します。結果として週あたり約5時間の作業が消え、月曜朝の憂鬱がなくなりました。
MCP × Notion の実運用記事はまだ少ないため、構築手順・プロンプト設計・ハマりポイントまで具体的に書きます。
環境・前提条件
| 項目 | バージョン / 条件 |
|---|---|
| Claude Code | 最新版(CLI) |
| Node.js | v20 以上 |
| Notion API | 2022-06-28 以降 |
| MCP サーバー |
@anthropic/notion-mcp-server(npm) |
| OS | macOS / Linux(WSL2 可) |
- Notion のワークスペースに 議事録 DB と タスク DB が存在すること
- Notion Integration トークンを取得済みであること
1. Before:手動フローの全貌
まず、自動化前のフローを振り返ります。毎週こんなことをやっていました。
- Google Meet / Zoom の議事録を Notion の「議事録DB」にコピペ
- 議事録を読み返し、タスクを手動で「タスクDB」に転記
- 各タスクに優先度・担当者・期限を手入力
- 実装着手前に
CLAUDE.mdへ指示書を手書き - やっと Claude Code で実装開始
赤いノードがすべて「人間が手を動かしている」ステップです。これが毎日 65 分、週 5 日で 約 5 時間 25 分。控えめに言って虚無でした。
2. MCP(Model Context Protocol)サーバーの概要と Notion MCP の構築手順
MCP とは何か
MCP(Model Context Protocol)は、AI モデルが外部ツールやデータソースに安全にアクセスするための標準プロトコルです。Claude Code は MCP サーバーを介して、Notion・GitHub・Slack などの外部サービスを「ツール」として呼び出せます。
ポイントは、Claude Code 本体を改造する必要がないことです。MCP サーバーを追加するだけで能力が拡張されます。
Notion MCP サーバーの構築手順
Step 1:Notion Integration の作成とトークン取得
- Notion Integrations ページ で新しい Integration を作成
- 「Read content」「Insert content」「Update content」の権限を付与
- Internal Integration Token(
ntn_で始まる文字列)をコピー - 議事録 DB・タスク DB それぞれで「コネクト」から作成した Integration を追加
Step 2:MCP サーバーの設定
Claude Code の設定ファイル ~/.claude/claude_code_config.json(または プロジェクトルートの .mcp.json)に以下を追記します。
{
"mcpServers": {
"notion": {
"command": "npx",
"args": ["-y", "@anthropic/notion-mcp-server"],
"env": {
"NOTION_API_TOKEN": "ntn_xxxxxxxxxxxxxxxxxxxx"
}
}
}
}
注意: トークンを直接書く代わりに環境変数を参照させる方法を後述の「ハマりポイント」で解説します。
Step 3:接続確認
Claude Code を起動し、/mcp コマンドで Notion サーバーが connected になっていることを確認します。
claude
# 起動後
> /mcp
# notion: connected ✅ と表示されればOK
3. 実装:Claude Code から Notion DB を読み書きする
使用する MCP ツール
Notion MCP サーバーが公開する主なツールは以下の通りです。
| ツール名 | 用途 |
|---|---|
notion_query_database |
DB からフィルタ付きでページを取得 |
notion_create_page |
DB に新しいページ(行)を作成 |
notion_update_page |
既存ページのプロパティを更新 |
notion_get_page |
ページの詳細情報を取得 |
notion_get_block_children |
ページ内のブロック(本文)を取得 |
プロンプト設計:議事録→タスク自動生成
CLAUDE.md に以下のようなカスタムコマンド定義を記述します。
## カスタムワークフロー:議事録からタスク生成
### /generate-tasks コマンド
以下の手順を実行してください:
1. Notion MCP で議事録DB(ID: `abc123...`)から、
ステータスが「未処理」のページを取得する
2. 各議事録ページの本文ブロックを取得し、
以下の観点でタスクを抽出する:
- 「〜する」「〜を対応」「TODO」「要確認」を含む文
- 担当者名が明記されている箇所
- 期限が言及されている箇所
3. 抽出したタスクごとに、タスクDB(ID: `def456...`)へ
以下のプロパティで新規ページを作成する:
- タスク名: タスクの要約(30文字以内)
- ステータス: 「未着手」
- 優先度: 内容から判断して「高/中/低」を設定
- 担当者: 議事録から抽出(不明なら空欄)
- 期限: 議事録から抽出(不明なら翌週金曜日)
- 元議事録: 議事録ページへのリレーション
4. すべてのタスク作成後、実装指示ドラフトを生成する:
- 優先度「高」のタスクについて、
技術的な実装方針を3行以内で記述
- ドラフトは `docs/tasks/YYYY-MM-DD.md` に保存
5. 議事録ページのステータスを「処理済み」に更新する
実行例
claude "議事録DBから未処理の議事録を取得して、タスクを自動生成して"
Claude Code は MCP ツールを順次呼び出し、こんな流れで処理します。
🔍 notion_query_database で未処理の議事録を3件取得
📖 notion_get_block_children で議事録本文を読み込み
✏️ 議事録1件目から4つのタスクを抽出
📝 notion_create_page でタスクDBに4件作成
🏷️ 優先度を自動判定:高1件、中2件、低1件
📄 実装指示ドラフトを docs/tasks/2025-01-20.md に保存
✅ 議事録のステータスを「処理済み」に更新
4. After:全自動フロー
自動化後のフローはこうなりました。
人間がやることは「議事録を Notion に貼る」と「Claude Code にコマンドを1つ打つ」だけ。所要時間は議事録の量にもよりますが、3件の議事録で約2〜3分で全処理が完了します。
5. 週5時間短縮の内訳
| 作業 | Before(1日あたり) | After(1日あたり) | 削減 |
|---|---|---|---|
| 議事録→タスク転記 | 30分 | 0分(自動) | 30分 |
| 優先度・担当者の整理 | 15分 | 1分(確認のみ) | 14分 |
| 実装指示書の作成 | 20分 | 2分(微修正のみ) | 18分 |
| 日計 | 65分 | 3分 | 62分 |
| 週計(×5日) | 325分(≒5.4時間) | 15分 | ≒5時間 |
控えめに見積もって 週5時間 です。月換算で約20時間。年換算で約240時間。丸10日分の作業が消えた計算になります。
浮いた時間は、設計の壁打ちやコードレビュー、つまり人間にしかできない判断業務に充てています。
6. ハマりポイント3つ
① 認証トークンの管理
問題: .mcp.json にトークンをベタ書きすると、Git に push した瞬間に事故になります。
解決策: 環境変数で外部化し、.mcp.json では参照だけにします。
# .envrc(direnv を使用する場合)
export NOTION_API_TOKEN="ntn_xxxxxxxxxxxxxxxxxxxx"
{
"mcpServers": {
"notion": {
"command": "npx",
"args": ["-y", "@anthropic/notion-mcp-server"],
"env": {
"NOTION_API_TOKEN": "${NOTION_API_TOKEN}"
}
}
}
}
.mcp.json と .envrc を .gitignore に追加するのを忘れずに。チーム共有が必要な場合は .mcp.json.example をテンプレートとして用意しましょう。
② Notion リレーションプロパティの解決
問題: タスクDBから「元議事録」リレーションを設定しようとすると、リレーション先のページIDが必要です。しかし、Claude Code がリレーションプロパティを正しく構成できずエラーになるケースがありました。
解決策: CLAUDE.md にリレーションの書き方を明示的に指定します。
## Notion リレーションの設定方法
タスクDBの「元議事録」プロパティはリレーション型です。
設定時は以下のJSON構造を使ってください:
{
"元議事録": {
"relation": [
{ "id": "議事録ページのID" }
]
}
}
※ リレーションプロパティ名は日本語のまま指定すること
③ 日本語プロパティ名のエスケープ
問題: Notion のプロパティ名に日本語を使っている場合、MCP ツールの呼び出しで文字化けしたり、プロパティが見つからないエラーが発生することがありました。
解決策: これは CLAUDE.md に DB スキーマを明記することで安定しました。
## タスクDB スキーマ(ID: def456...)
| プロパティ名 | 型 | 選択肢 |
|---|---|---|
| タスク名 | title | - |
| ステータス | select | 未着手, 進行中, 完了 |
| 優先度 | select | 高, 中, 低 |
| 担当者 | people | - |
| 期限 | date | - |
| 元議事録 | relation | → 議事録DB |
ポイントは、Claude Code に「このプロパティ名をそのまま使え」と指示することです。AI が勝手に英語に翻訳しようとする場合があるため、明示が重要です。
7. この設計の限界と次に狙う Slack MCP 連携
現在の限界
- 議事録の質に依存する: 曖昧な書き方の議事録だとタスク抽出精度が下がる。事前に議事録テンプレートを統一しておく必要がある
- 複雑なリレーション構造に弱い: 3階層以上のリレーション(タスク→エピック→プロジェクト)は手動補正が必要になることがある
- レート制限: Notion API のレート制限(3リクエスト/秒)により、大量の議事録を一括処理すると遅延する
次のステップ:Slack MCP 連携
Slack の会議チャンネルから直接議事録を取得→タスク生成→GitHub Issue 作成→Slack に完了通知というフローを構想中です。Notion への手動ペーストすら不要になります。
まとめ
- Claude Code × Notion MCP で、議事録→タスク→実装指示の手動フローを全自動化し、週5時間の作業削減を実現した
-
MCP サーバーの設定は
.mcp.jsonに数行書くだけで完了し、CLAUDE.mdにスキーマとプロンプトを明記すれば安定稼働する - ハマりどころはトークン管理・リレーション解決・日本語プロパティ名の3つ。事前に対策すればスムーズに導入できる