Skip to main content
Glama
tysoncung

notion-agent-hub

by tysoncung

πŸ€– Notion Agent Hub

AI Agent Hub for Notion β€” orchestrate AI agents through Notion databases with human-in-the-loop approval. Built with MCP.

Notion MCP TypeScript

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:

  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.

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 install

2. Configure

cp .env.example .env

Edit .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 start

4. 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 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 }

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

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 tools
code-runA

Execute JavaScript code in a sandboxed environment. Has access to Math, Date, JSON, and standard built-ins. No filesystem or network access.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesJavaScript code to execute
timeout_msNoTimeout in ms (default 5000)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortsNoSort criteria
filterNoNotion filter object β€” see https://developers.notion.com/reference/post-database-query-filter
page_sizeNoResults per page (default 50)
database_idYesDatabase ID to query
start_cursorNoPagination cursor from previous response

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idNoNotion page ID to read
block_idNoBlock ID to read its children
database_idNoNotion database ID to read its schema

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
iconNoPage icon emoji
titleNoPage title
actionYescreate: new page, update: modify properties, append: add blocks
blocksNoContent blocks
page_idNoPage ID (required for update/append)
parent_idNoParent page or database ID (required for create)
propertiesNoPage properties to set

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

TDQS

A3.5/5.0
Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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