内容
# Substack MCP 服务器
[](https://buymeacoffee.com/thenewrhythm)
一个模型上下文协议(MCP)服务器,允许 Claude 从 Substack 发布物中读取内容,并可选地草拟内容。
Substack **没有官方公共 API**。该服务器使用 Substack 网站本身调用的相同的非官方 JSON 端点,以及公共 RSS 源。这有两个值得注意的后果:
- **读取工具无需登录**,且可靠。
- **写入(草稿)需要您的会话 cookie**,由于它依赖于未文档化的端点,请将 `create_draft` 视为实验性的 - Substack 可以在没有任何通知的情况下更改这些端点。
## 工具
| 工具 | 是否需要身份验证 | 功能 |
|------|----------------|--------------|
| `get_publication_info` | 否 | 连接检查;发布物名称、URL、最新帖子。 |
| `list_recent_posts` | 否 | 最近的帖子,按最新顺序排列,带有免费/付费标志。 |
| `search_posts` | 否 | 跨您的帖子的关键词搜索。 |
| `get_post` | 否 | 通过 slug 获取一篇帖子的完整内容(API,RSS 备用)。 |
| `create_draft` | **是** | 创建一个**草稿**(永远不会发布)。附加您的作者署名。需要 `SUBSTACK_SID`。 |
| `list_drafts` | **是** | 列出您的未发布的草稿,带有编辑 URL。 |
| `create_note` | **是** | 发布一个纯文本笔记。**公开 - 无草稿步骤**。 |
| `create_note_with_link` | **是** | 发布一个带有链接预览卡的笔记。**公开**。 |
| `create_note_with_image` | **是** | 发布一个带有上传图像的笔记。**公开**。 |
本地 `.env` 文件(位于 `server.py` 旁边)会自动加载,因此您可以将 `SUBSTACK_PUBLICATION` / `SUBSTACK_SID` 保存在本地运行中,而不是手动导出。复制 `.env.example` 到 `.env` 以开始。
## 设置
```bash
cd substack-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
```
设置您的发布物(仅子域名):
```bash
export SUBSTACK_PUBLICATION=your-subdomain
python server.py # 应该启动并在标准输入上静默等待
```
按 Ctrl-C 停止。如果它因 `SUBSTACK_PUBLICATION` 而退出并出现错误,则该变量未设置。
## 连接到 Claude 代码
从仓库目录:
```bash
claude mcp add substack \
--scope user \
--env SUBSTACK_PUBLICATION=your-subdomain \
-- /absolute/path/to/substack-mcp/.venv/bin/python /absolute/path/to/substack-mcp/server.py
```
然后 `claude mcp get substack` 应该显示 **✔ 已连接**。写入工具从您的本地 `.env` 读取 `SUBSTACK_SID`(见下文),因此它永远不会出现在配置中。
## 连接到 Claude 桌面版
编辑您的 Claude 桌面版配置文件:
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
添加(使用**绝对路径**,以及您创建的虚拟环境的 Python):
```json
{
"mcpServers": {
"substack": {
"command": "/absolute/path/to/substack-mcp/.venv/bin/python",
"args": ["/absolute/path/to/substack-mcp/server.py"],
"env": {
"SUBSTACK_PUBLICATION": "your-subdomain",
"SUBSTACK_SID": ""
}
}
}
}
```
完全退出并重新打开 Claude 桌面版。您应该看到 `substack` 工具出现。尝试:*"使用 substack 工具列出我的 5 篇最新帖子。"*
## 启用写入工具(可选)
写入工具(`create_draft`、`create_note`、`create_note_with_link`、`create_note_with_image`、`list_drafts`)代表您操作,因此它们需要您登录的证明。没有 API 密钥,因此它使用您的浏览器会话 cookie:
1. 在浏览器中登录 Substack。
2. 打开开发者工具 → **应用程序**(Chrome)/ **存储**(Firefox)→ Cookie → `https://substack.com`。
3. 复制 **`substack.sid`** cookie 的值。
4. 复制 `.env.example` 到 `.env` 并粘贴在 `SUBSTACK_SID=` 之后。
**安全注意事项:** 此 cookie 等同于您的登录凭证 - 任何拥有它的人都可以代表您操作。它仅存在于您的本地 `.env`(git 忽略)中。不要提交它,不要在聊天中粘贴它,如果它泄露,请旋转它(注销 / 登录)。它会定期过期;当写入工具开始返回身份验证错误时,请刷新它。
> ⚠️ **笔记立即发布。** `create_draft` 仅创建一个**草稿**,您自己发布,但 `create_note*` 在它们运行时发布到您的公共笔记源 - 没有草稿步骤。请将它们视为真正的发送。
## 限制和注意事项
- 草稿和笔记正文将普通段落(用空行分隔)转换为 Substack 的编辑器格式 - 暂无粗体/斜体/标题。草稿旨在为您的帖子提供一个种子,您在编辑器中完成。
- 付费帖子正文仅在身份验证时才会完整显示;否则,您会看到免费预览。
- 非官方端点可能会在没有任何通知的情况下更改。如果读取工具开始失败,`/api/v1/archive` 形状或 `/feed` 是首先要检查的内容。
## 扩展
自然的下一个工具:`list_comments(slug)`、`delete_note(id)`、调度或更丰富的 Markdown→ProseMirror 转换(粗体/斜体/链接/标题)。每个都是 `server.py` 中的新 `@mcp.tool()` 函数。
## 支持
这里的每个工具都源于我自己一周的混乱 - 一个客户端问题,我不断地手动解决,直到我构建了可以为我运行它的东西。我公开、MIT 许可,因为您可以交给别人使用的工具是唯一的证明,证明思考是真实的。
一杯咖啡可以让工具免费和维护,并资助下一个 - 在开放中构建。
[](https://buymeacoffee.com/thenewrhythm)
## 免责声明
本项目与 Substack 无关或未得到 Substack 的认可。它使用可能更改或破坏的未记录端点。请自担风险,并按照 Substack 的服务条款使用。