ss-reading-nest

ss-reading-nest

An 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.

Category
访问服务器

README

SxS Reading Nest / 小窝共读

一个运行在 ChatGPT 中的移动端优先私人阅读器。它把多书书架、阅读进度、划线想法、书签和“与 AI 共读当前页”连接在同一个 MCP App 中。

公开仓库只包含源代码、测试和原创 demo,不包含维护者的线上地址、Cloudflare 资源标识、连接令牌、书籍正文、批注、聊天或阅读记录。

当前冻结版本:0.3.34 公开发布标签:v0.3.34

设计目标

  • 在 ChatGPT Web、iPhone 和 iPad 宿主中使用同一份 React 组件。
  • 支持粘贴文本和导入 TXT、Markdown、EPUB。
  • 支持多本书,而不是为单本样书写特殊逻辑。
  • 让正文保持私密,同时允许用户主动分享当前页与想法进行共读。
  • 允许设备缓存丢失后从私人云端恢复正文和阅读状态。

核心功能

  • 多书书架、筛选、详情页和阅读记录
  • 当前阅读位置与 AI 已同步位置分离
  • 划线、想法、清思、纪要、书签及删除管理
  • 水蓝、粉桃、米白、浅绿和柔墨绿主题
  • IndexedDB 本地缓存
  • D1 元数据与私人 R2 正文存储
  • 当前页上下文的只读共读工具
  • ChatGPT Web、iPhone、iPad 响应式界面

架构概览

flowchart LR
    U["用户"] --> H["ChatGPT Web / iPhone / iPad"]
    H -->|"MCP tools/call"| W["Cloudflare Worker"]
    W --> T["MCP 工具层"]
    W --> R["内联 React UI resource"]
    T --> S["ReadingService"]
    S --> D[("D1 元数据")]
    T --> C["CloudSourceService"]
    C --> O[("私有 R2 正文")]
    R --> I[("IndexedDB 缓存")]
    R -->|"组件专用工具"| T

关键点:工具执行成功、数据返回成功、UI resource 可读取、宿主完成挂载、用户可以交互,是五个不同的状态。浏览器成功也不能替代 iPhone 或 iPad 真机验收。

详细说明见 架构与设计思路

项目结构

shared/  共享数据模型、Zod schema、数据库迁移与小说分段
server/  MCP 工具、UI resource、Worker、D1/R2 服务与隐私边界
web/     React 阅读器、ChatGPT host bridge、IndexedDB 与主题样式
demo/    可公开使用的原创示例文本
docs/    架构、部署、维护与学习资料

本地开发

要求:Node.js 22+、Corepack、pnpm 10.15.1。

git clone https://github.com/ice-star-blue/ss-reading-nest.git
cd ss-reading-nest
corepack pnpm@10.15.1 install
corepack pnpm@10.15.1 test
corepack pnpm@10.15.1 typecheck
corepack pnpm@10.15.1 build

本地开发:

corepack pnpm@10.15.1 dev

默认本地端点:

  • MCP:http://localhost:8787/mcp
  • 健康检查:http://localhost:8787/health

部署到自己的 Cloudflare

该项目默认是个人单用户部署。不要把维护者或其他人的 MCP 地址作为自己的后端。

  1. 创建 D1 数据库和私有 R2 bucket。
  2. server/wrangler.jsonc 中的占位数据库 ID 改成自己的值。
  3. 创建随机 MCP_PATH_TOKEN,仅通过 Wrangler secret 保存。
  4. 应用迁移并部署 Worker。
corepack pnpm@10.15.1 --filter @ss/server exec wrangler login
corepack pnpm@10.15.1 --filter @ss/server exec wrangler d1 create ss-reading-nest-db
corepack pnpm@10.15.1 --filter @ss/server exec wrangler r2 bucket create ss-reading-nest-sources
corepack pnpm@10.15.1 --filter @ss/server exec wrangler secret put MCP_PATH_TOKEN
corepack pnpm@10.15.1 --filter @ss/server exec wrangler d1 migrations apply ss-reading-nest-db --remote
corepack pnpm@10.15.1 deploy:cloudflare

连接地址由你自己的 Worker origin 和私密 token 组成:

https://<your-worker>.<your-subdomain>.workers.dev/mcp/<your-random-token>

原生客户端兼容入口使用当前后缀:

https://<your-worker>.<your-subdomain>.workers.dev/mcp/<your-random-token>/ios-v4

不要把实际地址发到 issue、日志或截图里。完整步骤见 开源部署指南。ChatGPT App/MCP 的官方概念可参考 OpenAI MCP server 指南ChatGPT UI 指南

数据与隐私

位置 保存内容 性质
D1 session、进度、偏好、批注、书签、阅读记录、source metadata 私有结构化数据
R2 导入的小说正文和 manifest 必须保持 private
IndexedDB 当前设备的正文与分段缓存 可重建缓存
ChatGPT 上下文 用户主动共读时所需的当前页与想法 最小必要范围

服务端会在书架数据离开内部存储边界前移除 R2 objectKeymanifestObjectKey。项目不需要 OPENAI_API_KEY,模型由 ChatGPT 宿主提供。

IndexedDB 只承担加速缓存,不是唯一数据源。正文上传和恢复使用 component-only 的组件通道;ChatGPT 模型不会自动读取整本小说。R2 保持私有,本项目不生成 public URL 或 signed URL。

删除操作分为三个明确层次:删除云端阅读记录、同时删除云端正文副本、同时删除本设备正文缓存。使用者应根据自己的保留需求确认范围。

部署后的 remote smoke 只应使用临时原创文本,并在完成后清理测试 session 与对象。

随机路径 token 不是完整的多用户认证。公开提供托管服务前,必须增加真正的身份认证、授权、用户隔离、限流、删除和滥用防护。详见 安全策略

共读为什么不把整页塞进聊天

组件只发送一句简短的共读意图。模型随后调用无 UI 绑定的只读工具 read_shared_page_context,从 R2 恢复当前页、从 D1 获取该页想法,再直接回应用户观点。这样模型获得必要上下文,但聊天界面不会变成正文和批注的复读机。

测试基线

公开前在冻结源码上验证:

  • shared:34 项通过
  • server:87 项通过
  • web:173 项通过,1 项按设计跳过
  • TypeScript 类型检查通过
  • 生产构建通过
  • iPhone ChatGPT App 由维护者完成真实设备挂载验收

iPad 和未来版本仍应独立验收,不能继承其他宿主的结论。

文档

License

MIT。导入、存储或分享文本时,使用者仍需自行确认版权和当地法律要求。仓库 demo 为原创短文本。

推荐服务器

Baidu Map

Baidu Map

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

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

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

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

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

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

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

官方
精选
本地
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
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

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

官方
精选