NM

nkapila6/mcpsurfr

开发工具

本页由 AI 翻译,技术细节请以原文为准。 查看原文

146 stars 22 forks 质量 77 趋势 57MIT

本地网络搜索 MCP 服务器,原为 mcp-local-rag. 多引擎深度研究 与device重排. 没有 API 密钥 QQ

概览

通过 MCP 本地网络搜索您的 LLM 。 没有 API 密钥,结果在您的机器上排名 。 原为mcp-local-rag. 中国植物物种信息数据库. - 搜索通过ddgs。 它的汽车模式一次问几个引擎,然后跳过被屏蔽的引擎. - 一个小的移动BERT模型 在平平数字重排结果, 所以只有最好的页面被获取。 - 页面以浏览器冒充来取,只保留主要内容:没有菜单,饼干横幅或页脚. 代码块和表格保持他们的行。 两个URL下的同一页回回了一次. - 搜索只返回回答问题的段落, 大约十分之一的符号。 当没有匹配时,它可以问你是否想要完整页面。 - 结果列表以一个原因跳过页面(被锁定、PDF、重复...),剪接的页面被标记为截取,倒计时和引擎故障显示为警告。 谷歌时常被打出块来,因此它会自己掉回自動. - 说吧 它服务于一种技巧和研究的快活,所以客户在不设档的情况下接取如何使用.

概述(AI 翻译)

通过 MCP 本地网络搜索您的 LLM 。 没有 API 密钥,结果在您的机器上排名 。 原[T0].

里面写着:

-** 无 API 密钥。** 搜索通过ddgs。 它的 auto 模式同时询问多台引擎并跳过被屏蔽的引擎.

  • ** 在当地注册。 ** 平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平平
  • ** 全文。 ** 页面被以浏览器冒充来取取,只保留了主要内容:没有菜单,饼干横幅或页脚. 代码块和表格保持他们的行。 两个URL下的同一页回回了一次.
  • ** Passages 而不是页。** search只返回回答问题的段落,大约是信使的十分之一。 当没有匹配时,它可以问你是否想要完整页面。
  • 说它漏掉了什么。 结果列表跳出有原因的页面(被锁定,PDF,重复.),被剪切的页面被标记为 truncated,而倒计时和引擎故障出现为 warnings. 谷歌的块经常出现,所以它会自己回归到[T5].
  • ** 提供自己的指南。 ** 它服务于一种技能和research的快取,因此客户可以不设档地捡起如何使用.

用它来做

本页由 AI 翻译,技术细节请以原文为准。

README

以下为原文 README 节选,完整内容请查看原文。

Local web search for your LLM over MCP. No API keys, and results are ranked on your machine. Formerly mcp-local-rag.

%%{init: {'theme': 'base'}}%%
flowchart TD
    A[LLM] -->|query| S["Search with ddgs (auto: several engines, no keys)"]
    S -->|"rag_search, deep_research"| R["Re-rank results locally (MobileBERT on numpy)"]
    R --> P[Fetch top pages, keep the main content]
    P -->|page text + URLs| A
    S -->|search| T1["Tier 1: pick pages by their snippets"]
    T1 --> T2["Tier 2: split into passages, keyword match (BM25)"]
    T2 -->|few hits| OUT["Best passages + URLs (about 800 tokens)"]
    T2 -->|too many or none| T3[Tier 3: rank them by meaning]
    T3 --> OUT
    OUT --> A

What’s in it:

  • No API keys. Searches go through ddgs. Its auto mode asks several engines at once and skips blocked ones.
  • Ranked locally. A small MobileBERT model on plain numpy re-ranks results, so only the best pages get fetched.
  • Clean text. Pages are fetched with browser impersonation, and only the main content is kept: no menus, cookie banners or footers. Code blocks and tables keep their lines. The same page under two URLs comes back once.
  • Passages instead of pages. search returns just the paragraphs that answer the question, about a tenth of the tokens. When nothing matches well, it can ask you whether you want the full pages instead.
  • Says what it left out. Results list skipped pages with a reason (blocked, PDF, duplicate…), cut pages are marked truncated, and fallbacks and engine failures show up as warnings. Google blocks often, so it falls back to auto on its own.
  • Brings its own guide. It serves a skill and a research prompt, so clients pick up how to use it without setup.
Tool Use it for
search Start here: returns only the relevant passages. Pass keywords for better hits
rag_search_ddgs Full pages as text (the original mode)
rag_search_google Same, via Google (falls back to auto when blocked)
deep_research Several search terms across backends, merged and de-duplicated
deep_research_ddgs / deep_research_google deep_research shortcuts

Backends: auto (default), brave, duckduckgo, google, grokipedia, mojeek, startpage, wikipedia, yahoo. auto and brave are the dependable ones.

在 GitHub 查看完整 README

安装

uvx --from git+https://github.com/nkapila6/mcpsurfr mcpsurfr
新手?先看 mcpskill.org 教程 →

配置

{ "mcpServers": { "mcpsurfr": { "command": "uvx", "args": ["--from", "git+https://github.com/nkapila6/mcpsurfr", "mcpsurfr"] } } }