Skip to main content
Glama

search-boost-mcp

코딩 에이전트를 위한 다중 엔진 웹 검색 MCP 서버입니다. 하나의 CLI 설치로 Cursor, Cursor CLI, Codex, Claude Code, Grok Build, Antigravity에 연결됩니다.

search-boost 제품군

프로젝트

용도

링크

search-boost (이 저장소)

Cursor · Codex · Claude · Grok · Antigravity via MCP

현재 위치

dsh-search-boost

DeepSeek Harness 번들 플러그인

GitHub · npm

pi-search-boost

pi 확장

GitHub · npm

검색 엔진은 lib/search/에 벤더링되어 있습니다(원래 dsh-search-boost에서 가져옴). 무료 계층에서는 Bing, DuckDuckGo, Yahoo, Exa-free가 병렬로 실행됩니다. api 계층은 Antigravity CLI(사용 가능한 경우)와 구성한 키가 있는 Tavily / Brave / Exa 엔진(하나의 키로 충분하지만 최상의 융합을 위해 세 가지 모두 권장)을 추가합니다. 또한 X/Twitter 폴백, Jina 페이지 가져오기, 심층 연구 라운드가 포함됩니다.

中文文档 → README_zh.md

v0.1.4의 새로운 기능

  • 단일 엔진 api 계층 — api 계층은 구성하거나 활성화한 tavily/brave/exa 중 하나를 사용합니다. 세 가지 키가 모두 필요하지 않습니다.

  • 엔진별 라우팅 — ~/.search-boost-keys.json에서 선택적 enabledEngines 또는 엔진별 enabled: false.

  • 부분 키 메시징 — doctor, status, keys 마법사 및 fused_search에서 세 개의 키 엔진 중 활성화된 것이 적을 때 경고하고 세 가지 모두 구성할 것을 권장합니다.

v0.1.2의 새로운 기능

  • lib/search/의 자체 포함 엔진 풀: 일반 검색용 Bing + DuckDuckGo + Yahoo + Exa-free; 동일한 풀이 site: 쿼리로 x_search 폴백을 지원합니다.

  • x_search 폴백은 다중 엔진 도메인 검색을 위해 자동으로 site:x.com을 앞에 추가하므로 XAI 자격 증명 없이도 키워드 모드가 작동합니다.

  • 외부 dsh 저장소 또는 npm 종속성 없음 — 엔진 로직이 이 저장소에 벤더링되어 있습니다.


설치 (권장)

Node ≥ 22.13 필요.

npm install -g search-boost-mcp
search-boost setup          # interactive: keys → layer → agents
# or non-interactive:
search-boost install -y     # all detected agents

설치 후 각 에이전트를 다시 시작하여 MCP가 다시 로드되도록 하세요.

에이전트별 한 줄 명령

search-boost install -t cursor -y
search-boost install -t codex,claude -y --auto-allow
search-boost install -t grok -y --auto-allow
search-boost install -t antigravity --workspace --auto-allow -y

작성하지 않고 미리 보기: search-boost install --dry-run -y

설치 확인

search-boost doctor          # health checks (offline, pass/warn/fail)
search-boost doctor --json   # machine-readable report for CI/scripts
search-boost status          # install dashboard (keys, layer, agents)

종료 코드: 0 정상 · 1 실패(또는 --strict 사용 시 경고) · 2 경고만.

선택 사항: search-boost doctor --probe는 라이브 검색 스모크 테스트를 추가합니다(네트워크 필요, 2단계).

그런 다음 에이전트에서 확인:

에이전트

빠른 확인

Cursor

설정 → MCP → search-boost 연결됨; 도구 나열됨

Cursor CLI

~/.cursor/mcp.json에 동일한 MCP 항목

Codex

codex 세션에 mcp__search-boost__* 도구 나열됨

Claude Code

MCP 패널에 search-boost 표시됨; 도구가 거부 프롬프트 없이 호출 가능(--auto-allow인 경우)

Grok Build

grok mcp doctor search-boost · grok inspect

Antigravity

MCP 구성에 search-boost 포함됨; 설치 후 IDE 다시 시작

도구가 나타나지만 호출이 실패하면 터미널에서 search-boost serve를 실행하여 시작 오류를 확인하세요.

설치 플래그 (빠른 참조)

플래그

효과

-t, --target

연결할 에이전트 (cursor, codex, claude, grok, antigravity, cursor-cli, auto, all)

-y, --yes

비대화형: 키/계층 마법사 건너뜀, --target=auto 사용, --auto-allow 및 --replace-native를 암시

-t 없이 -y

해당 대상에 대해 여전히 비대화형이며 기본적으로 네이티브 검색을 대체하지만 --auto-allow를 암시하지 않음. 권한 프롬프트를 원하지 않으면 명시적으로 추가하세요

--auto-allow

에이전트 구성에서 search-boost MCP 도구를 사전 승인(Cursor CLI 허용 목록, Codex default_tools_approval_mode, Claude/Grok/Antigravity 권한 규칙)하여 에이전트가 매 세션마다 프롬프트하지 않도록 함

--replace-native / --keep-native

에이전트가 전환을 지원하는 경우 내장 웹 검색 비활성화 또는 유지(Codex web_search, Claude WebSearch). 비대화형일 때 기본값은 대체

--dry-run

파일을 쓰지 않고 작업 출력

전체 온보딩(API 키 + 계층 선택)을 보려면 -y 없이 search-boost setup 또는 search-boost install을 실행하세요.


Related MCP server: gemini-search-mcp

제공되는 기능

MCP 도구

목적

fused_search

다중 엔진 병렬 검색, 중복 제거, 교차 순위 매기기

fetch_page

전체 페이지 텍스트 (Jina + HTML 폴백, 선택적 focus)

x_search

X/Twitter 키워드 / 사용자 / 스레드

deep_research

호출당 한 라운드 — suggested_queries로 간격이 없을 때까지 반복한 후 종합(최대 ~3 라운드)

search_layer

free(키 없음) 또는 api(키 있는 엔진) 표시 또는 설정

search_stats

캐시 적중, 엔진 가용성, 진단

또한: 리소스 search-boost://policy · 프롬프트 search_routing

계층

  • free — Bing + DuckDuckGo + Yahoo + Exa-free; API 키 불필요.

  • api — free 계층 엔진에 Antigravity CLI(사용 가능한 경우) 및 구성한 Tavily / Brave / Exa 중 아무거나 추가(하나의 키로 작동하지만 최상의 교차 엔진 융합을 위해 세 가지 모두 권장)

키: search-boost config keys → ~/.search-boost-keys.json (레거시 ~/.dsh-search-boost-keys.json도 읽음; 또는 환경 변수 TAVILY_API_KEY, BRAVE_API_KEY, EXA_API_KEY). 선택적 라우팅: 키 파일에서 enabledEngines: ["exa"] 또는 "engines": { "brave": { "enabled": false } }.

키 얻기: Tavily · Brave Search API · Exa

X/Twitter 인증 (선택 사항): 자격 증명이 있을 때 공식 x_search를 개선합니다. ~/.search-boost-xauth.json에 저장됨(레거시 ~/.dsh-search-boost-xauth.json도 읽음) 또는 XAI_API_KEY / Grok /x-login을 통해. 파일 경로 재정의: SEARCH_BOOST_XAUTH_FILE.

구성 파일 재정의: SEARCH_BOOST_KEYS_FILE, SEARCH_BOOST_LAYER_FILE, SEARCH_BOOST_XAUTH_FILE (사용자 정의 경로를 가리키는 선택적 환경 변수).


CLI 치트 시트

명령어

기능

search-boost

대화형 TUI

search-boost setup

온보딩 (키 + 계층 + 설치)

search-boost install / uninstall

MCP + 프롬프트를 에이전트에 연결

search-boost serve

MCP stdio 서버 실행 (에이전트가 사용)

search-boost status

키, 계층, 에이전트별 구성 상태

`search-boost doctor [--quick

--probe] [--json] [--strict]`

구성/에이전트/엔진 상태 확인 (통과/경고/실패)

search-boost status

키, 계층, 에이전트별 설치 상태 (판정 없음)

`search-boost config keys

layer

search`

키, 기본 계층, 네이티브 검색 대체

search-boost print <agent>

MCP 스니펫을 파일에 쓰지 않고 출력

search-boost agents

기계가 읽을 수 있는 에이전트 목록

설치 플래그: -t cursor,codex,…|auto|all · -y (비대화형; --auto-allow + --replace-native 암시) · --dry-run · --auto-allow (MCP 도구 사전 승인 — 위 표 참조) · --replace-native / --keep-native · --scope user|project (Grok) · --workspace (Antigravity .agents/)


지원되는 에이전트

에이전트

MCP 구성

추가 설치 항목

Cursor IDE

~/.cursor/mcp.json

hook, skill

Cursor CLI

~/.cursor/mcp.json

hook, skill (CLI 변형), 선택적 CLI 자동 허용

Codex CLI

~/.codex/config.toml

AGENTS.md, skill

Claude Code

~/.claude.json

CLAUDE.md, skill, permissions

Grok Build

~/.grok/config.toml

rule, skill · grok-plugin

Antigravity

~/.gemini/config/mcp_config.json

AGENTS.md, GEMINI.md, skill, 선택적 workspace

프롬프트는 모델 재량 표현을 사용합니다(매 턴마다 강제하지 않고 선택할 때 검색). 에이전트별 템플릿은 agents/를 참조하세요.

네이티브 웹 검색: Codex web_search 및 Claude WebSearch는 --replace-native로 비활성화할 수 있습니다(비대화형일 때 기본값). Cursor / Antigravity는 skill + hook 선호도에만 의존합니다. Grok 네이티브 브라우징은 켜진 상태로 둡니다.

Antigravity + agy CLI: api 레이어에서 선택적 Antigravity CLI 엔진(PATH 상의 agy)은 단순 조회가 아닌 중간 및 복잡 fused_search 계층에만 참여합니다. 로컬 로그인 및 플랫폼 할당량에 따라 달라지며, 타임아웃은 약 45초입니다.


Grok 플러그인

이 플러그인은 npm 패키지(이식 가능한 npx를 통한 MCP 및 스킬)에 포함되어 제공됩니다.

재설치는 멱등적입니다: search-boost install -t grok는 새 [permission] 블록을 작성하기 전에 이전의 모든 search-boost [permission] 블록(표시 또는 레거시)을 제거하므로, 중복된 [permission] 키로 인해 grok 시작이 실패하지 않습니다. [ui] permission_mode = "always-approve"가 이미 설정된 경우, --auto-allow는 [permission] 주입을 건너뜁니다(always-approve는 MCP 도구를 전역적으로 승인합니다). search-boost doctor는 중복되거나 불필요한 권한 블록에 대해 경고합니다.

git 클론에서 (저장소 루트):

grok plugin install ./grok-plugin --trust
search-boost install -t grok -y --auto-allow

npm install -g search-boost-mcp 후 (클론 불필요):

# bash / macOS / Linux
grok plugin install "$(npm root -g)/search-boost-mcp/grok-plugin" --trust

# Windows PowerShell
grok plugin install "$(npm root -g)\search-boost-mcp\grok-plugin" --trust

search-boost install -t grok -y --auto-allow

번들로 제공되는 .mcp.json은 npx -y search-boost-mcp serve를 사용하므로 Node ≥ 22.13이 설치된 모든 머신에서 플러그인이 작동합니다.

자세한 내용 → grok-plugin/README.md


문제 해결

증상

시도해 볼 방법

search-boost가 정상인가요?

search-boost doctor — 통과/경고/실패 판정; 스크립트용 --json

설치가 즉시 실패함

Node ≥ 22.13 (node -v); 이전 버전이면 업그레이드

에이전트에 MCP 서버가 없음

설치를 다시 실행하고, 에이전트를 재시작한 후 search-boost status 확인

도구 호출이 차단됨 / 매 턴 승인 필요

--auto-allow로 재설치하거나, 에이전트 UI에서 한 번 승인

결과 없음 / 빈 엔진

search-boost doctor — 레이어/키/엔진 검사 확인; 무료는 키가 필요 없음; api는 search-boost config keys 또는 환경 변수를 통해 최소 하나의 키가 있는 엔진이 필요함 (세 개 모두 권장)

네트워크/프록시 문제

2단계: search-boost doctor --probe (아직 구현되지 않음)

MCP가 시작되지 않음

search-boost doctor → mcp_launch_command, node_version; 그 다음 search-boost serve

Grok 플러그인 MCP가 시작되지 않음

grok mcp doctor search-boost; npx 및 네트워크 접근이 작동하는지 확인

grok이 config.toml 구문 분석에 실패함

중복된 [permission] — search-boost install -t grok -y --auto-allow 실행

Antigravity agy가 실행되지 않음

api 레이어, PATH 상의 agy, 그리고 complexity medium/complex 필요 — simple은 안 됨

시간 초과 / 가져오기 오류

회사 프록시나 방화벽이 Bing/DDG/Jina를 차단할 수 있음; 로컬에서 search-boost serve를 실행하여 stderr 확인


개발

git clone https://github.com/Mr-remon219/search-boost.git
cd search-boost && npm install
npm run check && npm run test:install && npm run smoke
node cli.mjs install --dry-run -y

로컬 클론 설치는 node /path/to/cli.mjs serve를 작성합니다(npx 아님). 형제 체크아웃이나 SEARCH_BOOST_DSH_ROOT는 필요하지 않습니다.


라이선스

MIT


링크: 이슈 · dsh-search-boost · pi-search-boost

친근한 링크: LINUX DO 커뮤니티

Available Tools

5 tools
fetch_pageFetch PageA
Read-only

Read a known HTTP(S) URL without searching again. Returns readable HTML or locally extracted PDF text, with retrieval route and any extraction limitations. Long bodies use bounded windows; continue from nextOffset using the cached read, not a new request. A focus miss is not evidence of absence: retry without focus. Binary bodies and PDFs with no extractable text return errors, not page text. Network safety, proxy policy, cancellation and size limits remain enforced through all supported fallbacks. This is not an authenticated browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYeshttp(s) URL to fetch
focusNoKeep matching paragraphs; omit for the readable body. Output may still be windowed; inspect nextOffset and limitations
offsetNoCharacter offset into the page body (default 0); pass nextOffset from a previous call to continue a long page from cache

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
viaYes
offsetNo
tookMsYes
contentYes
focusMissNo
truncatedNo
limitationNo
nextOffsetNo
totalCharsNo
windowNoteNo
word_countYes
requestedUrlNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly, openWorld, non-destructive); the description adds substantial behavior beyond them: binary bodies and text-less PDFs return errors, long bodies are windowed and continued from cache, network safety/proxy/cancellation/size limits persist through fallbacks, and it is explicitly not an authenticated browser. These are exactly the operational caveats an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then dense but purposeful sentences covering return format, pagination, focus retry, error cases, and the auth boundary. No filler and no repetition of the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value documentation is not required, and the description still covers error outcomes, extraction limitations, pagination continuation, and the unauthenticated boundary. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds real semantics: offset continuation should use the cached read rather than a new request, and focus should be dropped on a miss because a miss is not evidence of absence. That goes beyond the schema's parameter descriptions without restating them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb (read/fetch) and resource (a known HTTP(S) URL) plus a distinguishing constraint ('without searching again') that separates it from the search siblings. It also states the return shape (readable HTML or locally extracted PDF text with retrieval route). An agent can select this over fused_search or x_search without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly sets the context of use (a URL you already know, avoiding a re-search) and gives concrete recovery guidance: 'A focus miss is not evidence of absence: retry without focus.' It stops short of explicitly naming the search siblings as the alternative when the URL is unknown, so routing is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_layerSearch LayerA

Inspect the current search layer with layer=show (default, no change). layer=free or api persists a new default: only change it when authorized. free = free — compatibility default engine_pool=free (keyless). api = api — compatibility default engine_pool=hybrid (keyless plus configured APIs). For a single search, use fused_search.engine_pool instead; legacy api maps to hybrid, not the strict api pool.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerNoshow (default) reads current state; free/api persist a new default and require authorization

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=false and destructiveHint=false, but the description adds critical behavioral context: layer=show causes no change, while free/api persist a new default and require authorization. It also discloses the compatibility mapping (legacy api maps to hybrid, not strict api pool), which goes beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but mostly earns its length, with the default behavior and key warning front-loaded. The 'free = free' and 'api = api' phrasing is slightly redundant and could be tightened, but it remains efficient and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter, full schema coverage, and no output schema, the description covers all essential context: default behavior, persistence side effects, authorization requirement, engine_pool mapping, and the alternative tool for single searches. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaning beyond the enum descriptions by explaining the engine_pool implications of each value: free maps to engine_pool=free (keyless), api maps to engine_pool=hybrid, and legacy api does not map to the strict api pool. This is valuable semantic nuance that the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (the search layer) and a clear action set: inspect with layer=show or persist a new default with free/api. It also explicitly differentiates this tool from fused_search, making its purpose and scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: use layer=show to inspect, only change the default when authorized, and for a single search use fused_search.engine_pool instead. This routes the agent to the correct sibling in the exact condition that matters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_statsSearch StatsA
Read-only

Read-only search diagnostics: cache activity, engine configuration readiness and recent searches. Inspect result warnings as well; empty results do not prove absence or authorize changing credentials, permissions or defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
layerYes
recentYes
enginesYes
xSourceYes
cacheHitsYes
startedAtYes
xOfficialYes
tierCountsYes
cacheMissesYes
keyedEnginesYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds genuine value beyond them: it discloses the diagnostic surfaces returned and warns that empty results do not authorize changing credentials, permissions, or defaults — a meaningful behavioral caveat for an agent acting on ambiguous results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences: the first defines scope, the second carries the caution. No filler, though the second sentence packs three distinct warnings and is slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. With zero parameters and annotations covering the safety profile, the description supplies everything an agent needs to call this correctly, including the caveat about interpreting empty results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies; the description neither helps nor hurts parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete resource and enumerates what it exposes: cache activity, engine configuration readiness, and recent searches. It clearly reads as a diagnostics tool, distinct from the search/retrieval siblings (fused_search, fetch_page, search_layer), though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives interpretive guidance ('inspect result warnings', 'empty results do not prove absence') but never states when to call this tool versus the search siblings or when not to. Usage is implied by the diagnostics framing rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.2.4
    • Changedfetch_page7 fields changed
      • changedInput schema / properties / focus / description
        Previous value: -"Keep paragraphs matching these terms (optional; full page is returned when omitted)"New value: +"Keep matching paragraphs; omit for the readable body. Output may still be windowed; inspect nextOffset and limitations"
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Character offset into the page body (default 0); pass nextOffset from a previous call to continue a long page from cache",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / nextOffset
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / offset
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / requestedUrl
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / totalChars
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / windowNote
        Added value: +{
        +  "type": "string"
        +}
    • Changedfused_search2 fields changed
      • changedInput schema / properties / engine_weights / description
        Previous value: -"Override preset engine weights; never enables or selects engines"New value: +"Override preset engine weights; zero still calls the engine. Never enables or selects engines"
      • changedInput schema / properties / queries / description
        Previous value: -"Distinct query angles, not paraphrases; use up to 3 variants"New value: +"Distinct query angles, not paraphrases; complexity caps total variants at 1/2/3, including query and OR alternatives"
    • Changedx_search4 fields changed
      • addedOutput schema / properties / engineStats
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "attempts": {
        +        "type": "number"
        +      },
        +      "errors": {
        +        "type": "number"
        +      },
        +      "note": {
        +        "type": "string"
        +      },
        +      "successes": {
        +        "type": "number"
        +      },
        +      "used": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "used",
        +      "errors"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / enginesUsed
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / inFlight
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  2. 1 tool updatev0.2.3
    • Removedadaptive_search
  3. 7 tool updatesv0.2.2
    • Addedadaptive_search
    • Removeddeep_research
    • Changedfetch_page3 fields changed
      • changedInput schema / properties / focus / description
        Previous value: -"Keep paragraphs matching these terms (~90% token savings)"New value: +"Keep paragraphs matching these terms (optional; full page is returned when omitted)"
      • addedOutput schema / properties / focusMiss
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / limitation
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "kind": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "kind",
        +    "message"
        +  ],
        +  "type": "object"
        +}
    • Changedfused_search37 fields changed
      • addedInput schema / properties / community
        Added value: +{
        +  "description": "Add X developer/community voices when relevant; default false; shares final max_results",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / complexity / description
        Added value: +"Budget, query variants and depth only; default medium"
      • changedInput schema / properties / complexity / enum
        Previous value: -[
        -  "auto",
        -  "simple",
        -  "medium",
        -  "complex"
        -]New value: +[
        +  "simple",
        +  "medium",
        +  "complex"
        +]
      • addedInput schema / properties / engine_pool
        Added value: +{
        +  "description": "Which engines to search. Omitted: compatibility layer free→free, api→hybrid",
        +  "enum": [
        +    "free",
        +    "api",
        +    "hybrid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / engine_weights
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Override preset engine weights; never enables or selects engines",
        +  "properties": {
        +    "anysearch": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "bing": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "brave": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ddg": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "exa": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "exa-free": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "tavily": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "yahoo": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / engines / description
        Previous value: -"Engine subset override"New value: +"Optional exact engine selection overriding engine_pool; unavailable or disabled engines are skipped with warnings"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "bing",
        -  "ddg",
        -  "yahoo",
        -  "exa-free",
        -  "antigravity",
        -  "tavily",
        -  "brave",
        -  "exa"
        -]New value: +[
        +  "bing",
        +  "ddg",
        +  "yahoo",
        +  "exa-free",
        +  "anysearch",
        +  "tavily",
        +  "brave",
        +  "exa"
        +]
      • addedInput schema / properties / engines / minItems
        Added value: +1
      • addedInput schema / properties / exclude_domains / description
        Added value: +"Exclude these hostnames from results"
      • addedInput schema / properties / include_domains / description
        Added value: +"Restrict results to these hostnames, e.g. nodejs.org; useful for official sources"
      • addedInput schema / properties / layer / description
        Added value: +"Deprecated compatibility alias: free→free pool, api→hybrid pool; engine_pool takes precedence; not persisted"
      • addedInput schema / properties / min_score
        Added value: +{
        +  "description": "Minimum consensus-v2 quality score; old thresholds need recalibration, default 0",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / queries / description
        Previous value: -"Extra query variants (max 3)"New value: +"Distinct query angles, not paraphrases; use up to 3 variants"
      • addedInput schema / properties / ranking
        Added value: +{
        +  "description": "Final engine-weight preset only; default balanced",
        +  "enum": [
        +    "balanced",
        +    "research",
        +    "fresh"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / recency / description
        Added value: +"Favor recent dated results; omit for historical or version-pinned documentation"
      • addedOutput schema / properties / communityUsed
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / effectiveWeights
        Added value: +{
        +  "additionalProperties": {
        +    "type": "number"
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / enginePool
        Added value: +{
        +  "enum": [
        +    "free",
        +    "api",
        +    "hybrid"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / engineStats / additionalProperties / properties / attempts
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / engineStats / additionalProperties / properties / successes
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / ranking
        Added value: +{
        +  "enum": [
        +    "balanced",
        +    "research",
        +    "fresh"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / consensusBoost
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / items / properties / contributions
        Added value: +{
        +  "additionalProperties": {
        +    "type": "number"
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / items / properties / dateStatus
        Added value: +{
        +  "enum": [
        +    "known",
        +    "unknown",
        +    "conflicting"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / engineRanks
        Added value: +{
        +  "additionalProperties": {
        +    "type": "number"
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / items / properties / evidenceScore
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / items / properties / id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / kind
        Added value: +{
        +  "enum": [
        +    "web",
        +    "x"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / metadataDelta
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / items / properties / provenance
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "engine": {
        +        "type": "string"
        +      },
        +      "published": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "rank": {
        +        "type": "number"
        +      },
        +      "snippet": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      },
        +      "variant": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "engine",
        +      "rank",
        +      "url",
        +      "title",
        +      "snippet",
        +      "published"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / rankScore
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / items / properties / scoreVersion
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / selectionScore
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / items / properties / username
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "title",
        -  "url",
        -  "domain",
        -  "snippet",
        -  "score",
        -  "engines",
        -  "published"
        -]New value: +[
        +  "title",
        +  "url",
        +  "domain",
        +  "snippet",
        +  "score",
        +  "scoreVersion",
        +  "rankScore",
        +  "evidenceScore",
        +  "consensusBoost",
        +  "metadataDelta",
        +  "engineRanks",
        +  "contributions",
        +  "provenance",
        +  "dateStatus",
        +  "engines",
        +  "published"
        +]
      • addedOutput schema / properties / scoreVersion
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "layer",
        -  "tier",
        -  "tookMs",
        -  "cacheHit",
        -  "resultCount",
        -  "results"
        -]New value: +[
        +  "scoreVersion",
        +  "query",
        +  "layer",
        +  "tier",
        +  "tookMs",
        +  "cacheHit",
        +  "resultCount",
        +  "enginePool",
        +  "ranking",
        +  "effectiveWeights",
        +  "communityUsed",
        +  "results"
        +]
    • Changedsearch_layer1 field changed
      • addedInput schema / properties / layer / description
        Added value: +"show (default) reads current state; free/api persist a new default and require authorization"
    • Changedsearch_stats2 fields changed
      • addedOutput schema / properties / keyedEngines
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "configured": {
        +      "type": "number"
        +    },
        +    "enabled": {
        +      "type": "number"
        +    },
        +    "enabledNames": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "configured",
        +    "enabled",
        +    "total",
        +    "enabledNames"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "startedAt",
        -  "layer",
        -  "cacheHits",
        -  "cacheMisses",
        -  "tierCounts",
        -  "engines",
        -  "xOfficial",
        -  "xSource",
        -  "recent"
        -]New value: +[
        +  "startedAt",
        +  "layer",
        +  "cacheHits",
        +  "cacheMisses",
        +  "tierCounts",
        +  "keyedEngines",
        +  "engines",
        +  "xOfficial",
        +  "xSource",
        +  "recent"
        +]
    • Changedx_search10 fields changed
      • addedInput schema / properties / allowed_x_handles
        Added value: +{
        +  "description": "Only these authors; mutually exclusive with excluded_x_handles",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • addedInput schema / properties / excluded_x_handles
        Added value: +{
        +  "description": "Exclude these authors; mutually exclusive with allowed_x_handles",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • changedInput schema / properties / from_date / description
        Previous value: -"YYYY-MM-DD"New value: +"Inclusive start date, YYYY-MM-DD (UTC)"
      • addedInput schema / properties / max_results / description
        Added value: +"Requested result limit, 1–10"
      • addedInput schema / properties / post_id / description
        Added value: +"Real X post ID or status URL for type=thread"
      • addedInput schema / properties / query / description
        Added value: +"Search terms and X filters (e.g. from:OpenAI), or a natural-language topic for semantic mode"
      • changedInput schema / properties / to_date / description
        Previous value: -"YYYY-MM-DD"New value: +"Inclusive end date, YYYY-MM-DD (UTC)"
      • addedInput schema / properties / type / description
        Added value: +"Mode: keyword (default) or semantic uses query; user uses username; thread uses post_id"
      • addedInput schema / properties / username / description
        Added value: +"X account handle for type=user"
      • addedOutput schema / properties / note
        Added value: +{
        +  "type": "string"
        +}
  4. 2 tool updatesv0.1.6
    • Changeddeep_research1 field changed
      • addedInput schema / properties / round
        Added value: +{
        +  "description": "Research round number (auto-increments when omitted)",
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedfused_search4 fields changed
      • addedOutput schema / properties / engineStats
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "errors": {
        +        "type": "number"
        +      },
        +      "note": {
        +        "type": "string"
        +      },
        +      "used": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "used",
        +      "errors"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / enginesRequested
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / enginesUsed
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  5. 6 tool updatesv0.1.2
    • First observeddeep_research
    • First observedfetch_page
    • First observedfused_search
    • First observedsearch_layer
    • First observedsearch_stats
    • First observedx_search

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation4/5

Tools have mostly distinct purposes: fused_search for general web search, x_search for X/Twitter, fetch_page for URL reading, and search_stats/search_layer for diagnostics/configuration. However, search_stats and search_layer both touch engine configuration, and fused_search's description references a non-existent adaptive_search tool, which could cause mild confusion.

Naming Consistency3/5

All names use snake_case, which is consistent. However, the naming patterns vary: fused_search (adjective_noun), fetch_page (verb_noun), x_search (noun_noun), search_stats (noun_noun), search_layer (noun_noun). There is no single predictable verb_noun convention, though names remain readable.

Tool Count5/5

5 tools is well-scoped for a search server: core search, specialized X search, page fetch, diagnostics, and configuration. Each tool has a clear role without redundancy.

Completeness3/5

The surface covers general search, X search, page fetch, stats, and layer configuration. However, the descriptions reference an adaptive_search tool for higher-quality intent-guided evidence selection that is not present, indicating a notable gap in the intended tool set.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that enables coding agents to search X/Twitter and the web through the local Grok CLI, providing better search results than default Codex or Claude search without requiring an API key.
    24 npm
    7
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    MCP server for web search powered by Google AI Mode (Gemini). Enables any AI agent to search the web in real-time for free and without rate limits.
    2
    183
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A zero-config web search and fetch MCP server for LLM agents, featuring multi-backend metasearch, persistent rolling cache, and structured error envelopes for retry-friendly interactions.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for multi-engine web search and web page fetching, supporting parallel search, content extraction, and optional LLM-powered search summarization and deep search.
    5
    MIT