Skip to main content
Glama
ashlrai
by ashlrai

webfetch

npm version CI License: MIT Discord GitHub stars

面向 AI 智能体和人类的“许可优先”图像层。

一个 MCP 服务器、一个 CLI 和一个 HTTP 服务器,可联合 25 个图像提供商,按许可优先对结果进行排名,并默认拒绝 UNKNOWN(未知)结果。任何支持 MCP 的智能体(Claude Code、Cursor、Cline、Continue、Roo Code、Codex)只需一行配置即可连接。着陆页、定价和托管服务请访问 getwebfetch.com。

安装

平台

一行命令

npm

npm i -g getwebfetch

Homebrew

brew tap ashlrai/webfetch && brew install webfetch

Docker

docker run --rm ghcr.io/ashlrai/webfetch cli help

curl

bash

curl -fsSL https://raw.githubusercontent.com/ashlrai/webfetch/main/install/install.sh | bash

curl | bash 安装程序还会幂等地将 webfetch 写入 Claude Code 的 ~/.claude/settings.json 中。随时重新运行即可更新。

Related MCP server: image-lab-mcp

30 秒上手

CLI:

webfetch search "drake portrait" --limit 5
webfetch artist "Taylor Swift" --kind portrait --min-width 1200
webfetch download <url> --out ./portrait.jpg
printf "drake portrait\nradiohead album\n" | webfetch batch --jsonl --continue-on-error

MCP(在任何支持 MCP 的智能体内部使用):

search_images({ query: "drake portrait", limit: 5 })
search_artist_images({ artist: "Taylor Swift", kind: "portrait" })
download_image({ url: "..." })

TypeScript 库:

import { searchArtistImages, pickBest, downloadImage } from "webfetch-core";

const { candidates } = await searchArtistImages("Drake", "portrait");
const best = pickBest(candidates, { minWidth: 1200 });
if (best) {
  const { cachedPath, sha256 } = await downloadImage(best.url);
  console.log(best.attributionLine, "->", cachedPath);
}

解决的问题

手动获取图像有四种失败模式:

  1. 你不知道许可协议,因此无法安全地发布结果。

  2. 无法脚本化 —— 每增加一个新网站都需要耗费一下午时间。

  3. Google 图像搜索 API 已停用;爬虫技术脆弱且处于服务条款的灰色地带。

  4. 没有共享缓存 —— 你会重复下载同一个文件数十次。

webfetch 通过联合具有稳定条款和结构化许可元数据的直接来源 API,按许可优先对候选结果进行排名,并将结果作为单个 MCP 工具公开,从而解决了上述所有四个问题。

提供商

提供商

覆盖范围

默认许可

认证

可选

wikimedia

人像、活动、Logo、历史

CC_BY_SA (元数据)

—

否

openverse

任何 CC 许可内容

CC_BY (元数据)

—

否

unsplash

高质量摄影

UNSPLASH_LICENSE

UNSPLASH_ACCESS_KEY

否

pexels

图库摄影

PEXELS_LICENSE

PEXELS_API_KEY

否

pixabay

图库照片 + 插图

PIXABAY_LICENSE

PIXABAY_API_KEY

否

itunes

专辑封面、艺术家肖像

EDITORIAL_LICENSED

—

否

musicbrainz-caa

规范专辑封面

EDITORIAL_LICENSED

—

否

spotify

艺术家 + 专辑图片

EDITORIAL_LICENSED

SPOTIFY_CLIENT_ID/SECRET

否

youtube-thumb

视频缩略图

EDITORIAL_LICENSED

—

是

brave

通用网页图像搜索

UNKNOWN (+启发式)

BRAVE_API_KEY

否

bing

通用网页图像搜索

UNKNOWN (+启发式)

BING_API_KEY

是

serpapi

Google 图片 + 反向搜索

UNKNOWN (+启发式)

SERPAPI_KEY

是

browser

无头浏览器回退 vs images.google.com

UNKNOWN

—

是

managed-browser

Bright Data 托管浏览器回退

UNKNOWN

BRIGHTDATA_API_TOKEN

是

flickr

CC / 公有领域摄影

CC_BY (元数据)

FLICKR_API_KEY

否

internet-archive

公有领域 / CC 存档媒体

PUBLIC_DOMAIN

—

否

smithsonian

开放获取博物馆媒体

CC0

SMITHSONIAN_API_KEY

否

nasa

NASA 影像

PUBLIC_DOMAIN

—

否

met-museum

大都会博物馆开放获取

CC0

—

否

europeana

欧洲文化遗产

CC_BY (元数据)

EUROPEANA_API_KEY

否

library-of-congress

美国历史档案

PUBLIC_DOMAIN

—

否

wellcome-collection

医学/历史影像

CC_BY (元数据)

—

否

rawpixel

CC0 图库切片

CC0

RAWPIXEL_API_KEY 可选

否

burst

Shopify Burst 图库照片

CC0

—

否

europeana-archival

Europeana 文本/手稿记录

CC_BY (元数据)

EUROPEANA_API_KEY

是

请参阅 docs/PROVIDERS.md 了解注意事项和速率限制,参阅 docs/PROVIDER_TUNING.md 了解针对不同用例的选择。

本地和云端模式

CLI 优先采用本地模式:默认情况下 webfetch search、artist、album、download、probe、license 和 batch 会在进程内调用 webfetch-core 并使用你环境中的提供商 API 密钥。传递 --cloud 或设置 WEBFETCH_MODE=cloud 即可使用 WEBFETCH_API_KEY 或 webfetch config set apiKey wf_live_... 调用 https://api.getwebfetch.com/v1/*。

当你需要直接调用提供商并使用本地缓存时,请使用本地模式。当你需要托管认证、共享提供商密钥池、托管浏览器回退、使用统计或团队控制时,请使用云端模式。

为什么选择“许可优先”

我们默认拒绝的唯一结果是无法证明其合法性的图像。对于需要无需人工审核即可发布的工作流而言,一张许可不明但质量稍好的照片毫无价值。相关性很容易判断,但来源证明则不然。

排序逻辑为:许可标签 -> 元数据置信度 -> 分辨率 -> 提供商优先级。UNKNOWN 默认被拒绝(根据伯尔尼公约:除非另有证明,否则大多数网络内容均为版权所有)。请参阅 docs/LICENSE_POLICY.md。

迁移:CC0 图库提供商

旧版 webfetch 将 Unsplash、Pexels 和 Pixabay 视为 CC0。当前版本明确公开了它们的平台条款:

旧标签

新标签

检查内容

CC0 来自 Unsplash

UNSPLASH_LICENSE

Unsplash 条款;非知识共享 (Creative Commons)

CC0 来自 Pexels

PEXELS_LICENSE

Pexels 条款;非知识共享

CC0 来自 Pixabay

PIXABAY_LICENSE

Pixabay 条款;非知识共享

大多数调用者应保持 licensePolicy: "safe-only",因为它仍然允许开放、平台许可、编辑和新闻稿类别,同时拒绝 UNKNOWN。仅需要知识共享或公有领域资产的工作流应使用 licensePolicy: "open-only" 并更新类型守卫以分别处理这三个平台标签。

webfetch 与替代方案对比

功能

webfetch

原生 Google 图片

仅 Unsplash

Bing CSE

可通过 API 脚本化

是

否 (已停用)

是

是

每个结果的许可元数据

是

否

是 (单一许可)

部分

覆盖编辑类音乐艺术

是

部分

否

部分

覆盖 CC / 公有领域

是

否

否

否

默认安全 (拒绝 UNKNOWN)

是

不适用

不适用

否

共享内容寻址缓存

是

否

否

否

内置归属权行

是

否

否

否

所有 IDE 共享一行 MCP 配置

是

否

否

否

默认情况下无单次查询成本

是

不适用

是

否

架构

                             +------------------+
                             |  webfetch-core  |
                             |  (ranker, cache, |
                             |   license coerce)|
                             +---------+--------+
                                       |
          +----------------+-----------+-----------+----------------+
          |                |                       |                |
  +-------v------+  +------v-------+       +-------v------+  +------v-------+
  | webfetch     |  | webfetch-mcp |       | webfetch-    |  | browser      |
  | CLI          |  | (stdio)      |       | server (HTTP)|  | extensions   |
  +-------+------+  +------+-------+       +-------+------+  +------+-------+
          |                |                       |                |
          |                |                       |                |
          +----------------+-----------+-----------+----------------+
                                       |
                 +---------------------v---------------------+
                 |              provider adapters            |
                 |  wikimedia  openverse  unsplash  pexels    |
                 |  pixabay    itunes     mb-caa    spotify   |
                 |  youtube    brave      bing      serpapi   |
                 |  flickr     nasa       met       europeana |
                 |  loc        wellcome   rawpixel  burst     |
                 |  browser + managed-browser + archival opt-in|
                 +-------------------------------------------+

所有界面共享 ~/.webfetch/cache/,并以 SHA-256 为键,因此从 CLI 下载的内容可立即供 MCP 服务器使用,反之亦然。

安全默认设置

  • licensePolicy: "safe-only" — 允许开放、平台许可和编辑/新闻类别;拒绝 UNKNOWN。

  • safeSearch: "strict"。

  • 可选提供商(youtube-thumb、bing、serpapi、browser、managed-browser、europeana-archival)默认关闭。

  • 每次下载上限 20 MB,内容类型守卫,主机黑名单。

  • 在通用页面探测时遵守 robots.txt。

路线图

  • webfetch watch — 用于重复查询/增量刷新的守护进程模式。

  • 自带提供商插件 API。

  • getwebfetch.com 托管层 — 提供商密钥池、托管浏览器回退、团队使用仪表板。

贡献

欢迎提交 Issue 和 PR。运行 bun install && bun test 即可开始。请参阅 docs/ 获取各领域的参考文档。

许可

MIT。

Available Tools

7 tools
download_imageA

Download an image URL (typically from a prior search_images result) to the local disk cache. Streams with a 20MB hard cap, content-type guard, SHA-256 hash, and returns the cached file path. Host blocklist enforced.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
maxBytesNo
cacheDirNo

TDQS

A4.3/5.0
Behavior5/5

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

The description fully discloses key behaviors: streaming with a 20MB cap, content-type guard, SHA-256 hashing, and a host blocklist. Since no annotations are provided, this information is critical for safe and correct usage.

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

Conciseness5/5

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

Three concise sentences with no redundancy. The first sentence states the purpose, the second lists technical details, and the third adds a restriction. Information is front-loaded and every sentence adds value.

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?

The description covers the tool's purpose, key behaviors, and return value (cached file path). It is mostly complete for a download tool, but lacks details on optional parameters and how they affect behavior.

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

Parameters2/5

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

The description mentions a '20MB hard cap' which correlates to the maxBytes parameter but does not explain it or the cacheDir parameter. With 0% schema description coverage, the tool relies heavily on the description to clarify semantics, missing the opportunity to describe optional parameters.

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 uses a specific verb 'Download' and resource 'image URL', clearly stating the action and result (cached file path). It distinguishes itself from sibling tools like 'search_images' or 'fetch_with_license' by emphasizing local disk caching and typical usage from search results.

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

Usage Guidelines4/5

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

The description mentions 'typically from a prior search_images result', providing a clear context for when to use this tool. However, it does not explicitly state when not to use it or mention alternative tools for different scenarios.

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

fetch_with_licenseA

Given an arbitrary URL (image or webpage), determine its license via host heuristics + page metadata (, dc.rights, og tags). Set probe: true to also download the bytes. Use when an agent already has a URL and needs a go/no-go decision before shipping.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
probeNo

TDQS

A4.4/5.0
Behavior4/5

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

Given no annotations, the description carries full burden; it discloses heuristics, page metadata scanning, and the probe parameter triggering download. Sufficiently transparent for a simple tool.

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

Conciseness5/5

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

Two sentences, no unnecessary words. First sentence describes function, second provides usage guidance. Efficient.

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?

No output schema, but description implies return of license info. For a 2-param tool, it covers behavior and usage. Could mention return format or error handling.

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 has 0% description coverage, but the description explains the url parameter as target and probe parameter as triggering download, adding value beyond 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?

The description clearly states the verb 'determine its license' and the resource 'URL', and distinguishes from siblings like download_image and search_images through its specific function.

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

Usage Guidelines4/5

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

Provides explicit usage context: 'Use when an agent already has a URL and needs a go/no-go decision before shipping.' Lacks explicit alternatives or when-not-to-use, but the context is clear.

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

find_similarA

Reverse-image-search: given a public image URL, find visually similar images. Requires SERPAPI_KEY env var and providers: ['serpapi']. Returns candidates with heuristic licenses — treat results as leads, not shippable.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic URL of the reference image
providersNo

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries the burden. It adds 'Returns candidates with heuristic licenses — treat results as leads, not shippable,' disclosing the heuristic nature and appropriate usage, which is valuable behavioral context beyond basic purpose.

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

Conciseness5/5

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

Three sentences with no redundancies: purpose, prerequisite, output disclaimer. Each sentence serves a distinct, essential function.

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?

Given no output schema and no annotations, the description covers purpose, a key prerequisite, and output quality. It does not address error cases or rate limits, but the tool is low-complexity with 2 params.

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

Parameters3/5

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

Schema coverage is 50% (url has description, providers does not). Description adds 'Requires ... providers: ["serpapi"]', indicating the required provider and hinting at the role of the providers parameter. However, it does not explain individual enum options, which the schema already lists.

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?

Description clearly states 'Reverse-image-search: given a public image URL, find visually similar images.' This is a specific verb+resource combo, and it distinguishes from sibling tools like download_image or search_images.

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

Usage Guidelines4/5

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

Description mentions requirement 'Requires SERPAPI_KEY env var and providers: ["serpapi"]', giving clear context for when to use. It does not explicitly exclude alternatives, but the prerequisite is helpful.

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

probe_pageA

Given a webpage URL, return every on the page with inferred dimensions and a heuristic license per image. Respects robots.txt by default. Use to triage a candidate source page before picking.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
respectRobotsNo

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool respects robots.txt and returns images with dimensions and license. This is transparent about its behavior, though it could mention error handling or performance.

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

Conciseness5/5

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

The description is extremely concise—two sentences that pack all necessary information. No redundant words. It front-loads the core action and then provides usage context.

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

Completeness5/5

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

For a tool with no output schema and moderate complexity, the description covers what the tool returns (images with dimensions and license) and its default behavior (respects robots.txt). The context is sufficient for an agent to understand when to invoke it among siblings.

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?

Input schema has 2 params (url, respectRobots) with 0% description coverage. The description clarifies the purpose of the tool and implies usage of both params (url as input, respectRobots via default respect). It adds meaning beyond the raw schema, especially for the boolean parameter.

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 clearly states the action (return every <img> on a webpage), the resource (given a URL), and the output (images with dimensions and license). It distinguishes itself from siblings like download_image or fetch_with_license by focusing on triaging a source page.

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

Usage Guidelines4/5

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

Explicitly states 'Use to triage a candidate source page before picking', indicating the intended use case. It also mentions respecting robots.txt by default, providing a constraint. However, it does not explicitly state when not to use or mention alternatives.

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

search_album_coverA

Find canonical album artwork. Uses MusicBrainz Cover Art Archive + iTunes + Spotify. Results are EDITORIAL_LICENSED — safe for album identification UI per platform ToS; always show attribution.

ParametersJSON Schema
NameRequiredDescriptionDefault
artistYes
albumYes
providersNo
safeSearchNo
licensePolicyNo
maxPerProviderNo
minWidthNo
minHeightNo
timeoutMsNo

TDQS

A3.9/5.0
Behavior4/5

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

Discloses that results are editorial-licensed and safe per ToS, which is key behavioral info. No annotations provided, so description covers safety. Could add more on failure modes or rate limits.

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

Conciseness4/5

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

Two sentences, efficient and front-loaded. However, lacks structure or parameter hints. No wasted words, but could be slightly more informative.

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

Completeness3/5

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

With 9 parameters and no output schema, description is incomplete. It doesn't explain return format or behavior for missing results. Adequate for a simple search but not comprehensive.

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

Parameters2/5

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

Schema description coverage is 0%; description does not mention any parameters despite there being 9, including required ones. Schema is detailed, but description fails to add meaning beyond it.

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?

Description uses specific verb 'Find' and resource 'canonical album artwork', clearly distinguishing from sibling tools like search_images and search_artist_images. Mentions specific data sources (MusicBrainz, iTunes, Spotify) and licensing.

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

Usage Guidelines4/5

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

States use case 'album identification UI' and attribution requirement. Implicitly differentiates from siblings but lacks explicit when-to-use vs alternatives. Clear context provided.

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

search_artist_imagesA

Specialized image search for a musical artist. kind selects provider set + query expansion: 'portrait' (Wikimedia + Unsplash + Spotify), 'album' (MusicBrainz CAA + iTunes + Spotify), 'logo' (Wikimedia), 'performing' (Wikimedia + Pexels). Prefer this over search_images when building artist/band content.

ParametersJSON Schema
NameRequiredDescriptionDefault
artistYes
kindNoportrait
providersNo
safeSearchNo
licensePolicyNo
maxPerProviderNo
minWidthNo
minHeightNo
timeoutMsNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It explains the behavioral differences based on the 'kind' parameter (provider sets and query expansion). However, it does not disclose any other behavioral traits such as read-only nature, pagination, or rate limits.

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

Conciseness4/5

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

The description is concise with a few sentences, front-loaded with the purpose. It could be more structured, but it is not overly long and gets to the point.

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

Completeness2/5

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

Given the lack of output schema and missing parameter descriptions, the description should be more comprehensive. It only covers the 'kind' parameter and one usage scenario, leaving many parameters and the return format unexplained.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only explains the 'kind' parameter in detail; the other 8 parameters (like safeSearch, licensePolicy, maxPerProvider, etc.) are not described at all. This adds minimal value beyond 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?

The description clearly states it is a specialized image search for a musical artist, and explicitly distinguishes this tool from sibling search_images by saying 'Prefer this over search_images when building artist/band content.' It also explains the purpose of the 'kind' parameter with specific provider sets.

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

Usage Guidelines4/5

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

The description gives explicit guidance on when to use this tool over search_images for artist/band content. However, it does not mention when not to use it or provide alternatives for other contexts, and lacks details about other sibling tools like search_album_cover.

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

search_imagesA

Federated image search across license-aware providers (Wikimedia Commons, Openverse, Unsplash, Pexels, Pixabay, iTunes, MusicBrainz CAA, Spotify, Brave). Returns concise ranked candidates with license + attribution. Does NOT auto-download — call download_image after. Default safe-only policy includes open, platform-license, editorial/press tags and rejects UNKNOWN. Use open-only for CC/public-domain only. For large batches, prefer CLI: webfetch batch --jsonl --continue-on-error.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWhat to search for (e.g., 'Drake musician portrait')
providersNo
safeSearchNo
licensePolicyNo
maxPerProviderNo
minWidthNo
minHeightNo
timeoutMsNo

TDQS

A4.2/5.0
Behavior4/5

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

Discloses search behavior (federated, license-aware), return format (candidates with license+attribution), and safe policy details. No annotations provided, so description carries burden; could mention failure modes or limits, but overall good disclosure.

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?

Description is fairly concise and front-loaded with key information (search purpose, no auto-download, policy). A few clauses (e.g., 'Default safe-only policy includes...') could be tightened, but overall efficient.

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?

Given 8 parameters, no output schema, and complex providers, description covers search scope, license awareness, policy, and pointer to download_image. Missing output format details but adequate for use.

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

Parameters2/5

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

Description mentions query and providers implicitly but does not explain parameters beyond schema. Schema coverage is low (13%), yet description adds minimal parameter guidance (e.g., no details on timeoutMs, minWidth, etc.).

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 clearly states it performs 'Federated image search across license-aware providers' and returns 'concise ranked candidates with license + attribution.' It distinguishes from sibling tools like download_image which handles downloading.

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 states when not to use ('Does NOT auto-download — call download_image after'), describes default policy and when to use open-only, and suggests using CLI for large batches.

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. 7 tool updates
    • First observeddownload_image
    • First observedfetch_with_license
    • First observedfind_similar
    • First observedprobe_page
    • First observedsearch_album_cover
    • First observedsearch_artist_images
    • First observedsearch_images

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: downloading, license checking, reverse image search, page probing, and three specialized search tools (general, album art, artist). No ambiguity between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores (e.g., download_image, search_images). No mixing of conventions.

Tool Count5/5

Seven tools cover the domain of image fetching and license checking without being excessive. Each tool earns its place, and the count is appropriate for the server's purpose.

Completeness4/5

The set covers core workflows (search, download, license check, find similar, probe page). Minor gaps exist like a generic URL fetcher for non-image content, but the server's focus on images makes this acceptable.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for searching and retrieving Creative-Commons-licensed images and audio from Openverse. Enables AI agents to query open media content.
    26 npm
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    MCP server for searching and attributing images from Openverse and Wikimedia Commons, enabling insertion via insertUrl and attribution formatting.
    2
    5 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for searching and retrieving stock images from Unsplash, Pexels, and Pixabay, with support for concurrent searches, normalized metadata, and image downloads.
    3
    1
    MIT