weread-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@weread-mcpwhat's on my bookshelf, and how's my reading progress this week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
微信读书 · 远程 MCP
把微信读书官方网关的能力包成 远程 MCP。手机 App 等没有本地沙箱的前端,填一个 URL + 口令就能调用(不需要在你手机上跑任何进程)。
同一个能力,提供两种运行形态,按你的部署环境二选一:
形态 | 代码 | 跑在哪 | 适合 |
Cloudflare Workers | 仓库根目录( | Cloudflare 边缘 | 零运维、免费额度、想要一键按钮 |
Node 服务 |
| 你的 VPS 或自己电脑 | 有自己的机器/域名、要绕开 |
⚠️ 两份代码不通用:Workers 版是 fetch handler,只能在 Cloudflare 跑;VPS/本机请用
server/。
传输:MCP Streamable HTTP(无状态),端点固定
/mcp看板:内置
GET /dashboard,双 Tab(📖 共读 + 📚 书架与笔记),手机浏览器直接打开共读是「批注看板」:📖 共读 Tab 只显示被划线/批注过的段落(🟡 你 / 🔵 AI),整本原文不铺在页面上,只存在服务器供 AI 阅读
划线 ≠ 评论:你在微信读书画的线只作标记(段落黄边 + 「🟡 你划过线」),只有写下的想法才进 🟡 栏
AI 能读原书:
coread_outline/coread_read/coread_search读原文,coread_annotate写 🔵 批注 —— 看板立即可见谁写哪一栏是硬边界:🟡 只有你能写(看板编辑框 / 微信读书同步),🔵 只有AI能写(MCP)。看板上 🔵 那一栏是只读的,
coread_annotate也只接受ai—— 两边都改不了对方,双色才站得住🟡 栏自动填:看板上有「🔄 同步微信读书划线」按钮,一键把你微信读书里的想法按原文对齐写进 🟡 栏(划线同步为标记),也可让 AI 调
coread_sync原书导入:在看板「📖 共读」里直接拖入 EPUB(浏览器本地拆段),或用
tools/coread-upload.py一条命令版存储:原文与批注分开存(Workers 用 KV / Node 用文件),只有你的
wrk-key 放在服务端工具:20 个 —— 14 个微信读书网关 + 6 个共读原文 / 批注 / 同步 / 撤销
仓库结构
├── LICENSE # MIT
├── src/ # Cloudflare Workers 版(wrangler 入口)
│ ├── index.js # MCP 服务 + /dashboard 路由
│ └── dashboard.js # 看板渲染(两种形态共用):书架页 + 只显示批注的共读页
├── wrangler.toml # └ Workers 配置
├── server/ # Node 版(Express + Streamable HTTP)—— VPS / 本机用
│ ├── src/ # 服务 + 网关客户端 + dashboard.js
│ ├── Dockerfile
│ └── .env.example
├── tools/ # 本地预处理(除上传外都不联网)
│ ├── coread-upload.py # 一条命令:EPUB → 拆段 → 导出 → 上传
│ ├── epub-split.py # EPUB → segments.db + book.json(把书拆成段)
│ └── coread-export.py # segments.db → coread.json(看板吃的格式,含批注)
├── deploy/ # VPS 部署配置
│ ├── docker-compose.yml # app + Caddy(自动 HTTPS)
│ ├── Caddyfile
│ ├── .env.example
│ └── systemd/weread-mcp.service # 不用 Docker 时用
├── docs/
│ ├── 部署-VPS.md
│ └── 部署-自己电脑.md
└── test/ # Worker 版烟测Related MCP server: weread-shelf
选哪条路?
你的情况 | 走这条 | 教程 |
有 VPS + 域名 | Node 版 + VPS(推荐,国内可达性最好) | |
想让数据不出本机、或先本地跑通 | Node 版 + 自己电脑 | |
没有服务器、不想运维 | Cloudflare Workers(下方)+ 最好绑自有域名 | 见下方「部署到 Cloudflare」 |
一、部署到 Cloudflare Workers
一键部署(最简单)
本仓库顶部有按钮:
点 Deploy to Cloudflare Workers。
授权 Cloudflare → 自动 clone、构建、部署(无需本地环境)。
部署完在 Cloudflare 后台给 Worker 加两个 Secret(见下方「设置密钥」)。
命令行部署
git clone https://github.com/Git-xian/weread-mcp-worker.git
cd weread-mcp-worker
npm install
npx wrangler login # 浏览器授权一次
npx wrangler secret put WEREAD_API_KEY # 粘贴你的 wrk- key
npx wrangler secret put MCP_AUTH_TOKEN # 自定义一串随机口令,手机端要用
npx wrangler deploy部署成功会打印形如 https://weread-mcp.<子域>.workers.dev 的地址,MCP 端点即 .../mcp。
本地先跑通
cp .dev.vars.example .dev.vars # 填 WEREAD_API_KEY 和 MCP_AUTH_TOKEN
npx wrangler dev # http://127.0.0.1:8787/mcp设置密钥
两个 Secret(Cloudflare 后台 → Workers → 你的 Worker → Settings → Variables and Secrets,或 wrangler secret put):
Secret | 说明 |
| 微信读书 |
| 你自定的访问口令。必须设置,否则拿到地址的人都能读你的微信读书数据 |
未设置
MCP_AUTH_TOKEN时端点不鉴权,仅适合本机调试。
导入原书(共读数据,可选)
「📖 共读」Tab 需要一本原书做底:打开 https://<你的地址>/dashboard?token=<MCP_AUTH_TOKEN> → 📖 共读 → 把 EPUB 拖进去,搞定。(拆段在浏览器本地做,EPUB 原件不上传)
导入的只是原文,页面本身不会铺开它 —— 只有被批注过的段落才显示;想让 AI 读原文、写批注,见下方 AI 怎么读原书写批注。
Cloudflare 上要先绑一个 KV(只做一次,见下方共读数据);VPS / 本机不用配。
命令行派可以用 python tools/coread-upload.py 你的书.epub --url <地址> --token <口令>。
国内访问提示
*.workers.dev 在中国大陆常被墙。两个办法:
绑定自有域名:Cloudflare 后台 → 你的 Worker → Settings → Domains & Routes → 添加自定义域(域名需已接入 Cloudflare)。
改用 VPS/本机(
server/):直接用你自己的域名,绕开这个墙。
二、部署到 VPS 或自己电脑
用 server/(Node 版)。完整步骤见教程:
VPS:docs/部署-VPS.md —— Docker Compose + Caddy 自动 HTTPS,一条命令起服务;也含 systemd / Nginx 反代方式。
自己电脑:docs/部署-自己电脑.md —— 本机直跑 + 局域网访问 + 内网穿透(Cloudflare Tunnel / Tailscale / frp)拿 https 域名。
最短路径(VPS,Docker):
git clone https://github.com/Git-xian/weread-mcp-worker.git
cd weread-mcp-worker/deploy
cp .env.example .env && vi .env # 填 MCP_DOMAIN / WEREAD_API_KEY / MCP_AUTH_TOKEN
docker compose up -d --build
# 手机端:https://你的域名/mcp + Authorization: Bearer <口令>最短路径(自己电脑):
cd weread-mcp-worker/server
npm install
cp .env.example .env && vi .env # 填 WEREAD_API_KEY / MCP_AUTH_TOKEN(HOST 设 0.0.0.0 供局域网访问)
npm run start:env手机端接入(通用)
在支持「远程 MCP」的 App 里添加服务器:
类型:Streamable HTTP / 远程 MCP(不要选 stdio)
URL:
https://<你的地址>/mcp请求头:
Authorization: Bearer <你的 MCP_AUTH_TOKEN>
之后就能直接问,比如「看看我的书架」「我这个月读了多久」「三体有什么点评」。
提供的工具(tools)
工具 | 对应接口 | 说明 |
|
| 书城搜索(可分 scope:书/作者/听书/书单…) |
|
| 书架全量(电子书 + 专辑/有声书 + 文章收藏) |
|
| 笔记本概览(有笔记的书及数量) |
|
| 书籍详情 |
|
| 章节目录 |
|
| 阅读进度 |
|
| 阅读统计(周/月/年/总计) |
|
| 单本书划线 + 个人想法/点评 |
|
| 书籍公开点评 |
|
| 热门划线 |
|
| 个性化推荐 |
|
| 相似书推荐 |
|
| 列出网关全部可用接口(调试用) |
| 任意 | 原始调用逃生口 |
| 本服务 KV/文件 | 共读:列出原书章节目录(章节 + 起止段号) |
| 本服务 KV/文件 | 共读:按段号范围读原书正文(单次 ≤60 段,带 nextFrom) |
| 本服务 KV/文件 | 共读:在原文里搜关键词,返回命中段落全文 |
| 本服务 KV/文件 | 共读:写 🔵 AI的批注;🟡 和划线归你那边,机器不代写 |
| 微信读书网关 → 本服务 | 共读:想法写进 🟡 栏、划线只作标记(保留 🔵);按书名打分匹配,认不出就回候选书单可点选绑定 |
| 本服务 KV/文件 | 共读:按批次撤销 🔵 AI 批注(只清 AI,你的想法和划线不动);不传 batch 撤最新一批 |
看板(共读 + 书架)
除了 MCP 工具,服务还内置一个看板页面(GET /dashboard),结构与桌面版 weread_dashboard.py 完全一致:顶部双 Tab —— 📖 共读 / 📚 书架与笔记。
端点:
GET /dashboard口令:
?token=<你的 MCP_AUTH_TOKEN>(与 MCP 同一个口令)可选:
?books=<1..20>,最多渲染多少本有笔记的书(默认 12)
https://<你的地址>/dashboard?token=<MCP_AUTH_TOKEN>📚 书架与笔记(数据实时来自官方网关) 汇总行 + 搜索框 + 书脊色条书卡;点书名展开该书的划线 🟡 / 想法 💭,每条下方预留 🔵 AI批注位。
📖 共读批注(需先导入原书,见下) 只显示被划线/批注过的段落:每段带段号 + 原文 + 🟡 你的思考 / 🔵 AI的思考。整本原文不会铺在页面上(存在服务器,给 AI 读)。
顶部四档筛选:全部 / 🟡 我写的 / 🔵 AI 批的 / ✦ 两边都有 —— 最后一档是两种笔迹真正撞上的地方,以前埋在长列表里根本找不到;筛选后空章节会自动收起 只被划过线的段落会带黄边和「🟡 你划过线」小标签 —— 那是标记,不是你的评论。
点段落 → 编辑器,改完点 💾 保存 直接写服务器(换设备同样可见);两个框都清空再保存 = 删掉这条批注(划线标记保留)
编辑器存完自动收起;不想存只想关掉就点 收起,再点一次同一个段落也能开合
AI 批注里写「见第 812 段」会自动变成可点锚点,点一下跳到那一段并高亮 —— 这是「AI 读过整本」最直接的证据
🔄 同步微信读书划线:想法进 🟡 栏、划线只标黄边(见下节)
⬇ 导出 Markdown 在页尾:按章分节、🟡🔵 对照,能直接贴 Notion / Obsidian / flomo
↩ 撤销 AI 上一批:AI 一次批了几十段、其中一半是废话时可以整批回滚 —— 只清 🔵,你的想法和划线一条不动
页面按章节分组,顶部有章节目录条:点一章即跳到那章(自动展开),点章标题可就地折叠,右上角「全部收起 / 全部展开」。
第X部 / 第X章 / 序章 / 尾声 …都能认;整本正文挤在一个 xhtml、文件自带标题又是「未知」的 EPUB,保存时会按正文里的章节标记自动重切一次,不会全挂在一章下面保存失败(断网)会暂存本机,页面最末尾出现「立即同步」提示条
共读页没有原文搜索框 —— 原文是给 AI 经 MCP 读的、给人在微信读书里读的,看板只当批注看板。 要给还没批注的段落写批注?让 AI 读原文后写,或自己点「🔄 同步微信读书划线」把划线拉进来。
🔄 把微信读书的划线/想法同步过来
看板顶部的 🔄 同步微信读书划线 按钮,会调 POST /coread/sync:服务端按共读书名在「有笔记的书」里找到对应的微信读书笔记本 → 拉该书的划线(/book/bookmarklist)与想法(/review/list/mine)→ 用原文比对把每条落到对应段号。
落到段上时分两种,别混为一谈:
微信读书那边 | 落到看板 |
划线(只有线,没写字) | 该段标黄边 + 「🟡 你划过线」——只是标记,不是评论 |
想法(写了字) | 写字的那段 → 🟡「你:<你的想法>」,同时也会标为划线 |
只覆盖 🟡 栏与划线标记,🔵 AI批注一律保留;原文段落一字不动
没变化就不写(省 KV 额度);返回里给出
highlights(划线条数)、thoughts(想法条数)、markedSegments(标了几段)、written(实际写入几段)
书名怎么对上(重点):你在微信读书读的常是官方版,交给 AI 的却是别处下的版本,两边书名往往不一样。所以匹配不靠死磕全名,而是多信号打分(0~1):
信号 | 分 |
归一化后全名相等 | 1.00 |
某个「词」(主标题 / 括号里的作者、丛书名)与笔记本书名全等 | 0.90 |
最长公共子串 ≥3 字,按占比给 0.5~0.90 | — |
作者一致(只在天花板之上加成 0.06,绝不单独定案) | +0.06 |
比对前先抹掉噪声:.epub 后缀、(作者)/(站点名) 括号、精装版 / 全X册 / 第X版 / z-library.sk 之类的版本与来源词。分数 ≥ 0.7 才自动认,否则不硬凑。
出候选时不会乱写:返回
candidates(书名 + 作者 + 分数,降序),看板顶部把它们列成按钮,点一本即绑定绑定记在服务端(Workers 是 KV
coread-bind,Node 是coread-bind.json,都已 gitignore),下次同步直接用;绑定的书失效会自动清除并回到自动匹配也可显式传
bookId指定(等价于点选绑定);返回里有matched(命中方式)与score,ambiguous: true表示有另一本分数很接近、可能选错导入 EPUB 时会读书内元数据的
dc:title/dc:creator(浏览器解析与tools/epub-split.py都会),文件名另存meta.file—— 三个信号一起比对,比只看文件名稳得多自己导入微信读书的 EPUB,那本书的笔记标题常变成作者名(作者字段是站点占位串),靠「文件名括号里的作者」照样兜得住
curl -X POST "https://<你的地址>/coread/sync" -H "Authorization: Bearer <MCP_AUTH_TOKEN>"
# 指定 bookId: -d '{"bookId":"24953405"}'⚠️ 想让 🟡 栏有内容,共读的那本书得你在微信读书里确实划过线/写过想法。只把 EPUB 拖进来、微信读书里没笔记的书,同步会是空的。
共读数据怎么来(导入原书)
最省事:不用命令行,也不用上传 EPUB 原件。 打开看板 → 切到 📖 共读 Tab → 把 EPUB 拖进去。拆段在你自己的手机/电脑上完成,只有拆好的 JSON 传给服务器(Workers 存 KV,Node 存文件)。
https://<你的地址>/dashboard?token=<MCP_AUTH_TOKEN>不想用浏览器?一条命令
python tools/coread-upload.py 你的书.epub --url https://<你的地址> --token <MCP_AUTH_TOKEN>自动完成「拆书 → 导出 → 上传」。只想手工分步也行:
python tools/epub-split.py 你的书.epub ./weread-data/books/你的书 # ① 拆段
python tools/coread-export.py ./weread-data/books/你的书 coread.json # ② 导出
curl -X POST "https://<你的地址>/coread" -H "Authorization: Bearer <口令>" --data-binary @coread.json # ③ 上传整本书的
coread.json通常 0.3–3 MB;KV 单值上限 25 MiB,放得下。
只做一次的准备
部署形态 | 要配什么 |
Cloudflare | 绑一个 KV: |
VPS / 自己电脑 | 不用配。默认写到 |
核对 / 换书
curl "https://<你的地址>/coread?token=<MCP_AUTH_TOKEN>"
# → {"uploaded":true,"book":"你的书.epub","segments":1234}再拖一本进去就是换书(覆盖旧的)。
数据存哪
数据 | Workers | Node | 接口 |
原文(拆段后的书) | KV 键 |
|
|
批注(🟡/🔵) | KV 键 |
|
|
两者分开存:AI 写一条批注不必重传整本书。
curl "https://<你的地址>/coread?token=<口令>"
# → {"bound":true,"uploaded":true,"book":"你的书.epub","segments":2463,"annotated":12}AI 怎么读原书写批注
导入原书后,AI 用这 6 个工具读写(与看板共用同一份数据):
工具 | 干什么 |
| 看全书章节结构 |
| 按段号读原文( |
| 在原文里搜关键词,拿到段落全文 |
| 写 🔵 批注 |
| 从微信读书拉你的想法(写 🟡 栏)与划线(只标记),保留 🔵 |
| 按批次撤销 🔵 AI 批注;不传 |
典型对话:「读一下第 1200–1260 段,把你觉得要紧的地方写进批注」 —— AI 调 coread_read,再调 coread_annotate,你看板刷新就能看到 🔵 AI批注。
冷门路:
/dashboard?token=xxx&coread=<base64url>(coread-export.py --b64的输出)。 Cloudflare 对请求 URL 限制约 16 KB,只够几十段的演示数据。
未提供共读数据时,看板为单页书架模式(共读 Tab 显示导入入口)。
⚠️ 看板含你的真实划线 / 想法 / 批注,务必带
token打开,不要把带 token 的链接外发。📌 子请求预算:书架页每本书要拉 2 次网关(划线 + 想法)。Cloudflare Workers 免费版单请求上限 50 个子请求 →
books别调太大(默认 12 约 27 个子请求,安全);书特别多时绑付费版或加 KV 缓存。
自测
node test/smoke.mjs # MCP 端点:tools/list(20 个)+ 未知工具兜底
node test/smoke-coread.mjs # POST/GET /coread:鉴权、结构校验、写入、章节兜底重切(17 项)
node test/smoke-chapters.mjs # 章节识别:标题判定/目录页跳过/退化判定/幂等(31 项)
node test/smoke-coread-notes.mjs # 批注读写 + 原文搜索接口 + 6 个 coread 工具 + 批次撤销 + 只渲染批注段(59 项)
node test/smoke-coread-sync.mjs # 微信读书 → 🟡 栏同步:书名打分匹配/保留AI批注/幂等/候选点选绑定(49 项)
node test/smoke-dashboard.mjs # 看板结构断言(书卡/汇总/搜索/AI批注区/进度不越界)
node test/smoke-epub-parse.mjs # 浏览器内 EPUB 解析:stored + deflate(17 项)
npm i jsdom --no-save # 仅在要跑下面这条前端交互测试时需要
node test/smoke-dashboard-dom.mjs # 只渲染批注段 / 划线≠评论 / 章节折叠跳转 / 保存后自动收起 / 页尾提示条(92 项,jsdom 真跑)安全边界
WEREAD_API_KEY只存在于服务端(Worker Secret / 服务器.env),不进代码、不进日志、不进任何回包。端点鉴权靠
MCP_AUTH_TOKEN,务必设置,且不要在公开场合贴出来。POST /coread、POST /coread/notes(上传原文 / 写批注)同样要Bearer口令,未设置口令时直接拒绝;GET /coread只回书名、段数和批注条数,不回正文。微信读书的数据只做读类转发、不落地;但共读原文与批注会存在你的服务器上(KV 键
coread/coread-notes,或 Node 的本地文件),仅本服务读取,同样受MCP_AUTH_TOKEN保护。Node 版部署时,应用只监听
127.0.0.1:8787,公网仅暴露 443(见 VPS 教程「安全清单」)。skill_version固定为1.0.4;若官方网关返回upgrade_info,按提示更新src/weread.js(Worker)或server/src/weread.js顶部的SKILL_VERSION。
参考与致谢
本项目的共读形态与看板设计,站在这些开源项目与官方服务的肩膀上:
来源 | 借鉴了什么 | 协议 |
核心设计:人与 AI 共享同一本书的页码、划线、批注并排显示 | MIT | |
双色划线意象:两种笔迹留在同一页 | MIT | |
官方 Skill 生态索引,接口清单据此整理 | CC0 | |
数据来源:官方网关与 API Key 机制 | 官方服务 |
本仓库代码为原创实现,仅调用官方公开接口,未复制上述任何项目的源码。
开源协议
MIT © 2026 weread-mcp-worker contributors
Related MCP Connectors
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Official Bookmax MCP server: search and save bookmarks, read notes and docs from AI assistants.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Hosted Notion MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- FlicenseAqualityFmaintenanceAn MCP server enabling LLMs to access WeChat Reading bookshelf, notes, highlights, and reviews via tools like get_bookshelf, search_books, and get_book_notes_and_highlights.4101 npm171-
- AlicenseNot gradedqualityDmaintenanceEnables SQL queries on WeRead (微信读书) book data by syncing it into DuckDB, with an MCP server for agent-based analysis and cross-source joins.MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables a private mobile-first reading experience in ChatGPT, managing multi-book shelves, reading progress, highlights, thoughts, and bookmarks, with secure cloud storage and AI co-reading of the current page.34MIT
- AlicenseAqualityCmaintenanceEnables MCP clients to access WeChat Reading data and actions, including book search, book details, reading progress, highlights, reviews, and reading statistics, via a URL-based SSE or Streamable HTTP server.191Apache 2.0