webfetch
webfetch
AI 에이전트와 인간을 위한 라이선스 우선 이미지 레이어.
25개의 이미지 제공업체를 연합하고, 라이선스를 우선순위로 결과를 순위 지정하며, 기본적으로 UNKNOWN 결과를 거부하는 하나의 MCP 서버, CLI 및 HTTP 서버입니다. MCP를 지원하는 모든 에이전트(Claude Code, Cursor, Cline, Continue, Roo Code, Codex)는 단 한 줄의 설정으로 연결할 수 있습니다. 랜딩 페이지, 가격 정책 및 호스팅 사용 정보는 **getwebfetch.com**에서 확인하세요.
설치
인터페이스 | 한 줄 명령어 | |
npm |
| |
Homebrew |
| |
Docker |
| |
curl | bash |
|
curl | bash 설치 프로그램은 Claude Code의 ~/.claude/settings.json에 webfetch를 자동으로 설정합니다. 업데이트하려면 언제든지 다시 실행하세요.
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-errorMCP (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);
}해결하는 문제
수동으로 이미지를 소싱할 때 발생하는 4가지 실패 모드:
라이선스를 알 수 없어 결과를 안전하게 배포할 수 없습니다.
스크립트화할 수 없습니다 — 새로운 사이트마다 매번 작업이 필요합니다.
Google 이미지 검색 API가 중단되었습니다; 스크래핑은 불안정하며 서비스 약관 위반 소지가 있습니다.
공유 캐시가 없습니다 — 동일한 파일을 수십 번 다시 다운로드하게 됩니다.
webfetch는 안정적인 약관과 구조화된 라이선스 메타데이터를 가진 직접 소스 API를 연합하고, 라이선스를 우선순위로 후보를 순위 지정하며, 결과를 단일 MCP 도구로 노출하여 이 네 가지 문제를 모두 해결합니다.
제공업체
제공업체 | 커버리지 | 기본 라이선스 | 인증 | 옵트인 |
wikimedia | 인물 사진, 이벤트, 로고, 역사 | CC_BY_SA (메타데이터) | — | 아니요 |
openverse | 모든 CC 라이선스 콘텐츠 | CC_BY (메타데이터) | — | 아니요 |
unsplash | 고품질 사진 |
|
| 아니요 |
pexels | 스톡 사진 |
|
| 아니요 |
pixabay | 스톡 사진 + 일러스트 |
|
| 아니요 |
itunes | 앨범 커버, 아티스트 사진 | EDITORIAL_LICENSED | — | 아니요 |
musicbrainz-caa | 표준 앨범 아트 | EDITORIAL_LICENSED | — | 아니요 |
spotify | 아티스트 + 앨범 이미지 | EDITORIAL_LICENSED |
| 아니요 |
youtube-thumb | 동영상 썸네일 | EDITORIAL_LICENSED | — | 예 |
brave | 일반 웹 이미지 검색 | UNKNOWN (+휴리스틱) |
| 아니요 |
bing | 일반 웹 이미지 검색 | UNKNOWN (+휴리스틱) |
| 예 |
serpapi | Google 이미지 + 역방향 검색 | UNKNOWN (+휴리스틱) |
| 예 |
browser | 헤드리스 폴백 vs images.google.com | UNKNOWN | — | 예 |
managed-browser | Bright Data 관리형 브라우저 폴백 | UNKNOWN |
| 예 |
flickr | CC / 퍼블릭 도메인 사진 | CC_BY (메타데이터) |
| 아니요 |
internet-archive | 퍼블릭 도메인 / CC 아카이브 미디어 | PUBLIC_DOMAIN | — | 아니요 |
smithsonian | 오픈 액세스 박물관 미디어 | CC0 |
| 아니요 |
nasa | NASA 이미지 | PUBLIC_DOMAIN | — | 아니요 |
met-museum | 메트로폴리탄 미술관 오픈 액세스 | CC0 | — | 아니요 |
europeana | 유럽 문화 유산 | CC_BY (메타데이터) |
| 아니요 |
library-of-congress | 미국 역사 아카이브 | PUBLIC_DOMAIN | — | 아니요 |
wellcome-collection | 의학/역사 이미지 | CC_BY (메타데이터) | — | 아니요 |
rawpixel | CC0 스톡 슬라이스 | CC0 |
| 아니요 |
burst | Shopify Burst 스톡 사진 | CC0 | — | 아니요 |
europeana-archival | Europeana 텍스트/필사본 기록 | CC_BY (메타데이터) |
| 예 |
주의 사항 및 속도 제한은 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로 취급했습니다. 현재 빌드는 해당 플랫폼의 약관을 명시적으로 노출합니다:
이전 태그 | 새 태그 | 확인 사항 |
Unsplash의 |
| Unsplash 약관; Creative Commons 아님 |
Pexels의 |
| Pexels 약관; Creative Commons 아님 |
Pixabay의 |
| Pixabay 약관; Creative Commons 아님 |
대부분의 호출자는 UNKNOWN을 거부하면서도 오픈, 플랫폼, 편집 및 보도 자료 카테고리는 허용하는 licensePolicy: "safe-only"를 유지해야 합니다. Creative Commons 또는 퍼블릭 도메인 자산만 필요한 파이프라인은 licensePolicy: "open-only"를 사용하고 세 가지 플랫폼 태그를 별도로 처리하도록 타입 가드를 업데이트해야 합니다.
webfetch vs 대안
기능 | webfetch | Raw Google Images | 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|
+-------------------------------------------+모든 인터페이스는 SHA-256으로 키가 지정된 ~/.webfetch/cache/를 공유하므로, CLI에서 다운로드한 항목은 즉시 MCP 서버에서 사용할 수 있으며 그 반대도 마찬가지입니다.
안전 기본값
licensePolicy: "safe-only"— 오픈, 플랫폼 라이선스, 편집/보도 카테고리는 허용되며UNKNOWN은 거부됩니다.safeSearch: "strict".옵트인 제공업체(
youtube-thumb,bing,serpapi,browser,managed-browser,europeana-archival)는 기본적으로 꺼져 있습니다.다운로드당 20MB 제한, 콘텐츠 유형 가드, 호스트 차단 목록.
일반 페이지 조사 시
robots.txt준수.
로드맵
webfetch watch— 반복 쿼리 / 증분 새로 고침을 위한 데몬 모드.자체 제공업체 플러그인 API.
getwebfetch.com 호스팅 티어 — 통합 제공업체 키, 관리형 브라우저 폴백, 팀 사용량 대시보드.
기여
이슈와 PR을 환영합니다. 시작하려면 bun install && bun test를 실행하세요. 영역별 참조 문서는 docs/를 확인하세요.
라이선스
MIT.
Available Tools
7 toolsdownload_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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| maxBytes | No | ||
| cacheDir | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| probe | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public URL of the reference image | |
| providers | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| respectRobots | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | ||
| album | Yes | ||
| providers | No | ||
| safeSearch | No | ||
| licensePolicy | No | ||
| maxPerProvider | No | ||
| minWidth | No | ||
| minHeight | No | ||
| timeoutMs | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| artist | Yes | ||
| kind | No | portrait | |
| providers | No | ||
| safeSearch | No | ||
| licensePolicy | No | ||
| maxPerProvider | No | ||
| minWidth | No | ||
| minHeight | No | ||
| timeoutMs | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to search for (e.g., 'Drake musician portrait') | |
| providers | No | ||
| safeSearch | No | ||
| licensePolicy | No | ||
| maxPerProvider | No | ||
| minWidth | No | ||
| minHeight | No | ||
| timeoutMs | No |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
- First observed
download_image - First observed
fetch_with_license - First observed
find_similar - First observed
probe_page - First observed
search_album_cover - First observed
search_artist_images - First observed
search_images
TDQS
Scored across 7 tools
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.
All tool names follow a consistent verb_noun pattern with underscores (e.g., download_image, search_images). No mixing of conventions.
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.
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
Related MCP Connectors
Openverse MCP — Creative-Commons-licensed image + audio search.
Search over 1.85 million captioned images using text, a reference image, or both. Upload a JPEG, PNG, or WebP image as base64, or provide a public HTTPS image URL. Find similar images from a Lightdrift asset ID and retrieve hosted file URLs, source licenses, and attribution. Connect with OAuth or an API key. Searches cost $0.005 ($5 per 1,000); image details are free. Setup: https://docs.lightdrift.ai/guides/images-mcp
Knowledge commons for AI agents: cited, licensed, queryable claims over MCP.
Free web search for AI agents. No API key required. Hosted MCP in active development.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for searching and retrieving Creative-Commons-licensed images and audio from Openverse. Enables AI agents to query open media content.26 npmMIT
- AlicenseBqualityCmaintenanceMCP server for searching and attributing images from Openverse and Wikimedia Commons, enabling insertion via insertUrl and attribution formatting.25 npmMIT
- AlicenseAqualityBmaintenanceAn MCP server that searches the web for images, creates a numbered contact sheet for visual selection, and downloads the chosen images with provenance metadata. Works without an API key.39 npmMIT
- AlicenseAqualityBmaintenanceMCP server for searching and retrieving stock images from Unsplash, Pexels, and Pixabay, with support for concurrent searches, normalized metadata, and image downloads.31MIT