notion-agent-hub
Allows web search using Brave Search API, returning titles, URLs, and snippets for research agents.
Serves as a fallback web search service when Brave Search is unavailable.
Enables monitoring of GitHub pull requests and syncing their status to a Notion database via the GitHub Tracker agent.
Provides tools for reading, writing, and querying Notion pages and databases, enabling AI agents to manage content and automate workflows within a Notion workspace.
Optional integration that can be used for AI-powered features such as content generation within the server.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@notion-agent-hubResearch the latest AI advancements and save to Notion."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π€ Notion Agent Hub
AI Agent Hub for Notion β orchestrate AI agents through Notion databases with human-in-the-loop approval. Built with MCP.
Turn your Notion workspace into an AI command center.
Quick Start Β· Architecture Β· Tools Β· Agents Β· Setup Guide
β¨ What It Does
Notion Agent Hub is an MCP server that connects AI assistants (Claude, GPT, etc.) to your Notion workspace. It provides:
π Research Agent β Search the web, compile findings, and write structured research pages to Notion
π GitHub Tracker β Monitor GitHub PRs and sync their status to a Notion database
π Content Pipeline β Read outlines from Notion, generate drafts, and submit for human review
All tasks flow through a Notion-native task queue with human-in-the-loop approval β you stay in control.
Related MCP server: notion-mcp-server
π Architecture
graph TB
subgraph "AI Assistant"
C[Claude / GPT / etc.]
end
subgraph "MCP Server β notion-agent-hub"
direction TB
S[Server Entry Point]
subgraph "Tools Layer"
NR[π notion-read]
NW[βοΈ notion-write]
NQ[π notion-query]
WS[π web-search]
CR[π» code-run]
end
subgraph "Agent Layer"
RA[π¬ Research]
GT[π GitHub Tracker]
CP[π Content Pipeline]
end
TQ[π Task Queue]
end
subgraph "Your Notion Workspace"
TD[(Task Database)]
RP[Research Pages]
DP[Draft Pages]
PR[(PR Tracker DB)]
end
C <-->|MCP Protocol| S
S --> NR & NW & NQ & WS & CR
TQ -->|Poll| TD
RA -->|Write| RP
GT -->|Sync| PR
CP -->|Write| DP
TD -->|Human creates tasks| TQπ Quick Start
1. Clone & Install
git clone https://github.com/tysoncung/notion-agent-hub.git
cd notion-agent-hub
npm install2. Configure
cp .env.example .envEdit .env with your keys:
NOTION_API_KEY=ntn_your_integration_secret
NOTION_DATABASE_ID=your_task_database_id
OPENAI_API_KEY=sk-your_openai_key # Optionalπ See the Setup Guide for detailed instructions on creating a Notion integration and task database.
3. Build & Run
npm run build
npm start4. Connect to Claude Desktop
Add to your Claude Desktop config:
{
"mcpServers": {
"notion-agent-hub": {
"command": "node",
"args": ["/path/to/notion-agent-hub/dist/index.js"],
"env": {
"NOTION_API_KEY": "ntn_your_key",
"NOTION_DATABASE_ID": "your_db_id"
}
}
}
}π Tools
notion-read
Read pages, databases, and blocks from Notion.
Input: { page_id?: string, database_id?: string, block_id?: string }
Output: Page content with properties and child blocksnotion-write
Create or update Notion pages with rich content.
Input: { action: "create" | "update" | "append", parent_id?, page_id?, title?, blocks? }
Output: { id, url, created/updated/appended: true }Supported block types: paragraph, heading_1/2/3, bulleted_list_item, numbered_list_item, toggle, quote, callout, divider, code
notion-query
Query databases with filters and sorting.
Input: { database_id, filter?, sorts?, page_size? }
Output: { results: [...pages], has_more, next_cursor }web-search
Search the web using Brave Search (or DuckDuckGo fallback).
Input: { query: string, count?: number }
Output: { results: [{ title, url, snippet }], source }code-run
Execute JavaScript in a sandboxed environment (Node.js vm module).
Input: { code: string, timeout_ms?: number }
Output: { success, result?, stdout, stderr }π€ Agent Workflows
π¬ Research Agent
Input: Topic + parent page ID
Process: Web search β compile sources β create structured Notion page
Output: Research page with sources, findings, and review checklist
π GitHub Tracker
Input: GitHub repo + Notion database ID
Process: Fetch PRs β compare with existing entries β create/update pages
Output: Synced PR database in Notion
π Content Pipeline
Input: Outline page ID + parent page ID
Process: Read outline β (optional research) β generate draft β create page
Output: Draft page with review checklist, ready for human editing
π Human-in-the-Loop
The task queue uses your Notion database as the control plane:
You create a task β Status: Pending
Agent picks it up β Status: Running
Agent writes results β Status: Done β
Something went wrong? β Status: Failed β (with error details)You're always in control. Tasks only run when you create them. Results are always written back to Notion for your review.
Task Database Schema
Property | Type | Description |
Name | Title | Task description |
Status | Status | Pending β Running β Done/Failed |
Type | Select | research / github-tracker / content-pipeline |
Input | Text | JSON input parameters |
Output | Text | JSON results |
Error | Text | Error message (if failed) |
πΈ Demo

π§ͺ Development
# Run tests
npm test
# Watch mode
npm run test:watch
# Type checking
npm run lint
# Build
npm run build
# Dev mode (watch + rebuild)
npm run devπ License
MIT β see LICENSE.
Built for the Notion MCP Challenge π
Powered by Model Context Protocol
Available Tools
5 toolscode-runA
Execute JavaScript code in a sandboxed environment. Has access to Math, Date, JSON, and standard built-ins. No filesystem or network access.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript code to execute | |
| timeout_ms | No | Timeout in ms (default 5000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently reveals sandboxing, available built-ins, and denied capabilities (filesystem/network). It stops short of disclosing error handling or the format of the execution result, but the core behavioral traits are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: two sentences, front-loaded with the main action and followed by key constraints. Every word contributes value and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the tool's main function and sandbox constraints, it omits crucial information about what the tool returns (e.g., stdout, last expression value, or promise resolution) and how errors are surfaced. Since there is no output schema, the description should have addressed this to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters (code and timeout_ms), giving 100% schema coverage. The description adds no parameter-specific meaning beyond what the schema already states, achieving only the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Execute' with a clear resource 'JavaScript code' and the context 'sandboxed environment'. This unambiguously identifies the tool's function and easily distinguishes it from the sibling notion and web-search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool (when JavaScript execution is needed) and explicitly states exclusions (no filesystem or network access), helping the agent avoid misuse. However, it does not explicitly name alternative tools or elaborate on when not to use it beyond those constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion-queryA
Query a Notion database with filters and sorting. Returns matching pages with summarized properties.
| Name | Required | Description | Default |
|---|---|---|---|
| sorts | No | Sort criteria | |
| filter | No | Notion filter object β see https://developers.notion.com/reference/post-database-query-filter | |
| page_size | No | Results per page (default 50) | |
| database_id | Yes | Database ID to query | |
| start_cursor | No | Pagination cursor from previous response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does reveal that results are 'summarized properties' and that filters/sorting are supported, but it doesn't disclose pagination behavior, rate limits, authentication expectations, or error handling. The word 'Query' implies read-only but not explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core action and resource, then adds the return behavior. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, no output schema, and no annotations, the description is adequate but not fully complete. It covers the central behavior but omits operational details like pagination, result structure, and filter object construction. The schema helps by documenting parameters and linking to Notion's filter docs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, as all five parameters have descriptions in the input schema, so the baseline is 3. The description adds the conceptual context of filters and sorting but does not provide parameter-level details beyond what the schema already contains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Query a Notion database with filters and sorting.' It also states the return value as 'matching pages with summarized properties,' which helps distinguish from siblings like notion-read. However, it doesn't explicitly contrast with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for querying Notion databases, but there is no explicit guidance on when to use it versus notion-read or notion-write. It doesn't provide exclusions or mention alternatives, so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion-readB
Read pages, databases, or blocks from Notion. Returns structured content including properties and child blocks.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | No | Notion page ID to read | |
| block_id | No | Block ID to read its children | |
| database_id | No | Notion database ID to read its schema |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that it returns structured content including properties and child blocks, giving some behavioral insight. However, with no annotations, it omits details such as error handling, authentication, and whether it is strictly read-only in practical terms.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that clearly states the action and resource, with no redundant words or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description does not clarify that exactly one of the three optional parameters should be supplied, and the absence of an output schema leaves return format ambiguous. Combined with no annotations, the description is incomplete for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all three parameters (page_id, block_id, database_id) with 100% coverage. The description maps these to the resource types but adds no extra semantic detail, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'read' and names the resources (pages, databases, blocks) from Notion, making the purpose clear. It does not explicitly differentiate from sibling tool 'notion-query', so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives like notion-query or notion-write. It merely states what the tool does without context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion-writeC
Create or update Notion pages. Supports creating pages with rich content blocks (headings, paragraphs, lists, toggles, code, callouts).
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | Page icon emoji | |
| title | No | Page title | |
| action | Yes | create: new page, update: modify properties, append: add blocks | |
| blocks | No | Content blocks | |
| page_id | No | Page ID (required for update/append) | |
| parent_id | No | Parent page or database ID (required for create) | |
| properties | No | Page properties to set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden, but it only says 'Create or update Notion pages' and mentions content blocks. It fails to disclose the append behavior, side effects of updates, required page_id/parent_id relationships, or output/confirmation behavior, leaving significant behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The first sentence front-loads the core purpose, and the second adds relevant detail about supported content blocks, making it appropriately sized and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters and nested objects, the description is under-specified. It omits the 'append' action entirely and does not explain the distinction between create, update, and append, or when page_id versus parent_id is required. The rich schema covers parameter syntax but not the behavioral context an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all parameters (100% coverage), so the baseline is 3. The description adds no new parameter semantics beyond listing block types already enumerated in the schema's blocks enum, so it neither enhances nor detracts from schema clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates or updates Notion pages via 'Create or update Notion pages' and lists supported content block types. It distinguishes itself from sibling read/query tools, but omits the 'append' action available in the schema, making it slightly incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like notion-read or notion-query. The intended usage is only implied by the tool name and the phrase 'Create or update Notion pages', without explicit exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web-searchA
Search the web for information. Uses Brave Search API if available, falls back to DuckDuckGo. Useful for research tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (default 5) | |
| query | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the fallback behavior between Brave and DuckDuckGo, which is a behavioral trait. However, it does not detail result format, rate limits, or other operational details, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, then implementation and use case. No redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter search tool with no output schema, the description covers the main aspects: what it does, the use case, and engine fallback. It's moderately complete, perhaps leaving users to wonder about exact output format, but that's often implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions for query and count. The description adds no specific parameter guidance, but the schema is sufficient, earning baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search the web for information' with a specific verb and resource. It also provides implementation context and a use case, distinguishing it from sibling tools that are notion-related or code execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says 'Useful for research tasks' providing a use context. However, it does not explicitly address alternatives or when not to use it, so it's clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools are clearly distinct: code-run and web-search are unrelated to Notion, while notion-read and notion-query both deal with reading data but differ in scopeβread fetches raw pages/blocks, query performs filtered database searches. The overlap is minor and descriptions clarify the intended use, so agents should rarely confuse them.
Three tools consistently use the 'notion-' prefix with a verb (read, write, query), but code-run and web-search break this pattern by omitting any prefix. The verbs themselves are clear, yet the mixed convention (prefixed and non-prefixed) makes the naming feel less predictable.
With only 5 tools, the set is compact and well-scoped for a Notion automation hub plus auxiliary capabilities. Each tool serves a distinct purpose without redundant overlaps, and the number is comfortably within the ideal 3-15 range.
The Notion tools cover read, write/update, and query, which covers most common CRUD operations, though database creation and deletion are missing. The inclusion of code execution and web search extends the surface well beyond basic Notion access, but the absence of a delete or list-all operation is a minor gap that agents can work around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Nifty's MCP server β exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceA high-performance MCP server that integrates Notion into AI workflows, enabling interaction with Notion pages, databases, and comments through a standardized protocol.85127Apache 2.0
- AlicenseAqualityAmaintenanceNotion MCP Server is a MCP server implementation that enables AI assistants to interact with Notion's API.2991168MIT

Notion MCP Serverofficial
AlicenseBqualityCmaintenanceAn MCP server that enables AI assistants to interact with the Notion API, allowing them to search, read, comment on, and create content in Notion workspaces through natural language commands.19172,2124,615MIT- FlicenseNot gradedqualityCmaintenanceMCP server that automatically saves summaries of AI papers or stock articles to a Notion database.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tysoncung/notion-agent-hub'
If you have feedback or need assistance with the MCP directory API, please join our Discord server