Notion数据库查询服务

一个用于结构化查询Notion数据库的MCP服务器,支持过滤、排序、分页和更新操作。

  • by advitrocks9
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 advitrocks9/notion-mcp

使用说明

概念查询

用于结构化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.创建概念集成

  1. 首选 notion.so/profile/集成
  2. 点击 新集成,随便你叫什么都行
  3. 启用 阅读内容 和 更新内容
  4. 复制 内部整合秘密 (开始于 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(内部集成免费)。

许可证

麻省理工学院