2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NotionでAIを強化する | 第1章:ページデータの第一歩

Posted at

はじめに

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のセットアップ

  1. ページ準備
    • Notionにアクセスし、新しいページを作成(例:MCP-Project)。
    • サブページを追加(例:タスク管理アイデア)。
    • ページのURLからページIDを記録(例:https://www.notion.so/ページ名-PAGE_IDPAGE_ID、ハイフン付きの32文字)。
  2. APIトークンの取得
    • NotionのIntegrationsページで新しいインテグレーションを作成。
    • トークンを生成し、ページへのアクセス権を付与(Content Capabilities: Read Content)。
    • トークンを安全に保存。
  3. 環境変数の設定
    .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_TOKENNOTION_PAGE_IDが設定済み。
  • インテグレーションにページへの読み取り権限がある。

サーバーのテスト

サーバーが正しく動作するか確認します:

  1. サーバー起動

    python notion_server.py
    

    コンソールに「Notion MCPサーバーを起動中: http://localhost:8117」と表示。

  2. ページ取得のテスト
    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に接続します:

  1. 設定ファイルの編集
    Claude Desktopの設定ファイル(例:claude_desktop_config.json)に以下を追加:

    {
      "mcp_servers": [
        {
          "name": "NotionServer",
          "url": "http://localhost:8117",
          "auth": "none"
        }
      ]
    }
    
  2. 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をノート管理の強力なアシスタントに変えられます。次章以降では、ページ自動化、データベース分析、リアルタイム管理へと進化させます。


役に立ったと思ったら、「いいね」や「ストック」をしていただけると嬉しいです!次の章でまたお会いしましょう!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?