Skip to main content
Glama
snowan
by snowan
README.md
# Notion MCP Server

A server that connects to the Notion API and exposes functionality through Claude's Machine Context Protocol (MCP).

## Features

- Search Notion pages by title or content
- Retrieve page details and content
- Query Notion databases
- Create new pages in Notion

## Setup

1. Clone this repository:
```bash
git clone https://github.com/yourusername/notion-mcp-server.git
cd notion-mcp-server
```

2. Install dependencies:
```bash
npm install
```

3. Create a `.env` file in the root directory with the following content:
```
NOTION_API_KEY=your_notion_api_key_here
PORT=3000
# Optional: if you want to query a specific database by default
NOTION_DATABASE_ID=your_notion_database_id_here
```

4. Get your Notion API key:
   - Go to [https://www.notion.so/my-integrations](https://www.notion.so/my-integrations)
   - Create a new integration
   - Copy the "Internal Integration Token"
   - Add this token as your `NOTION_API_KEY` in the `.env` file

5. Connect your Notion integration to your workspace:
   - Go to a page or database in your Notion workspace
   - Click the "..." menu in the top right
   - Select "Add connections"
   - Find and add your integration

## Running the Server

Start the server in development mode:
```bash
npm run dev
```

Or in production mode:
```bash
npm start
```

The server will run on the port specified in your `.env` file (default: 3000).

## API Endpoints

### Regular HTTP Endpoints

- **POST /api/notion/search**
  - Search for pages in Notion
  - Body: `{ "query": "search term" }`

- **POST /api/notion/page**
  - Get a page by ID
  - Body: `{ "page_id": "page-id-here" }`

- **POST /api/notion/database/query**
  - Query a database
  - Body: `{ "database_id": "database-id-here", "filter": {}, "sorts": [] }`

- **POST /api/notion/page/create**
  - Create a new page
  - Body: `{ "parent": {}, "properties": {}, "children": [] }`

### MCP Integration

The server exposes an MCP manifest at `/mcp/manifest.json` which describes the available functions.

To invoke an MCP function, send a POST request to `/api/notion/mcp/invoke` with the following structure:

```json
{
  "function_name": "search_pages",
  "parameters": {
    "query": "search term"
  }
}
```

## Available MCP Functions

- **search_pages** - Search Notion pages by title or content
- **get_page** - Get a Notion page by ID
- **query_database** - Query a Notion database
- **create_page** - Create a new page in Notion

## License

MIT