Skip to main content
Glama

Infobroker

One server. Every source. Research that delivers.

Infobroker는 웹 검색, 구조화된 지식, 학술, 아카이브, 콘텐츠 추출 API를 단일 도구 표면 뒤에 통합하는 다중 제공자 MCP 서버입니다. 15개의 제로 구성 제공자가 기본 제공됩니다 — 웹 검색, 사실 조회, 기사 가져오기 — 구성할 것이 없습니다. 5개의 추가 제공자는 API 키 또는 자체 호스팅으로 잠금 해제됩니다. 내장된 확증 엔진이 독립적인 소스를 교차 참조하여 확립된 사실과 논쟁 중인 주장을 구분합니다. 번들된 클라이언트 스킬이 원시 연구를 정제된 글로 변환합니다. Free first. Privacy always.

North Star

Infobroker는 도구로서의 Bothan Spynet입니다 — 독립적인 소스에 질의하고 결과를 단일하고 중립적인 인터페이스를 통해 라우팅하는 분산형 정보 네트워크입니다. 정보 순환 용어로 말하면, 당신은 방향을 제공하고 전파를 받습니다; 서버는 수집과 처리를 담당합니다.

Related MCP server: MCP Info Gatherer

Quick Start

cd Infobroker && npm install && npm run start

이것을 OpenCode 구성(~/.config/opencode/opencode.json)에 추가하세요:

{
  "instructions": [
    "<path-to-Infobroker>/instructions/search-preferences.md"
  ],
  "skills": {
    "paths": [
      "<path-to-Infobroker>/skills",
      "<path-to-opencode-config>/skills"
    ]
  },
  "mcp": {
    "infobroker": {
      "type": "local",
      "command": ["node_modules/.bin/tsx", "src/index.ts"],
      "cwd": "<path-to-Infobroker>",
      "environment": {
        "INFOBROKER_CONFIG": "<path-to-Infobroker>/config.json"
      }
    }
  }
}

mcp 블록이 서버를 시작합니다; instructions와 skills 블록이 번들된 클라이언트 스킬을 활성화합니다. 그것들이 없으면 스킬은 저장소에 포함되지만 비활성 상태로 남습니다.

무료 제공자는 즉시 작동합니다. API 키 제공자 — Brave, Exa, Tavily, SearXNG — 더 높은 처리량과 특화된 검색을 잠금 해제합니다:

export INFOBROKER_BRAVE_API_KEY="your-key"
export INFOBROKER_EXA_API_KEY="your-key"

요구 사항: Node.js 20+.

MCP Server

당신의 연구 백엔드. 여섯 개의 도구, 스무 개의 제공자, 하나의 확증 엔진. 완전한 기능 목록은 스펙의 기능 분류에 문서화되어 있습니다.

"두 번째 데스 스타의 위치를 검색해 줘." "하이퍼스페이스 항행 이론에 대한 학술 논문을 찾아줘."

web_search는 하나의 질의를 답할 수 있는 모든 제공자에게 보냅니다. DuckDuckGo, Wikipedia, 학술 데이터베이스, 뉴스, 코드 저장소를 검색하거나 — 작업을 설명하면 서버가 최적의 소스를 선택합니다. 실패한 제공자는 구성 가능한 체인을 통해 조용히 폴백하므로 오류 메시지 대신 결과를 얻습니다. 다른 검색 도구는 하나의 엔진에 고정되어 있습니다; Infobroker는 모든 질의를 올바른 제공자에게 라우팅하고 하나가 실패해도 계속 진행합니다.

Content Extraction

"야빈 전투에 관한 기사를 가져와서 요약해 줘." "데스 스타 계획에 관한 그 페이지의 텍스트를 가져와 줘."

fetch_page는 모든 URL을 Jina Reader에 넘기며, Jina Reader는 LLM 소비에 최적화된 깨끗한 Markdown으로 렌더링합니다. Jina가 제한되면 네이티브 HTTP로 폴백합니다. Wikipedia와 Internet Archive는 소스별 추출을 위한 전용 렌더러를 가지고 있습니다. 내장된 웹 페처는 원시 HTML을 반환합니다; Infobroker는 모든 소스에서 깨끗하고 읽기 쉬운 콘텐츠를 제공합니다 — 요약이나 분석에 바로 사용할 수 있습니다.

Provider Intelligence

"데스 스타의 약점을 연구하려면 어떤 소스를 사용해야 할까?" "사용 가능한 모든 소스와 할당량 상태를 보여줘."

서버는 자신의 능력을 알고 있습니다. web_search는 작업에 가장 적합한 백엔드를 자동 선택하며, 능력, 할당량, 지연 시간을 고려합니다 — 또는 프라이버시, 속도, 무료 전용 소스를 요청하면 의도에 따라 라우팅합니다. providers는 모든 구성된 소스를 표시하고 단일 제공자의 가동 시간과 오류 이력을 상세히 보여줍니다. 다른 검색 MCP 서버는 모든 백엔드에 대한 운영 가시성을 제공하지 않습니다.

Multi-Source Verification

"제국이 정말 알데란을 파괴했는지 검증해 줘." "누가 먼저 쐈는지 — 한인지 그리도인지 — 합의를 찾아줘."

corroborate는 다중 패스 진실 찾기 루프를 실행합니다: 활성 제공자에 대한 광범위한 검색, 주장 추출, 소스 간 대조, 격차에 대한 목표 지향적 후속 조치. 독립적인 소스에서 확증된 주장은 각 소스의 권위에 따라 가중된 높은 신뢰도를 얻습니다; 모든 소스는 그것이 지지하는 주장에 바인딩됩니다. 모순은 모든 관점과 함께 표면화됩니다. 격차는 정제된 질의를 촉발합니다. 당신은 구조화된 보고서를 얻습니다 — 확인됨, 논쟁 중, 미검증된 발견 — 소스 출처, 소스별 주장, 신뢰도 점수와 함께. 다른 모든 검색 도구는 링크 목록을 반환합니다; Infobroker는 진실을 찾고 얼마나 확신하는지 알려줍니다.

Knowledge Base

"반란군 함대에 대해 이미 찾은 것을 검색해 줘." "이 기사를 수집해서 다음에 캐시되게 해 줘."

모든 검색, 가져오기, 확증 실행은 로컬 지식 베이스에 캐시됩니다. kb는 외부 제공자에 접근하기 전에 캐시를 확인합니다 — 캐시된 결과가 충분히 새롭지 않거나 관련성이 없을 때만 네트워크로 폴백합니다. 그것의 액션은 텍스트나 URL을 수동으로 수집하고, 캐시된 내용을 보고하고, 콘텐츠를 제거합니다. 콘텐츠는 연령 점수가 매겨지고, 신선도 일정에 따라 만료되며, 소스별로 중복 제거됩니다. 캐시를 넘어, kb는 당신이 생성한 보고서를 보관합니다: source_type: "report"로 수집하고(기본값은 지식 베이스) kb list와 kb get으로 다시 방문하거나, 대신 로컬 디렉토리에 씁니다. 다른 검색 MCP 서버는 매 세션마다 같은 사실을 다시 가져옵니다; Infobroker는 이미 찾은 것을 기억하고 재사용합니다.

Research Pipeline

"데스 스타 건설을 연구한 다음 요약을 초안으로 작성해 줘." "다스 베이더의 기원에 대한 이 주장들을 사실 확인해 줘."

Infobroker는 검색 결과에서 멈추지 않습니다. 번들된 클라이언트 스킬이 그것의 도구를 작성 파이프라인으로 연결하며, 모든 요청을 해결된 워크플로 형태와 작성 하위 스킬을 통해 라우팅하여 완성된 문서가 반대쪽 끝에서 나올 때까지 진행합니다. 모든 것이 저장소에 있습니다 — 외부 경로나 별도 설치 없음. 전체 파이프라인 — 여섯 개의 스킬, 워크플로 형태, 에스컬레이션 경로 — 는 스킬 섹션에 상세히 설명되어 있습니다. 다른 검색 MCP 서버는 검색 결과를 생성합니다; Infobroker는 완성된 작업을 생성합니다.

Operational Visibility

"서버 상태를 보여줘." "재시작 없이 내 구성을 핫 리로드해 줘."

쿼터 카운터는 디스크에 저장되며 재시작 후에도 유지됩니다. 속도 제한은 전역이 아니라 공급자별로 적용됩니다. 구성은 reload_config를 통해 핫 리로드가 가능합니다 — 연결을 끊지 않고 공급자를 변경하거나, 체인을 조정하거나, 임계값을 수정할 수 있습니다. web_search는 DuckDuckGo 쿼리 자동 완성으로도 사용됩니다. providers는 서버의 빌드 상태와 요청 통계를 보고합니다. 검색 서버가 무엇을 하고 있는지, 얼마나 많은 용량이 남아 있는지 항상 알 수 있습니다.

스킬

MCP 서버는 제품의 절반입니다. 번들로 제공되는 스킬이 나머지 절반입니다. 저장소에는 6개의 클라이언트 스킬이 포함되어 있습니다 — 외부 의존성도, 별도 설치도 없이 — 원자재 연구를 완성된 작업물로 바꿔줍니다.

오케스트레이터 스킬(infobroker)은 분류 게이트로 시작하여 요청을 워크플로 형태에 매핑합니다: 연구-후-작성, 사실 확인, 심층 분석, 경쟁 평가, 문헌 검토, 모니터링, 레드팀, 검증, 또는 게이트 분석. 각 형태는 동일한 기본 요소들 — 지식 베이스에서의 회상, 검색, 추출, 검증, 작성, 인용 — 을 고유한 순서로 조합하며, 결과를 확인할 수 있도록 grep 가능한 완료 토큰으로 끝납니다. 4개의 작성 하위 스킬이 작성 단계를 실행합니다: summarization은 작성 전에 결과를 요약하고, technical-writing은 보고서와 문서를 초안하며, proofreading은 언어를 다듬고, translation은 다국어 출력을 생성합니다.

게이트 분석은 에스컬레이션 형태입니다. 질문이 고위험 또는 의사 결정을 좌우하는 경우, 분류 게이트는 더 가벼운 연구-후-작성 경로가 아닌 analysis-loop 스킬로 라우팅합니다 — 신뢰도 점수가 매겨진 결과, 출처 신뢰성 등급, 구조화된 분석 기법을 갖춘 체계적인 경로입니다. 동일한 기본 요소와 Infobroker 도구를 공유하지만 자체 게이트 워크플로를 실행하므로 파이프라인을 벗어나지 않고도 엄격함을 얻을 수 있습니다.

단일 지침 파일인 search-preferences.md는 클라이언트를 이러한 도구로 안내합니다: 지식 베이스를 먼저, 캐시가 부족할 때만 외부 공급자를 사용합니다. OpenCode 구성에 이 파일과 스킬 디렉터리를 한 번만 연결하면 됩니다 — 위의 Quick Start에 정확한 스니펫이 있습니다 — 그러면 모든 연구 요청이 자동으로 파이프라인을 따릅니다.

skills/에 자신만의 스킬을 작성하여 고유한 워크플로 형태를 추가할 수 있습니다. 파이프라인 다이어그램은 references/pipeline-map.md에, 워크플로 형태 정의는 references/workflows.md에 있습니다. 다른 검색 MCP 서버는 링크를 반환합니다. Infobroker는 이를 문서화된 답변으로 바꾸는 작성자를 제공합니다.

공급자

20개의 공급자. 15개는 구성 없이 작동합니다.

공급자

등급

유형

키 필요

DuckDuckGo

내장

웹 검색

아니요

Jina Reader

무료 HTTP

콘텐츠 추출

아니요

Wikipedia

무료 HTTP

백과사전

아니요

Wiktionary

무료 HTTP

사전

아니요

Wikidata

무료 HTTP

구조화된 사실

아니요

OpenStreetMap

무료 HTTP

지오코딩

아니요

Internet Archive

무료 HTTP

역사 자료

아니요

arXiv

무료 HTTP

학술

아니요

Semantic Scholar

무료 HTTP

학술

선택 사항

Stack Exchange

무료 HTTP

코드 Q&A

선택 사항

GitHub

무료 HTTP

코드 검색

선택 사항

CORE

무료 HTTP

오픈 액세스

선택 사항

Marginalia

내장

소규모 웹

아니요

Mojeek

내장

독립 인덱스

아니요

Wiby

내장

소규모 웹

아니요

Brave Search

키 필요 HTTP

웹, 뉴스

예

Exa

키 필요 HTTP

의미 검색

예

Tavily

키 필요 HTTP

종합

예

Yep

키 필요 HTTP

웹, 의미 검색

예

SearXNG

자체 호스팅

완전한 프라이버시

예 (자체)

내장 및 무료 HTTP 공급자는 기본적으로 활성화되어 있습니다. 키 필요 공급자는 API 키로 활성화됩니다. 자체 호스팅 공급자는 직접 실행하는 서버를 가리킵니다:

export INFOBROKER_BRAVE_API_KEY="BSA-..."
export INFOBROKER_SEARXNG_URL="http://localhost:8080"

그런 다음 config.json에서 해당 공급자에 대해 "enabled": true로 설정합니다.

SearXNG는 제공되는 유일한 자체 호스팅 공급자이며, 처음부터 끝까지 선택 사항입니다. 서버의 어떤 것도 이를 요구하지 않으며, 이를 대신해 번들되거나 설치되는 것도 없습니다 — SearXNG는 사용자가 운영하는 컨테이너로 실행되며, Infobroker는 다른 백엔드와 마찬가지로 JSON 엔드포인트를 쿼리합니다. 비활성화된 상태(기본값)로 두어도 잃는 것은 없습니다: 프라이버시 중요 체인은 여전히 DuckDuckGo와 Mojeek을 통해 서비스됩니다. 완전한 쿼리 프라이버시를 원할 때만 활성화하세요. 이 경우 사용자의 쿼리는 사용자 자신의 SearXNG 인스턴스만 볼 수 있습니다.

구성

변수

용도

INFOBROKER_CONFIG

config.json 경로 (기본값: ./config.json)

INFOBROKER_CONFIG_LOCAL

사용자 구성 레이어의 선택적 경로 (기본값: config.local.json)

INFOBROKER_<NAME>_API_KEY

키 필요 공급자의 API 키

INFOBROKER_<NAME>_URL

자체 호스팅 공급자의 URL

config.json은 저장소와 함께 제공되며 기본값을 보유합니다: 활성화된 공급자, 폴백 체인에서의 우선순위, 속도 제한, 교차 검증 매개변수, 작업-대-공급자 디스패치 테이블. reload_config를 통해 핫 리로드 가능 — 파일을 편집하고, 도구를 호출하면 재시작 없이 변경 사항이 적용됩니다.

사용자 자신의 재정의는 별도의 사용자 레이어에 있습니다 — 프로젝트 디렉터리의 config.local.json (또는 INFOBROKER_CONFIG_LOCAL로 설정한 경로). 이 파일은 git-ignored이므로 저장소에서 업데이트를 가져와도 설정이 덮어쓰이지 않습니다. 사용자 레이어의 값은 제공된 기본값보다 우선합니다. 생략된 항목은 config.json으로 폴백됩니다.

지식 베이스는 비어 있는 상태로 제공됩니다. 기본적으로 저장소 외부의 사용자 범위 경로(~/.local/share/infobroker/knowledge-base)에 기록되므로, 연구하고 캐시한 콘텐츠는 사용자 머신에 유지되며 커밋되지 않습니다. 각 배포 인스턴스는 자체 저장소를 축적합니다.

지식 베이스 암호화

연구 보고서와 캐시된 페이지는 민감할 수 있으며, 지식 베이스는 이를 홈 디렉터리의 단일 파일에 저장합니다. kb.encryption 블록을 추가하고 키를 제공하여 선택적 저장 시 암호화를 활성화하세요:

{
  "kb": {
    "encryption": { "enabled": true, "key_file": "~/.config/infobroker/kb.key" }
  }
}

키 파일(일반 텍스트, 0600)은 MCP 클라이언트와 운영 체제 전반에서 가장 안정적인 소스입니다. INFOBROKER_KB_KEY(32바이트 키) 또는 INFOBROKER_KB_PASSPHRASE(암호문)도 작동합니다. openssl rand -base64 32로 키를 생성하세요. 암호화는 키 없이 파일을 획득한 사람으로부터 저장소와 디스크에 저장된 보고서를 보호합니다 — 기기 도난, 백업 또는 클라우드 동기화 유출, 기타 로컬 계정. 동일한 머신의 악성 MCP 클라이언트나 맬웨어로부터는 보호하지 않으며, 이는 전체 디스크 암호화가 담당합니다.

두 가지 규칙이 이를 안전하게 유지합니다. 첫째, 암호화는 사용자의 선택입니다: 키가 없거나 잘못된 경우 지식 베이스는 데이터를 건드리지 않고 잠기고 오류를 보고합니다 — 따라서 키를 백업하세요 (키나 암호문을 잊으면 저장소는 설계상 복구 불가능합니다). 둘째, 서버는 부분 파일을 절대 쓰지 않습니다: 모든 저장은 원자적이며, 인식할 수 없거나 더 새로운 저장소 형식은 절대 덮어쓰지 않습니다.

자체 엔드포인트 가져오기

소스 트리를 건드리지 않고도 모든 HTTP 검색 엔드포인트를 Infobroker 공급자로 만들 수 있습니다. config.local.json에 generic_http 공급자로 선언한 다음 디스패치 체인에서 참조하세요:

{
  "providers": {
    "my_search": {
      "tier": "generic_http",
      "capabilities": ["web_search"],
      "enabled": true,
      "priority": 20,
      "endpoint": "https://api.example.com/search",
      "query_param": "q",
      "results_path": "data.items",
      "field_map": { "title": "name", "url": "link", "snippet": "summary" }
    }
  },
  "dispatch": { "general_web": ["my_search", "duckduckgo"] }
}

서버는 endpoint?query_param=<query>를 GET하고, results_path(응답 JSON에 점으로 구분된 경로)를 탐색하며, field_map을 사용하여 각 결과를 공통 형태에 매핑합니다. config.local.json 재정의에 슬러그를 추가하고 reload_config를 호출하면 즉시 사용할 수 있습니다.

비교

도구 이름

익숙한 방식

Infobroker의 차이점

내장 websearch / webfetch

검색 엔진 하나, 가져오기 모드 하나, 구성 없음, 어떤 백엔드가 사용되는지 확인 불가

통합 도구 표면을 갖춘 15개의 제로 구성 공급자. 각 작업에 적합한 소스를 선택하세요. 실패 시 자동으로 폴백합니다. 모든 공급자의 상태와 쿼터를 확인하세요.

원시 API 호출

수동 HTTP 요청, 공급자별 인증, 공급자별 응답 파싱, 폴백 없음, 쿼터 추적 없음

모든 공급자에 대한 단일 인터페이스. API 키는 한 번만 구성. 결과는 공통 형태로 정규화. 속도 제한과 쿼터가 자동으로 추적됩니다.

전용 검색 API

쿼리당 과금, 벤더 종속, 불투명한 라우팅

무료 우선 설계. DuckDuckGo, Wikipedia 및 13개의 다른 공급자가 제로 구성으로 작동합니다. Brave, Exa, Tavily로의 업그레이드 경로. 완전한 프라이버시를 위한 자체 호스팅 SearXNG.

기타 검색 MCP 서버

단일 공급자 중심, 폴백 없음, 교차 검증 없음, 작성 파이프라인 없음

자동 폴백이 있는 다중 공급자. 교차 검증 엔진이 독립 출처를 상호 참조합니다. 번들 작성 스킬이 연구를 완성된 문서로 변환합니다.

내장 검색이 있는 AI

모델이 검색 엔진을 선택하고, 오래된 캐시를 제공하며, 재현성 없음

공급자 체인을 직접 제어합니다. 쿼리는 재현 가능합니다. 폴백 동작이 표시됩니다. 교차 검증 엔진이 독립 출처 간에 사실을 검증합니다.

다른 모든 검색 MCP 서버는 공급자를 선택하고 신뢰하라고 요구합니다. Infobroker는 함대를 제공합니다 — 그리고 각 작업에 적합한 공급자를 선택합니다. 공급자가 실패하면 다음 공급자가 눈치채지 못하게 인계받습니다. 주장이 중요할 때 교차 검증 엔진은 일치, 모순, 그리고 공백을 찾아냅니다. 번들 스킬은 원자재 연구에서 완성된 작성까지의 루프를 닫습니다. 하나의 서버. 모든 소스. 결과를 전달하는 연구.

최종 업데이트: 2026-08-23.

기여

  • Node.js 20+. node --version. nodejs.org에서 받으세요.

  • npm install && npm run typecheck

  • skills/에 자신만의 스킬을 번들하여 연구 파이프라인을 확장하세요.

  • README 구조 검증: npm run validate-readme

  • 버전 관리: CalVer (YYYY.MM.DD). npm run version-bump이 모든 버전 참조에 오늘 날짜를 표시합니다. 사전 커밋 훅이 일관성을 검증합니다. npm run push는 확인, 태그 지정, 푸시를 수행합니다.

  • MCP 프로토콜: modelcontextprotocol.io

  • 공급자: DuckDuckGo · Jina Reader · Wikipedia API

정식 원본: git.gay/flukeatzerocool/Infobroker. 이 GitHub 저장소는 읽기 전용 미러입니다.

라이선스

MIT. 자유롭게 사용, 수정, 재배포할 수 있습니다. 번들로 제공되는 클라이언트 스킬과 지침 파일도 동일한 라이선스로 배포되므로, 전체 연구 파이프라인 — 서버, 스킬, 문서 — 은 상업적 및 오픈소스 작업 모두에서 자유롭게 재사용할 수 있습니다. 타사 제공업체는 자체 약관과 API 키의 적용을 받습니다.

사양

서버는 단일 소스 사양인 infobroker.md (v2026.08.23)로 구축되며, 이 사양은 모든 요구사항과 이를 검증하는 게이트를 정의합니다. 각 요구사항은 구현 파일로 추적되며, npm run check는 코드, 사양, 그리고 이 README를 조정하여 문서화된 내용이 서버가 실제로 제공하는 기능과 일치하도록 보장합니다.

Available Tools

7 tools
infobroker_fetch_pageFetch Page ContentA
Idempotent

Fetch a URL and extract clean content via a renderer (Jina Reader by default; native-HTTP, Wikipedia, Internet Archive, arXiv, and Stack Exchange alternatives). Use when you have a URL and need readable text, passages ranked against a question, or the page's last-updated date. Do NOT use for topic search (use infobroker_search_web) or cross-source claim verification (use infobroker_verify_claims). question returns passages ranked against it, sized by passage_size and capped by max_passages; crawl bounds the same-origin crawl to config caps; extract adds JSON-LD, OpenGraph, and microdata; renderer selects the backend, and native_fetch is the keyless fallback when Jina is throttled or anti-bot challenged. max_length truncates the returned text only; a truncated page is written in full to a temp file. Makes external HTTP calls and needs no API key. A fresh knowledge-base copy is returned before an outbound fetch when available. Fetched pages auto-index into the knowledge base unless the content policy flags them (see infobroker_manage_kb): flag mode returns without storage, block mode refuses. Unreachable URLs return an [ERROR] envelope with remediation; success returns an [OK] envelope with status, provider, results, and meta.

NameRequiredDescriptionDefault
urlYesURL to fetch: a single URL, or up to five URLs fetched in parallel
crawlNoBounded same-origin crawl: recursively fetch same-origin pages up to config caps (default off)
extractNoReturn structured metadata (JSON-LD, OpenGraph, microdata) alongside the content (default off)
questionNoQuestion to extract ranked passages for, instead of returning the whole page
rendererNoRenderer: jina (default), native_fetch, wikipedia, internet_archive, arxiv, or stack_exchange
max_lengthNoMaximum characters to return (default 50000)
detect_dateNoDetect and report the page's last-updated date (default from config)
max_passagesNoNumber of passages to return (default from config)
passage_sizeNoTarget words per passage (default from config)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, openWorldHint=true, idempotent=true, destructive=false, but the description adds substantial context beyond them: external HTTP calls, no API key needed, knowledge-base cache returned before an outbound fetch, auto-indexing with content-policy flag/block behavior, and [OK]/[ERROR] envelopes with remediation. The only minor gap is it doesn't caveat that 'idempotent' can be undermined by live page changes, and the content-policy details are deferred to infobroker_manage_kb.

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?

Purpose is front-loaded in the first clause, followed by usage routing, then parameter behavior, then behavioral caveats. It is dense and backtick-heavy, packing many clauses per sentence, but nearly every sentence carries distinct information; slight tightening would improve readability without losing content.

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

Completeness4/5

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

For a 9-parameter, no-output-schema, network-touching tool, the description covers the important gaps: return envelopes, error handling, caching, and KB side effects. It relies on a pointer to infobroker_manage_kb for policy details rather than explaining them, and the shape of 'results' and 'meta' within the [OK] envelope is left implicit, which keeps it one step shy of complete.

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 coverage is 100%, so baseline is 3, but the description adds genuine value: the interaction between question/passage_size/max_passages, the crawl config caps, what extract returns, and the operational reason to pick native_fetch (keyless fallback when Jina is throttled or anti-bot challenged). It also clarifies that max_length truncates only the returned text and that the full page is written to a temp file. It omits any mention of detect_date, which keeps it from a 5.

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?

States a specific verb and resource ('Fetch a URL and extract clean content') plus the renderer backends, and explicitly distinguishes itself from infobroker_search_web and infobroker_verify_claims. An agent can identify this as the single-URL content retrieval tool without opening the schema.

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?

Gives an explicit use condition ('when you have a URL and need readable text, passages ranked against a question, or the page's last-updated date') and explicitly names two anti-cases with the sibling tools to use instead. This is the when/when-not/alternative pattern at full strength.

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

infobroker_get_citationsGet CitationsA
Read-onlyIdempotent

Return academic references for a query as BibTeX citations with title, authors, year, venue, and URL. Use when scholarly writing needs a reference list. Do NOT use for general web search (use infobroker_search_web) or contested-claim verification (use infobroker_verify_claims). query is a natural-language topic; max_results sets the reference count, and larger values take longer and span more sources. Needs no API key when at least one scholarly source is reachable; if every source fails it returns an [ERROR] envelope with remediation, and queries respect per-provider rate limits. Returns an [OK] or [ERROR] JSON envelope.

NameRequiredDescriptionDefault
queryYesSearch query
max_resultsNoMaximum references to return (1-30, default 8)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, but the description adds behavior they cannot express: no API key required when a scholarly source is reachable, per-provider rate limits, and an [ERROR] envelope with remediation when every source fails. This is meaningful operational context for a read tool.

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?

Front-loaded with purpose, then usage rules, then parameter and failure behavior — a sensible ordering. It is dense (four sentences covering a lot), but every clause carries distinct information rather than restating the schema.

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?

No output schema exists, yet the description still specifies the return format (BibTeX fields) and the envelope contract ([OK]/[ERROR] with remediation). For a two-parameter, read-only tool, 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, and the description earns extra credit by clarifying that `query` is a natural-language topic and that larger `max_results` values 'take longer and span more sources' — a latency/coverage tradeoff the schema does not state.

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?

States a specific verb and resource ('Return academic references for a query') plus the exact output shape (BibTeX with title, authors, year, venue, URL). An agent can distinguish this from search_web and verify_claims without opening any schema.

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?

Explicitly names the trigger ('when scholarly writing needs a reference list') and two exclusions with the sibling to use instead (infobroker_search_web for general web search, infobroker_verify_claims for contested-claim verification). Nothing is left to inference.

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

infobroker_inspect_providersInspect ProvidersA
Read-onlyIdempotent

Inspect configured search providers: list their state, run a live health check, or report build and spec identity. Use when searches return empty or slow results and you want provider status, quota, or latency, or when choosing which backend to trust. Do NOT use to search (use infobroker_search_web) or to read a page (use infobroker_fetch_page). Read-only: it never modifies configuration, providers, or stored data. list snapshots provider state (including each provider's derived privacy posture) and status filters it; health runs a live outbound probe against provider (required for the health action; subject to that provider's rate limits, so it can be slow); spec reports build and spec identity plus local state health (config drift, backend capabilities, update status). Returns an [OK] or [ERROR] JSON envelope with status, provider, and results.

NameRequiredDescriptionDefault
actionYesOperation to perform
statusNoFilter for list action
providerNoProvider slug (required for health)

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint/destructiveHint annotations it adds operative facts: it never modifies configuration or stored data, `health` is a live outbound probe subject to the provider's rate limits and 'can be slow', and `provider` is required for that action. It also discloses the [OK]/[ERROR] JSON envelope, which annotations cannot convey.

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?

Front-loaded with the core purpose and organized use-case → anti-use-case → semantics → return shape, with no filler sentences. It is dense and heavily backticked, which makes it slower to parse than necessary, but every clause carries information.

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?

There is no output schema, and the description closes that gap by describing the return envelope and the result fields (status, provider, results). For a three-parameter, read-only inspection tool, an agent has everything needed to call it correctly and interpret slowness on `health`.

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 coverage is 100%, but the schema descriptions are near-useless ('Operation to perform'), and the description compensates by explaining what each action does ('list' snapshots, 'status' filters it, 'health' probes, 'spec' reports identity). It stops short of explaining the 'active'/'all' enum values, so a small semantic gap remains.

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 clause names a specific verb and resource ('Inspect configured search providers') and enumerates the three sub-behaviors (state, health check, build/spec identity). It explicitly distinguishes itself from infobroker_search_web and infobroker_fetch_page, so an agent can route without opening the schema.

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?

Gives a concrete trigger ('when searches return empty or slow results', 'choosing which backend to trust') and explicit negative routing ('Do NOT use to search... or to read a page') naming both alternatives. This is the when/when-not/alternatives pattern at full strength.

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

infobroker_manage_kbKnowledge BaseA
Destructive

Manage the local knowledge base: search cached content, ingest text or URLs, list/get/delete entries, view stats, read persisted claim records, and manage at-rest encryption. Use when you need to archive a generated report (ingest with source_type 'report' and save_to 'kb'), revisit stored content, or manage encryption keys. Do NOT use for fresh external search (use infobroker_search_web) or to fetch a new page (use infobroker_fetch_page). The delete action is destructive and cannot be undone; a lost encryption key makes the store unrecoverable by design. Parameter semantics: action selects the operation; query for search, text/url plus title and collection for ingest, source_url for get/delete, and operation with key_file for the encryption sub-actions; source_type and freshness_tier tag an ingest and filter search/list; save_to defaults to 'kb', format to 'markdown', max_results to 8; last_updated is auto-detected from fetched URLs when omitted; receipt attaches a claim-to-source manifest to a report ingest and verify_report rechecks it offline. Responses carry an [OK] or [ERROR] envelope: search/list/get return entries, stats returns counts, delete reports the chunks removed.

NameRequiredDescriptionDefault
urlNoURL to fetch and index (for ingest action)
textNoRaw text to index (for ingest action)
queryNoSearch query (search action) or claim-text filter (claims action)
titleNoDocument/report title
actionYesOperation to perform
formatNoFile format for disk savemarkdown
receiptNoOptional verification receipt for a report ingest (REQ-110): claims with cited sources and optional report metadata (REQ-114). The server computes the report hash, per-source hashes, and the digest; any caller hashes or digest are ignored. Requires source_type 'report' and KB storage.
save_toNoWhere to save (ingest action): kb, disk, or both. Default kb
key_fileNoPath to a key file (generate_key writes here; rekey reads the target key from here). Never pass the secret itself — only a file path.
operationNoSub-operation for the 'encryption' action
collectionNoCollection name
source_urlNoSource URL filter (get/delete/claims action), the report identity for verify_report, or identity for ingest
max_resultsNoMaximum results to return (search/claims action; 1-50, default 8)
source_typeNoSource type (tag on ingest; filter on search/list)
last_updatedNoSource last-updated date to store (e.g. '2026-08-24'); auto-detected from fetched URLs when omitted
freshness_tierNoFreshness tier tag on ingest (e.g. 'report', 'evergreen')

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the annotations it pinpoints which action is destructive ('delete ... cannot be undone') and discloses a non-obvious irreversibility (lost encryption key makes the store unrecoverable by design), plus the [OK]/[ERROR] response envelope and per-action return shapes. It does not address re-ingest idempotency or duplicate handling, which matters given idempotentHint=false. No contradiction with destructiveHint/openWorldHint.

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?

Purpose and the use/do-not-use routing are front-loaded in the first three sentences, which is the right ordering for a 9-action multiplexed tool. The trailing 'Parameter semantics:' block is a dense run-on that could be tabled, but every clause carries operational information rather than filler.

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 16-parameter, 9-enum, nested-object tool with no output schema, the description covers everything needed to call it: action selection, per-action parameter pairing, destructive and unrecoverable failure modes, and response shape per action. Nothing material is left to inference.

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 coverage is 100%, so the baseline is 3; the description adds the cross-parameter mapping the schema lacks, notably which params pair with which `action` (query→search, text/url+title/collection→ingest, source_url→get/delete, operation+key_file→encryption). It also restates defaults (save_to 'kb', format 'markdown', max_results 8) and the last_updated auto-detection rule, though most of this duplicates existing schema descriptions.

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 opens with a specific verb+resource ('Manage the local knowledge base') and then enumerates the concrete operations (search, ingest, list/get/delete, stats, claims, encryption). It explicitly separates itself from the siblings infobroker_search_web and infobroker_fetch_page, so an agent can route without opening any schema.

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?

It gives an explicit trigger ('Use when you need to archive a generated report... or manage encryption keys') including the exact parameter combination (source_type 'report' + save_to 'kb'), and explicit exclusions naming the two alternative tools for fresh search and page fetch. When-to-use, when-not, and alternatives are all present.

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

infobroker_reload_configReload ConfigurationA
DestructiveIdempotent

Re-read the configuration file and apply provider, rate-limit, and knowledge-base changes without restarting; active connections are preserved. Use when you have edited config.json or config.local.json, or when passing patch to change configuration programmatically. Do NOT use to inspect configuration or provider state (use infobroker_inspect_providers). patch deep-merges a partial config into the user layer (config.local.json), rejecting unknown top-level keys, backing up the previous layer, and validating the merged result before writing; migrate true backs up and applies registered user-layer migrations before reloading. The call re-reads the startup configuration source and reports any user-layer schema drift. If the new configuration is invalid, the previous configuration stays active and an error is returned. Returns an [OK] or [ERROR] JSON envelope.

NameRequiredDescriptionDefault
patchNoPartial configuration deep-merged into the user layer (config.local.json) before reloading; unknown top-level keys are rejected and the previous layer is backed up
migrateNoBack up and apply registered user-configuration-layer migrations before reloading (default false)

TDQS

A4.6/5.0
Behavior4/5

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

Goes well past the annotations (destructiveHint=true, idempotentHint=true, openWorldHint=true) by disclosing the write/merge sequence: deep-merge into config.local.json, rejection of unknown top-level keys, backup of the previous layer, validation before writing, migration ordering, and the failure semantics (invalid config leaves the previous config active and returns an error). It also names the response envelope. It does not mention auth requirements or whether the backup file location is exposed, which keeps it below 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.

Conciseness4/5

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

Front-loaded with purpose, then usage routing, then behavioral detail; every sentence conveys a distinct fact and none is filler. It is dense (long semicolon-chained clauses) and slightly heavy for a two-parameter tool, but the mutation risk justifies the depth.

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?

Despite having no output schema, the description states the return contract ([OK] or [ERROR] JSON envelope), covers the failure path and rollback behavior, and describes both parameters' effect on disk state. Nothing essential for calling 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 coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: patch is defined as a deep-merge into the user layer with unknown-key rejection and pre-write validation of the merged result, and migrate is described in terms of backup plus registered migration application ordered 'before reloading'. That ordering and validation detail is not in the schema descriptions.

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?

Specific verb (re-read/apply) plus resource (configuration file) and the exact classes of changes applied (provider, rate-limit, knowledge-base) with the key constraint 'without restarting; active connections are preserved'. It also differentiates itself from the sibling infobroker_inspect_providers, so an agent can route without opening the schema.

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?

Explicit trigger ('Use when you have edited config.json or config.local.json, or when passing patch'), an explicit exclusion ('Do NOT use to inspect configuration or provider state') and the named alternative to use instead. Both the positive and negative conditions are stated, not implied.

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

infobroker_search_webWeb SearchA
Read-onlyIdempotent

Search the web, encyclopedia, academic, and code sources through one interface with automatic provider selection and a fallback chain. Use when you need broad or batched search, query autocomplete (suggest), query expansion (expand), ranked passages from the top pages (deep), or a multi-variant research compile that deep-reads each variant (research), and optional in-process analysis of the returned results (analyze: topics, entities, clusters, timeline). Do NOT use for a URL you already have (use infobroker_fetch_page), for high-stakes claim verification (use infobroker_verify_claims), for stored-report recall (use infobroker_manage_kb search), or for academic citations (use infobroker_get_citations). Caches results in the local knowledge base, enforces per-provider rate limits, and needs no API key for the free providers. fresh: true skips KB recall and searches external providers. Returns a JSON envelope prefixed [OK] or [ERROR] with status, provider, results, and meta.

NameRequiredDescriptionDefault
deepNoRead the top results and return each page's ranked passages against the query
pageNoResults page number (default 1)
freshNoSkip the knowledge-base recall shortcut and search external providers (default false)
queryYesSearch query: a single string, or up to five strings searched in parallel
expandNoReturn query-expansion strings instead of search results
regionNoISO region/country code (e.g. 'us-en', 'DE')
analyzeNoAttach in-process analysis to the response: topic terms, entity mentions, semantic result clusters, and a dated timeline. Derived from the returned results only; adds no outbound request (default false)
suggestNoReturn query-autocomplete strings instead of results (default false)
languageNoPreferred result language (ISO 639-1, e.g. 'de'). Providers that cannot honor it report it in meta.ignored_params
priorityNoRoute by intent: speed, quality, privacy, or free_only
providerNoProvider slug (auto-select if omitted)
researchNoResearch compile: fan out to derived query variants and deep-read each, returning passages grouped by variant (default off)
time_rangeNoRestrict results to day, week, month, or year
max_resultsNoNumber of results to return (1-30, default 8)
safe_searchNoSafe-search filtering: on, off, or strict (default on)on
content_typeNoSource kind to search: docs, issue, changelog, blog, spec, or all (default all)all

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare read-only, idempotent, non-destructive, open-world. The description adds material facts the agent cannot infer: results are cached in the local knowledge base (so results may be stale unless fresh:true), per-provider rate limits are enforced, free providers need no API key, and every response is an envelope prefixed [OK]/[ERROR] carrying status, provider, results, and meta.

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?

Three sentences, front-loaded with capability, then exclusions, then behavior — a sound order with no filler. However, the second sentence is an extremely dense parenthetical list of eight modes, and the exclusions are packed into one long sentence, making it harder to scan than a short bulleted structure would be.

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 16-parameter tool with no output schema, the description supplies the pieces an agent actually needs: what the modes do, when to pick a sibling instead, that caching can make results stale, that rate limits exist, and the shape of the return envelope. Nothing essential to correct invocation 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 coverage is 100%, so the baseline is 3, and the description goes slightly beyond it by explaining the operating modes (suggest, expand, deep, research, analyze) and the meaning of fresh:true in the context of the KB cache. It does not cover the remaining routing knobs (priority, region, language, time_range, content_type, max_results, page), which are left entirely to the schema.

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?

States a specific verb (search) and resource (web, encyclopedia, academic, code sources) plus the unifying mechanism (one interface, automatic provider selection, fallback chain). It then enumerates the distinct modes — suggest, expand, deep, research, analyze — so an agent can tell this apart from infobroker_fetch_page and infobroker_verify_claims without opening any schema.

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?

Explicitly names when to use it (broad or batched search, autocomplete, expansion, ranked passages, research compile) and four when-not cases each paired with the correct sibling tool ('Do NOT use for a URL you already have (use infobroker_fetch_page)... for academic citations (use infobroker_get_citations)'). This is the strongest possible routing guidance.

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

infobroker_verify_claimsVerify ClaimsA

Verify a contested claim against independent sources and return confidence-scored findings. Use when a claim is high-stakes or contested and you need agreement, contradiction, and gaps surfaced with confidence scores. Do NOT use for simple lookups or broad search (use infobroker_search_web) or citation formatting (use infobroker_get_citations). The loop recalls prior findings from the knowledge base, then searches providers and writes findings back; max_iterations bounds the refinement passes and per-provider rate limits apply. query states the claim plainly; priority routes the pool by intent (speed, quality, privacy, free_only); providers restricts the pool and omitting it uses the full dispatch chain; confidence_threshold sets the bar for confirmation, and findings below it are reported unverified. Returns an [OK] or [ERROR] envelope listing confirmed, contested, and unverified findings with per-source claims and confidence scores.

NameRequiredDescriptionDefault
queryYesSearch query
priorityNoRoute the corroboration pool by intent
providersNoOptional array of provider slugs to limit the search to
max_iterationsNoMaximum search-refinement passes (1-10, default 5)
confidence_thresholdNoMinimum confidence to report a finding as confirmed (0-1, default 0.8)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only flag readOnlyHint=false, openWorldHint=true, idempotentHint=false; the description goes well beyond them by disclosing the actual write-back loop ('searches providers and writes findings back'), the KB recall step, per-provider rate limits, and the max_iterations refinement bound. It also explains how below-threshold findings are downgraded to 'unverified', which no annotation conveys.

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?

Purpose and use/do-not-use guidance are front-loaded, and the operational detail follows in a single dense block. It is long, but nearly every clause contributes routing or behavioral information; a little trimming of overlapping phrases would make it tighter.

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?

With no output schema, the description supplies the return contract — an [OK]/[ERROR] envelope listing confirmed, contested, and unverified findings with per-source claims and confidence scores. Combined with the loop/rate-limit notes, an agent has everything needed to invoke and interpret the tool.

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 coverage is 100%, so baseline is 3, but the description adds real semantics beyond the field docs: providers 'omitting it uses the full dispatch chain', priority routing intents (speed, quality, privacy, free_only), and that confidence_threshold determines which findings are reported unverified. max_iterations and query get less added meaning.

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 states a specific verb and resource — 'Verify a contested claim against independent sources and return confidence-scored findings' — and immediately separates this tool from infobroker_search_web (broad search) and infobroker_get_citations (citation formatting). An agent can distinguish 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.

Usage Guidelines5/5

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

It gives an explicit inclusion condition ('high-stakes or contested') and explicit exclusions with named alternatives ('Do NOT use for simple lookups or broad search (use infobroker_search_web) or citation formatting (use infobroker_get_citations)'). Routing is unambiguous.

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. 2 tool updates
    • Changedinfobroker_manage_kb5 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "search",
        -  "ingest",
        -  "list",
        -  "get",
        -  "stats",
        -  "delete",
        -  "encryption"
        -]New value: +[
        +  "search",
        +  "ingest",
        +  "list",
        +  "get",
        +  "stats",
        +  "delete",
        +  "encryption",
        +  "claims",
        +  "verify_report"
        +]
      • changedInput schema / properties / max_results / description
        Previous value: -"Maximum results to return (1-50, default 8)"New value: +"Maximum results to return (search/claims action; 1-50, default 8)"
      • changedInput schema / properties / query / description
        Previous value: -"Search query (for search action)"New value: +"Search query (search action) or claim-text filter (claims action)"
      • addedInput schema / properties / receipt
        Added value: +{
        +  "description": "Optional verification receipt for a report ingest (REQ-110): claims with cited sources and optional report metadata (REQ-114). The server computes the report hash, per-source hashes, and the digest; any caller hashes or digest are ignored. Requires source_type 'report' and KB storage.",
        +  "properties": {
        +    "claims": {
        +      "items": {
        +        "properties": {
        +          "claim": {
        +            "type": "string"
        +          },
        +          "confidence": {
        +            "description": "Report-level confidence for this claim",
        +            "enum": [
        +              "High",
        +              "Medium",
        +              "Low"
        +            ],
        +            "type": "string"
        +          },
        +          "grade": {
        +            "type": "string"
        +          },
        +          "likelihood": {
        +            "description": "Calibrated likelihood term (for example almost certain, likely, even chance, unlikely)",
        +            "type": "string"
        +          },
        +          "sources": {
        +            "items": {
        +              "properties": {
        +                "retrieved_at": {
        +                  "type": "string"
        +                },
        +                "snippet": {
        +                  "maxLength": 2000,
        +                  "type": "string"
        +                },
        +                "title": {
        +                  "type": "string"
        +                },
        +                "url": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "url"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "verdict": {
        +            "description": "Fact-check verdict for this claim (for example True, Mostly True, Half True, Mostly False, False, Misleading, Unverifiable)",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "claim"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "report": {
        +      "description": "Optional report-level manifest metadata (REQ-114), stored with the receipt",
        +      "properties": {
        +        "alternatives": {
        +          "description": "Alternative hypotheses or options considered",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "assumptions": {
        +          "description": "Key assumptions stated separately from evidence",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "audience": {
        +          "description": "Target audience profile",
        +          "type": "string"
        +        },
        +        "gaps": {
        +          "description": "Questions left open",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "methodology": {
        +          "description": "Methodology and scope summary",
        +          "type": "string"
        +        },
        +        "revision": {
        +          "description": "Report revision number",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "shape": {
        +          "description": "Workflow shape that produced the report",
        +          "type": "string"
        +        },
        +        "supersedes": {
        +          "description": "Report identity this revision supersedes",
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / source_url / description
        Previous value: -"Source URL filter (get/delete action) or identity for ingest"New value: +"Source URL filter (get/delete/claims action), the report identity for verify_report, or identity for ingest"
    • Changedinfobroker_search_web2 fields changed
      • addedInput schema / properties / analyze
        Added value: +{
        +  "default": false,
        +  "description": "Attach in-process analysis to the response: topic terms, entity mentions, semantic result clusters, and a dated timeline. Derived from the returned results only; adds no outbound request (default false)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "description": "Preferred result language (ISO 639-1, e.g. 'de'). Providers that cannot honor it report it in meta.ignored_params",
        +  "type": "string"
        +}
  2. 1 tool updatev2026.10.22
    • Changedinfobroker_search_web1 field changed
      • addedInput schema / properties / fresh
        Added value: +{
        +  "default": false,
        +  "description": "Skip the knowledge-base recall shortcut and search external providers (default false)",
        +  "type": "boolean"
        +}
  3. 1 tool updatev0.1.4
    • Changedinfobroker_reload_config1 field changed
      • addedInput schema / properties / patch
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Partial configuration deep-merged into the user layer (config.local.json) before reloading; unknown top-level keys are rejected and the previous layer is backed up",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
  4. 1 tool updatev0.1.3
    • Changedinfobroker_reload_config1 field changed
      • addedInput schema / properties / migrate
        Added value: +{
        +  "default": false,
        +  "description": "Back up and apply registered user-configuration-layer migrations before reloading (default false)",
        +  "type": "boolean"
        +}
  5. 3 tool updatesv0.1.2
    • Changedinfobroker_fetch_page2 fields changed
      • addedInput schema / properties / crawl
        Added value: +{
        +  "default": false,
        +  "description": "Bounded same-origin crawl: recursively fetch same-origin pages up to config caps (default off)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / extract
        Added value: +{
        +  "default": false,
        +  "description": "Return structured metadata (JSON-LD, OpenGraph, microdata) alongside the content (default off)",
        +  "type": "boolean"
        +}
    • Addedinfobroker_search_web
    • Removedinfobroker_web_search
  6. 9 tool updatesv0.1.1
    • Removedinfobroker_corroborate
    • Changedinfobroker_fetch_page9 fields changed
      • addedInput schema / properties / detect_date
        Added value: +{
        +  "description": "Detect and report the page's last-updated date (default from config)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_length / description
        Added value: +"Maximum characters to return (default 50000)"
      • addedInput schema / properties / max_passages
        Added value: +{
        +  "description": "Number of passages to return (default from config)",
        +  "type": "number"
        +}
      • addedInput schema / properties / passage_size
        Added value: +{
        +  "description": "Target words per passage (default from config)",
        +  "type": "number"
        +}
      • addedInput schema / properties / question
        Added value: +{
        +  "description": "Question to extract ranked passages for, instead of returning the whole page",
        +  "type": "string"
        +}
      • addedInput schema / properties / renderer / description
        Added value: +"Renderer: jina (default), native_fetch, wikipedia, internet_archive, arxiv, or stack_exchange"
      • addedInput schema / properties / url / anyOf
        Added value: +[
        +  {
        +    "description": "URL to fetch",
        +    "type": "string"
        +  },
        +  {
        +    "description": "Multiple URLs to fetch in parallel (max 5)",
        +    "items": {
        +      "type": "string"
        +    },
        +    "maxItems": 5,
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / url / description
        Previous value: -"URL to fetch"New value: +"URL to fetch: a single URL, or up to five URLs fetched in parallel"
      • removedInput schema / properties / url / type
        Removed value: -"string"
    • Addedinfobroker_get_citations
    • Addedinfobroker_inspect_providers
    • Removedinfobroker_kb
    • Addedinfobroker_manage_kb
    • Removedinfobroker_providers
    • Addedinfobroker_verify_claims
    • Changedinfobroker_web_search12 fields changed
      • addedInput schema / properties / content_type / description
        Added value: +"Source kind to search: docs, issue, changelog, blog, spec, or all (default all)"
      • addedInput schema / properties / deep
        Added value: +{
        +  "default": false,
        +  "description": "Read the top results and return each page's ranked passages against the query",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / expand
        Added value: +{
        +  "default": false,
        +  "description": "Return query-expansion strings instead of search results",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_results / description
        Added value: +"Number of results to return (1-30, default 8)"
      • addedInput schema / properties / page / description
        Added value: +"Results page number (default 1)"
      • addedInput schema / properties / priority / description
        Added value: +"Route by intent: speed, quality, privacy, or free_only"
      • addedInput schema / properties / query / anyOf
        Added value: +[
        +  {
        +    "description": "Search query",
        +    "type": "string"
        +  },
        +  {
        +    "description": "Multiple queries to search in parallel (max 5)",
        +    "items": {
        +      "type": "string"
        +    },
        +    "maxItems": 5,
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / query / description
        Previous value: -"Search query"New value: +"Search query: a single string, or up to five strings searched in parallel"
      • removedInput schema / properties / query / type
        Removed value: -"string"
      • addedInput schema / properties / safe_search / description
        Added value: +"Safe-search filtering: on, off, or strict (default on)"
      • addedInput schema / properties / suggest / description
        Added value: +"Return query-autocomplete strings instead of results (default false)"
      • addedInput schema / properties / time_range / description
        Added value: +"Restrict results to day, week, month, or year"
  7. 6 tool updatesv0.1.0
    • First observedinfobroker_corroborate
    • First observedinfobroker_fetch_page
    • First observedinfobroker_kb
    • First observedinfobroker_providers
    • First observedinfobroker_reload_config
    • First observedinfobroker_web_search

TDQS

A4.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool occupies a distinct slot in the research workflow (search, fetch, cite, verify, KB, provider diagnostics, config reload), and every description explicitly names the sibling tool to use instead. The 'Do NOT use X, use Y' cross-references are present on nearly every tool, resolving the few borderline overlaps (e.g. KB search vs. web search, deep-read vs. fetch_page).

Naming Consistency5/5

All seven tools use the identical `infobroker_` prefix plus a clean verb_noun pattern: fetch_page, get_citations, inspect_providers, manage_kb, reload_config, search_web, verify_claims. No casing or verb-style drift anywhere in the set.

Tool Count5/5

Seven tools is well inside the ideal band, and each maps to a genuinely separate capability rather than a thin variant of another. Multi-mode tools (manage_kb actions, search_web modes) consolidate related operations instead of spawning one tool per action, which keeps the count lean.

Completeness4/5

The surface covers the full research lifecycle: discovery, retrieval, citation, verification, persistence, provider health, and config hot-reload, with CRUD covered inside manage_kb. Minor gaps remain — no dedicated bulk/export or collection-listing operation, and config inspection is only reachable indirectly through inspect_providers `spec`.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Zero-auth multi-source research MCP server that enables web search, reading URLs, PDFs, GitHub repos, and querying Hacker News, Stack Overflow, Semantic Scholar, and YouTube transcripts without API keys.
    75 PyPI
    11
    Apache 2.0
  • F
    license
    A
    quality
    D
    maintenance
    Enables searching and gathering information from multiple online sources (web, Twitter/X, Telegram, GitHub, Hugging Face, arXiv) through a unified MCP interface.
    12
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server enabling local-first web search, fetch, extract, and caching with citeable excerpts, no API key required. Supports research workflows for agents and apps.
    65 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to perform unified web research through a single MCP server, including search, page fetching, recursive crawling, document parsing, YouTube transcript extraction, and deep multi-query research.
    3
    -