はじめに
Notionは、ノート、データベース、プロジェクト管理を統合したオールインワンの生産性ツールです。ページやデータベースを使って、タスク、ドキュメント、アイデアを整理できます。強力なAPIにより、ページ、データベース、コメントのデータを簡単に取得・操作できます。一方、**Model Context Protocol(MCP)**は、AI(例:Claude)を外部データやツールと標準化された方法で接続するプロトコルです。このシリーズでは、NotionとMCPを統合し、ノートやデータベースを活用するエージェントAIを構築する方法を学びます。たとえば、AIがタスクのステータスを分析したり、ページを自動整理したりできます。
第1章では、NotionとMCPの基本を理解し、Notionからページデータを取得するシンプルなMCPサーバーを構築します。Claude Desktopと接続して、ノート管理の第一歩を踏み出しましょう。
NotionとMCPの概要
Notionとは?
Notionは、以下のような特徴を持つ生産性ツールです:
- 柔軟な構造:ページ、データベース、テーブルでデータを自由に整理。
- 強力なAPI:REST APIでページ、データベース、コメントにアクセス。
- 多用途:個人ノート、タスク管理、チームコラボレーションに対応。
- コミュニティ:テンプレートやインテグレーションが豊富。
MCPの役割
MCPは、AIにNotionのデータを提供する橋渡し役です。MCPサーバーを通じて、AIは以下を行えます:
- データ取得:ページやデータベースの情報を取得。
- アクション実行:ページを作成、更新、コメントを追加。
- 分析:タスクの進捗やデータベースの内容を評価。
なぜNotionとMCPを組み合わせる?
この組み合わせは、以下のようなシナリオで強力です:
- ノート管理:AIがノートを自動整理し、タグやカテゴリを提案。
- データ分析:AIがデータベースを分析し、タスクのボトルネックを特定。
- チーム連携:AIがコメントや通知を生成し、コラボレーションを効率化。
開発環境の準備
MCPサーバーとNotionを統合するには、以下の環境を準備します:
- Python 3.8以降:サーバー開発用。
- mcpライブラリ:JSON-RPC通信を処理(仮定のライブラリ、公式ドキュメントを参照)。
- requestsライブラリ:Notion APIとの通信用。
- Claude Desktop:MCP対応のAIクライアント。
- テキストエディタ:VS Code推奨。
インストールコマンド:
pip install mcp jsonrpcserver requests python-dotenv
Notionのセットアップ
-
ページ準備:
-
Notionにアクセスし、新しいページを作成(例:
MCP-Project
)。 - サブページを追加(例:
タスク管理
、アイデア
)。 - ページのURLからページIDを記録(例:
https://www.notion.so/ページ名-PAGE_ID
のPAGE_ID
、ハイフン付きの32文字)。
-
Notionにアクセスし、新しいページを作成(例:
-
APIトークンの取得:
- NotionのIntegrationsページで新しいインテグレーションを作成。
- トークンを生成し、ページへのアクセス権を付与(
Content Capabilities: Read Content
)。 - トークンを安全に保存。
-
環境変数の設定:
.env
ファイルに以下を追加:NOTION_TOKEN=your_token NOTION_PAGE_ID=your_page_id
コード例:Notion用MCPサーバー
from mcp import MCPServer
import os
from dotenv import load_dotenv
import requests
class NotionServer(MCPServer):
def __init__(self, host, port, token, page_id):
super().__init__(host, port)
self.token = token
self.page_id = page_id
self.base_url = "https://api.notion.com/v1"
self.headers = {
"Authorization": f"Bearer {token}",
"Notion-Version": "2022-06-28",
"Content-Type": "application/json"
}
self.register_resource("get_page", self.get_page)
def get_page(self, params):
try:
url = f"{self.base_url}/pages/{self.page_id}"
response = requests.get(url, headers=self.headers)
response.raise_for_status()
page = response.json()
page_info = {
"id": page["id"],
"title": page["properties"].get("title", {}).get("title", [{}])[0].get("plain_text", ""),
"created_time": page["created_time"],
"last_edited_time": page["last_edited_time"]
}
return {"status": "success", "page_info": page_info}
except Exception as e:
return {"status": "error", "message": str(e)}
if __name__ == "__main__":
load_dotenv()
server = NotionServer(
host="localhost",
port=8117,
token=os.getenv("NOTION_TOKEN"),
page_id=os.getenv("NOTION_PAGE_ID")
)
print("Notion MCPサーバーを起動中: http://localhost:8117")
server.start()
コードの説明
- requests:Notion APIにGETリクエストを送信し、ページデータを取得。
- get_page:指定したページのID、タイトル、作成日、更新日を取得。
- register_resource:リソースを登録し、AIがアクセス可能に。
- start():サーバーを起動。
前提条件
- Notionページが存在し、ページIDが正しい。
-
.env
ファイルに正しいNOTION_TOKEN
とNOTION_PAGE_ID
が設定済み。 - インテグレーションにページへの読み取り権限がある。
サーバーのテスト
サーバーが正しく動作するか確認します:
-
サーバー起動:
python notion_server.py
コンソールに「Notion MCPサーバーを起動中: http://localhost:8117」と表示。
-
ページ取得のテスト:
Pythonでリクエストを送信:import requests import json url = "http://localhost:8117" payload = { "jsonrpc": "2.0", "method": "get_page", "params": {}, "id": 1 } response = requests.post(url, json=payload) print(json.dumps(response.json(), indent=2, ensure_ascii=False))
期待されるレスポンス:
{ "jsonrpc": "2.0", "result": { "status": "success", "page_info": { "id": "page123", "title": "MCP-Project", "created_time": "2025-04-22T10:00:00.000Z", "last_edited_time": "2025-04-22T12:00:00.000Z" } }, "id": 1 }
Claude Desktopとの接続
サーバーをClaude Desktopに接続します:
-
設定ファイルの編集:
Claude Desktopの設定ファイル(例:claude_desktop_config.json
)に以下を追加:{ "mcp_servers": [ { "name": "NotionServer", "url": "http://localhost:8117", "auth": "none" } ] }
-
Claudeでテスト:
Claude Desktopを起動し、プロンプトを入力:ページの情報を教えてください。
レスポンス例:
Notionページの情報: - タイトル:MCP-Project - 作成日:2025-04-22 10:00 - 最終編集日:2025-04-22 12:00
次のステップ
このMCPサーバーは、NotionとAIの連携の基礎です。次の第2章では、Notionにページやデータベースを追加・更新する機能を実装し、ノートやタスクを自動化するエージェントを構築します。たとえば、AIが新しいタスクページを作成したり、データベースにエントリを追加したりできます。
まとめ
この第1章では、NotionとMCPの基本を学び、シンプルなMCPサーバーを構築してページデータを取得しました。Notionの強力なAPIとMCPの柔軟性を組み合わせることで、AIをノート管理の強力なアシスタントに変えられます。次章以降では、ページ自動化、データベース分析、リアルタイム管理へと進化させます。
役に立ったと思ったら、「いいね」や「ストック」をしていただけると嬉しいです!次の章でまたお会いしましょう!