使用说明
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.概念集成设置
- 首选 https://www.notion.so/profile/integrations
- 创建新的内部集成或选择现有集成
- 将其配置为 只读的 仅授予“读取内容”访问权限
- 复制集成令牌(以开头
ntn_) - 授予对要公开的页面/数据库的集成访问权限
2.环境配置
-
复制示例环境文件:
cp .env.example .env -
编辑
.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密钥对:使用非对称加密技术进行安全令牌验证
- 令牌生成:包括一个实用程序端点,用于生成测试令牌
使用身份验证
-
生成令牌 使用
/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}' -
使用令牌 在您的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许可证