README.md•2.47 kB
# 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