mcp server
indie-brief
Read-only indie hacker brief API and Grok Bot template
Set up
Runs on your computer. Pick your agent and operating system.
Before you start
- uv (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
{
"mcpServers": {
"indie-brief": {
"command": "uvx",
"args": [
"indie-brief"
]
}
}
}same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12
Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs
README
synced Oct 26, 2026indie-brief
indie-brief 是可自行部署的独立开发者简报 API。它把 TrendHunter 的一份快照收成讨论、产品、背景三栏,提供只读的 FastAPI 接口。Grok Bot 模板只转述这个接口返回的内容。
全站热度、HN 评论和 GitHub star 不是同一个尺度,所以按来源配额取,不把一条高分 Reddit 热帖排进「在吵什么」。
跑起来
需要 Python 3.12+、uv 和一份 TrendHunter 简报快照;仓库不附带线上数据。
git clone https://github.com/majiayu000/indie-brief.git
cd indie-brief
uv sync
uv run indie-brief key
uv run indie-brief import-dir /path/to/trendhunter/apps/crawler/data/briefs
uv run indie-brief serve
indie-brief key 把一把 ib_ 开头的 key 追加到 data/keys,这个目录不会进 Git。也可以用环境变量 INDIE_BRIEF_API_KEYS,多把 key 用逗号分隔。
没有 key 时服务拒绝启动。没有快照时 GET /v1/today 返回 404,不会用别的内容填。
curl -s -H "Authorization: Bearer ib_你的key" "http://127.0.0.1:8787/v1/today?focus=billing,付费"
默认只听 127.0.0.1:8787。要给 Grok Bot 的云电脑调用,把服务放到它能访问的地址上,再设 INDIE_BRIEF_HOST=0.0.0.0。本机的 127.0.0.1 云电脑访问不到。
容器:
docker build -t indie-brief .
docker run --rm -p 8787:8787 \
-e INDIE_BRIEF_API_KEYS=ib_你的key \
-v indie-brief-data:/data \
indie-brief
快照仍要用 import 写进这个 volume。镜像里没有 TrendHunter 的数据。
没有生产快照时先试接口
仓库的 测试样例包含虚构条目,只用于检查导入、鉴权和关键词筛选。它不代表当天新闻,也不应发成真实简报。完成上面的 uv sync 后,在仓库目录运行下面的命令。
export INDIE_BRIEF_DATA_DIR="$(mktemp -d)"
export INDIE_BRIEF_API_KEY="$(uv run indie-brief key)"
uv run indie-brief import tests/fixtures/snapshot.json
uv run indie-brief serve
这个临时目录单独保存演示 key 和快照。保持服务运行,在另一个终端读回演示 key 后发起请求。
# 把路径换成上一步生成的临时目录
export INDIE_BRIEF_DATA_DIR=/path/to/demo-directory
export INDIE_BRIEF_API_KEY="$(cat "$INDIE_BRIEF_DATA_DIR/keys")"
curl -sS --get \
-H "Authorization: Bearer $INDIE_BRIEF_API_KEY" \
--data-urlencode 'focus=billing,付费' \
http://127.0.0.1:8787/v1/today
响应包含 snapshot_id、fetched_at、三个内容列表和 source_errors。这个样例能匹配 billing 与付费,focus_matched 为 true。停止服务后可以删除演示临时目录,再换真实快照与自己的 key。
在 Grok Bot 里用
新建一个 Bot,把 Bot 模板的正文交给它。第一次运行时它会问 API 地址和 key,并写到自己电脑上的 /workspace/indie-brief.env。例行任务默认关着,要你同意并给时区才每天跑。
本机 Grok Build 可以装插件。先让命令出现在 PATH 上:
uv tool install --editable .
环境变量要有 INDIE_BRIEF_API_URL 和 INDIE_BRIEF_API_KEY。插件目录是 plugin/,使用说明在 indie-brief 技能。
官方模板市场是策展上架,这个仓库不会自动出现在那里。收费目前就是你自己发 key。这里没有支付页面。
接口
GET /health 不需要 key。
GET /v1/today?focus=词1,词2 需要 Authorization: Bearer <key>。
返回的 arguments、products、context 都来自已导入的快照。focus 对不上时三个列表是空的,focus_matched 为 false,同时仍返回 source_errors。
最新快照按完整的 fetched_at 比较。snapshot_id 按 UTC 秒生成;同一秒导入多份快照时,
保留 fetched_at 较新的一份,时间完全相同时保留最后导入的一份。导入函数返回实际保留的
快照;import-dir 输出的数量是处理的文件数,不是新增的快照编号数。
请求失败时先查什么
/health返回正常只说明进程存活。简报时间看/v1/today的fetched_at,上游采集问题看source_errors。- 401 表示 Bearer key 缺失或不匹配。检查客户端发送的 key 与服务使用的临时目录或
INDIE_BRIEF_API_KEYS是否一致。 - 404 表示服务的数据目录里还没有可读取的快照。先在同一个
INDIE_BRIEF_DATA_DIR下运行import,再查询接口。 focus_matched为 false 时,改用样例已包含的关键词,或不传focus查看完整三栏。接口不会为没有匹配的关键词编出内容。
版本、许可和反馈
源码包版本见 pyproject.toml,使用 MIT 许可证。安装入口是上面的源码步骤。Bot 模板与本机插件的入口见在 Grok Bot 里用。
问题反馈提交到 GitHub issues,附上运行命令、状态码和脱敏后的错误内容。请保留快照时间,移除 key 和私有快照条目。