Structured, SQL-style query access to any Notion database.
Notion Query MCP Server
A custom MCP server that gives Claude structured, SQL-style query access to any Notion database. Deployed on Cloudflare Workers (free tier).
Why
Claude's built-in Notion connector only supports semantic search (max 10 fuzzy results). It cannot filter by property values like Status, Module, or Type. This server wraps the Notion REST API to expose proper structured filtering, sorting, and pagination.
Tools
| Tool | Description |
|---|---|
query_database |
Query with filters, sorts, and pagination (SQL-style WHERE/ORDER BY/LIMIT) |
get_page |
Fetch a single page with all properties |
update_page |
Update page properties (status, dates, text, etc.) |
list_databases |
Discover all accessible databases and their schemas |
Setup
Prerequisites
- Node.js v18+
- A Cloudflare account (free, no credit card)
- A Notion workspace
1. Create a Notion Integration
- Go to notion.so/profile/integrations
- Click New integration, name it (e.g.
Claude MCP Bridge) - Enable Read content and Update content
- Copy the Internal Integration Secret (starts with
ntn_)
2. Share Databases
Open each Notion database you want Claude to access, click ... > Connections > Connect to > select your integration.
3. Install and Deploy
git clone <this-repo>
cd notion-query-mcp
npm install
# Login to Cloudflare
npx wrangler login
# Set your Notion API key as a secret
npx wrangler secret put NOTION_API_KEY
# Paste your ntn_XXXXX token
# Deploy
npm run deploy
The deploy outputs a URL like https://notion-query-mcp.<your-subdomain>.workers.dev.
4. Connect to Claude.ai
- Go to Settings > Integrations > Add custom connector
- Enter a name and your worker URL with
/ssepath (e.g.https://notion-query-mcp.example.workers.dev/sse) - Leave OAuth fields empty
- Click Add
5. Test
Open a new Claude conversation and try:
"List all my Notion databases"
"Show me all tasks where Status is 'Not started', sorted by Date"
Endpoints
The server exposes two MCP transports:
- SSE:
/sse(used by Claude.ai) - Streamable HTTP:
/mcp
Development
npm run dev # Local dev server
npm run type-check # TypeScript validation
npm run deploy # Deploy to Cloudflare
Cost
$0/month. Cloudflare Workers free tier provides 100,000 requests/day. The Notion API is free for internal integrations.
License
MIT
Tools (4)
query_databaseQuery with filters, sorts, and pagination (SQL-style WHERE/ORDER BY/LIMIT)get_pageFetch a single page with all propertiesupdate_pageUpdate page properties (status, dates, text, etc.)list_databasesDiscover all accessible databases and their schemasEnvironment Variables
NOTION_API_KEYrequiredThe Internal Integration Secret from your Notion integrationConfiguration
{"mcpServers": {"notion-query": {"command": "npx", "args": ["-y", "@advitrocks9/notion-mcp"], "env": {"NOTION_API_KEY": "ntn_XXXXX"}}}}