AI代理搜索:不用API Key,结果本地重排
给AI代理加搜索,通常意味着接API key。mcpsurfr不用:多引擎查询、本地重排,只返回相关段落。开源。
给AI代理配上网络搜索,通常意味着接第三方搜索API:付钱、申请密钥、调参数。mcpsurfr换了个路子:搜索请求直接发给多个引擎,结果在本地重排。它是个本地运行的MCP服务器(Model Context Protocol,AI模型通过它连接外部工具和数据),把相关网页内容送进LLM的上下文。
流程看图:
LLM发起查询,ddgs在auto模式下同时问几个搜索引擎,跳过被屏蔽的;MobileBERT在NumPy上做本地重排;然后抓取排名靠前的页面,保留正文。
返回结果分两步:Tier 1根据摘要选页面,Tier 2把页面切成段落做BM25关键词匹配,只返回相关段落和来源URL,大约800 token。匹配太少或太多时,进入Tier 3按语义把段落排序。
几个关键特性:
- 无API key。用ddgs库,auto模式多引擎查询,自动跳过被屏蔽的。
- 本地重排。一个小MobileBERT模型跑在纯NumPy上,只抓最好的页面。
- 干净正文。浏览器模拟抓取,去菜单、Cookie横幅、页脚。代码块和表格保留,同一页面不同URL只返回一次。
- 段落级返回。search返回回答问题的段落,token大概是整页的十分之一。没有好匹配时会问你要不要全文。
- 会报告遗漏。跳过的页面说明原因(被屏蔽、PDF、重复),截断的页面标记truncated,回退和引擎故障显示warnings。Google经常被屏蔽,会自动回退到auto。
- 自带技能。服务器提供skill和research prompt,客户端不用配置就知道怎么用。
工具分这么几个:
| 工具 | 用途 |
|---|---|
| search | 入口,只返回相关段落,传keywords效果更好 |
| rag_search_ddgs | 整页文本,原始模式 |
| rag_search_google | 走Google,被屏蔽时退回auto |
| deep_research | 多个搜索词跨后端查询,合并去重 |
| deep_research_ddgs / deep_research_google | deep_research的快捷方式 |
后端支持auto(默认)、brave、duckduckgo、google、grokipedia、mojeek、startpage、wikipedia、yahoo。auto和brave最靠谱。
安装用uv:
{
"mcpServers": {
"mcpsurfr": {
"command": "uvx",
"args": ["--from", "git+https://github.com/nkapila6/mcpsurfr", "mcpsurfr"]
}
}
}
或者Docker(支持amd64和arm64):
{
"mcpServers": {
"mcpsurfr": {
"command": "docker",
"args": ["run", "--rm", "-i", "--init", "ghcr.io/nkapila6/mcpsurfr:latest"]
}
}
}
整页工具每次调用有40k字符预算(约10k token),想改大小,在服务器配置里加环境变量MCPSURFR_MAX_CHARS,例如80000。在Claude Desktop、Claude Code、Cursor和Goose上测过。
项目是从mcp-local-rag改名来的,老配置还能用,旧命令也保留了。
效果示例:在Claude Desktop里问一个训练数据之后的事情。


有网友看了之后说,本地重排能省不少无效请求,“是明智的设计”。也有人关心会不会在两次运行之间缓存页面。项目没有提到缓存。
项目MIT开源,经过MseeP安全审计,欢迎提Issue和PR。GitHub地址:https://github.com/nkapila6/mcpsurfr 。作者是Dan Kornas,他也写AI相关的newsletter,免费订阅:https://dankornas.substack.com
发布时间: 2026-10-27 01:17