notion-agent-hub
# π€ Notion Agent Hub
> **AI Agent Hub for Notion** β orchestrate AI agents through Notion databases with human-in-the-loop approval. Built with MCP.
<!-- Hero Banner -->
<div align="center">



**Turn your Notion workspace into an AI command center.**
[Quick Start](#-quick-start) Β· [Architecture](#-architecture) Β· [Tools](#-tools) Β· [Agents](#-agent-workflows) Β· [Setup Guide](docs/setup.md)
</div>
---
## β¨ What It Does
Notion Agent Hub is an **MCP server** that connects AI assistants (Claude, GPT, etc.) to your Notion workspace. It provides:
1. **π Research Agent** β Search the web, compile findings, and write structured research pages to Notion
2. **π GitHub Tracker** β Monitor GitHub PRs and sync their status to a Notion database
3. **π 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.
## π Architecture
```mermaid
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
```bash
git clone https://github.com/tysoncung/notion-agent-hub.git
cd notion-agent-hub
npm install
```
### 2. Configure
```bash
cp .env.example .env
```
Edit `.env` with your keys:
```env
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](docs/setup.md) for detailed instructions on creating a Notion integration and task database.
### 3. Build & Run
```bash
npm run build
npm start
```
### 4. Connect to Claude Desktop
Add to your Claude Desktop config:
```json
{
"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 blocks
```
### `notion-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
<!-- TODO: Add demo GIF showing the workflow -->

## π§ͺ Development
```bash
# 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](LICENSE).
---
<div align="center">
**Built for the [Notion MCP Challenge](https://notion.so)** π
Powered by [Model Context Protocol](https://modelcontextprotocol.io)
</div>
TDQS
Scored across 5 tools
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.