# š Notion MCP Server
A powerful Model Context Protocol (MCP) server that connects AI assistants like Claude to your Notion workspace. Seamlessly search, create, and manage your Notion content through natural language conversations!
## ⨠What This Does
Transform your AI assistant into a Notion powerhouse! With this MCP server, you can:
- š **Search** through all your Notion pages and databases
- š **Create** new pages, databases, and content
- āļø **Update** existing pages and properties
- š **Query** databases with complex filters
- š **Manage** your entire Notion workspace through conversation
## šÆ Quick Start
### 1. Prerequisites
- Python 3.8 or higher
- A Notion workspace
- Nango account (for OAuth authentication)
- Claude Desktop app (for AI integration)
### 2. Installation
```bash
# Clone or download the files
git clone <your-repo-url>
cd notion-mcp-server
# Install dependencies
uv sync
```
### 3. Notion Setup
1. **Create a Notion Integration:**
- Go to [https://www.notion.so/my-integrations](https://www.notion.so/my-integrations)
- Click "New integration"
- Name it (e.g., "Claude MCP Integration")
- Select your workspace
- Set capabilities:
- ā
Read content
- ā
Insert content
- ā
Update content
- Save and copy your integration token
2. **Share Pages with Integration:**
- Open any Notion page you want to access
- Click "Share" ā "Invite"
- Select your integration
- Repeat for all pages/databases you want to use
### 4. Nango Setup (OAuth)
1. **Create Nango Account:** [https://nango.dev](https://nango.dev)
2. **Add Notion Integration** in your Nango dashboard
3. **Configure OAuth** with your Notion integration credentials
4. **Get your Nango credentials** (Base URL, Secret Key, Connection ID)
### 5. Environment Configuration
Create a `.env` file with your credentials:
```env
# Nango OAuth Configuration
NANGO_BASE_URL=https://api.nango.dev
NANGO_SECRET_KEY=your_nango_secret_key_here
NANGO_CONNECTION_ID=your_connection_id_here
NANGO_INTEGRATION_ID=notion
# Optional: Direct Notion Token (if not using Nango)
# NOTION_TOKEN=your_direct_notion_token_here
```
### 6. Claude Desktop Configuration
Add this to your Claude Desktop configuration file:
**On macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**On Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"notion": {
"command": "uvx",
"args": ["git+https://github.com/ampcome-mcps/notion-mcp.git"],
"env": {
"NANGO_BASE_URL": "https://api.nango.dev",
"NANGO_SECRET_KEY": "your_nango_secret_key",
"NANGO_CONNECTION_ID": "your_connection_id",
"NANGO_INTEGRATION_ID": "notion"
}
}
}
}
```
### 7. Test the Connection
```bash
# Test the server directly
python notion-mcp-server.py
# Or restart Claude Desktop and try asking:
# "Search my Notion for meeting notes"
# "Create a new task in my project database"
```
## š ļø Available Tools
| Tool | Description | Example Use |
|------|-------------|-------------|
| `notion_search` | Search across all content | "Find pages about project planning" |
| `notion_get_database` | Get database info | "Show me my tasks database structure" |
| `notion_query_database` | Query with filters | "Show incomplete tasks due this week" |
| `notion_create_database` | Create new databases | "Create a CRM database with contacts" |
| `notion_get_page` | Get page details | "Show me the content of my meeting notes" |
| `notion_create_page` | Create new pages | "Add a new task to my project database" |
| `notion_update_page` | Update existing pages | "Mark this task as completed" |
| `notion_get_block_children` | Get page content | "Read the content of this page" |
| `notion_append_blocks` | Add content to pages | "Add meeting notes to this page" |
| `notion_get_current_user` | Get integration info | "Check my Notion connection status" |
## š¬ Example Conversations with Claude
Once configured, you can have natural conversations like:
### Task Management
```
You: "Show me all my incomplete tasks"
Claude: [Queries your tasks database and shows open items]
You: "Create a new task called 'Review MCP integration' due next Friday"
Claude: [Creates the task with proper due date]
You: "Mark the first task as completed"
Claude: [Updates the task status to Done]
```
### Content Creation
```
You: "Create a meeting notes page for today's standup"
Claude: [Creates a new page with meeting template]
You: "Add action items from our discussion to that page"
Claude: [Appends bullet points with the action items]
```
### Research & Organization
```
You: "Search for all pages mentioning 'API documentation'"
Claude: [Finds and lists relevant pages]
You: "Create a new database to track our API endpoints"
Claude: [Creates a structured database with relevant properties]
```
## š§ Troubleshooting
### Common Issues
**"Authentication Error"**
- Check your `.env` file has correct Nango credentials
- Verify your Nango integration is active
- Ensure your Notion integration has proper capabilities
**"Page not found" errors**
- Make sure you've shared the page/database with your integration
- Check the page/database ID is correct
- Verify the integration has read access
**Claude can't find the server**
- Check the absolute path in `claude_desktop_config.json` is correct
- Ensure Python is in your system PATH
- Try running the server manually first to test
**"No access token found"**
- Verify Nango connection is working
- Check your `NANGO_CONNECTION_ID` matches your actual connection
- Try refreshing your Nango integration
### Debug Mode
Run with verbose logging:
```bash
python notion-mcp-server.py --debug
```
### Manual Testing
Test individual functions:
```python
from notion_mcp_server import NotionClient
client = NotionClient()
user = client.get_current_user()
print(f"Connected as: {user.get('name')}")
```
## š Security Notes
- **Never commit your `.env` file** to version control
- Keep your Nango secret key secure
- Only share Notion pages that the integration needs access to
- Regularly review your integration's access in Notion settings
## š File Structure
```
notion-mcp/
āāā main.py # Main MCP server
āāā pyproject.toml # Python dependencies
āāā .env.example
āāā .env # Your credentials (don't commit!)
āāā README.md # This file
```
## š Getting Help
1. **Check the logs** - Look for error messages in Claude Desktop or terminal
2. **Verify permissions** - Ensure your integration can access the pages
3. **Test manually** - Run the server directly to isolate issues
4. **Check Notion status** - Sometimes Notion API has outages
## š What's Next?
Once you're up and running:
- Try creating complex database queries
- Set up automated content creation workflows
- Use Claude to help organize and restructure your Notion workspace
- Explore advanced filtering and sorting options
## š License
This project is open source. Feel free to modify and adapt for your needs!
---
**Happy Notion-ing with Claude! š**
*Made with ā¤ļø for the AI-powered productivity enthusiasts*