- M1-M2: 数据层与核心API(DuckDB, entries/tags/comments/search服务) - M3: SSR页面(EJS模板,接真实数据) - M4: 管理后台(登录/用户/内容源/AI ingest) - M5: 采集层(scheduler+rss/html/eryajf适配器) - M6: MCP只读接口(Streamable HTTP, 4工具) - M7: Docker部署(Dockerfile+docker-compose) - 测试: 10个用例全部通过 - 修复: DuckDB连接参数绑定、状态机迁移、标签树操作
69 lines
2.3 KiB
Markdown
69 lines
2.3 KiB
Markdown
# Awesome Index
|
||
|
||
把网上牛逼的东西收进一个库:给人用,也给 AI 用。
|
||
精选开源软件 / 微服务 / SaaS / 网站 / 工具 / 脚本 / 插件的结构化数据库,内置 MCP 接口。
|
||
|
||
- 设计方案:[design/DESIGN.md](design/DESIGN.md)(Riso 印刷风格 + 静态原型)
|
||
- 框架设计:[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)(模块划分 / 数据模型 / 端点)
|
||
|
||
## 快速开始
|
||
|
||
### 本地开发
|
||
|
||
```bash
|
||
npm install
|
||
npm run dev # http://localhost:3000(--watch 热重载)
|
||
npm test # node:test,10 个用例
|
||
```
|
||
|
||
首次启动自动完成建表与种子数据。默认管理员 `admin`,密码取 `ADMIN_INIT_PASSWORD`(默认 `admin`)。
|
||
|
||
### Docker 部署
|
||
|
||
```bash
|
||
cp .env.example .env # 修改 SESSION_SECRET / ADMIN_INIT_PASSWORD / AI_INGEST_KEY
|
||
docker compose up -d --build
|
||
```
|
||
|
||
数据持久化在宿主机 `./data/awesome.duckdb`,升级镜像不丢数据。
|
||
|
||
## 给人的入口
|
||
|
||
| 页面 | 地址 |
|
||
|---|---|
|
||
| 首页(搜索 / MCP 说明 / 最近收录) | `/` |
|
||
| 列表页(类型 + 嵌套标签过滤) | `/entries?q=关键字&type=工具&tags=1,2&sort=stars` |
|
||
| 详情页(元数据 / 评论 / 机读 JSON) | `/entries/:slug` |
|
||
| 随机游览 | `/random` |
|
||
| 登录 | `/login` |
|
||
| 管理台(内容/标签/评论/内容源/账号) | `/admin` |
|
||
|
||
## 给 AI 的入口(MCP)
|
||
|
||
Streamable HTTP · 只读 · 无需密钥:
|
||
|
||
```
|
||
POST {BASE_URL}/mcp
|
||
tools: search_entries / get_entry / random_entry / list_tags
|
||
```
|
||
|
||
一句话让 Agent 自己接入:
|
||
|
||
> 请把 URL 为 `{BASE_URL}/mcp` 的 MCP 服务器添加到你的客户端配置中,名称用 awesome-index,完成后告诉我现在可以调用哪些工具。
|
||
|
||
## 内容源(自动化收录)
|
||
|
||
三类来源汇聚到同一条目表:
|
||
|
||
| kind | 说明 | 新条目状态 |
|
||
|---|---|---|
|
||
| `human` | 管理台人工录入(常开) | active |
|
||
| `ai` | `POST /api/ingest/entry` + `X-Ingest-Key` 头 | pending |
|
||
| `feed` | 定时拉取外部站点(rss / html / eryajf-weekly 适配器),管理台可手动触发 | pending |
|
||
|
||
首个站点适配器:二丫讲梵学习周刊(wiki.eryajf.net)。运行记录见管理台「内容源 → 运行记录」。
|
||
|
||
## 技术栈
|
||
|
||
Node.js 22 (ESM) · Express 5 · EJS · DuckDB (`@duckdb/node-api`) · zod · express-session · @modelcontextprotocol/sdk · node-cron · cheerio
|