SearXNG MCP Server
Searxng Mcp
CLI 또는 API | MCP | 에이전트
버전: 2.1.0
문서 — MCP 도구, Python API, 콘솔 스크립트 전반의 설치, 배포, 사용 방법과 SearXNG 인스턴스 프로비저닝에 대한 지침은 공식 문서에서 관리됩니다.
Related MCP server: SearXNG MCP Server
개요
Searxng Mcp는 Agentic AI를 위해 SearXNG Search Engine MCP Server와 직접 인터페이스하도록 설계된 프로덕션 등급의 에이전트 및 Model Context Protocol(MCP) 서버입니다.
주요 기능
통합 액션 라우팅 MCP 도구: 메서드를 최적화된 토글 가능한 도구 모듈로 그룹화하여 LLM 컨텍스트의 토큰 오버헤드를 최소화하고 도구 비대화를 제거합니다.
엔터프라이즈급 보안: Eunomia 정책, OIDC 토큰 위임, 세분화된 실행 컨텍스트 추적을 포괄적으로 지원합니다.
통합 그래프 에이전트: Agent Control Protocol(ACP) 및 표준 웹 인터페이스(AG-UI)를 지원하는 내장 Pydantic AI 에이전트.
기본 원격 측정 및 추적: 기본 제공되는 OpenTelemetry 내보내기와 네이티브 Langfuse 추적.
CLI 또는 API
이 에이전트는 Agentic AI! API용 SearXNG Search Engine MCP Server를 래핑합니다. 프로그래밍 방식 또는 통합 실행 진입점을 통해 상호 작용할 수 있습니다.
기본 API 래퍼, 확장 스키마 바인딩, 개발자 SDK 참조 사용 방법에 대한 자세한 지침은 docs/index.md에서 관리됩니다.
MCP
이 서버는 동적 액션 라우팅 도구를 활용하여 토큰 오버헤드를 최적화하고 IDE 호환성을 극대화합니다.
사용 가능한 MCP 도구
아래 표는 MCP 서버에서 자동 생성된 것입니다. 수동으로 편집하지 마십시오.
축약형 액션 라우팅 도구 (MCP_TOOL_MODE=condensed)
MCP 도구 | 토글 환경 변수 | 설명 |
|
| SearXNG 검색을 실행하고 결과를 epistemic-graph에 기본적으로 수집합니다. |
|
| 대화형 SearXNG 검색 UI 앱을 실행합니다: 쿼리 상자, 카테고리 필터, 클릭 가능한 결과 목록을 제공하며, 호스트 매개 MCP Apps 브리지를 통해 기존 web_search 도구로 지원됩니다. 사람이 원시 JSON을 읽는 대신 검색 결과를 시각적으로 보고 상호 작용해야 할 때 사용하십시오. 브라우저를 구동하거나 임의의 웹 페이지를 렌더링하지 않습니다. 이 검색 워크플로우만 수행합니다. |
|
| EMBEDDED SearXNG 인스턴스의 settings.yml을 읽거나 편집합니다. |
| — | 개인 정보를 존중하는 SearXNG 메타검색 인스턴스를 사용하여 웹 검색을 수행합니다. |
액션 라우팅 도구 4개 · 상세 1:1 도구 0개. 각 도구는 해당 <DOMAIN>TOOL 토글이 false로 설정되지 않는 한 활성화됩니다. MCP_TOOL_MODE는 표면을 선택합니다 (**intent 기본값* — 동사 도구 6개, 요청 시 로드되는 세분화된 세트 · condensed 액션 라우팅 · verbose 1:1 · both). 자동 생성됨 — 편집하지 마십시오.*
자세한 도구 스키마, 매개변수 형태, 검증 제약 조건은 docs/usage.md에 보존되어 있습니다.
동적 도구 선택 및 표시 여부
이 MCP 서버는 런타임에 동적 도구 세트 선택 및 표시 여부 필터링을 지원합니다. 이를 통해 노출되는 도구 세트를 제한하여 LLM의 컨텍스트 창이 비대해지는 것을 방지할 수 있습니다.
여러 입력 채널을 통해 도구 필터링을 구성할 수 있습니다:
CLI 인수: 시작 시
--tools또는--toolsets(또는 해당 비활성화 대응 인수인--disabled-tools및--disabled-toolsets)를 전달합니다.환경 변수: 표준 환경 변수를 정의합니다:
MCP_ENABLED_TOOLS/MCP_DISABLED_TOOLSMCP_ENABLED_TAGS/MCP_DISABLED_TAGS
HTTP SSE 요청 헤더: 전송 초기화 중에 사용자 지정 헤더를 전달합니다:
x-mcp-enabled-tools/x-mcp-disabled-toolsx-mcp-enabled-tags/x-mcp-disabled-tags
HTTP SSE 요청 쿼리 매개변수: 전송 연결 URL에 쿼리 매개변수를 직접 추가합니다:
?tools=tool1,tool2?tags=tag1
쿼리 문자열이나 매개변수가 제공되면 LLM이 없는 Knowledge Graph 해석 계층(DynamicToolOrchestrator 사용)이 쿼리 의도를 알려진 도구 태그, 이름 또는 설명과 매칭하며, 안전한 폴백과 자동 24시간 백그라운드 캐시 새로 고침을 제공합니다.
MCP 구성 예시
커넥터 중심의
[mcp]추가 기능을 설치하세요. 예제에서는searxng-mcp[mcp]를 사용하여agent-utilities[mcp]를 통해 FastMCP / FastAPI를 추가합니다. 필수 Agent Utilities 코어는 여전히epistemic-graph[full]을 포함합니다.[agent-runtime]추가 기능은 모델 오케스트레이션을 추가로 활성화합니다.
stdio 전송 (로컬 IDE — Cursor, Claude Desktop, VS Code)
{
"mcpServers": {
"searxng-mcp": {
"command": "uvx",
"args": [
"--from",
"searxng-mcp[mcp]",
"searxng-mcp"
],
"env": {
"MCP_TOOL_MODE": "intent",
"SEARCH_APPTOOL": "true",
"SEARXNG_EMBEDDED": "true",
"SEARXNG_KG_INGEST": "true",
"USE_RANDOM_INSTANCE": "false"
}
}
}
}런타임 참조는 GraphOS와 같은 별칭 인식 실행기가 필요합니다. 다른 실행기는 해당 항목을 생략하고 자체 런타임 비밀 경계를 통해 확인된 값을 주입해야 합니다.
Streamable-HTTP 전송 (네트워크 / 프로덕션)
{
"mcpServers": {
"searxng-mcp": {
"command": "uvx",
"args": [
"--from",
"searxng-mcp[mcp]",
"searxng-mcp",
"--transport",
"streamable-http",
"--port",
"8000"
],
"env": {
"TRANSPORT": "streamable-http",
"HOST": "127.0.0.1",
"PORT": "8000",
"MCP_TOOL_MODE": "intent",
"SEARCH_APPTOOL": "true",
"SEARXNG_EMBEDDED": "true",
"SEARXNG_KG_INGEST": "true",
"USE_RANDOM_INSTANCE": "false"
}
}
}
}또는 url로 사전 배포된 Streamable-HTTP 인스턴스에 연결합니다:
{
"mcpServers": {
"searxng-mcp": {
"url": "http://localhost:8000/searxng-mcp/mcp"
}
}
}검토된 컨테이너 이미지를 최소 권한 stdio 자식 프로세스로 실행합니다(리스너 또는 게시된 포트 없음):
docker run -i --rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
--pids-limit=256 \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
-e TRANSPORT=stdio \
-e MCP_TOOL_MODE=intent \
-e SEARCH_APPTOOL=true \
-e SEARXNG_EMBEDDED=true \
-e SEARXNG_KG_INGEST=true \
-e USE_RANDOM_INSTANCE=false \
registry.example.invalid/searxng-mcp@sha256:<digest> searxng-mcp컨테이너화된 네트워크 HTTP의 경우 운영자 소유 배포 프로필을 통해 인증된 TLS 인그레스(또는 직접 서버 TLS), 정확한 MCP_ALLOWED_HOSTS, 정확한 신뢰 프록시 CIDR 정책을 제공하십시오. 생성기는 인증되지 않은 비루프백 리스너를 생성하지 않습니다.
코드 판독 환경 표면(MCP_TOOL_MODE + 패키지 변수)에서 자동 생성됨 — 편집하지 마십시오.
추가 배포 옵션
searxng-mcp는 로컬 stdio 프로세스 또는 컨테이너로 실행하거나 원격 네트워크 경계 뒤에서 실행할 수 있습니다. 배포 가이드에 자세한 전송 계약이 나와 있습니다.
로컬 컨테이너 — 검토된 불변 이미지를 리스너나 게시된 포트 없이 최소 권한 stdio 자식 프로세스로 실행합니다.
원격 URL — 운영자가 제공한 인증된 HTTPS 인그레스를 통해 연결합니다. 해당 URL, 아웃바운드 ID 참조, 신뢰 프로필, 정확한
MCP_ALLOWED_HOSTS를AgentConfig에 유지합니다.
에이전트
이 저장소는 완전히 통합된 Pydantic AI Graph Agent를 제공합니다. **Agent Control Protocol(ACP)**을 통해 통신하며 Agent Web UI(AG-UI) 및 터미널 인터페이스와 원활하게 상호 작용합니다.
에이전트 CLI 실행
대화형 명령줄 에이전트를 시작하려면:
# Set credentials
export SEARXNG_URL="your_value"
# Run the agent server
searxng-agent --provider openai --model-id gpt-4oDocker Compose 오케스트레이션
다음 docker/agent.compose.yml은 에이전트, Web UI, 터미널 인터페이스를 함께 구성합니다:
version: '3.8'
services:
searxng-mcp-mcp:
image: example/searxng-mcp@sha256:<digest>
container_name: searxng-mcp-mcp
hostname: searxng-mcp-mcp
restart: always
env_file:
- ../.env
environment:
- PYTHONUNBUFFERED=1
- HOST=0.0.0.0
- PORT=8000
- TRANSPORT=streamable-http
ports:
- "8000:8000"
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
searxng-mcp-agent:
image: example/searxng-mcp@sha256:<digest>
container_name: searxng-mcp-agent
hostname: searxng-mcp-agent
restart: always
depends_on:
- searxng-mcp-mcp
env_file:
- ../.env
command: [ "searxng-agent" ]
environment:
- PYTHONUNBUFFERED=1
- HOST=0.0.0.0
- PORT=9001
- MCP_URL=http://searxng-mcp-mcp:8000/mcp
- PROVIDER=${PROVIDER:-openai}
- MODEL_ID=${MODEL_ID:-gpt-4o}
- ENABLE_WEB_UI=True
- ENABLE_OTEL=True
ports:
- "9001:9001"
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:9001/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
자세한 그래프 노드 아키텍처 설명, 사용자 지정 스킬 구성, 에이전틱 추적 가이드는 docs/deployment.md에서 확인할 수 있습니다.
보안 및 거버넌스
엔터프라이즈 지원이 가능한 agent-utilities 코어를 기반으로 구축되어 표준 보안 매개변수를 완전히 지원합니다:
액세스 제어 및 정책 시행
Eunomia 정책: 세분화된 정책 기반 도구 권한 부여.
none, 로컬embedded(mcp_policies.json), 중앙 집중식remote모드를 지원합니다.OIDC 토큰 위임: Web UI / ACP → 에이전트 → MCP로 인증 사용자 자격 증명을 전달하기 위한 RFC 8693 토큰 교환을 준수합니다.
범위 지정 자격 증명: 실행 컨텍스트가 특정 호출자 ID로 제한됩니다.
런타임 보안 그리드
기능 | 기능 설명 | 활성화 |
도구 가드 | 사람 개입 검증이 포함된 민감도 검사 | 기본 활성화 |
프롬프트 인젝션 방어 | 입력 스캐닝, 반복 모니터링, 재귀 루프 차단 | 기본 활성화 |
컨텍스트 안전 가드 | 고착 루프 감지 및 컨텍스트 오버플로 사전 경고 | 기본 활성화 |
환경 변수
패키지 환경 변수
변수 | 예시 | 설명 |
|
| |
|
| |
|
| 옵션: stdio, streamable-http, sse |
|
| searxng_search_app MCP 앱(ui:// 검색 UI) 비활성화 |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| 옵션: none, embedded, remote |
|
| |
|
| |
| — | 둘 다 비워두면 번들/임베디드 SearXNG 인스턴스를 사용합니다(기본값 — 아래 SEARXNG_EMBEDDED 참조). 대신 외부 인스턴스를 가리키도록 하나를 설정하세요(예: 플릿 자체의 http://searxng.arpa) — 명시적 URL은 항상 임베디드 인스턴스보다 우선합니다. |
| — | |
| — | |
| secret-injected | 시크릿으로 주입됨 |
|
| |
|
| |
|
| 제로 구성 자체 포함 검색: SEARXNG_URL/SEARXNG_INSTANCE_URL이 설정되지 않은 경우, 이 MCP 서버가 소유한 루프백 전용 개인 SearXNG 인스턴스를 생성+사용합니다( |
| — | 임베디드 인스턴스의 사용자 편집 가능 settings.yml 오버라이드 위치: $XDG_CONFIG_HOME/searxng-mcp/settings.yml. 기본값은 ~/.config. |
상속된 agent-utilities 변수(모든 커넥터에 적용)
변수 | 예시 | 설명 |
|
| 도구 표면: |
| — | 쉼표로 구분된 도구 허용 목록 |
| — | 쉼표로 구분된 도구 거부 목록 |
| — | 쉼표로 구분된 태그 허용 목록 |
| — | 쉼표로 구분된 태그 거부 목록 |
| — | 아웃바운드 MCP 하위 인증: |
| — | OIDC 클라이언트 ID(서비스 계정 인증) |
|
| OIDC 서비스 계정의 런타임 시크릿 참조 |
| — | HTTP Basic 사용자 이름( |
|
| HTTP Basic 인증의 런타임 시크릿 참조( |
|
| 상세 로깅 |
|
| 버퍼링되지 않은 stdout(컨테이너에서 권장) |
|
| 에이전트가 연결하는 MCP 서버의 URL |
|
| 에이전트용 LLM 공급자 |
|
| 에이전트용 모델 ID |
|
| AG-UI 웹 인터페이스 제공 |
패키지 20개 + 상속 변수 16개. .env.example + 공유 agent-utilities 세트에서 자동 생성됨 — 편집하지 마세요.
서버가 읽는 모든 변수. 복사-붙여넣기 시작점은 .env.example을 참조하세요.
SearXNG 연결
변수 | 설명 | 기본값 |
| 쿼리할 SearXNG 인스턴스의 기본 URL |
|
| 명시적 인스턴스 URL 재정의 | — |
| SearXNG 인스턴스의 기본 인증 사용자 이름(보호된 경우) | — |
| SearXNG 인스턴스의 기본 인증 비밀번호(보호된 경우) | — |
|
|
|
| 각 검색 결과를 구성된 전체 지식 그래프 엔진에 기본 수집; 실패는 명시적으로 처리 |
|
| 제로 구성 자체 포함 검색: |
|
MCP 서버 / 전송
변수 | 설명 | 기본값 |
|
|
|
| 바인드 호스트(HTTP 전송) |
|
| 바인드 포트(HTTP 전송) |
|
| 도구 표면: |
|
| 쉼표로 구분된 도구 허용/거부 목록 | — |
| 쉼표로 구분된 태그 허용/거부 목록 | — |
텔레메트리 및 거버넌스
변수 | 설명 | 기본값 |
| OpenTelemetry 내보내기 활성화 |
|
| OTLP 수집기 엔드포인트 | — |
| OTLP 인증 키 | — |
| OTLP 프로토콜(예: | — |
| 권한 부여 모드: |
|
| 내장 정책 파일 |
|
| 원격 Eunomia 서버 URL | — |
설치
실행하려는 항목에 맞는 추가 설치를 선택하세요:
추가 설치 | 설치 내용 | 사용 시기 |
| 커넥터 중심 MCP 서버( | MCP 서버만 실행하는 경우(가장 작은 설치/이미지) |
| 에이전트 런타임( | 통합 에이전트를 실행하는 경우 |
| 전체( | 개발 / 두 표면 모두 사용 |
# Connector-focused MCP server (includes the shared graph engine)
uv pip install "searxng-mcp[mcp]"
# Agent runtime (adds model orchestration to the shared graph engine)
uv pip install "searxng-mcp[agent]"
# Everything (development)
uv pip install "searxng-mcp[all]" # or: python -m pip install "searxng-mcp[all]"컨테이너 이미지(:mcp vs :agent)
하나의 다단계 docker/Dockerfile이 --target으로 선택되는 두 개의 적정 크기 이미지를 빌드합니다:
이미지 태그 | 빌드 대상 | 내용 | 진입점 |
|
|
|
|
|
|
|
|
docker build --target mcp -t example/searxng-mcp:mcp docker/ # connector-focused MCP server
docker build --target agent -t example/searxng-mcp:agent-local docker/ # agent runtimedocker/mcp.compose.yml은 커넥터 중심 :mcp 서버를 실행합니다; docker/agent.compose.yml은
공동 배치된 :mcp 사이드카와 함께 에이전트(immutable agent digest)를 실행합니다.
지식 그래프 데이터베이스(epistemic-graph)
[mcp]와 [agent] 모두 필수 Agent Utilities 핵심 종속성(epistemic-graph[full])을 통해
epistemic-graph 엔진을 포함합니다. [mcp] 추가 설치는 서버를 커넥터 중심으로 유지하고;
[agent]는 모델 오케스트레이션을 추가로 활성화합니다. 로컬 배포는 번들 엔진을 사용할 수 있습니다.
프로덕션 또는 공유 상태의 경우 epistemic-graph를 전용 데이터베이스 서비스로 실행하고
런타임이 이를 사용하도록 구성하세요. 배포 레시피(단일 노드 + Raft HA), 연결 구성, 아키텍처
다이어그램은
epistemic-graph 배포 가이드에 문서화되어 있습니다.
문서
전체 문서는 공식 문서 사이트에 게시되어 있으며, 설치, 배포, 일상 운영에 대한 권장 참고 자료입니다.
페이지 | 내용 |
pip, 소스, 추가 설치, 사전 빌드 Docker 이미지 | |
MCP 및 에이전트 서버 실행, Compose, Caddy + Technitium, 환경 구성 | |
| |
Docker로 SearXNG 배포 | |
생태계 역할 및 표준화된 패키지 패턴 | |
개념 레지스트리( |
AGENTS.md는 기여자/에이전트를 위한 표준 지침입니다.
저장소 소유자
기여
기여를 환영합니다! 풀 리퀘스트를 제출하기 전에 로컬 검사를 실행하여 코드 품질을 확인해 주세요:
ruff format .로 코드 서식 지정ruff check .로 코드 린트mypy .로 타입 안전성 검증pytest로 테스트 스위트 실행
agent-utilities-deployment로 배포
통합 agent-utilities-deployment 워크플로로 이 패키지를 프로비저닝하세요.
이 워크플로는 설치된 패키지, 편집 가능한 소스, 또는 불변 컨테이너 경로를 선택하고;
런타임 비밀 및 TLS 프로필 참조만 AgentConfig에 기록하며;
doctor, 등록, 정책, 관측 가능성, 롤백 게이트를 실행합니다. 에이전트에게
**"searxng-mcp을 agent-utilities-deployment로 배포"**라고 요청하세요.
설치 모드 | 명령 |
설치된 패키지 |
|
편집 가능한 소스 |
|
불변 컨테이너 | 운영자가 선택한 오케스트레이터를 통해 |
저장소에는 배포 프로필, 자격 증명 값, 인증서 경로, 또는
환경별 엔드포인트가 포함되어 있지 않습니다. 런타임에 AgentConfig와
구성된 비밀 공급자를 통해 이를 제공하세요.
거버닝 기능 계약
이 패키지는 전문 절차를 참조 워크플로로 유지하는 간결한 표준 스킬 표면을 제공합니다.
현재 MCP 도구, 스킬 메타데이터,
connector_manifest.yml, 온톨로지, 매핑, 셰이프, 픽스처, 마이그레이션,
도구 스키마 지문, 인증 메타데이터는 하나의 버전 관리된 기능 계약을 형성합니다.
이들을 함께 검증하세요; 오래된 도구 이름이나
과거의 작업별 스킬 래퍼에 의존하지 마세요.
런타임 엔드포인트, 자격 증명, 인증서 신뢰, 테넌트 ID, 보존 및 관찰 가능성 정책은 배포 입력값이며 패키징된 값이 아닙니다. 네트워크 전송, 커넥터 수집, GraphOS 위임 또는 트레이스 내보내기를 활성화하기 전에 구성, 신뢰 및 개인정보 보호를 참조하세요.
Available Tools
6 toolssearxng_get_settingsSearxng Get SettingsARead-onlyIdempotent
Read the EMBEDDED SearXNG instance's active settings.yml
(CONCEPT:SR-KG.compute.embedded-instance): the user override at
$XDG_CONFIG_HOME/searxng-mcp/settings.yml if one exists, else the
packaged default, plus its path. Informational only when an external
SEARXNG_URL is configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds genuine context beyond them: the precedence rule for which file is read, that the path is returned alongside the content, and the external-SEARXNG_URL caveat. The return shape is left to the existing output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that leads with the action and resource, with no wasted framing. Minor clutter from the inline 'CONCEPT:SR-KG.compute.embedded-instance' tag, which adds nothing for an agent deciding how to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No parameters, an output schema covering the return value, and the description supplies the resolution logic and the external-URL caveat. Complete enough to call correctly; the only residual gap is that it does not explicitly point to searxng_set_settings as the modification counterpart.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline of 4 applies; there are no parameters whose semantics need explaining.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (the embedded SearXNG instance's active settings.yml), and spells out the resolution order (user override at $XDG_CONFIG_HOME/searxng-mcp/settings.yml, else packaged default) plus the returned path. This clearly distinguishes it from siblings searxng_set_settings and searxng_reset_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'Informational only when an external SEARXNG_URL is configured' tells the agent when the result is not meaningful, which is real routing guidance. It does not explicitly name the alternative (searxng_set_settings) for modification, so it stops short of full when/when-not/alternative framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searxng_ingest_searchSearxng Ingest SearchA
Run a SearXNG search and natively ingest its results into epistemic-graph.
Wire-First: performs the search, then pushes each result into the knowledge graph
as a search :Document (+ :SearchQuery / :SearchEngine typed nodes and their
:resultOf / :fromEngine links). Best-effort: ingested is None when no engine
is reachable. CONCEPT:AU-KG.ingest.enterprise-source-extractor.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to submit to SearXNG | |
| pageno | No | Page number of results to fetch | |
| engines | No | Optional list of specific search engines to use | |
| language | No | Language code for search results (e.g. en-US) | en-US |
| categories | No | Optional list of categories to search in (e.g. general, news, science) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears the full burden. It does disclose valuable behaviour: best-effort semantics with 'ingested' being None when no engine is reachable, and the write shape (:Document, :SearchQuery, :SearchEngine nodes with :resultOf/:fromEngine links). It omits whether repeated ingests dedupe/idempotent, whether it mutates an existing graph destructively, permission requirements, and rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and short, but the body is broken by hard line breaks mid-sentence, and the trailing 'CONCEPT:AU-KG.ingest.enterprise-source-extractor' is internal taxonomy jargon that costs tokens without helping an agent decide or invoke. Roughly one of three sentences does no work.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with a full output schema, the description covers purpose, the write target, and the failure mode (`ingested` is None), which is enough to call it correctly; return-value detail is rightly left to the output schema. The remaining gap is graph-side side effects and idempotency on repeat calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all five parameters carry their own descriptions, so the schema does the heavy lifting. The description adds no parameter-level meaning (e.g. engine naming conventions, category values, paging interaction with ingestion), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific compound verb plus resource: run a SearXNG search AND ingest results into epistemic-graph, naming the target graph and the node/link types created. That ingestion clause is exactly what separates it from searxng_search_app and web_search, without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Wire-First: performs the search, then pushes each result into the knowledge graph' line implies the selection condition (you want results persisted, not just returned), but never states when to prefer this over searxng_search_app or web_search, nor any prerequisites such as an existing graph connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searxng_reset_settingsSearxng Reset SettingsADestructiveIdempotent
Delete the EMBEDDED SearXNG user override settings.yml, reverting to the packaged default on the next spawn.
| Name | Required | Description | Default |
|---|---|---|---|
| apply_now | No | Stop the running embedded instance (if any) so the NEXT search respawns it with the packaged default settings. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is destructive, idempotent, and not read-only. The description adds useful behavioral context beyond that: it identifies exactly what is destroyed (the embedded user override settings.yml) and when the packaged default takes effect (on the next spawn).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states the action, target file, and consequence immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, the input schema fully documents the only parameter, annotations cover safety traits, and an output schema exists. The description supplies the key behavioral effect, though it could explicitly mention the immediate-stop behavior governed by apply_now for a fully self-contained description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single apply_now parameter is fully documented in the schema itself. The description does not add further parameter semantics, so the baseline of 3 is appropriate when the schema carries this responsibility.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Delete") and resource ("EMBEDDED SearXNG user override settings.yml") and states the resulting effect (reverting to the packaged default on the next spawn). This clearly distinguishes it from read/write siblings like get_settings and set_settings, though it does not explicitly route to them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "reverting to the packaged default" implies this is used when the user wants to discard custom SearXNG overrides, but the description does not explicitly say when to use this versus searxng_set_settings or searxng_get_settings. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searxng_search_appSearxng Search AppA
Launch an interactive SearXNG search-UI app: a query box, category filters, and a clickable results list, backed by the existing web_search tool through the host-mediated MCP Apps bridge. Use this when a human should see and interact with search results visually rather than read raw JSON. Does NOT drive a browser or render arbitrary web pages -- only this search workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional initial query to run on load. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the backing mechanism (web_search via the host-mediated MCP Apps bridge) and the capability boundaries of the launched app. It stops short of stating what launching twice does or how app/session lifetime behaves, which are the remaining behavioral unknowns for a UI-launching tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what is launched, followed by the selection rule and then the scope exclusions. Every clause contributes and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter tool with an output schema, the description covers purpose, mechanism, and boundaries adequately. It is slightly incomplete on app lifecycle semantics (what a second launch yields, whether state persists), which an agent may need to call it confidently in a multi-turn session.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single optional 'query' parameter is already documented in the schema as an initial query run on load. The description adds no further parameter semantics (e.g., how an empty query behaves in the UI), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Launch') and a precisely scoped resource ('interactive SearXNG search-UI app'), then enumerates its components (query box, category filters, clickable results list). It explicitly distinguishes itself from web_search and from browser automation, so an agent can separate it from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit selection rule: use when a human should see and interact with results visually rather than read raw JSON, which maps directly onto choosing this over web_search. It also pre-empts the two most likely misuses by stating it does not drive a browser or render arbitrary web pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searxng_set_settingsSearxng Set SettingsA
Deep-merge overrides_json into the EMBEDDED SearXNG user override
settings.yml (created on first use; the packaged default is never
modified), then stop the running embedded instance so the next search
respawns with the new settings (unless apply_now=false).
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | Deep-merge onto current settings (default) or replace the override file wholesale. | |
| apply_now | No | Stop the running embedded instance (if any) so the NEXT search respawns it with the new settings. | |
| overrides_json | No | JSON object of settings.yml overrides (e.g. '{"search": {"formats": ["html", "json", "csv"]}}'). Deep-merged onto the currently-active settings unless merge=false. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnlyHint=false and destructiveHint=false, the description carries real added weight: it discloses that the packaged default is never modified, that the override file is created on first use, and that the running instance is stopped so the next search respawns. It does not say what happens to in-flight requests when the instance is stopped, or what happens on invalid JSON, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the merge action and then the restart consequence. No wasted sentences. Mild clutter from reST double-backtick markup, but nothing that impedes parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need no explanation, and all three parameters are documented. The description covers the mutation's blast radius and the embedded-vs-packaged distinction. It is only missing error behavior and whether prior override content is recoverable after a wholesale replace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters in detail. The description adds only the default `apply_now=true` behavior and the deep-merge semantics for `overrides_json`. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource chain: deep-merge `overrides_json` into the embedded user override settings.yml and restart the embedded instance. That is far more than a restatement of the name. It does not explicitly contrast itself with siblings like `searxng_get_settings` or `searxng_reset_settings`, so sibling differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied well enough that an agent knows to call this to change settings, and it flags the `apply_now=false` path. However it never says when to prefer `searxng_reset_settings` over merging, or whether to read current settings with `searxng_get_settings` first. No explicit when-not guidance exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchWeb SearchBRead-onlyIdempotent
Perform a web search using a privacy-respecting SearXNG metasearch instance.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to submit to SearXNG | |
| pageno | No | Page number of results to fetch | |
| engines | No | Optional list of specific search engines to use | |
| language | No | Language code for search results (e.g. en-US) | en-US |
| categories | No | Optional list of categories to search in (e.g. general, news, science, files, images, videos, music, it, social_media) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds only that the backing service is a privacy-respecting SearXNG instance – no mention of rate limits, auth, result volume, or how 'privacy-respecting' affects behavior, so the added value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the purpose front-loaded and no filler. It is perhaps overly terse for a tool with five parameters and multiple sibling alternatives, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters and an output schema present, the description covers the core action but omits anything about result shape, pagination limits, or how to choose engines/categories. Adequate but with clear gaps given the sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters (query, pageno, engines, language, categories) are documented in the schema itself. The description adds no syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Perform a web search') and resource, plus the backend ('SearXNG metasearch instance'). It does not distinguish this from siblings like searxng_search_app or searxng_ingest_search, leaving the agent to infer which search variant to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of when the sibling search tools (searxng_search_app, searxng_ingest_search) would be preferable. The agent must guess based on name alone.
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.
5 tool updates
v2.3.2- Added
searxng_get_settings - Added
searxng_ingest_search - Added
searxng_reset_settings - Added
searxng_search_app - Added
searxng_set_settings
1 tool update
v0.11.1- Changed
web_search13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / categories / descriptionPrevious value: -"Categories to search in (e.g., 'general', 'images', 'news'). Default: null (all categories)."New value: +"Optional list of categories to search in (e.g. general, news, science, files, images, videos, music, it, social_media)" - changed
Input schema / properties / engines / descriptionPrevious value: -"Specific search engines to use. Default: null (all available engines)."New value: +"Optional list of specific search engines to use" - changed
Input schema / properties / language / defaultPrevious value: -"en"New value: +"en-US" - changed
Input schema / properties / language / descriptionPrevious value: -"Language code for search results (e.g., 'en', 'de', 'fr'). Default: 'en'"New value: +"Language code for search results (e.g. en-US)" - removed
Input schema / properties / max_resultsRemoved value: -{ - "default": 10, - "description": "Maximum number of search results to return. Range: 1-50. Default: 10.", - "maximum": 50, - "minimum": 1, - "type": "integer" -} - changed
Input schema / properties / pageno / descriptionPrevious value: -"Page number for results. Must be minimum 1. Default: 1."New value: +"Page number of results to fetch" - removed
Input schema / properties / pageno / minimumRemoved value: -1 - removed
Input schema / properties / query / defaultRemoved value: -null - changed
Input schema / properties / query / descriptionPrevious value: -"Search query"New value: +"Search query to submit to SearXNG" - removed
Input schema / properties / safesearchRemoved value: -{ - "default": 1, - "description": "Safe search level: 0 (off), 1 (moderate), 2 (strict). Default: 1 (moderate).", - "type": "integer" -} - removed
Input schema / properties / time_rangeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Time range for search results. Options: 'day', 'week', 'month', 'year'. Default: null (no time restriction)." -} - added
Input schema / requiredAdded value: +[ + "query" +]
1 tool update
v1.0.0- First observed
web_search
TDQS
Scored across 6 tools
The tools are mostly distinct: settings get/set/reset are clearly separated, and the UI app is visibly different from raw search. However, web_search and searxng_ingest_search both perform SearXNG searches, so an agent must read descriptions carefully to choose between plain search and graph-ingesting search.
Five tools consistently use the searxng_ prefix with clear verb/object naming (ingest_search, get_settings, set_settings, reset_settings, search_app). The lone web_search tool is an understandable but noticeable deviation from that pattern.
Six tools is well-scoped for a SearXNG server: core search, graph ingestion, settings lifecycle, and an interactive UI. Each tool has a clear purpose, and none feels redundant or excessive.
The surface covers search, ingestion, full embedded-settings lifecycle, and an interactive UI, so there are no major dead ends. Minor gaps remain around richer search-result inspection or external-instance configuration, but core workflows are covered.
Maintenance
Related MCP Connectors
Search the web, images, videos, news, and local businesses with robust filters, freshness controls…
Multi-engine web and platform search, news, Google Maps places, page reading, sitemaps, and trends.
Google, Bing, DuckDuckGo and Google Maps search results, free without an API key.
Provides AI assistants with access to Seltz's powerful Web Search capabilities.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to perform privacy-respecting web searches through SearXNG, with support for multiple search engines, categories, and advanced filtering options.176 npm27MIT
- AlicenseAqualityDmaintenanceEnables web search, image search, and news search through a self-hosted SearXNG instance. Provides privacy-focused meta-search capabilities aggregating results from multiple search engines.3176 npm1MIT
- AlicenseAqualityDmaintenanceEnables web search capabilities via a SearXNG instance, allowing for filtered searches across categories like news, images, and science. It supports multi-language queries, time-range filtering, and safe search options to provide formatted results with metadata.1176 npmMIT
- FlicenseAqualityDmaintenanceEnables privacy-respecting web, image, video, and news searches through SearxNG metasearch engine, with options for URL fetching and time filtering.569 PyPI-