内容
# aiwatcher-mcp
<p align="center">
<a href="https://github.com/casey/just"><img src="https://img.shields.io/badge/just-ready_to_go-7c5cfc?style=flat-square&logo=just&logoColor=white" alt="Just"></a>
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff"></a>
<a href="https://python.org"><img src="https://img.shields.io/badge/Python-3.11+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python"></a>
<a href="https://biomejs.dev"><img src="https://img.shields.io/badge/Linted_with-Biome-60a5fa?style=flat-square&logo=biome&logoColor=white" alt="Biome"></a>
<a href="https://github.com/PrefectHQ/fastmcp"><img src="https://img.shields.io/badge/FastMCP-3.2-7c5cfc?style=flat-square" alt="FastMCP"></a>
</p>
> 📖 **[安装指南](INSTALL.md)** — 快速开始,手动设置,故障排除
**AI新闻提取、提炼和警报系统。**
`aiwatcher-mcp`是一个FastMCP 3.2兼容的舰队服务器,作为一个中央情报节点。它轮询10多个AI新闻源(RSS/Atom,Gmail,ArXiv和Readly),使用定制的“Sandra”角色通过Claude评估每个项目,生成用于日常消费的漂亮HTML摘要,并为突发事件触发跨舰队TTS唤醒。
## 功能
- **多源提取**:RSS/Atom源,Gmail新闻通讯(Alpha Signal),ArXiv论文,Readly杂志
- **兴趣捆绑**:每个主题的提炼(例如“Sandra的AI研究”,“机器人”,“维也纳”)带有自定义系统提示
- **Claude提炼**:每个项目根据相关性(0-10)和紧迫度(0-10)进行评分,支持多提供商(Anthropic,Ollama,LM Studio)
- **源发现**:LLM引发的源URL被探测和验证后使用;损坏的源通过备用URL探测自动修复
- **跨源去重**:标题+摘要模糊匹配(`difflib`,85%,48小时)
- **源质量衰减**:标记低信号源(30天平均紧迫度)
- **舰队事件日志**:`ingest_fleet_event`用于PR,任务,舰队活动
- **标签趋势**:`get_tag_trends` / `GET /api/trends`
- **投资组合监视**:关键词列表在提炼过程中提升紧迫度
- **摘要缓存**:TTL避免重复LLM调用(`DIGEST_CACHE_TTL_MINUTES`)
- **Prometheus**:`GET /metrics`用于舰队监控
- **Fritz集成**:办公室日常准备从aiwatcher拉取`get_top_items`
- **捆绑健康**:每个捆绑的指标 — 评分项目,平均紧迫度,顶级标签,源贡献
- **OPML导入**:从Feedly,Inoreader等导入精选源
- **跨舰队警报**:`robofang`(议会桥)+ `speechops`(TTS唤醒)用于超过紧迫度阈值的项目
- **电子邮件和Calibre存档**:通过`email-mcp`发送每日HTML摘要,通过`calibre-mcp`存档到Calibre
- **当前AI栈差距图**:`currentai`混合工具 — 从currentai-org/os-ai-map获取产品开放性/成熟度数据,存储版本快照,差异变化,标记舰队依赖风险
- **情报报告中心**:每日摘要HTML发布到共享的舰队中心(`INTEL_REPORTS_HUB_URL`,端口**11027**)用于iPad/Tailscale阅读
- **Web应用程序和预制UI**:独立的React/Vite仪表板 + FastMCP预制UI卡
## 文档
- [ARCHITECTURE.md](docs/ARCHITECTURE.md):深入了解系统流程、管道和SQLite模式。
- [API.md](docs/API.md):MCP工具/提示/资源 + HTTP REST索引(`GET /api/capabilities`获取实时工具名称)。
- [PRD.md](docs/PRD.md):产品需求和路线图。
- [ASSESSMENT.md](ASSESSMENT.md):代码评估(更新于2026-06-03)
- [TODO.md](TODO.md):行动项目和进度跟踪
- [SPEC_0.2.md](SPEC_0.2.md):v0.2实施计划
## 快速开始
```powershell
git clone https://github.com/sandraschi/aiwatcher-mcp
cd aiwatcher-mcp
just
```
这将打开一个交互式仪表板,显示所有可用的命令。运行`just install`安装依赖项,然后运行`just start`(或单独运行`just backend` / `just frontend`)。
### 手动设置
如果您没有安装`just`:
```powershell
git clone https://github.com/sandraschi/aiwatcher-mcp
cd aiwatcher-mcp
copy .env.example .env
# 编辑.env并设置ANTHROPIC_API_KEY
.\start.ps1
```
### 启动选项(`start.ps1`)
- **`-Headless`** — 在隐藏窗口中重新启动(参见脚本头部)。
- **`-BackendOnly`** — 仅Python API(无Vite);跳过前端`npm install`。
- **`-NoBrowser`** — 前端准备好时不要打开浏览器。
- **`SKIP_SYNC=1`** — 跳过`uv sync`(当另一个进程持有venv时很有用)。
`start.ps1`使用 **`uv`** 进行Python依赖项管理,并解析 **`npm.cmd`** 在 **`node.exe`** 旁边,以便安装程序与nvm/scoop样式的shims一起使用。
## 舰队配置(Claude Desktop)
```json
{
"mcpServers": {
"aiwatcher-mcp": {
"command": "uv",
"args": ["run", "python", "-m", "aiwatcher_mcp.server"],
"cwd": "C:\\path\\to\\aiwatcher-mcp"
}
}
}
```
## 关键环境变量(`.env`)
| 变量 | 默认值 | 备注 |
|---|---|---|
| `ANTHROPIC_API_KEY` | — | **必填** 用于评分 + 摘要生成 |
| `LLM_PROVIDER` | anthropic | anthropic, ollama, 或 lmstudio |
| `LLM_BASE_URL` | — | 自定义OpenAI兼容提供商的基本URL |
| `ALERT_THRESHOLD` | 8.5 | TTS唤醒的紧急程度阈值 |
| `ALERT_HOUR_UTC` | 4 | 触发晨间警报的时间(UTC) |
| `ROBOFANG_ENABLED` | true | 将突发警报推送到 `robofang` |
| `EMAIL_ENABLED` | false | 通过 `email-mcp` 将摘要发送给Sandra + Steve |
| `CALIBRE_ENABLED` | false | 将摘要存档到 `calibre-mcp` |
| `GMAIL_ENABLED` | false | 解析Gmail新闻通讯 |
| `ARXIV_ENABLED` | false | 提取最新论文(`ARXIV_MCP_URL` 默认 **10770**) |
| `READLY_ENABLED` | false | Readly(阻止上游MCP工具) |
| `AIWATCHER_API_KEY` | — | `/api/*` (豁免:健康,`/mcp`)的可选REST身份验证。当设置时,在 `ARXIV_MCP_AIWATCHER_API_KEY` 和 `VLA_AIWATCHER_API_KEY` 上镜像 |
| `VLA_MCP_ENABLED` | true | 探测 `vla-mcp` 管道活跃度(`VLA_MCP_URL` 默认 **11024**) |
| `DIGEST_CACHE_TTL_MINUTES` | 60 | 重用最近的摘要而无需LLM |
| `just seed-feeds` | — | 如果 feeds 表为空,则使用基准RSS |
## 舰队集成和端口
| 服务 | 端口 | 描述 |
|---|---|---|
| **aiwatcher 后端** | `10946` | Starlette REST + MCP HTTP 在 **`/mcp`** (`python -m aiwatcher_mcp.api`) |
| **aiwatcher 前端** | `10947` | Vite/React Web 应用程序 |
| **robofang** | `10871` | 突发事件POST到议会桥 |
| **speechops** | `10895` | TTS唤醒HTTP API |
| **email-mcp** | `10812` | 摘要传递机制 |
| **calibre-mcp** | `10720` | 摘要存档到电子书库 |
| **arxiv-mcp** | `10770` | ArXiv论文提取 + 代码狩猎舰队推送 |
| **vla-mcp** | `11024` | VLA机器人管道舰队推送 + 活跃度探测 |
| **fleet-agent-mcp** | `10996` | Fritz — 从aiwatcher调用Day Prep |
| **readly-mcp** | `10863` | 杂志文章提取(可选) |
## 测试
```powershell
just test # pytest(单元/集成)
just e2e # Playwright — 启动后端 :10946 + Vite :10947,运行webapp/e2e
```
首次e2e设置(从仓库根目录):
```powershell
uv sync
Set-Location webapp
npm install
npx playwright install chromium
npm run test:e2e
```
舰队范围的UI审计(可选,`mcp-central-docs`脚本):`just e2e-fleet-audit`.
## MCP工具
权威工具名称和计数来自运行的服务器(**`GET /api/capabilities`** → `tool_surface.atomic_tools`)。典型的内置工具包括:
| 工具 | 类别 |
|------|----------|
| `poll_feeds` | 提取 |
| `distill_pending` | 提炼 |
| `check_alerts` | 警报 |
| `generate_digest` / `send_digest_now` | 传递 |
| `get_top_items` / `search_items` | 发现 |
| `get_feeds_list` / `add_feed` / `get_feed_health` | 源 |
| `get_bundles_list` / `create_bundle_from_topic` / `link_feed_to_bundle` | 捆绑 |
| `list_fleet_bundles` / `update_fleet_bundle` | 舰队捆绑 |
| `get_bundle_health` / `find_feeds_for_topic` | 捆绑 + 发现 |
| `import_opml` | 导入 |
| `ingest_fleet_event` / `get_tag_trends` | 舰队日志 + 趋势 |
| `get_digest_history` / `expire_old_items` | 维护 |
| `scrubber_reload` | 垃圾邮件/清理 |
| `show_dashboard_card` | 预制UI(启用时) |
当设置 **`MCP_BRIDGE_URLS`** 时,可能出现额外的工具(代理远程工具)。
---
*舰队服务器 — Sandra Schipal · **aiwatcher-mcp** `0.1.6`(参见 `pyproject.toml` / `_version.py`)*