Skip to main content
Glama

Infobroker

一个服务器。所有来源。交付研究成果。

Infobroker 是一个多提供商 MCP 服务器,将网络搜索、结构化知识、学术、档案和内容提取 API 统一在单一工具界面之后。十五个零配置提供商开箱即用——搜索网络、查找事实、获取文章——无需任何配置。另外五个提供商可通过 API 密钥或自托管解锁。内置的佐证引擎交叉引用独立来源,将既定事实与有争议的说法区分开来。捆绑的客户端技能将原始研究转化为精炼的写作。免费优先。隐私始终。

北极星

Infobroker 是 Bothan Spynet 作为工具的实现——一个去中心化的情报网络,查询独立来源并通过单一、公正的界面路由结果。用情报周期的术语来说,你提供方向并获得传播;服务器处理收集和处理。

Related MCP server: MCP Info Gatherer

快速开始

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、Yep——解锁更高的吞吐量和专业化搜索;自托管的 SearXNG 提供完全的查询隐私:

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

要求:Node.js 20+。

MCP 服务器

你的研究后端。六个工具、二十个提供商、一个佐证引擎。完整的功能清单记录在规范中的功能分类法中。

统一搜索

"搜索第二颗死星的位置。" "查找关于超空间旅行理论的学术论文。"

web_search 将一次查询发送给每个能够回答它的提供商。跨 DuckDuckGo、Wikipedia、学术数据库、新闻、代码仓库进行搜索——或者描述你的任务,服务器会选择最佳来源。失败的提供商通过可配置的链静默回退,因此你得到的是结果,而不是错误消息。其他搜索工具将你锁定在一个引擎上;Infobroker 将每个查询路由到正确的提供商,并在一个失败时继续前进。

内容提取

"获取关于雅文战役的文章并总结它。" "获取那个关于死星计划的页面的文本。"

fetch_page 将任何 URL 交给 Jina Reader,后者将其渲染为针对 LLM 消费优化的干净 Markdown。当 Jina 被限流时回退到原生 HTTP。Wikipedia 和 Internet Archive 有专门针对特定来源提取的渲染器。内置的网页抓取器返回原始 HTML;Infobroker 从任何来源为你提供干净、可读的内容——随时可用于总结或分析。

提供商智能

"我应该用哪个来源来研究死星的弱点?" "显示所有可用来源及其配额状态。"

服务器知道自己的能力。web_search 为你的任务自动选择最佳后端,权衡能力、配额和延迟——或者当你要求隐私、速度或仅免费来源时,根据你的意图路由。providers 呈现每个已配置的来源,并深入查看单个提供商的正常运行时间和错误历史。没有其他搜索 MCP 服务器能让你对每个后端都有操作可见性。

多来源验证

"验证帝国是否真的摧毁了奥德兰。" "找出谁先开火的共识——汉还是格里多。"

corroborate 运行多轮真相查找循环:跨活动提供商的广泛搜索、声明提取、跨来源对账,以及针对差距的定向跟进。跨独立来源得到佐证的声明获得高置信度,按每个来源的权威性加权;每个来源都绑定到它所支持的声明。矛盾之处会呈现所有视角。差距会触发精炼的查询。你得到一份结构化报告——已确认、有争议和未验证的发现——带有来源出处、每个来源的声明和置信度分数。其他每个搜索工具都返回链接列表;Infobroker 找到真相并告诉你它有多确定。

知识库

"搜索你已经找到的关于义军同盟舰队的内容。" "摄取这篇文章,以便下次缓存。"

每次搜索、获取和佐证运行都缓存在本地知识库中。kb 在访问外部提供商之前检查缓存——仅在缓存结果不够新鲜或不够相关时才回退到网络。它的操作可以手动摄取新文本或 URL、报告已缓存的内容以及移除内容。内容按年龄评分,按新鲜度计划过期,并按来源去重。在缓存之外,kb 归档你生成的报告:使用 source_type: "report" 摄取(并默认使用知识库),然后用 kb list 和 kb get 重新访问它们,或者改为写入本地目录。其他搜索 MCP 服务器每次会话都重新获取相同的事实;Infobroker 记住并重用已经找到的内容。

研究管道

"研究死星的建造过程,然后起草一份总结。" "事实核查这些关于达斯·维达起源的说法。"

Infobroker 不止于搜索结果。捆绑的客户端技能将其工具串联成写作管道,将每个请求路由经过既定的工作流形态和写作子技能,直到另一端产出完成的文档。一切都存在于仓库中——没有外部路径或单独安装。完整管道——六项技能、工作流形态和升级路径——详见技能部分。其他搜索 MCP 服务器产生搜索结果;Infobroker 产生完成的作品。

操作可见性

"显示服务器健康状况。" "无需重启即可热重载我的配置。"

配额计数器持久化到磁盘,重启后依然保留。限流按提供商分别执行,而非全局统一。配置可通过 reload_config 热加载——修改提供商、调整链路或微调阈值,均无需断开连接。web_search 兼作 DuckDuckGo 查询自动补全。providers 报告服务器的构建健康状态和请求统计。你始终清楚自己的搜索服务器在做什么,以及还剩多少容量。

技能

MCP 服务器是产品的一半,内置技能是另一半。仓库中随附六个客户端技能——无外部依赖、无需单独安装——它们将原始研究转化为成品。

编排技能(infobroker)以分类门(classify gate)开场,将你的请求映射到一种工作流形态:研究并写作、事实核查、深度挖掘、竞品评估、文献综述、监控、红队、背景审查或门控分析。每种形态将相同的基本原语——知识库召回、搜索、提取、验证、写作和引用——组合成各自的序列,并以可 grep 的完成令牌收尾,以便你确认结果。四个写作子技能负责执行写作阶段:summarization 在写作前浓缩发现,technical-writing 起草报告和文档,proofreading 润色语言,translation 产出多语言输出。

门控分析是升级形态。当问题风险高或影响决策时,分类门会路由到 analysis-loop 技能——一条严谨的路径,包含置信度评分的发现、来源可靠性分级和结构化分析技术——而非较轻的研究并写作路线。它共享相同的基本原语和 Infobroker 工具,但运行自己的门控工作流,因此无需离开流水线即可获得严谨性。

一个指令文件 search-preferences.md 将你的客户端导向这些工具:优先知识库,仅当缓存不足时才使用外部提供商。将其与技能目录一次性接入你的 OpenCode 配置——上面的快速入门展示了确切代码片段——此后每个研究请求都会自动遵循该流水线。

在 skills/ 中编写你自己的技能,即可添加自己的工作流形态。流水线图位于 references/pipeline-map.md,工作流形态定义位于 references/workflows.md。其他搜索 MCP 服务器返回链接;Infobroker 随附将这些链接转化为有据可查答案的写作者。

提供商

二十个提供商。其中十五个零配置即可使用。

提供商

层级

类型

需要密钥

DuckDuckGo

内置

网页搜索

否

Jina Reader

免费 HTTP

内容提取

否

Wikipedia

免费 HTTP

百科全书

否

Wiktionary

免费 HTTP

词典

否

Wikidata

免费 HTTP

结构化事实

否

OpenStreetMap

免费 HTTP

地理编码

否

Internet Archive

免费 HTTP

历史资料

否

arXiv

免费 HTTP

学术

否

Semantic Scholar

免费 HTTP

学术

可选

Stack Exchange

免费 HTTP

代码问答

可选

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 忽略,因此从仓库拉取更新永远不会覆盖你的设置。用户层中的值优先于随附默认值;任何未设置的内容回退到 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 客户端或恶意软件,这些由全盘加密覆盖。

两条规则确保安全。第一,加密是你主动选择的:如果密钥缺失或错误,知识库会锁定并报告错误,而不是触碰你的数据——因此请备份密钥(忘记密钥或口令短语意味着存储按设计不可恢复)。第二,服务器从不写入部分文件:每次保存都是原子的,无法识别或更新版本的存储格式永远不会被覆盖。

kb 工具的 encryption 操作是这一过程的日常界面,它从不回显机密材料——generate_key 和 backup 返回文件路径,rekey 读取密钥文件而非原始密钥。

启用:生成密钥、备份密钥、添加 kb.encryption 块并重新加载;存储立即就地加密。禁用:移除该块并重新加载;存储立即解密为明文(过渡期间请保留密钥,以便服务器能读取存储以解密)。恢复锁定的存储:使用 status 查看状态,verify 在提交前确认候选密钥,backup 恢复密钥文件的副本,rekey 在不丢失内容的情况下切换到新密钥。重新加密后,将 kb.encryption.key_file 指向新密钥,重新加载,然后再次运行 verify 以确认新密钥能打开存储。

infobroker_kb action=encryption operation=generate_key key_file=~/.config/infobroker/kb.key
infobroker_kb action=encryption operation=backup    key_file=~/.backup/kb.key.bak
infobroker_reload_config

在重新加载前将 kb.encryption 块添加到 config.local.json 以启用,或在重新加载前移除它以禁用。当存储被锁定时,status、verify 和 rekey 仍然可用,因此你无需先解锁即可恢复。

自带端点

任何 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"] }
}

服务器 GET endpoint?query_param=<query>,遍历 results_path(以点分隔进入响应 JSON),并使用 field_map 将每个结果映射到通用形态。将 slug 添加到你的 config.local.json 覆盖项中并调用 reload_config 即可立即使用。

按提供商的状态和来源

两个可选键用于微调 config.json 中按提供商的行为:

  • degraded_latency_ms —— 近期平均延迟超过此毫秒数的提供商,即使可达,也会被 providers 健康操作报告为 degraded。全局的 output.degraded_latency_ms 在提供商未设置自身值时作为回退。

  • resells —— 对聚合器/转售后端(展示其他发布者页面的搜索引擎,如 DuckDuckGo、Brave 或 SearXNG)设置为 true。服务器在底层 API 暴露时报告每个结果的 original_source(例如 Brave 的 profile 名称);第一方来源(Wikipedia、arXiv)将其留空,因为页面本身就是源头。

对比

工具名称

你习惯的方式

Infobroker 的不同之处

内置 websearch / webfetch

一个搜索引擎、一种抓取模式、无需配置、无法看到底层使用什么后端

十五个零配置提供商,统一工具界面。为每项任务选择正确的来源。失败时自动回退。查看每个提供商的状态和配额。

原始 API 调用

手动 HTTP 请求、每个提供商单独认证、每个提供商单独解析响应、无回退、无配额跟踪

一个界面对接所有提供商。API 密钥只需配置一次。结果归一化为统一结构。速率限制和配额自动跟踪。

专用搜索 API

按查询付费、供应商锁定、路由不透明

免费优先设计。DuckDuckGo、Wikipedia 和其他十三个提供商零配置即可使用。Brave、Exa、Tavily 和 Yep 提供升级路径。自托管 SearXNG 实现完全隐私。

其他搜索 MCP 服务器

单一提供商、无回退、无交叉验证、无写作流水线

多提供商并自动回退。交叉验证引擎交叉引用独立来源。内置写作技能将研究转化为成品文档。

带内置搜索的 AI

模型自行选择搜索引擎、提供过期缓存、不可复现

你控制提供商链。查询可复现。回退行为可见。交叉验证引擎在独立来源之间核实事实。

其他每个搜索 MCP 服务器都要求你选择一个提供商并信任它。 Infobroker 给你一支舰队——并为每项任务挑选合适的那个。 当某个提供商失败时,下一个会无缝接管,你毫无察觉。 当某个论断至关重要时,交叉验证引擎会找出共识、 矛盾和缺口。内置技能将研究闭环推进到成品写作。 一个服务器。所有来源。真正交付的研究。

最后更新:2026-08-24。

参与贡献

  • 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.24)构建,该规范定义了每项需求及验证它的关卡。 每项需求都追溯到实现文件,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
ResponsivenessSyncing

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
    -