source-radar

面向外部 AI 的本地信息采集引擎,通过 MCP ServerCLI 提供网页搜索、正文提取、GitHub 检索与中文社区采集能力。

source-radar 不负责代替 AI 回答问题,而是把搜索、抓取、缓存、后端状态和失败原因转换为可追踪的信息,供 AI 继续核验和综合。

当前版本:0.2.0a1

当前能力

能力 当前实现
网页搜索 SearXNG 优先的搜索路由,失败和降级状态可见
网页正文 Trafilatura 静态抽取,必要时使用 Crawl4AI 浏览器渲染
搜索并抓取 批量搜索后抓取前若干结果正文
GitHub 搜索 原生搜索 GitHub Issue 和 Pull Request
GitHub 文件 按仓库路径或 GitHub URL 获取源码文件
中文社区采集 CLI/内部过渡路径;公共 MCP 暂不开放
后端状态 Registry、installer、lifecycle 和健康诊断
后端管理 CLI 和 MCP 均可执行 status/start/stop/install
MCP transport stdio 和 SSE
本地缓存 搜索、正文、下载、engine、browser profile 和运行状态统一管理

当前中文平台边界

中文平台目前处于混合实现状态:

B站搜索
→ source-radar BilibiliNativeBackend
→ Bilibili public search API

小红书 / 微博 / 贴吧 / 抖音 / 知乎
→ source-radar MediaCrawler bridge
→ 本地 MediaCrawler 服务
→ platform

B站当前只实现视频搜索和基础错误诊断,不包含视频详情、评论、弹幕、字幕或用户空间采集。

中文社区采集正在迁移调用边界。为避免外部 AI 依赖中间态契约,公共 MCP 的 tools/list 当前不注册 search_chinese_platforms,即使调用方猜到旧工具名也会返回 Unknown tool。CLI 和内部迁移测试暂时保留现有实现。

架构

CLI / MCP Client
        │
        ▼
source-radar
  ├─ Agent / Search Planner
  ├─ Acquisition Kernel
  ├─ Backend Registry
  ├─ Backend Lifecycle Manager
  ├─ Engine Installer
  ├─ Cache / Session / Trace
  └─ Evidence normalization
        │
        ├─ Web search providers
        ├─ Trafilatura
        ├─ Crawl4AI
        ├─ GitHub provider
        ├─ Bilibili native search
        └─ MediaCrawler service adapter

后端失败时会尽量返回结构化状态:

status
reason
message
retryable
fix
warnings
diagnostics

调用方可以据此区分未安装、未启动、缺少 Cookie、限流、超时和后端错误,而不必只依赖空结果猜测。

环境要求

  • Windows 10/11
  • Python 3.113.13
  • uv
  • Git

Crawl4AI、SearXNG 和 MediaCrawler 是可选能力,按使用场景安装。

快速开始

git clone https://github.com/Narylr350/source-radar.git
cd source-radar
uv sync --extra dev --extra mcp
.\source-radar.ps1 --help

source-radar.ps1 会固定使用项目内 .venv,并把本地配置根目录设置为:

<repo>\.source-radar\

常用 CLI

# 分析问题
.\source-radar.ps1 ask "为什么某个游戏只在特定电脑上蓝屏"

# 核验断言
.\source-radar.ps1 verify "某次更新会导致特定驱动冲突"

# 多轮研究
.\source-radar.ps1 research "调查某个软件故障的社区报告和官方说明"

# 查看环境和后端状态
.\source-radar.ps1 health
.\source-radar.ps1 engine status

# 查看初始化需求
.\source-radar.ps1 setup-plan

也可以直接使用安装后的命令:

uv run source-radar --help
uv run source-radar ask "问题"

MCP Server

当前 MCP Server 暴露 7 个公共工具。

工具 用途
web_search 网页搜索,支持 site、分页和跳过缓存
fetch_url 抽取单个网页正文,支持长文分页
search_github 搜索 GitHub Issue 和 Pull Request
fetch_github_file 获取 GitHub 仓库文件
fetch_search_results 搜索并批量抓取前若干结果正文
source_status 查看 source-radar、后端和缓存状态
manage_backend 管理当前公开的 SearXNG 安装与运行状态

stdio

直接启动:

.\source-radar.ps1 mcp

MCP 客户端配置示例:

{
  "mcpServers": {
    "source-radar": {
      "command": "powershell.exe",
      "args": [
        "-NoProfile",
        "-ExecutionPolicy",
        "Bypass",
        "-File",
        "D:\\path\\to\\source-radar\\source-radar.ps1",
        "mcp"
      ]
    }
  }
}

初次注册 MCP 时客户端仍需要知道启动脚本的位置;连接成功后,后端管理通过 manage_backend 完成,外部 AI 不需要再拼接项目内部 Python 或 uv 命令。

SSE

启动后台 SSE Server:

.\start-mcp-sse.ps1

默认地址:

http://127.0.0.1:8765/sse

指定端口:

.\start-mcp-sse.ps1 -Port 64343

对应 MCP 配置:

{
  "type": "sse",
  "url": "http://127.0.0.1:64343/sse",
  "headers": {}
}

当前实现没有 /stream Streamable HTTP endpoint。

后端自动启动

MCP 搜索可以按 lifecycle policy 尝试启动已安装的 service backend。可以通过环境变量关闭:

$env:SOURCE_RADAR_BACKEND_AUTOSTART = "0"

只关闭 SearXNG 自动启动:

$env:SOURCE_RADAR_SEARXNG_AUTOSTART = "0"

安装始终是显式操作;普通搜索不会自动下载大型组件。

Engine 管理

查看状态:

.\source-radar.ps1 engine list
.\source-radar.ps1 engine status

安装核心正文抽取能力:

.\source-radar.ps1 engine install --core

安装 Playwright 浏览器:

.\source-radar.ps1 engine install --browser

安装中文社区后端:

.\source-radar.ps1 engine install --community

安装 SearXNG:

.\source-radar.ps1 engine install --searxng

安装全部可选组件:

.\source-radar.ps1 engine install --all

启停服务后端:

.\source-radar.ps1 engine start searxng
.\source-radar.ps1 engine stop searxng

.\source-radar.ps1 engine start mediacrawler
.\source-radar.ps1 engine stop mediacrawler

查看可复用或可修复内容:

.\source-radar.ps1 engine repair
.\source-radar.ps1 engine cleanup

cleanup 当前只显示 dry-run 候选,不直接删除文件。

通过 MCP 管理

连接 MCP 后,外部 AI 可以直接调用:

manage_backend(backend="searxng", action="status")
manage_backend(backend="searxng", action="start")

install 只在调用方显式指定时执行。MediaCrawler 仍可通过 CLI 管理,但在中文社区 MCP 工具稳定前不进入公共 MCP 的 manage_backend enum。

中文平台和 Cookie

支持的当前平台 key:

平台 key 当前路径
小红书 xhs MediaCrawler bridge
微博 wb MediaCrawler bridge
B站 bili native search
贴吧 tieba MediaCrawler bridge
抖音 dy MediaCrawler bridge
知乎 zhihu MediaCrawler bridge

查看 Cookie 状态:

.\source-radar.ps1 cookie show

打开浏览器捕获指定平台登录态:

.\source-radar.ps1 cookie --platform bili
.\source-radar.ps1 cookie --platform xhs

强制重新捕获:

.\source-radar.ps1 cookie --platform wb --force

直接写入 Cookie:

.\source-radar.ps1 cookie set --platform bili --value "<cookie>"

该方式会把 Cookie 放入命令行参数;需要避免 shell history 时,优先使用浏览器捕获。Cookie 和 browser profile 保存在 .source-radar/,不会进入 Git。

B站公共视频搜索可以在没有 Cookie 时尝试,但结果和风控诊断可能受限。其他平台是否需要 Cookie 取决于 MediaCrawler 当前的平台实现和登录状态。

本地目录

所有本地下载和运行数据集中到:

.source-radar/
  config.json
  local.env
  engines/
    mediacrawler/
    searxng/
  downloads/
    wheels/
  browser-profiles/
  sessions/
  runtime/
  pids/
  logs/
  cache/
  tmp/

设计目的:

  • 下载一次,多次复用;
  • 固定源码和版本信息可诊断;
  • 网络失败后可以 repair;
  • 减少散落的 clone、wheel 和浏览器缓存;
  • 统一查看、备份和清理本地状态。

以下内容不得提交:

  • Cookie、API key 和登录态;
  • .source-radar/ runtime;
  • backend 源码 checkout;
  • browser profile;
  • pid、日志和缓存;
  • .venv/

历史 external/ 路径不参与当前安装、启动或状态判断。

AI 配置

交互式配置:

.\source-radar.ps1 config setup

查看配置:

.\source-radar.ps1 config show

测试 AI Provider:

.\source-radar.ps1 config test-ai

配置写入 .source-radar/config.json.source-radar/local.env。不要把凭据写进仓库文件。

AI 用于搜索规划、语义质量判断和综合;backend 安装、生命周期、缓存、参数校验和错误状态由确定性代码管理。

主要 CLI 命令

命令 用途
ask 收集来源并分析问题
verify 核验断言并输出证据
research 多轮规划、采集和综合
install 引导式安装与配置
uninstall 清理本地安装和状态
cache 查看或清理采集缓存
session 管理追问上下文
probe 检查单个 provider
health 查看整体健康状态
engine 安装、启停和诊断 backend
cookie 管理中文平台 Cookie
config 管理 AI 和 provider 配置
mcp 启动 stdio 或 SSE MCP Server
integrations 查看可选外部集成

以本地 CLI 帮助为准:

.\source-radar.ps1 --help
.\source-radar.ps1 engine --help
.\source-radar.ps1 mcp --help

开发

git clone https://github.com/Narylr350/source-radar.git
cd source-radar
uv sync --extra dev --extra mcp

运行 focused MCP 测试:

.venv\Scripts\python.exe -m unittest tests.test_mcp_server tests.test_mcp_stdio tests.test_mcp_autostart -v

运行 backend 和 lifecycle 测试:

.venv\Scripts\python.exe -m unittest tests.test_backend_registry tests.test_lifecycle_ensure_ready tests.test_engine_installer -v

运行全部测试:

.venv\Scripts\python.exe -m unittest discover -s tests -v

提交前检查:

git status --short --branch
git diff --check

许可证

source-radar 核心使用 Apache License 2.0

可选第三方组件保留各自的许可证和使用条件,包括 Trafilatura、Crawl4AI、Playwright、SearXNG 和 MediaCrawler。第三方源码和运行环境安装在本地 .source-radar/engines.venv,不提交到 source-radar Git 仓库。

如果需要分发包含第三方组件的完整安装包,应分别检查对应版本的许可证和分发要求;普通 clone、安装和本地运行不会改变 source-radar 仓库自身的许可证文件。