Notion MCP

Notion MCP

Enables interaction with Notion via natural language, allowing page creation, calendar management, expense tracking, and custom tool integration.

Category
访问服务器

README

Notion MCP

Interact with your Notion by prompting Claude. Add your own tools and manage Notion with more comfort :)

Introduction

I created this project since I really enjoy using Notion, however, it seemed like a lot of stuff can be simplified by just creating MCP server over Notion API and letting the LLM manage the content there.

Example: If I want to add multiple entries to my expense tracker, I have to repeatedly click multiple buttons, sending one short message to the LLM solves it.

You can also simplify your workflow by adding your own tools. I tried to keep the code as modular as possible so that adding new tools is pretty straightforward. Below I share the steps that have to be done in order to do so.


Getting Started

1. Clone this repository

git clone https://github.com/dkoterwa/notion_mcp.git
cd notion_mcp

2. Install uv

Install uv if you don’t already have it.

3. Sync dependencies

Reproduce the environment by executing uv sync.

4. Add server to Claude config

First, in the Claude app, go to the Developer settings and click Edit Config button.

<div align="center"> <div style="display: inline-block; text-align: left;"> <img src="media/edit_config.png" width="720"> </div><br><br> </div>

You will be taken to claude_desktop_config.json file. Open it and paste the Notion MCP config:

{
  "mcpServers": {
    "notion_mcp": {
      "command": "<path to uv, e.g. /Users/user/.local/bin/uv>",
      "args": [
        "--directory",
        "<path to the repository root directory>",
        "run",
        "notion_mcp/run.py"
      ],
      "env": {
        "PYTHONPATH": "<path to the repository root directory>"
      }
    }
  }
}

5. Create .env file and place your Notion API key inside

In the root directory of repository execute:

echo NOTION_TOKEN=<your API key> > .env

Please go there and follow the steps to set up your Notion integration and get your API key if you don't know how to do it.

At the end, you should see that Claude has access to your local notion_mcp server. Make sure it's turned on: <div align="center"> <div style="display: inline-block; text-align: left;"> <img src="media/claude_integration.png" width="720"> </div><br><br> </div>

Adding Your Tools

Adding your own tools is really simple. Just go to /tools and then to the specific Notion data structure that you would like to implement new tool in. Then, add a new tool method to the function responsible for registering the tools of given data structure.

Let's assume I would like to add a tool returning current time. To do this, I add a method under register_util_tools in /tools/utils.py:

  def register_util_tools(mcp, calls):
      @mcp.tool()
      async def get_today() -> str:
          """
          Get today's date in ISO format (YYYY-MM-DD).
          """
          from datetime import date

          return date.today().isoformat()

+     @mcp.tool()
+     async def get_current_time() -> str:
+         """
+         Get the current local time in HH:MM:SS format.
+         """
+         from datetime import datetime
+         return datetime.now().strftime("%H:%M:%S")

That's it! Now Claude should have access to the get_current_time tool.

You can always turn off the tools I designed by changing the enable argument in the @mcp.tool decorator:

@mcp.tool(enabled=False)
def maintenance_tool():
    """This tool is currently under maintenance."""
    return "This tool is disabled."

Read more in the FastMCP documentation.

Current functionalities

<div align="center"> <div style="display: inline-block; text-align: left;"> <b>Create pages, and add or edit content.</b><br> <img src="media/recipes.gif" width="720"> </div><br><br>

<div style="display: inline-block; text-align: left;"> <b>Organize your calendar directly from the Claude chat window.</b><br> <img src="media/calendar.gif" width="720"> </div><br><br>

<div style="display: inline-block; text-align: left;"> <b>Manage your expenses without going to Notion and doing it manually.</b><br> <img src="media/expense_tracker.gif" width="720"> </div> </div>

Contribution

Please feel free to create an issue and ask if anything is not understandable for you. Contributions are welcome via pull requests. I plan to expand this project further only when I decide to automate additional Notion functionality that I use frequently.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选
mcp-server-qdrant

mcp-server-qdrant

这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。

官方
精选
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选