Skip to content
Conduit

mcp server

indie-brief

Read-only indie hacker brief API and Grok Bot template

majiayu000/indie-briefcommunitylistedunreviewed

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`)
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "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, 2026

indie-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 和私有快照条目。

↑↓ navigate openesc close