1. 为什么我放弃了 Notion AI 订阅,转向 Gemini Client 自建笔记助手
Notion AI 每月 10 美金,一年下来就是 120 美金,折合人民币接近 900 块。对于只是偶尔需要「帮我总结这段会议记录」「把这篇长文压缩成三条要点」的人来说,这个价格确实不太划算。我自己的使用频率大概是一周三四次,平均每次成本超过 5 块钱,想想还是肉疼。
后来我换了个思路:Notion 本身提供了 Integration API,可以把页面内容读出来;而 Gemini Client(也就是 Gemini CLI)支持通过 MCP 协议挂载外部工具。两者一结合,就得到了一套「本地笔记助手」——我用自然语言让 Gemini 去读某个 Notion 页面,它调用 MCP 工具拉取内容,再交给模型做摘要、问答、改写。整个过程跑在本地终端里,不依赖 Notion 的付费 AI 功能。
这套方案适合谁?三类人比较合适:一是已经在用 Notion 做知识库、但不想为 AI 功能单独付费的;二是手里有 Gemini 相关额度、想把它用在真实工作流里的;三是喜欢折腾 MCP、想把私有数据接进大模型的开发者。如果你属于其中任何一类,下面的步骤可以跟着做一遍。
需要提前说明的是,Gemini Client 默认走的是官方 OAuth 登录,网络环境要求比较高。为了让请求稳定落到可用的入口上,我会把 Base URL 改到 TaoToken 的 API 地址,这样 Key 和模型 ID 都能统一管理,后面排障也方便。整篇文章会给出可复制的配置片段、笔记问答与摘要的调用示例,以及连通性验证和常见报错的处理办法。
2. TaoToken 前置准备:拿到 Base URL 与 API Key
在动手改配置之前,先把「钥匙」准备好。TaoToken 在这里扮演的是统一入口的角色:你不需要在 Gemini Client 里反复切换不同的认证方式,只要把 Base URL 指向它,再用一个 API Key 就能调用模型。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 根地址是 https://taotoken.net/api (这个地址不加 UTM 参数,配置里直接写它就行)。
第一步,打开控制台创建 Key。进入 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console_key&utm_campaign=rewrite ,登录后找到 API Keys 页面,点新建,复制生成的 Key。这个 Key 通常以sk-开头,只显示一次,建议先粘到本地临时文件里。如果你还没决定用哪个模型,可以先去模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 试几句,确认返回正常再继续。
第二步,确认你要用的 Model ID。Gemini Client 里模型名要写对,常见的有gemini-2.5-pro、gemini-2.5-flash这类。不同账号可用的模型可能不一样,以控制台里列出的为准。把 Base URL、Key、Model ID 这三样记下来,后面配置里会反复用到。
第三步,检查本地环境。Gemini Client 需要 Node.js 18 以上,终端里跑node -v看一眼。如果版本太低,先去升级。另外 Notion 那边要创建一个 Integration,拿到ntn_开头的 token,这个后面配 MCP 时用。Notion Integration 的创建入口在 https://www.notion.so/profile/integrations/internal ,新建时选好工作区,然后在「内容访问权限」里把你需要操作的页面加进去——这一步很关键,没加页面的话,后面 MCP 拉不到任何内容。
把这三样准备好,前置工作就算完成了。接下来进入真正的配置环节。
3. 可复制配置:settings.json 与 MCP 挂载
Gemini Client 的配置文件在用户目录下的.gemini/settings.json。Windows 是C:\Users\你的用户名\.gemini\settings.json,macOS 和 Linux 是~/.gemini/settings.json。如果文件不存在,手动建一个。下面是一份可以直接改的完整配置,注意把sk-你的Key和ntn_你的NotionToken替换成真实值:
{ "security": { "auth": { "selectedType": "oauth-personal" } }, "general": { "previewFeatures": true, "disableAutoUpdate": true, "enableAutoUpdate": false, "sessionRetention": { "enabled": true, "maxAge": "30d", "warningAcknowledged": true } }, "hasSeenIdeIntegrationNudge": true, "ide": { "hasSeenNudge": true }, "api": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的Key", "model": "gemini-2.5-pro" }, "mcpServers": { "notion": { "command": "npx", "args": [ "-y", "@suekou/mcp-notion-server" ], "env": { "NOTION_API_TOKEN": "ntn_你的NotionToken", "NOTION_MARKDOWN_CONVERSION": "true" } } } }几个容易踩坑的点单独说一下。NOTION_MARKDOWN_CONVERSION的值必须是字符串"true",带双引号,写成布尔值true在某些版本里会解析失败。NOTION_API_TOKEN一定要换成你自己 Integration 生成的 token,直接抄示例里的占位符会报 401。baseUrl结尾不要多加斜杠,写https://taotoken.net/api就行,多一个/可能导致路径拼接出错。
如果你用的是 Cline 或者 Claude Code 这类工具,配置思路是一样的,只是字段名不同。Cline 的 MCP 配置在cline_mcp_settings.json里,结构类似;Claude Code 走的是~/.claude/settings.json,Base URL 和 Key 写在env段里。核心三件套永远是 Base URL、Key、Model ID,缺一不可。
改完配置后,完全退出 Gemini Client 再重新打开,让它重新加载 settings.json。这一步别偷懒,热重载有时候不生效。
4. 验证请求:从 /mcp list 到第一次笔记摘要
配置写好后,先验证 MCP 有没有挂上。在 Gemini Client 里输入/mcp list,如果看到 notion 这一项前面是绿灯,说明 MCP 服务启动成功。如果显示红灯或者干脆没列出来,先别急着往下走,去第 5 节看排障。
MCP 通了之后,验证模型请求。最简单的方式是直接在对话里问一句「你好,确认一下连接」,看它能不能正常返回。如果返回正常,说明 Base URL 和 Key 都生效了。这一步其实就是在验证 TaoToken 的接入是否成功,返回内容里不应该出现认证错误。
接下来做第一次真实的笔记操作。打开 Notion,找到你要处理的页面,点右上角「复制链接」,把链接粘到 Gemini Client 里,然后加上指令。比如:
读取这个页面 https://www.notion.so/你的页面ID ,用三句话总结核心内容Gemini 会调用 notion MCP 工具去拉取页面,然后交给模型做摘要。第一次调用可能会慢几秒,因为 npx 要下载@suekou/mcp-notion-server这个包。等它返回结果,如果摘要内容和你页面里的信息对得上,说明整条链路跑通了。
再试一个问答场景:
基于刚才那个页面,回答:里面提到的三个行动项分别是什么?这种「先读后问」的模式,就是自建笔记助手的核心用法。你不需要把内容复制粘贴到对话框里,Gemini 通过 MCP 直接读 Notion,省掉了中间的手动搬运。实测下来,一个 2000 字左右的页面,摘要加问答的完整往返大概 10 到 15 秒,比手动翻页快不少。
如果想让结果更稳定,可以在指令里明确要求「只基于页面内容回答,不要编造」。模型有时候会脑补,加一句约束能减少幻觉。
5. 常见报错排查:401、local proxy failed 与 reading choices
配置过程中最容易撞上的几类报错,我按出现频率排一下,附上处理办法。
401 Unauthorized。这个基本是 Key 或 Notion token 的问题。先检查apiKey是不是sk-开头、有没有多余空格;再检查NOTION_API_TOKEN是不是ntn_开头。如果两个都对,去 TaoToken 控制台确认 Key 有没有被禁用或额度耗尽。Notion 那边还要确认 Integration 有没有被添加到目标页面——token 有效但页面没授权,也会返回权限类错误。
local proxy failed / connection refused。这类报错通常出现在 Base URL 写错或者本地网络拦截的情况下。先确认baseUrl是https://taotoken.net/api,没有拼错字母。然后检查本地有没有设置HTTP_PROXY、HTTPS_PROXY这类环境变量,如果有,临时清掉再试。终端里跑curl -I https://taotoken.net/api看能不能通,通不了就是网络层的问题,跟配置无关。
reading 'choices' of undefined。这个报错说明请求发出去了,但返回结构不是预期的 OpenAI 兼容格式。常见原因是 Model ID 写错了,比如把gemini-2.5-pro写成了gemini-2.5-pro-001这种不存在的名字。去控制台核对一下可用模型列表,改成正确的 ID。另一个可能是 Base URL 少了/api后缀,导致请求打到了官网首页而不是 API 端点。
OAuth 相关报错。如果你在 settings.json 里同时保留了oauth-personal和自定义apiKey,某些版本会优先走 OAuth,导致请求没落到 TaoToken 上。解决办法是把security.auth.selectedType改成api-key,或者在环境变量里显式指定。改完记得重启客户端。
MCP 工具绿灯但拉不到内容。这通常是 Notion 页面权限问题。回到 Notion 的 Integration 设置,确认目标页面在「内容访问权限」列表里。如果页面是后来新建的,需要手动再添加一次。另外,页面如果是数据库里的子项,链接格式可能不一样,建议直接复制页面本身的链接而不是数据库视图的链接。
排障的核心思路是分层:先确认网络通不通,再确认 Key 有没有效,最后确认模型 ID 和页面权限。一层一层往下查,比盲目改配置快得多。
6. 把笔记助手用起来:从摘要到长期编码工作流
链路跑通之后,可以把它嵌进日常习惯里。我自己的用法是每天早上花五分钟,让 Gemini 读一遍昨天的会议记录页面,生成一份待办清单;写长文之前,先让它读参考资料页面,输出一个提纲。这些操作都不需要打开 Notion AI,直接在终端里完成。
如果你除了笔记还想处理代码相关的任务,比如让模型读仓库里的文件、生成 commit message,那可以考虑 Coding Plan 这类长期方案。入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,适合需要频繁调用、对额度有稳定预期的场景。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有针对不同客户端的配置说明,遇到字段不确定的时候可以对照查。
API Key 管理页面还是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite ,需要新建或轮换 Key 的时候从这里进。模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 可以用来快速验证某个模型当前是否可用,不用每次都改配置文件。
最后分享一个实用技巧:把常用的 Notion 页面链接存成一个本地文本文件,需要的时候直接复制,省得每次去 Notion 里翻。另外,Gemini Client 的会话是有保留期的,配置里maxAge设的是 30 天,超过的会话会自动清理,重要结论记得手动存到 Notion 里,别只留在对话记录中。