A side-by-side look at the Notion MCP Server and Zapier MCP server MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Notion MCP Server for other tools and integrations work as a local process; choose Zapier MCP server for other tools and integrations over a hosted endpoint. You can also run both side by side in one mcpServers block.
NOTION_TOKEN.notion_read, notion_write, notion_describe.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Other Tools and Integrations | Other Tools and Integrations |
| Quality signal | 69/100 · Great | 45/100 · Fair |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Remote HTTP/SSE |
| Auth | API key required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | NOTION_TOKEN | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 174 | 433 |
| Directory activity | 2 views 0 installs 0 upvotes | 0 views 0 installs 0 upvotes |
| Tools | 3 | Not listed |
| Full listing | View Notion MCP Server | View Zapier MCP server |
notion_readRun one Notion read operation by name. Nothing is modified.
Call: { operation, payload } — payload carries that operation's fields. Common: search_pages { query }, get_page { page_id }, get_page_markdown { page_id }, query_database { database_id, where? }, get_block_children { block_id }.
Responses are slimmed; pass verbose:true in payload for the raw Notion object. Every id field (page_id, block_id, database_id, view_id, …) also accepts a Notion URL, as copied from Share → Copy link. A block link's #fragment is used for block_id fields and a database link's ?v= for view_id fields.
If the payload is malformed, the error response includes the schema + a working example so you can correct and retry in one round-trip. Call notion_describe(operation) ahead of time only for complex shapes (query_database filters).notion_writeRun one Notion write operation by name. Archive, trash and delete operations remove content — confirm with the user before running them.
Two ways to call:
• Single: { operation: "set_page_title", payload: { page_id, title } }
• Batch: { operation: "set_page_title", payload: { items: [{page_id, title}, ...], atomic?: false, idempotency_key?: "...", concurrency?: 3 } }
create_page, append_blocks, update_block and update_page_markdown also take a markdown string.
Responses are slimmed; pass verbose:true inside payload (single) or per item (batch) for the raw Notion object. Every id field (page_id, block_id, database_id, view_id, …) also accepts a Notion URL, as copied from Share → Copy link.
If the payload is malformed, the error response includes the schema + a working example so you can correct and retry in one round-trip. Call notion_describe(operation) ahead of time only for complex shapes (block trees, database property definitions, batch_mixed_blocks).notion_describeReturn the JSON Schema and a working example for one operation, plus which tool runs it (notion_read or notion_write). Use this BEFORE calling the operation when the payload shape is non-trivial (query filters, structured block trees, database property definitions). For simple ops, just call it — errors carry the schema.No tool names declared yet. Check the project README from the listing page.
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"awkoy-notion-mcp-server": {
"command": "npx",
"args": [
"-y",
"notion-mcp-server"
],
"env": {
"NOTION_TOKEN": "YOUR_NOTION_TOKEN_HERE"
}
}
}
}
{
"mcpServers": {
"zapier-mcp-server": {
"url": "https://docs.zapier.com/mcp/home"
}
}
}