1 min read
July 28, 2025
log
logs
Docker 与 MCP 探索日志
Part I:Docker 与 MCP 的初步探索
背景
尝试使用官方提供的 mcp/notion
容器镜像,在本地访问 Notion API,通过标准化 MCP 协议实现连接。
Notion 设置步骤
- 在 Notion Developers 创建 Integration。
- 获取以
ntn_
为前缀的 token。 - 打开目标页面 → Share → Add connections → 添加该 Integration 的权限。
Docker 调用问题记录
问题 1:调用无返回
多次尝试以下命令:
docker run --rm -i -e NOTION_TOKEN=ntn_XXX mcp/notion
光标闪烁,粘贴以下内容:
{"method":"GET","url":"/v1/users/me"}
无返回。问题原因:请求中必须添加 "id": "XXX"
字段。
问题 2:JSON 转义不兼容
尝试使用 OPENAPI_MCP_HEADERS
:
docker run -e OPENAPI_MCP_HEADERS='{"Authorization":"Bearer ntn_...","Notion-Version":"2022-06-28"}' mcp/notion
报错:invalid reference format
。原因是 Windows PowerShell 对 JSON 转义不兼容。
问题 3:PowerShell 变量传参失败
改用 PowerShell 变量传参:
$env:OPENAPI_MCP_HEADERS = '{...}'
docker run -e OPENAPI_MCP_HEADERS="$env:OPENAPI_MCP_HEADERS" mcp/notion
仍报错,无法识别 JSON。最终放弃该方法。
正确调用方式(推荐)
方法 1:使用 NOTION_TOKEN
环境变量
最简单、最少报错的方式:
docker run --rm -i -e NOTION_TOKEN=ntn_XXX mcp/notion
输入完整请求:
{"method":"GET","url":"/v1/users/me","id":"u1"}
成功返回 Notion 用户信息,容器工作正常。
方法 2:配置 .cursor/mcp.json
文件
编写以下配置文件:
{
"mcpServers": {
"notion": {
"command": "docker",
"args": [
"run", "--rm", "-i", "-e", "NOTION_TOKEN", "mcp/notion"
],
"env": {
"NOTION_TOKEN": "ntn_XXX"
}
}
}
}
此文件可被 Cursor 调用,也适用于 n8n credentials。
Part II:Notion MCP 的局限性
初步设想
最初以为授权页面并开通 MCP(Model Context Protocol)后,ChatGPT 能像本地助手一样读写所有 Notion 数据库,甚至主动创建待办、填报告。
实际发现
但实际情况是:
- ✅ 普通的 Notion 文档页面(Page)内容可以被 ChatGPT 读取。
- ❌ 数据库视图(Table / Board)无法获取其子项,即使它们是页面。
- ❌ ChatGPT 目前无法写入 Notion,即使 MCP 理论上支持双向协议。
总结
MCP 本质上并非数据 API,而是一种“上下文理解协议”。它不会主动遍历结构化信息,而是辅助在“正在阅读的页面”中完成更智能的操作。
经验总结
- Docker 是开发者世界的通用“封装器”,掌握它比装对多少包都重要。
- MCP 是一次人机上下文交互的革新,但别指望它立刻变成全知秘书。
- 不要默认一项功能已经“通用化”,多尝试、多对照,才能发现真实边界。
- 从“操作命令”到“抽象认知”的转变,是技术成长的起点。
- 记录探索过程,比仅仅记录结论更有价值。
尾声:技术,是走进去才知道的世界
今天的两个主题,从表面上看是容器和上下文协议,实际上是“技术理解力”的延伸——看似熟悉的工具,在深入之后依然能带来新角度的启发。
未来回顾这一天时,我不希望只记得“我配置了什么”,而更想记住“我当时是怎么想的,又是怎么改变想法的”。
如果你也在用 ChatGPT + Notion,或者想更好地用 Docker 组织工作流,欢迎一起交流🧠
—— Binwen Liu
This post was created using the automated script.