Notion只读SSE服务器

一个通过SSE(服务器发送事件)提供Notion页面只读访问的MCP服务器,支持Bearer令牌认证和Docker部署。

  • by aryahadii
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 aryahadii/notion-mcp-server

使用说明

MCP SSE服务器概念

一个简单的MCP(模型上下文协议)服务器,使用FastMCP通过SSE(服务器发送事件)传输提供对Notion页面的只读访问。

特性

  • 只读访问 到Notion页面和数据库
  • SSE 运输 用于实时通信
  • 承载令牌身份验证 用于安全的SSE端点
  • Docker部署 准备
  • 简单配置 通过环境变量
  • 全面的错误处理 以及日志记录

可用资源

  • notion://pages/{page_id} -按ID获取特定页面
  • notion://search/{query} -搜索页面(对所有页面使用“全部”)
  • notion://databases/{database_id} -获取数据库信息
  • notion://databases/{database_id}/query/{page_size} -查询数据库页面

设置

1.概念集成设置

  1. 首选 https://www.notion.so/profile/integrations
  2. 创建新的内部集成或选择现有集成
  3. 将其配置为 只读的 仅授予“读取内容”访问权限
  4. 复制集成令牌(以开头 ntn_)
  5. 授予对要公开的页面/数据库的集成访问权限

2.环境配置

  1. 复制示例环境文件:

    cp .env.example .env
    
  2. 编辑 .env 并添加您的Notion令牌 base64编码 用于身份验证的RSA密钥:

    NOTION_TOKEN=ntn_your_integration_token_here
    RSA_PUBLIC_KEY="<base64-encoded-PEM-public-key>"
    RSA_PRIVATE_KEY="<base64-encoded-PEM-private-key>"
    HOST=127.0.0.1
    PORT=8000
    

    重要提示: 钥匙 必须是base64编码的PEM字符串,而不是生PEM。如果你没有base64编码的密钥,你可以按如下方式生成它们:

    # Generate private key
    openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
    # Extract public key
    openssl rsa -pubout -in private_key.pem -out public_key.pem
    # Encode keys as base64 (remove newlines for .env compatibility)
    base64 -w 0 private_key.pem > private_key.b64
    base64 -w 0 public_key.pem > public_key.b64
    

    然后复制以下内容 private_key.b64 和 public_key.b64 进入你的 .env 如上所示。

    或者,如果您启动服务器或运行 python generate_client_token.py 如果没有设置密钥,它将打印出base64编码的密钥,供您复制到您的 .env 文件。

    注: 对于RSA密钥生成,您可以使用OpenSSL:

    # Generate private key
    openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
    # Extract public key
    openssl rsa -pubout -in private_key.pem -out public_key.pem
    

3.安装与运行

选项1:本地Python

# Install dependencies
pip install -r requirements.txt

# Run the server
fastmcp run server.py -t sse

选项2:Docker

# Build and run with Docker Compose
docker-compose up --build

# Or build and run manually
docker build -t notion-mcp .
docker run -p 8000:8000 --env-file .env notion-mcp

用法

一旦运行,服务器就会公开一组可供任何MCP兼容客户端使用的工具(例如,用于函数调用的LLM代理)。服务器在以下位置监听SSE连接 http://localhost:8000/sse/ (或您配置的主机/端口)。

可用工具

以下工具可用于与Notion交互:

  • get_page(page_id: str):通过其ID检索Notion页面及其内容。
  • search_pages(query: str, page_size: int = 10):在Notion工作区中搜索页面。
  • get_database(database_id: str):检索有关特定Notion数据库的信息。
  • query_database(database_id: str, page_size: int = 10):查询Notion数据库并返回其页面。

认证

此服务器使用RSA密钥对为SSE端点实现承载令牌身份验证:

  • JWT代币:身份验证使用用RS256算法签名的JWT令牌
  • RSA密钥对:使用非对称加密技术进行安全令牌验证
  • 令牌生成:包括一个实用程序端点,用于生成测试令牌

使用身份验证

  1. 生成令牌 使用 /generate_auth_token 端点:

    curl -X POST http://localhost:8000/generate_auth_token \
      -H "Content-Type: application/json" \
      -d '{"subject":"user123","scopes":["read"],"expiry_seconds":3600}'
    
  2. 使用令牌 在您的SSE请求中:

    curl -N http://localhost:8000/sse \
      -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
    

测试身份验证

包含一个测试脚本,用于验证身份验证是否正常工作:

python test_auth.py

这将测试经过身份验证和未经身份验证的请求,以确保承载令牌身份验证正常运行。

安全

  • 此服务器提供 只读的 访问Notion
  • 承载令牌身份验证保护所有SSE端点
  • 以最小权限配置您的Notion集成
  • 使用环境变量进行敏感配置
  • 服务器只公开您的集成可以访问的数据

依赖项

  • fastmcp>=2.0.0 -用于MCP服务器实现的FastMCP框架
  • notion-client>=2.2.1 -官方通知API Python客户端
  • python-dotenv>=1.0.0 -环境变量管理

许可证

MIT许可证