x-public-post
x-public-post
只读 MCP:给 Agent 一个 get_post(url),按 x.com / twitter.com 的 status 链接读一条公开帖。默认无 Cookie。
公开两跳打头(FxTwitter,Syndication 备用),工具面只有读一条;帖文标 untrusted,不能当系统指令。
status URL
→ FxTwitter(长帖更常能拿全文)
→ Syndication(备用)
→ 仅当设置了 TWSCRAPE_DB_PATH 才走本机 twscrape亮点
最小工具面。 只有
get_post;不搜索、不时间线、不发帖。失败走 MCP isError(短码如invalid_url),preview 降级仍是成功 JSON,避免模型把error.message当帖文。默认零 Cookie。 公开 hop 不读浏览器 Profile。会话库只收本机路径,未配置则不 import twscrape。
长文优先全文。 FxTwitter 打头;Syndication 不当前置阻塞。只缓存
text_status=complete(5 分钟、最多 256 条);preview / 错误不缓存。不可信输出。 正文、媒体 URL、引用与短链固定
untrusted/source_trust: untrusted_web_content。上游 JSON 已有的 quoted / reply / alt /expanded_url才映射,零额外 HTTP。媒体只给 URL,MCP 不下载。护上游。 按
post_id单飞;全链路约 12s;外部请求最多 2 个并发。可选人机出口。
x-public-post-get走同一条read_post,JSON 或 Markdown(同一套成功字段:正文、引用、链接、图/视频 URL)。
明确不做
不搜索、不时间线、不发帖;不加第二个 MCP 工具。
不在 MCP 里下载图片或视频。
不默认读浏览器 Cookie / Chrome Profile。
启用(clone 之后)
Python 3.10+。先装包装到当前环境:
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"复制 .cursor/mcp.json.example 为 .cursor/mcp.json(本机文件不进 git)。示例已指向本仓 .venv 的 Windows 解释器;macOS / Linux 把 command 改成 .venv/bin/python。若 Cursor 解析相对路径失败,再改成绝对路径,保留 args:
{
"mcpServers": {
"x-public-post": {
"command": ".venv/Scripts/python.exe",
"args": ["-m", "x_public_post.server"]
}
}
}在 Cursor Settings → MCP 启用 x-public-post(首次可能要批准)。让 Agent 调用 get_post,传入 https://x.com/.../status/...(可用 ?s=20)。尖括号包裹、markdown 链接、句末句号也可以。
读失败时不要把成功 JSON 里的字段当帖文。只有 URL 不像帖链接时才改链接再试;不要对同一 URL 连打。
可选 CLI(同一条 read_post):
.\.venv\Scripts\x-public-post-get.exe "https://x.com/author/status/123"
.\.venv\Scripts\x-public-post-get.exe "https://x.com/author/status/123" --export md何时才配会话
只有公开两跳经常失败、又要 GraphQL 补全时才配。用专用小号,按 会话配置 在本机终端写入 accounts.db。在 MCP 设置里加路径(不是 Cookie):
TWSCRAPE_DB_PATH = C:\Users\<你>\AppData\Local\x-public-post\accounts.db不要把 Cookie 贴进聊天、.env 或 git。
开发
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"
.\.venv\Scripts\python.exe -m pytest匿名适配器样例在 tests/fixtures/(preview、引用帖、404),测试不打真实 X。
文档
License:MIT。