Infobroker
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 实例能看到你的查询。
配置
变量 | 用途 |
| config.json 的路径(默认: |
| 用户配置层的可选路径(默认: |
| 密钥提供商的 API 密钥 |
| 自托管提供商的 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 的不同之处 |
内置 | 一个搜索引擎、一种抓取模式、无需配置、无法看到底层使用什么后端 | 十五个零配置提供商,统一工具界面。为每项任务选择正确的来源。失败时自动回退。查看每个提供商的状态和配额。 |
原始 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 toolsinfobroker_fetch_pageFetch Page ContentAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to fetch: a single URL, or up to five URLs fetched in parallel | |
| crawl | No | Bounded same-origin crawl: recursively fetch same-origin pages up to config caps (default off) | |
| extract | No | Return structured metadata (JSON-LD, OpenGraph, microdata) alongside the content (default off) | |
| question | No | Question to extract ranked passages for, instead of returning the whole page | |
| renderer | No | Renderer: jina (default), native_fetch, wikipedia, internet_archive, arxiv, or stack_exchange | |
| max_length | No | Maximum characters to return (default 50000) | |
| detect_date | No | Detect and report the page's last-updated date (default from config) | |
| max_passages | No | Number of passages to return (default from config) | |
| passage_size | No | Target words per passage (default from config) |
TDQS
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.
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.
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.
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.
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.
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 CitationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| max_results | No | Maximum references to return (1-30, default 8) |
TDQS
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.
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.
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.
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.
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.
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 ProvidersARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to perform | |
| status | No | Filter for list action | |
| provider | No | Provider slug (required for health) |
TDQS
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.
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.
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.
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.
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.
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 BaseADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to fetch and index (for ingest action) | |
| text | No | Raw text to index (for ingest action) | |
| query | No | Search query (search action) or claim-text filter (claims action) | |
| title | No | Document/report title | |
| action | Yes | Operation to perform | |
| format | No | File format for disk save | markdown |
| receipt | No | 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. | |
| save_to | No | Where to save (ingest action): kb, disk, or both. Default kb | |
| key_file | No | Path to a key file (generate_key writes here; rekey reads the target key from here). Never pass the secret itself — only a file path. | |
| operation | No | Sub-operation for the 'encryption' action | |
| collection | No | Collection name | |
| source_url | No | Source URL filter (get/delete/claims action), the report identity for verify_report, or identity for ingest | |
| max_results | No | Maximum results to return (search/claims action; 1-50, default 8) | |
| source_type | No | Source type (tag on ingest; filter on search/list) | |
| last_updated | No | Source last-updated date to store (e.g. '2026-08-24'); auto-detected from fetched URLs when omitted | |
| freshness_tier | No | Freshness tier tag on ingest (e.g. 'report', 'evergreen') |
TDQS
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.
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.
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.
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.
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.
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 ConfigurationADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | No | 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 | |
| migrate | No | Back up and apply registered user-configuration-layer migrations before reloading (default false) |
TDQS
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.
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.
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.
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.
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.
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 SearchARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| deep | No | Read the top results and return each page's ranked passages against the query | |
| page | No | Results page number (default 1) | |
| fresh | No | Skip the knowledge-base recall shortcut and search external providers (default false) | |
| query | Yes | Search query: a single string, or up to five strings searched in parallel | |
| expand | No | Return query-expansion strings instead of search results | |
| region | No | ISO region/country code (e.g. 'us-en', 'DE') | |
| analyze | No | 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) | |
| suggest | No | Return query-autocomplete strings instead of results (default false) | |
| language | No | Preferred result language (ISO 639-1, e.g. 'de'). Providers that cannot honor it report it in meta.ignored_params | |
| priority | No | Route by intent: speed, quality, privacy, or free_only | |
| provider | No | Provider slug (auto-select if omitted) | |
| research | No | Research compile: fan out to derived query variants and deep-read each, returning passages grouped by variant (default off) | |
| time_range | No | Restrict results to day, week, month, or year | |
| max_results | No | Number of results to return (1-30, default 8) | |
| safe_search | No | Safe-search filtering: on, off, or strict (default on) | on |
| content_type | No | Source kind to search: docs, issue, changelog, blog, spec, or all (default all) | all |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| priority | No | Route the corroboration pool by intent | |
| providers | No | Optional array of provider slugs to limit the search to | |
| max_iterations | No | Maximum search-refinement passes (1-10, default 5) | |
| confidence_threshold | No | Minimum confidence to report a finding as confirmed (0-1, default 0.8) |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
- Changed
infobroker_manage_kb5 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "search", - "ingest", - "list", - "get", - "stats", - "delete", - "encryption" -]New value: +[ + "search", + "ingest", + "list", + "get", + "stats", + "delete", + "encryption", + "claims", + "verify_report" +] - changed
Input schema / properties / max_results / descriptionPrevious value: -"Maximum results to return (1-50, default 8)"New value: +"Maximum results to return (search/claims action; 1-50, default 8)" - changed
Input schema / properties / query / descriptionPrevious value: -"Search query (for search action)"New value: +"Search query (search action) or claim-text filter (claims action)" - added
Input schema / properties / receiptAdded 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" +} - changed
Input schema / properties / source_url / descriptionPrevious 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"
- Changed
infobroker_search_web2 fields changed- added
Input schema / properties / analyzeAdded 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" +} - added
Input schema / properties / languageAdded value: +{ + "description": "Preferred result language (ISO 639-1, e.g. 'de'). Providers that cannot honor it report it in meta.ignored_params", + "type": "string" +}
1 tool update
v2026.10.22- Changed
infobroker_search_web1 field changed- added
Input schema / properties / freshAdded value: +{ + "default": false, + "description": "Skip the knowledge-base recall shortcut and search external providers (default false)", + "type": "boolean" +}
1 tool update
v0.1.4- Changed
infobroker_reload_config1 field changed- added
Input schema / properties / patchAdded 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" +}
1 tool update
v0.1.3- Changed
infobroker_reload_config1 field changed- added
Input schema / properties / migrateAdded value: +{ + "default": false, + "description": "Back up and apply registered user-configuration-layer migrations before reloading (default false)", + "type": "boolean" +}
3 tool updates
v0.1.2- Changed
infobroker_fetch_page2 fields changed- added
Input schema / properties / crawlAdded value: +{ + "default": false, + "description": "Bounded same-origin crawl: recursively fetch same-origin pages up to config caps (default off)", + "type": "boolean" +} - added
Input schema / properties / extractAdded value: +{ + "default": false, + "description": "Return structured metadata (JSON-LD, OpenGraph, microdata) alongside the content (default off)", + "type": "boolean" +}
- Added
infobroker_search_web - Removed
infobroker_web_search
9 tool updates
v0.1.1- Removed
infobroker_corroborate - Changed
infobroker_fetch_page9 fields changed- added
Input schema / properties / detect_dateAdded value: +{ + "description": "Detect and report the page's last-updated date (default from config)", + "type": "boolean" +} - added
Input schema / properties / max_length / descriptionAdded value: +"Maximum characters to return (default 50000)" - added
Input schema / properties / max_passagesAdded value: +{ + "description": "Number of passages to return (default from config)", + "type": "number" +} - added
Input schema / properties / passage_sizeAdded value: +{ + "description": "Target words per passage (default from config)", + "type": "number" +} - added
Input schema / properties / questionAdded value: +{ + "description": "Question to extract ranked passages for, instead of returning the whole page", + "type": "string" +} - added
Input schema / properties / renderer / descriptionAdded value: +"Renderer: jina (default), native_fetch, wikipedia, internet_archive, arxiv, or stack_exchange" - added
Input schema / properties / url / anyOfAdded value: +[ + { + "description": "URL to fetch", + "type": "string" + }, + { + "description": "Multiple URLs to fetch in parallel (max 5)", + "items": { + "type": "string" + }, + "maxItems": 5, + "type": "array" + } +] - changed
Input schema / properties / url / descriptionPrevious value: -"URL to fetch"New value: +"URL to fetch: a single URL, or up to five URLs fetched in parallel" - removed
Input schema / properties / url / typeRemoved value: -"string"
- Added
infobroker_get_citations - Added
infobroker_inspect_providers - Removed
infobroker_kb - Added
infobroker_manage_kb - Removed
infobroker_providers - Added
infobroker_verify_claims - Changed
infobroker_web_search12 fields changed- added
Input schema / properties / content_type / descriptionAdded value: +"Source kind to search: docs, issue, changelog, blog, spec, or all (default all)" - added
Input schema / properties / deepAdded value: +{ + "default": false, + "description": "Read the top results and return each page's ranked passages against the query", + "type": "boolean" +} - added
Input schema / properties / expandAdded value: +{ + "default": false, + "description": "Return query-expansion strings instead of search results", + "type": "boolean" +} - added
Input schema / properties / max_results / descriptionAdded value: +"Number of results to return (1-30, default 8)" - added
Input schema / properties / page / descriptionAdded value: +"Results page number (default 1)" - added
Input schema / properties / priority / descriptionAdded value: +"Route by intent: speed, quality, privacy, or free_only" - added
Input schema / properties / query / anyOfAdded value: +[ + { + "description": "Search query", + "type": "string" + }, + { + "description": "Multiple queries to search in parallel (max 5)", + "items": { + "type": "string" + }, + "maxItems": 5, + "type": "array" + } +] - changed
Input schema / properties / query / descriptionPrevious value: -"Search query"New value: +"Search query: a single string, or up to five strings searched in parallel" - removed
Input schema / properties / query / typeRemoved value: -"string" - added
Input schema / properties / safe_search / descriptionAdded value: +"Safe-search filtering: on, off, or strict (default on)" - added
Input schema / properties / suggest / descriptionAdded value: +"Return query-autocomplete strings instead of results (default false)" - added
Input schema / properties / time_range / descriptionAdded value: +"Restrict results to day, week, month, or year"
6 tool updates
v0.1.0- First observed
infobroker_corroborate - First observed
infobroker_fetch_page - First observed
infobroker_kb - First observed
infobroker_providers - First observed
infobroker_reload_config - First observed
infobroker_web_search
TDQS
Scored across 7 tools
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).
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.
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.
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
Related MCP Connectors
One MCP server for all web data. Scrape, search, crawl, and AI research in one install.
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
Free web search for AI agents. No API key required. Hosted MCP in active development.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceZero-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 PyPI11Apache 2.0
- FlicenseAqualityDmaintenanceEnables searching and gathering information from multiple online sources (web, Twitter/X, Telegram, GitHub, Hugging Face, arXiv) through a unified MCP interface.12-
- AlicenseNot gradedqualityFmaintenanceMCP 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 npm1MIT
- FlicenseNot gradedqualityCmaintenanceEnables 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-