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

A Model Context Protocol server for Notion API integration, providing tools to create, retrieve, and update Notion pages.

## Features

- **Create Page**: Create new pages in databases or as child pages
- **Retrieve Page**: Get page properties and metadata
- **Update Page**: Modify page properties, icons, covers, and archive status
- **Retrieve Page Property**: Get detailed property information with pagination support

## Installation

```bash
cd backend/notion-mcp
npm install
```

## Configuration

Create a `.env` file with your Notion API key:

```env
NOTION_API_KEY=your_notion_integration_token_here
NOTION_VERSION=2022-06-28
PORT=3003
```

### Getting a Notion API Key

1. Go to [Notion Developers](https://developers.notion.com/)
2. Create a new integration
3. Copy the "Internal Integration Token"
4. Share your databases/pages with the integration

## Usage

### STDIO Transport (Development)

```bash
npm run dev:stdio
```

### HTTP Transport (Production)

```bash
npm run dev:http
# or
npm start
```

## Available Tools

### notion_create_page

Creates a new page in Notion.

**Parameters:**
- `parent` (required): Parent page or database ID
- `properties` (required): Page properties matching parent schema
- `children` (optional): Page content as block objects
- `icon` (optional): Page icon (emoji or external URL)
- `cover` (optional): Page cover image

**Example:**
```json
{
  "parent": {
    "type": "database_id",
    "database_id": "d9824bdc-8445-4327-be8b-5b47500af6ce"
  },
  "properties": {
    "Name": {
      "title": [{"text": {"content": "New Page"}}]
    }
  },
  "icon": {
    "type": "emoji",
    "emoji": "📝"
  }
}
```

### notion_retrieve_page

Retrieves a Notion page by ID.

**Parameters:**
- `page_id` (required): The page ID to retrieve
- `filter_properties` (optional): Specific property IDs to return

### notion_update_page

Updates page properties and metadata.

**Parameters:**
- `page_id` (required): The page ID to update
- `properties` (optional): Properties to update
- `in_trash` (optional): Archive/restore the page
- `icon` (optional): Update page icon
- `cover` (optional): Update page cover

### notion_retrieve_page_property

Retrieves detailed property information with pagination.

**Parameters:**
- `page_id` (required): The page ID
- `property_id` (required): The property ID
- `page_size` (optional): Number of items per page (max 100)
- `start_cursor` (optional): Pagination cursor

## Building

```bash
npm run build
```

## Development

```bash
npm run watch  # Watch mode for TypeScript compilation
```

## Client Configuration

For HTTP transport, add to your MCP client config:

```json
{
  "mcpServers": {
    "notion": {
      "url": "http://localhost:3003/mcp"
    }
  }
}
```

For STDIO transport:

```json
{
  "mcpServers": {
    "notion": {
      "command": "node",
      "args": ["./dist/index.js"]
    }
  }
}
```

## Health Check

When running HTTP transport:

```bash
curl http://localhost:3003/health
```

## Error Handling

The server provides detailed error messages for:
- Missing API keys
- Invalid page/database IDs
- Permission errors
- Malformed requests
- Notion API rate limits

## License

MIT

TDQS

B3.3/5.0

Scored across 4 tools

Disambiguation4/5

The tools are mostly distinct, with each handling a specific aspect of page management (create, retrieve, update). However, 'notion_retrieve_page' and 'notion_retrieve_page_property' could cause confusion, as the latter is a specialized case of the former, potentially leading to misselection when an agent needs general page info versus a specific property.

Naming Consistency5/5

All tool names follow a consistent 'notion_verb_noun' pattern using snake_case, with clear verbs like create, retrieve, and update. This predictability makes it easy for agents to understand and use the toolset without naming conflicts or style mismatches.

Tool Count3/5

With 4 tools, the count is borderline for a Notion integration, as it covers basic CRUD operations but feels thin. A typical Notion server might include additional tools for databases, blocks, or search to provide more comprehensive coverage, making this set somewhat limited in scope.

Completeness3/5

The toolset covers create, retrieve, and update operations for pages, but has notable gaps. There is no delete tool, and it lacks support for databases, blocks, or search functionalities, which are core to Notion's domain. This incompleteness may require agents to work around missing operations for full lifecycle management.

Maintenance

ActivityInactive
ResponsivenessNo issues