Self-hosted, MCP-native web-search backend for AI agents: SearXNG meta-search + RAG with citations + GitHub project selection + Tavily-compatible API.
Agent Search has 9 tools with detailed descriptions (avg 250+ chars, well above 194-char baseline) and comprehensive parameter documentation. However, critical gaps exist: NO explicit input schemas visible in source code (only docstring-level descriptions), NO output schemas documented, NO error handling guidance, and NO tool annotations. Descriptions are verbose and helpful for humans but lack LLM-optimized structure. Tools are well-named (verb_noun pattern) and composition is sound, but schema formalization and error recovery patterns are missing.
通用方案对比:把任意候选(开源库/SaaS/云服务/框架)拉齐成对比矩阵,每格带来源可追溯。 做"选型/对比"时用:给一组 candidates(或一个 topic 让它发现候选),按维度拉齐成矩阵。 GitHub 仓库候选会自动取一手事实(license/最新 release/维护活跃度/OpenSSF 健康分, confidence=official); 非 GitHub 方案走官方页抽取(定价/版本/许可等规则抽取, confidence=secondary)。每格带 source_url+excerpt。 与 github_compare 的区别:纯 GitHub 仓库且只要健康分用 github_compare(更快); 含非 GitHub / 要定价 / 要适用场景用本工具(更全, 字段级引用)。结论由你/用户判断,本工具只给证据。
技术选型对比:拉齐多个 GitHub 项目的一手事实 + 成熟度信号,给证据但不下结论。 专为"对比选型"设计:用 GitHub API(一手字节)+ OpenSSF Scorecard(经 deps.dev 免费 API) 取每个候选的 star/fork/license/最近提交/最新 release/open issues/是否归档 + 健康分, 并给出事实性标记(已归档 / 近 N 天无提交 / 无 release / copyleft 许可证)。 比看网页"best/top 10"软文可靠得多(规避 star 虚高与 SEO 污染)。结论由你/用户判断,本工具不替你拍板。
在 GitHub 上搜索仓库/代码/issue/PR(优先 gh CLI,失败时走 GitHub API,比网页搜索精准)。 查开源项目、找代码用法、查 issue/PR 时调用本工具,优先于 web_search。 评估某个开源项目是否值得采用时(prior-art-first / 缝合优于从零造): repos 结果已附带 license / pushedAt(最近提交) / isArchived(是否归档) / forksCount, 请综合"维护活跃度(最近是否有提交、是否归档)+ license(规避 GPL/AGPL 这类强限制)+ star" 一起判断,优先成熟且活跃的项目,不要只看 star 数。
检查 Agent Search 全链路状态。 返回 SearXNG、默认搜索引擎、FlareSolverr、DeepSeek 配置、缓存统计; 默认会做一次轻量搜索测试,但不会真实调用 DeepSeek。需要确认 DeepSeek API 可用时,把 test_deepseek 设为 true,会产生一次极小 token 消耗。
联网搜索 + DeepSeek 总结,返回带引用来源的答案(RAG)。 需要对一个问题给出综合性、有出处的结论时调用。注意本工具较重(会并行抓多个网页正文 + 调用 LLM, 慢且有成本):只想拿链接/摘要/清单,或自己读原文,请用更轻的 web_search;需要"综合多源给结论 + 引用"才用 web_ask。
No input schemas visible in source code. Tool definitions use @mcp.tool() decorator with Python type hints in function signatures, but no explicit JSON Schema registration. Cannot verify parameter types, constraints, or enums at MCP protocol level.
No output schemas documented. Tools return dicts/lists but no structured schema is declared. LLMs cannot plan downstream tool calls or validate response structure. E.g., web_search returns list of dicts with 'title/url/snippet/rank_score' but this is not formally specified.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
递归深抓:从一个 URL 出发沿链接抓到 2~6 级正文(web_map 只发现单层链接, 这个会抓正文)。 需要把一个文档站/方案站"顺着链接抓深"——抓到二三四五六级子页正文——时用本工具。 建议先用 web_map 看站点结构, 再用 web_crawl 深抓需要的子树。装了 crawl4ai 走其深抓策略, 没装则纯 Python BFS 兜底(都带 SSRF 防护与预算护栏, 不会无限抓)。
发现站点链接,用于先了解站点结构,再决定抓哪些页面。
深度研究:规划大纲→并发扇出检索→抓正文取证→分章综合,产出带 [n] 引用的 Markdown 调研报告。 需要"一篇分章节、带引用、可直接交付的调研报告"时调用(技术选型调研、领域综述、竞品分析等)。 这是本服务最重的工具(多路搜索 + 抓十余页正文 + 章节数+2 次 LLM 调用,约 1~3 分钟): 只要链接用 web_search;一个问题要一段结论用 web_ask;要整篇报告才用本工具。 返回的 report 字段是完整 Markdown 报告(标题/分章正文/结论与建议/参考来源), sources 里每条带全局编号+excerpt 证据,与正文 [n] 引用一一对应。 自带一轮"缺口反思":综合后自动审稿,对证据不足的章节换角度补搜并重写。 图表:数值/占比/趋势数据用 vega-lite 画**矢量图**(装了 vl-convert-python 会直接渲染成 内联 SVG,否则保留 spec 交消费端渲染);流程/架构/时间线用 mermaid。两类图数据均来自来源。
联网搜索,返回结果列表(标题/URL/摘要)。 需要实时信息、新闻、技术文档、查资料时调用本工具,而不是凭记忆回答。 注意:本服务底座是本地 SearXNG,偏中文/国内索引;查国际/英文权威源 (stackoverflow、owasp.org、reuters、英文官方文档、GitHub discussions 等)时覆盖较弱, 建议同时并行调用宿主自带的联网搜索(如 Claude 的 WebSearch/WebFetch、Codex 内置搜索)交叉补全。
No error handling guidance. Tools return errors (e.g., 'error' field in web_ask response) but do not classify as retryable/user-fixable/fatal or provide recovery steps. LLMs cannot determine next action on failure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not formally declared. Agents cannot infer safety properties without explicit annotations.
web_map description is minimal (60 chars). 'Discover site links, use to understand site structure before deciding which pages to crawl.' lacks context on when to call vs web_crawl, expected output structure, or performance characteristics.