NM

nkapila6/mcpsurfr

Developer tools

이 페이지는 AI로 자동 번역되었습니다. 기술적인 세부 사항은 원문을 확인하세요. 원문 보기

146 stars 22 forks 품질 77 트렌드 57MIT

로컬 웹 검색 MCP 서버, 이전 mcp-local-rag. 멀티 엔진 딥 연구 on-device re-ranking. ✨ API 키 없음 ✨

개요

MCP를 통해 LLM에 대한 로컬 웹 검색. API 키가 없으며 결과가 기계에 랭크됩니다. 이전 mcp-local-rag. - ddgs를 통해 검색합니다. 자동 모드는 한 번에 여러 엔진을 묻고 차단 된 것을 건너 뛸 수 있습니다. - 일반 numpy re-ranks 결과에 작은 MobileBERT 모델, 그래서 단지 최고의 페이지는 fetched 얻을. - 페이지는 브라우저 impersonation로 fetched, 그리고 주요 콘텐츠는 유지되지 않습니다: 메뉴, 쿠키 배너 또는 발자국. 코드 블록 및 테이블은 라인 유지. 두 URL의 동일한 페이지는 다시 한번 온다. - 검색은 질문에 답하는 단락을 반환, 토큰의 10에 대해. 아무것도 잘 일치 할 때, 당신은 대신 전체 페이지를 원할 수 있습니다. - 결과 목록은 이유 (블록, PDF, 중복 ...), 컷 페이지가 truncated, 및 fallbacks 및 엔진 실패가 경고로 표시됩니다. Google 블록은 종종 자동으로 돌아갑니다. - - - 그것은 기술 및 연구 신속한 역할을하므로 클라이언트가 설정없이 사용하는 방법을 선택합니다.

개요(AI 번역)

MCP를 통해 LLM에 대한 로컬 웹 검색. API 키가 없으며 결과가 기계에 랭크됩니다. [T0]].

그것에 있는 무엇:

  • ** API 키가 없습니다. ** 검색은 ddgs를 통해 이동합니다. auto 모드는 한 번에 여러 엔진을 요청하고 차단 된 것을 건너 뛸 수 있습니다.
  • ** 로컬로 순위.** 일반 numpy re-ranks 결과에 작은 MobileBERT 모델, 그래서 단지 최고의 페이지는 fetched 얻을.
  • ** 깨끗한 텍스트.** 페이지는 브라우저의 impersonation과 fetched, 그리고 주요 콘텐츠는 유지되지 않습니다: 메뉴, 쿠키 배너 또는 footers. 코드 블록 및 테이블은 라인 유지. 두 URL의 동일한 페이지는 다시 한번 온다.
  • 페이지 대신 패스워드. search]은 토큰의 10번째에 대한 질문에 답하는 단락을 반환합니다. 아무것도 잘 일치 할 때, 당신은 대신 전체 페이지를 원할 수 있습니다.
  • **이 남아있는 것. ** 결과 목록은 이유 (블록, PDF, 중복 …)를 가진 페이지를 건너 뛰고, 페이지는 truncated]를 표시하고, 가을과 엔진 실패는 warnings로 표시됩니다. Google 블록은 종종 "[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
MCP 초보자라면? mcpskill.org 가이드부터 시작하세요 →

설정

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