二、方案选型
2.1 什么是 Notion MCP?
Notion MCP 是一个 Model Context Protocol(MCP)服务器,它允许 AI 助手通过 Notion API 操作页面、数据库、任务等。换句话说,你可以用自然语言指挥 AI 管理 Notion 文档和任务。
2.2 为什么选择它?
| 方案 | 优点 | 缺点 |
|---|---|---|
| 手动操作 | 无需技术准备 | 效率低、易遗漏 |
| Notion API | 功能强大 | 需要编写代码 |
| 第三方集成 | 开箱即用 | 功能有限 |
| Notion MCP | AI 直接控制、无需编写脚本 | 需要 MCP 环境 |
三、实现步骤
3.1 环境准备
首先,你需要安装 Notion MCP。以下是安装命令:
# 使用 uvx 安装
uvx mcp-server-notion
3.2 配置 MCP
在项目的 MCP 配置文件中添加:
{
"mcpServers": {
"notion": {
"command": "uvx",
"args": ["mcp-server-notion"],
"env": {
"NOTION_API_KEY": "your-api-key"
}
}
}
}
3.3 配置 Notion API
- 登录 Notion:www.notion.so/
- 进入 Settings → Integrations
- 创建新的 Integration
- 获取 Internal Integration Token
- 在需要访问的页面中邀请 Integration
3.4 自动化文档同步
配置完成后,你可以直接用自然语言指挥 AI。以下是我们当时使用的提示词:
请帮我完成以下任务:
1. 读取飞书文档「本周技术分享」的内容
2. 在 Notion 中创建一个新页面
3. 将内容同步到新页面,保留格式
4. 添加标签:技术分享、周报
5. 更新知识库索引
AI 会自动:
- 读取源文档内容
- 在 Notion 创建页面
- 同步内容并保持格式
- 添加标签和分类
3.5 自动化任务管理
请帮我完成以下任务:
1. 查看项目看板中所有「进行中」的任务
2. 检查每个任务的截止日期
3. 对即将到期的任务发送提醒
4. 更新任务状态(根据完成情况)
5. 生成本周任务汇总报告
四、核心代码示例
const { Client } = require('@notionhq/client');
const notion = new Client({ auth: process.env.NOTION_API_KEY });
// 获取页面内容
async function getPageContent(pageId) {
const response = await notion.blocks.children.list({
block_id: pageId
});
return response.results;
}
// 创建新页面
async function createPage(databaseId, title, content) {
const response = await notion.pages.create({
parent: { database_id: databaseId },
properties: {
Name: {
title: [{ text: { content: title } }]
}
},
children: content.map(block => ({
object: 'block',
type: 'paragraph',
paragraph: {
rich_text: [{ text: { content: block } }]
}
}))
});
return response;
}
// 更新数据库条目
async function updateDatabaseItem(databaseId, itemId, properties) {
const response = await notion.pages.update({
page_id: itemId,
properties
});
return response;
}
// 查询数据库
async function queryDatabase(databaseId, filter) {
const response = await notion.databases.query({
database_id: databaseId,
filter
});
return response.results;
}
// 自动化文档同步
async function syncDocument(sourceDoc, notionDatabaseId) {
// 1. 读取源文档
const content = await readSourceDocument(sourceDoc);
// 2. 在 Notion 创建页面
const page = await createPage(
notionDatabaseId,
sourceDoc.title,
content
);
// 3. 添加标签
await updateDatabaseItem(notionDatabaseId, page.id, {
Tags: {
multi_select: sourceDoc.tags.map(tag => ({ name: tag }))
}
});
return page;
}
// 任务状态自动更新
async function updateTaskStatus(databaseId) {
const tasks = await queryDatabase(databaseId, {
property: 'Status',
status: { equals: 'In Progress' }
});
for (const task of tasks) {
const dueDate = task.properties.DueDate?.date?.start;
if (dueDate) {
const daysUntilDue = Math.ceil(
(new Date(dueDate) - new Date()) / (1000 * 60 * 60 * 24)
);
// 即将到期或已过期
if (daysUntilDue <= 0) {
await updateDatabaseItem(databaseId, task.id, {
Status: { status: { name: 'Overdue' } }
});
}
}
}
}
五、效果对比
| 指标 | 手动操作 | MCP 自动化 |
|---|---|---|
| 文档同步 | 1-2 小时/次 | 约 2 分钟/次 |
| 任务更新 | 每天手动 | 自动实时 |
| 报告生成 | 30 分钟 | 约 1 分钟 |
| 信息一致性 | 难以保证 | 完全同步 |
六、注意事项
- API 限制:Notion API 有调用频率限制
- 页面权限:确保 Integration 有页面访问权限
- 数据格式:注意不同平台的数据格式差异
总结
通过 Notion MCP,我们成功将 文档管理和任务协作效率提升了 10+ 倍,实现了真正的自动化工作流。