内容
# substack-mcp
一个用于读取 Substack 的 [MCP](https://modelcontextprotocol.io) 服务器 — 包括出版物、帖子、评论、作者简介、推荐和您的 Notes 动态 — 使用您自己的阅读器会话,无需官方 API。
与 Claude、Codex 和其他支持 MCP 的编码代理一起使用。
它是只读的 🔒:它所做的任何操作都无法发布、点赞、评论或更改您的帐户状态。
## 🛠️ 工具列表
| 工具 | 描述 |
|---|---|
| `list_published_posts` | 列出出版物的近期帖子 |
| `get_post` | 通过域名 + slug 获取帖子的完整内容(如果您是付费订阅者,则对付费墙帖子有效) |
| `get_post_by_url` | 通过任何帖子 URL 获取帖子的完整内容,包括通用 `substack.com/@handle/p-<id>` 链接 |
| `search_posts` | 在出版物中搜索帖子 |
| `search_all_subscriptions` | 在您订阅的所有出版物中搜索 |
| `list_subscriptions` | 列出您的订阅(免费和付费) |
| `get_post_comments` | 通过域名 + slug 获取帖子的评论,包含嵌套回复 |
| `get_post_comments_by_url` | 通过任何帖子 URL 获取相同内容 |
| `get_author_profile` | 获取作者的公共简介(生物、社交链接、他们撰写的出版物) |
| `get_recommendations` | 列出给定出版物向其读者推荐的出版物 |
| `get_notes_feed` | 列出您的 Notes 首页动态中的近期项目 |
## ⚙️ 工作原理
Substack 不提供用于这些读取的公共 API。相反,此服务器重放您登录时浏览器发出的相同 `/api/v1/*` 请求,并使用您的 `substack.sid` 会话 cookie 进行身份验证。这意味着:
- 您需要一个有效的 Substack 帐户和会话令牌。
- 令牌会定期过期 — 当请求开始因身份验证错误而失败时,请重新提取(参见下文)。
⚠️ 这是一个非官方库,与 Substack 无关或未得到 Substack 的认可。它仅访问您已经有权访问的内容(您的订阅、公共帖子和您自己的帐户数据),并且不会绕过付费墙或速率限制。在使用它时,请注意 [Substack 的使用条款](https://substack.com/tos)。
## 🚀 安装
```bash
git clone https://github.com/ryanrodrigues25200525-svg/substack-mcp.git
cd substack-mcp
npm install
npm run build
```
### 🔑 获取您的会话令牌
1. 在浏览器中登录 Substack。
2. 打开开发者工具 → 应用程序/存储 → Cookie → `substack.com`。
3. 复制 `substack.sid` cookie 的值。
### 🔌 配置您的 MCP 客户端
将以下内容添加到您的 MCP 客户端配置中(例如 Claude Code 的 `~/.claude.json`,在 `mcpServers` 下):
```json
{
"mcpServers": {
"substack": {
"command": "node",
"args": ["/absolute/path/to/substack-mcp/dist/index.js"],
"env": {
"SUBSTACK_SESSION_TOKEN": "your_token_here"
}
}
}
}
```
🚫 **请勿提交您的令牌。** 仅在您的本地 MCP 客户端配置中保留它,不要保留在此存储库或版本控制中。
## 🧪 开发
```bash
npm run build # 编译 TypeScript
SUBSTACK_SESSION_TOKEN=xxx npm test # 在 live Substack 端点上运行集成测试套件
```
测试套件会对 live 出版物发出真实请求,因此它需要有效的 `SUBSTACK_SESSION_TOKEN`,并且会受到 Substack 的速率限制。
## 📄 许可证
[MIT](LICENSE)