内容
# Kie
[](https://github.com/aryangv/kie/actions/workflows/ci.yml)
[](LICENSE)
[](https://modelcontextprotocol.io)
一个流行的开发工具雷达,作为 **MCP 服务器** 在 Claude Code 和 Cursor 中运行。
它监听开发者讨论的动态 — **Hacker News、Reddit、Lobsters、GitHub 和 X/Twitter** — 找到 trending 的仓库和工具,评估其受欢迎程度(0-100),并根据 **您自己的技术栈的动态、推断配置文件** 进行评估:
- **↔ "您已经在使用"** — 它与您已经使用的工具重叠。
- **✓ "可能是一个有用的补充"** — 它填补了一个空白;提供安装说明。
- **✗ "不适合您"** — 错误的生态系统。
## 工作原理
```
来源(HN/Reddit/Lobsters/GitHub/X)→ 提取仓库引用 → 通过 GitHub API 丰富 →
评分(速度 · 广度 · 最近 · 参与度 · 已建立)→ 排名
配置文件:扫描代码清单 + 安装/拒绝决定 → 类别映射 → 推断:
根据最近一次触摸每个仓库的时间进行权重分配,按共现方式对未知尾部进行分类,
将类别汇总为开发者原型,学习接受/拒绝亲和力(主机模型填充其余部分通过 profile_infer)
适配:工具类别 vs 配置文件类别 → 替换 | 补充 | 无关
```
**Trending 与已建立。** 评分是五信号复合 - 动力(衡量窗口内的星级增量),广度跨来源,最近,参与度和 **已建立价值**
(日志缩放绝对星级,如果仓库看起来不维护,则阻尼)。`whats_trending` 从同一个评分器服务两个问题:
`sort='trending'` (默认)是动力引导 - 现在什么热门;
`sort='established'` 是价值引导,**删除“本周提及”门槛** ,
按已证明的,仍然维护的采用率对 Kie 见过的所有仓库进行排名。
因此,一个旧的,真正有用的库,如果其星级增长停滞,
也不会因为它没有激增而变得不可见。
所有内容都缓存在本地 SQLite 数据库(`~/.kie/kie.db`)中。刷新是 **非阻塞的**:
工具调用立即提供缓存数据,如果数据已过时,则会触发后台重新收集,
以便下一次调用看到更新的数据 - 没有 30 秒到 2 分钟的挂起(单个飞行守卫防止重复通过;
首次运行时会返回一个简短的“warming up”消息)。丰富是并行的,
如果仓库在过去 24 小时内没有刷新,则跳过它们。您的 **配置文件自我维护** -
在首次使用时扫描,扫描一次后,如果配置文件超过 24 小时未更新,则重新扫描,
因此它在您不运行任何操作的情况下保持最新。`setup` / `profile_update`
强制扫描,`refresh_now` 强制(阻塞)按需收集。
配置文件是 **基于推断的** ,而不仅仅是一个扁平的依赖项列表。
每个依赖项都 **按最近权重分配** (您昨天触摸的项目优先于您几个月前未打开的项目),
依赖项分类不识别的依赖项 **从其所属公司推断** (始终与 React + Vite 一起使用的软件包
被视为前端工具),而不是被删除,您的类别汇总为 **开发者原型** (看起来像:
后端, 前端, AI-ML), 每个接受/拒绝都教导一个按类别/语言的亲和力,
影响后续适配判决。推断结果的置信度低于观察到的依赖项,
因此它们丰富了画面,而不会错误地将工具标记为您已经使用的工具。
任何仍未分类的内容都会被显示(从不丢弃)给 `profile_infer`,
以便由主机模型处理 - 参见下文。
**安全性:** 第三方仓库的 README 摘录和讨论标题会以显式的 `UNTRUSTED CONTENT` 边界返回给代理,
以防止来自恶意 README 的提示注入。
## MCP 工具
| 工具 | 功能 |
|------|--------------|
| `setup` | 首次运行初始化:扫描代码,然后推荐广泛有用的 starter 工具来填补空白 |
| `whats_trending` | 排名仓库与评分 + 适配标签(按窗口/语言过滤)。 `sort='trending'` (默认)按动力排名; `sort='established'` 按已证明的,仍然维护的价值排名 - 展现更旧的有用仓库,这些仓库没有激增 |
| `tool_details` | 完整的元数据,评分明细,README 摘录和仓库提及位置 |
| `whats_new` | 主动摘要:自您上次检查以来发现的仓库,适合您的技术栈(推进“上次查看”标记; `peek=true` 查看而不推进) |
| `should_i_use` | 任何仓库的适配判决(按需获取)+ 安装计划 + 原始上下文(README,讨论标题) |
| `recommend_extensions` | 推荐添加到您的 *代理* 环境的内容 - Claude Code 技能,MCP 服务器,子代理(带有现成提示)和有价值的 SaaS - 与您的技术栈匹配 |
| `recommend_for_goal` | 用自然语言陈述目标(“减少我的令牌使用量”)并获取选项 - 内置功能,精选工具和实时社区工具 - 每个都有优点,缺点和实现方法 |
| `profile_get` / `profile_update` | 查看/重新扫描/编辑您的动态技术栈配置文件(现在显示推断的角色 + 未分类的尾部) |
| `profile_infer` | 将依赖项分类交给主机模型,以分类,然后通过 `profile_update { setCategories }` 持久化 - 无密钥语义分类 |
| `record_decision` | 标记工具已接受 / 已拒绝 / 已安装 |
| `install_tool` | 精确的安装命令,根据生态系统量身定制;代理仅在您确认后运行它们 |
| `refresh_now` | 强制收集 + 丰富通过 |
`should_i_use` 和 `tool_details` 不仅返回判决,还返回原始材料 - 仓库的 README 摘录和实际讨论标题,
以便主机代理(Claude)可以推理关于情绪和细微差别,而这些并不是关键字启发式所能捕捉到的。
### 推荐代理扩展
`recommend_extensions` 侦察您的 *代理* 环境中要添加的内容 - Claude Code **技能**,**MCP 服务器**,**子代理** 和有价值的 **SaaS** - 与您的技术栈配置文件匹配并跳过您已经拥有的内容。
它将精选目录与实时 GitHub 发现相结合:
- **子代理** 是亮点:Kie 不仅指向仓库,还深入研究最受欢迎的社区子代理集合,
拉出带有实际 **现成提示** 的单个子代理(作为不受信任的内容围栏),
并链接源仓库。受欢迎程度很重要 - 最热门的社区子代理被推广给 **所有人**,
而与技术栈匹配的子代理排名更高。
- **排名结合 GitHub 星级和讨论热度** - 在 HN/Reddit 上被讨论的仓库(从 Kie 已经收集的提及)
排名高于同等星级的安静仓库,并显示 `💬 在...上讨论` 注释。
- 发现的项目被标记为 `⚠ 发现 - 验证` 并限制数量,以免精选内容被埋没。
### 基于目标的推荐
`recommend_extensions` 匹配您的 *技术栈*,而 **`recommend_for_goal`** 匹配一个 **陈述的目标**。
说出您要实现的目标 - *“我想减少我的令牌使用量”* - Kie 返回一组 **排名的选项**,
每个选项都有 **优点,缺点和实现方法**:
- **精选,手审选项** - 内置 Claude Code 功能(子代理,`/compact`,技能,修剪 `CLAUDE.md`)
和已知工具,按最少努力排序。
- **实时社区工具** - 一个发现通道在 GitHub 上搜索匹配目标的工具,并将 GitHub 星级,
**讨论信号** Kie 已经收集,以及 **“看起来不维护”** 标志(来自仓库的最后推送),
所有这些都标记为 `⚠ 社区 - 验证`。
它保持无密钥:目标→攻略是确定性关键字匹配,当没有匹配时,
Kie 将已知目标的菜单返回给主机模型进行推理(与 `profile_infer` 相同的模式
`should_i_use` 使用原始 README)。
## 安装
```bash
npm install
npm run build
```
### 配置(环境变量)
设置这些的最简单方法是项目根目录中的 `.env` 文件 - 复制模板并填写:
```bash
cp .env.example .env
```
Kie 在启动时自动加载 `.env` (Node 的内置解析器,无依赖项;
可以通过 `KIE_ENV_FILE` 覆盖位置)。 `.env` 被 git 忽略。
您也可以将任何这些设置为实际环境变量或在您的 IDE 的 MCP `env` 块中。
| 变量 | 用途 | 默认值 |
|-----|---------|---------|
| `REDDIT_CLIENT_ID` / `REDDIT_CLIENT_SECRET` | 免费 Reddit “脚本”应用 - 启用 Reddit 源 | (如果未设置,则禁用 Reddit) |
| `X_BEARER_TOKEN` (或 `TWITTER_BEARER_TOKEN`) | 您的 X API v2 承载令牌 - 启用 X/Twitter 源 | (如果未设置,则禁用 X) |
| `X_SEARCH_QUERY` | 覆盖 X 最近搜索查询 | 开发工具查询 |
| `LOBSTERS_FEEDS` | 要合并的 Lobsters 源列表(例如 `hottest,newest,t/rust`) | `hottest,newest` |
| `KIE_REDDIT_MAX_PAGES` | 每个子版块的 `/hot` 页面数(仅限 Reddit 已启用) | `3` |
| `KIE_X_MAX_PAGES` | 每个刷新最近搜索页数(每个页面都是 **付费** X 配额) | `2` |
| `GITHUB_TOKEN` | 提高 GitHub API 限制 60→5000/小时 | (未经身份验证) |
| `KIE_CODE_ROOTS` | 要扫描的目录,以 `;`/`,`-` 分隔 | `~/code` |
| `KIE_DB` | SQLite 路径 | `~/.kie/kie.db` |
| `KIE_MAX_CACHE_AGE_HOURS` | 延迟刷新 TTL | `6` |
| `KIE_HN_MAX_PAGES` | Hacker News 查询的最大 Algolia 页面数(故事 + 评论) | `3` |
| `KIE_ENRICH_CAP` | 每个刷新最大富集仓库数 | `45` 匿名 / `200` 有令牌 |
| `KIE_ENRICH_FRESH_HOURS` | 跳过重新富集更新的仓库 | `24` |
| `KIE_BUSY_TIMEOUT_MS` | SQLite 并发写入器的 busy_timeout | `5000` |
所有凭证都是 **自带** 且可选的 - 没有它们,源会优雅地降级(Reddit 和 X 禁用自身;
GitHub 使用较低的匿名速率限制)。没有任何内容被捆绑或共享:
每个用户提供自己的密钥,这些密钥保留在他们的机器上。
> **X/Twitter 注意:** v2 最近搜索端点在 X 的付费 API 层级后面。
> 集成适用于任何提供 `/2/tweets/search/recent` 的层级;
> 在不提供此功能的层级上,调用简单地失败,源不会影响其他源。
### 在 Claude Code 中注册
使用 `npx` (无需克隆/构建)最简单的路径是:
```bash
claude mcp add kie -- npx -y kie-radar
# 使用凭证:
claude mcp add kie \
-e GITHUB_TOKEN=ghp_xxx -e REDDIT_CLIENT_ID=xxx -e REDDIT_CLIENT_SECRET=xxx \
-- npx -y kie-radar
```
或指向本地构建而不是 `npx`:
```bash
claude mcp add kie -- node /绝对路径/to/kie/dist/mcp/server.js
```
### 在 Cursor 中注册(`.cursor/mcp.json`)
```json
{
"mcpServers": {
"kie": {
"command": "npx",
"args": ["-y", "kie-radar"],
"env": { "GITHUB_TOKEN": "ghp_xxx" }
}
}
}
```
## 开发
```bash
npm run build # tsc -> dist/
npm test # node --test (单元测试 + 集成测试,无网络)
npm run inspector # 构建 + 打开 MCP 检查器以实时调用工具
```
## “有什么新” - 主动摘要
有两种方法可以获得 *"这里有什么新"* 更新,因为 MCP 服务器仅在 IDE 会话打开时运行,
无法自行推送消息:
1. **在会话中:** 随时询问 `whats_new`。它会返回自您的上次检查以来发现的适合您技术栈的仓库,
并推进“上次查看”标记,以便下一次调用仅显示更新的项目。
2. **在后台:** 运行 **守护进程** 以保持缓存温暖并保持摘要文件最新,
即使 IDE 关闭:
```bash
npm run daemon # 或:npx -y -p kie-radar kie-radar-daemon
```
它按照间隔刷新(`KIE_DIGEST_INTERVAL_MIN`,默认为 360 = 6 小时),
并写入 `~/.kie/digest.md` (使用 `KIE_DIGEST_PATH` 覆盖)。
将其设置为开机启动,使用 Windows 任务调度器(“登录时”),
launchd/systemd 单元或 `pm2`。守护进程保留自己的水印,
独立于会话 `whats_new` 标记。
## 路线图
- 继续扩展关键词分类法,以便更少的仓库以“未分类”结尾 -
Kie 通过设计保持无密钥和确定性(循环中没有 LLM API)。
未分类的尾部已经通过三种方式缩小:确定性种子列表,
配置文件 **共现推断**,以及对于其余部分 - `profile_infer`,
它将剩余部分交给主机 IDE 模型进行分类(与 `should_i_use` 在原始 README 上使用的相同主机模型推理层模式)。
- npm:作为 [`kie-radar`](https://www.npmjs.com/package/kie-radar) 打包,提供一命令安装(`npx -y kie-radar`)。
## 许可证
[MIT](LICENSE) © Venkata Aryan Gaddala