使用说明
概念查询
用于结构化Notion查询的MCP服务器。
问题
Claude内置的Notion连接器只进行语义搜索,最多返回10个模糊结果。它无法按属性值(状态、日期、模块、类型)进行筛选,无法对结果进行排序,也无法在大型数据库中分页。如果你想让Claude回答“显示所有状态为进行中的逾期任务”,默认连接器无法做到这一点。
运作原理
包装Notion REST API并公开四个MCP工具:
- 查询数据库 --过滤、排序和分页任何数据库(WHERE+ORDER BY+LIMIT)
- get_page --获取一个包含所有属性的页面
- update_page --修改页面属性(状态、日期、文本等)
- 列表_数据库 --发现可访问的数据库及其模式
技术栈
- Cloudflare Workers上的TypeScript
- MCP-SDK(
@modelcontextprotocol/sdk)使用SSE和流式HTTP传输 - Zod用于输入验证
- 通知REST API(内部集成)
设置
1.创建概念集成
- 首选 notion.so/profile/集成
- 点击 新集成,随便你叫什么都行
- 启用 阅读内容 和 更新内容
- 复制 内部整合秘密 (开始于
ntn_)
2.共享您的数据库
打开您希望Claude查询的每个Notion数据库。点击 ... > 连接 > 连接到 并选择您的集成。
3.部署到Cloudflare
git clone <this-repo>
cd notion-query-mcp
npm install
npx wrangler login
npx wrangler secret put NOTION_API_KEY
# Paste your ntn_XXXXX token when prompted
npx wrangler secret put MCP_AUTH_TOKEN
# Paste a strong random token (e.g. openssl rand -hex 32)
npm run deploy
这会给你一个类似的URL https://notion-query-mcp.<your-subdomain>.workers.dev.
4.联系克劳德
所有请求都需要一个承载令牌。设定你的 MCP_AUTH_TOKEN 作为Cloudflare机密(步骤3),然后配置您的MCP客户端发送它。
Claude桌面/Claude.ai配置:
{
"mcpServers": {
"notion-query": {
"url": "https://notion-query-mcp.your-subdomain.workers.dev/sse",
"headers": {
"Authorization": "Bearer YOUR_MCP_AUTH_TOKEN"
}
}
}
}
Claude代码配置(~/.claude.json 或项目 .mcp.json):
{
"mcpServers": {
"notion-query": {
"type": "sse",
"url": "https://notion-query-mcp.your-subdomain.workers.dev/sse",
"headers": {
"Authorization": "Bearer YOUR_MCP_AUTH_TOKEN"
}
}
}
}
替换 YOUR_MCP_AUTH_TOKEN 使用您通过设置的相同令牌 wrangler secret put.
查询示例
连接后,尝试与Claude对话:
- “列出我的所有Notion数据库”
- 显示状态为“未开始”的所有任务,按截止日期排序
- “将任务X标记为完成”
- “我的课程数据库中有什么过期了?”
发展
npm run dev # local dev server
npm run type-check # TypeScript validation
npm run deploy # deploy to Cloudflare
安全
- 所有端点上的承载令牌身份验证(
npx wrangler secret put MCP_AUTH_TOKEN) - CORS已锁定
https://claude.ai - 速率限制:通过Cloudflare速率限制每分钟60个请求
- 所有ID均已验证为UUID;根据结构化Zod模式验证的过滤器;属性更新最多50个字段
- 仅记录服务器端的通知API错误;客户端获得通用错误代码
成本
免费。Cloudflare Workers免费层(100k req/天)+Notion API(内部集成免费)。
许可证
麻省理工学院
