Notion Weaver

Notion Weaver

Enables AI workflows to integrate with Notion workspaces, supporting page and database creation, queries with filters and sorting, content updates, and workspace-wide search operations.

Category
Visit Server

README

Notion Weaver

A production-ready Model Context Protocol (MCP) server for Notion workspace automation. Seamlessly integrate Notion into your AI workflows with full TypeScript support.

Features

  • 6 Powerful Tools: Complete Notion API coverage

    • create_page - Create new pages in databases or as child pages
    • create_database - Create new databases with custom schemas
    • query_database - Query databases with filters and sorting
    • update_page - Update page properties and content
    • get_page - Retrieve specific pages by ID
    • search_content - Search across your entire workspace
  • Type-Safe: Full TypeScript strict mode implementation

  • Production-Ready: Comprehensive error handling and validation

  • Standards-Compliant: Implements MCP JSON-RPC 2.0 protocol

  • Well-Documented: Extensive examples and setup guides

Installation

npm install notion-weaver

Or clone and build from source:

git clone https://github.com/consigcody94/notion-weaver.git
cd notion-weaver
npm install
npm run build

Setup

1. Get Your Notion API Key

  1. Go to Notion Integrations
  2. Click "+ New integration"
  3. Name your integration and select the workspace
  4. Copy the "Internal Integration Token"

2. Share Pages/Databases with Your Integration

  1. Open the Notion page or database you want to access
  2. Click the "..." menu in the top right
  3. Scroll to "Add connections"
  4. Select your integration

3. Configure Environment Variable

export NOTION_API_KEY="your_integration_token_here"

For persistent configuration, add to your shell profile (~/.bashrc, ~/.zshrc, etc.):

echo 'export NOTION_API_KEY="your_integration_token_here"' >> ~/.bashrc
source ~/.bashrc

Configuration for Claude Desktop

Add to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "notion-weaver": {
      "command": "node",
      "args": ["/path/to/notion-weaver/dist/index.js"],
      "env": {
        "NOTION_API_KEY": "your_integration_token_here"
      }
    }
  }
}

Or if installed globally:

{
  "mcpServers": {
    "notion-weaver": {
      "command": "notion-weaver",
      "env": {
        "NOTION_API_KEY": "your_integration_token_here"
      }
    }
  }
}

Usage Examples

Create a Page

// In a database
{
  "tool": "create_page",
  "arguments": {
    "parent_database_id": "abc123...",
    "title": "New Project",
    "content": "Project description goes here"
  }
}

// As a child page
{
  "tool": "create_page",
  "arguments": {
    "parent_page_id": "xyz789...",
    "title": "Meeting Notes",
    "content": "Discussion points..."
  }
}

Create a Database

{
  "tool": "create_database",
  "arguments": {
    "parent_page_id": "xyz789...",
    "title": "Task Tracker",
    "properties": {
      "Name": { "title": {} },
      "Status": {
        "select": {
          "options": [
            { "name": "Not Started", "color": "red" },
            { "name": "In Progress", "color": "yellow" },
            { "name": "Complete", "color": "green" }
          ]
        }
      },
      "Due Date": { "date": {} }
    }
  }
}

Query a Database

{
  "tool": "query_database",
  "arguments": {
    "database_id": "abc123...",
    "filter": {
      "property": "Status",
      "select": {
        "equals": "In Progress"
      }
    },
    "sorts": [
      {
        "property": "Due Date",
        "direction": "ascending"
      }
    ]
  }
}

Update a Page

{
  "tool": "update_page",
  "arguments": {
    "page_id": "page123...",
    "properties": {
      "Status": {
        "select": {
          "name": "Complete"
        }
      }
    }
  }
}

Get a Page

{
  "tool": "get_page",
  "arguments": {
    "page_id": "page123..."
  }
}

Search Content

{
  "tool": "search_content",
  "arguments": {
    "query": "project requirements",
    "filter": {
      "property": "object",
      "value": "page"
    }
  }
}

Finding Page and Database IDs

From URL

When viewing a page or database in Notion, the ID is in the URL:

https://www.notion.so/My-Page-abc123def456...
                              ^----- This is the ID

Using search_content

Search for pages/databases by title:

{
  "tool": "search_content",
  "arguments": {
    "query": "My Database Name"
  }
}

Development

# Install dependencies
npm install

# Build TypeScript
npm run build

# Watch mode for development
npm run watch

Requirements

  • Node.js >= 18.0.0
  • Notion API Key
  • TypeScript 5.7+

Security

  • Never commit your NOTION_API_KEY to version control
  • Use environment variables for sensitive credentials
  • Regularly rotate your API keys
  • Limit integration permissions to only required pages/databases

Troubleshooting

"Error: NOTION_API_KEY environment variable is required"

  • Ensure you've set the NOTION_API_KEY environment variable
  • Check that the variable is available in the process environment

"Object not found" errors

  • Verify the page/database ID is correct
  • Ensure your integration has been added to the page/database
  • Check that the page/database hasn't been deleted

"Validation failed" errors

  • Verify property types match the database schema
  • Check that required properties are included
  • Ensure property names are spelled correctly

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

MIT License - see LICENSE file for details.

Links

Support

For bugs and feature requests, please use GitHub Issues.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured