Skip to main content
Glama
CTlanston

visual-hunt-mcp

by CTlanston

visual-hunt-mcp

MIT License Node 20+ MCP SDK 1.29+

visual-hunt-mcp는 macOS용 로컬 TypeScript MCP 서버로, 기존 Chrome 세션에 CDP로 연결하여 Codex/Claude가 포스터, 배경화면, 영감 보드를 위한 시각적으로 강력한 이미지 후보를 찾도록 돕습니다.

v0.4.0 · 11개 도구 · 엔드투엔드 감사 완료 · 15/15 행동 테스트 통과 · 실제 10개 주제 스트레스 테스트에서 108개 이미지 다운로드 · 평가 제품군 및 전체 테스트 하네스 포함.

이 서버는 다음을 위해 설계되었습니다:

  • McpServer 및 registerTool을 사용하여 공식 @modelcontextprotocol/sdk 활용

  • chromium.connectOverCDP(...)를 통해 로컬 Chrome 인스턴스에 연결

  • 수동 지원 검토를 선택할 때 로컬에 로그인된 브라우저 프로필 재사용

  • 페이월, 로그인 월, CAPTCHA 또는 플랫폼 제어 우회 방지

  • 후보 메타데이터 반환 및 선택적으로 MCP 서버의 현재 작업 디렉토리 아래에 생성된 프로젝트 폴더로 이미지 파일 다운로드

CDP를 사용하는 이유

이 프로젝트는 새로운 자동화 브라우저를 실행하는 대신 Chrome DevTools Protocol을 사용하여 MCP 서버가 사용자가 제어하는 로컬 Chrome 프로필을 재사용할 수 있도록 합니다. 이를 통해 브라우저 세션에 이미 로그인된 상태를 유지하면서 MCP 서버는 Mac에서 로컬로 작동하므로 Instagram 및 샤오홍슈(Xiaohongshu) 워크플로우를 더 실용적으로 만들 수 있습니다.

Related MCP server: unsplash-mcp

Instagram / 샤오홍슈가 수동 지원 방식인 이유

Instagram과 샤오홍슈는 종종 로그인이 필요하고 레이아웃이 자주 변경되며 플랫폼 제어 뒤에 콘텐츠를 숨길 수 있습니다. 이 MCP는 의도적으로 연결된 로컬 Chrome에서 해당 페이지를 열고, 사용 가능한 경우에만 표시되는 공개 이미지 후보를 추출합니다. 로그인, 속도 제한 또는 액세스 제한을 우회하려고 시도하지 않습니다.

다운로드 범위

이 프로젝트는 이제 Unsplash, Pexels, Pixabay, 배경화면 사이트와 같은 소스의 이미지 파일과, 연결된 Chrome 세션이 액세스할 수 있을 때 수동 지원 소셜 브라우징에서 노출되는 표시 가능한 이미지 URL을 다운로드할 수 있습니다. 몇 가지 안전 장치가 여전히 적용됩니다:

  • Google 호스팅 미리보기 및 Google 지도 이미지는 차단된 상태로 유지됩니다.

  • Instagram 및 샤오홍슈는 여전히 연결된 Chrome 로그인 상태와 페이지가 실제로 노출하는 표시 가능한 이미지 URL에 의존합니다.

  • 재사용 전 라이선스 확인 책임은 사용자에게 있습니다.

  • save_candidates_json은 메타데이터 전용으로 유지되며, download_candidate_images는 이미지 파일과 다운로드 매니페스트를 작성합니다.

기능

MCP 도구 (11개)

도구

신뢰성

참고

search_wallpaper_sites

★★★★★

대표 도구. 6개 소스 세트(Unsplash, Pexels, Pixabay, Wikimedia, Wallhaven, Alpha Coders) 엄선. 스트레스 테스트에서 100% 주제 커버리지.

open_xiaohongshu_visual_search

★★★★★

여행/디자인 주제를 위한 대표 도구. 100% 주제 커버리지.

open_google_maps_visual_search

★★★

수동 지원. 대부분의 이미지는 설계상 다운로드가 차단됨 — 시각적 영감 용도로 사용.

open_pinterest_visual_search

★★

수동 지원. Pinterest는 대부분의 검색에서 로그인 모달을 표시함; Chrome을 통해 로그인한 후 extract_manual_page_candidates 호출.

open_instagram_visual_search

★★

수동 지원. Pinterest와 동일한 로그인 월 패턴.

search_google_images

★★

Google의 지연 로드 udm=2 레이아웃으로 인해 일관성이 없음. 기본 검색에는 search_wallpaper_sites를 권장.

open_url_and_extract_images

★★★★

범용 추출기. Wikipedia, 블로그, 브랜드 페이지에서 작동.

extract_manual_page_candidates

★★★★★

페이지에서 수동 스크롤/로그인 후 재추출.

close_manual_page

★★★★★

정리. 멱등성 보장.

save_candidates_json

★★★★★

메타데이터 전용 저장.

download_candidate_images

★★★★★

연결된 Chrome의 referer + user-agent를 사용하여 다운로드. Google 호스팅 미리보기는 설계상 차단됨.

기본 소스 세트 (v0.4.0 엄선)

기본 search_wallpaper_sites 소스 목록은 v0.4.0에서 13개 소스에서 실제 스트레스 테스트에서 80% 이상의 주제에 대해 다운로드 가능한 후보를 반환한 6개 소스로 축소되었습니다:

  1. Unsplash — 현대적인 에디토리얼 사진

  2. Pexels — 현대적인 에디토리얼 사진

  3. Pixabay — 현대적인 에디토리얼 사진

  4. Wikimedia Commons — 랜드마크, 건축, 퍼블릭 도메인

  5. Wallhaven — 상위 무료 4K/8K 배경화면

  6. Alpha Coders / Wallpaper Abyss — 상위 무료 4K/8K 배경화면

제외된 소스에 대한 어댑터는 여전히 포함되어 있습니다. 필요할 때 명시적으로 전달하세요: sites: ["openverse.org", "loc.gov", "images.nasa.gov", "rawpixel.com", "publicdomainpictures.net", "wallpaperscraft.com", "hdqwalls.com"].

후보 점수 산정

각 후보는 다음을 기반으로 가벼운 scoreHint를 받습니다:

  • 이미지 크기

  • 일반적인 포스터/배경화면 비율과의 근접성

  • poster, cinematic, wallpaper, 4k, 8k, travel, film, landscape와 같은 제목 또는 alt 텍스트 키워드

설치

cd /Users/lanston/Desktop/Codex/visual-hunt-mcp
npm install

MCP를 위한 Chrome 시작

npm run chrome:debug

이 도우미는 Chrome 원격 디버깅을 127.0.0.1에만 바인딩합니다. CDP 포트를 공개적으로 노출하지 않습니다.

원시 스크립트를 선호하는 경우:

chmod +x scripts/start-chrome-mcp.sh
./scripts/start-chrome-mcp.sh

검증 워크플로우

Chrome이 실행된 후 결정론적 MCP 스모크 테스트를 실행합니다:

npm run smoke

11개 도구 전체를 포괄하는 포괄적인 행동 스윕(스키마 강제, 쿼리 최적화, 수동 페이지 수명 주기, 로그인 월 억제, 오탐지 필터, 보안 가드)을 수행하려면:

node scripts/full-test.mjs              # 15 cases including live Chrome paths
node scripts/full-test.mjs --skip-live  # 10 cases, fast, no browser deps

npm run smoke가 검증하는 내용:

  • 로컬 MCP 서버가 현재 dist/ 출력에서 stdio를 통해 시작됨

  • tools/list가 예상 도구 세트를 노출함

  • open_url_and_extract_images가 로컬 픽스처 페이지에서 표시 가능한 후보를 추출할 수 있음

  • extract_manual_page_candidates 및 close_manual_page가 수동 지원 후속 흐름을 위해 노출됨

  • save_candidates_json이 후보 메타데이터를 임시 출력 루트에 작성함

  • download_candidate_images가 허용된 로컬 이미지를 다운로드하고 차단된 Google 호스팅 후보를 명확한 이유와 함께 건너뜀

스모크 테스트는 임시 VISUAL_HUNT_OUTPUT_ROOT를 사용하며 성공 시 정리합니다. 검사를 위해 아티팩트를 유지하려면:

npm run smoke -- --keep-output

연결된 Chrome 세션을 통해 라이브 Google 이미지 및 배경화면 검색 흐름을 통과하는 더 높은 신뢰도의 테스트를 수행하려면:

npm run smoke:live

안정적인 기본 검증 명령으로 npm run validate를 사용하세요. 이 명령은 먼저 npm run build를 실행한 다음 결정론적 스모크 테스트를 실행합니다.

로컬에서 MCP 실행

npm run dev

프로덕션 스타일 사용:

npm run build
node dist/index.js

Claude Desktop 설정

{
  "mcpServers": {
    "visual-hunt": {
      "command": "node",
      "args": [
        "/Users/lanston/Desktop/Codex/visual-hunt-mcp/dist/index.js"
      ],
      "env": {
        "CHROME_CDP_ENDPOINT": "http://127.0.0.1:9222"
      }
    }
  }
}

예시 프롬프트

Use visual-hunt to search_google_images for "cinematic Oahu Hawaii sunset travel poster 8k", limit 10.
Use visual-hunt to search_wallpaper_sites for "dark luxury black gold abstract 8k wallpaper", limit 15.
Use visual-hunt to open_xiaohongshu_visual_search for "夏威夷 绝美 海报 壁纸 旅行 摄影", limit 10.
Use visual-hunt to download_candidate_images for project "oahu-poster-board" using the candidates from the last search, limit 5.
Use visual-hunt to extract_manual_page_candidates for the manualPageId from the Xiaohongshu search after I log in or scroll more.

참고

  • 로그는 stderr에만 기록되므로 stdout의 MCP JSON-RPC는 깨끗하게 유지됩니다.

  • Chrome은 원격 디버깅이 활성화된 상태로 이미 실행 중이어야 합니다.

  • 출력 폴더는 기본적으로 MCP 서버의 현재 작업 디렉토리 아래에 생성됩니다. 예: /path/to/visual-hunt-mcp/<project>/images.

  • 다른 곳에 다운로드하려면 VISUAL_HUNT_OUTPUT_ROOT로 출력 루트를 재정의하세요.

  • save_candidates_json은 메타데이터를 <output-root>/<project>/candidates.json에 작성합니다.

  • download_candidate_images는 이미지 파일을 <output-root>/<project>/images에, 매니페스트를 <output-root>/<project>/downloads.json에 작성합니다.

  • scripts/smoke-test.mjs는 로컬 서버 프로세스에 대해 MCP 계약을 엔드투엔드로 검증하는 가장 빠른 방법입니다.

  • scripts/smoke-test.mjs는 현재 dist/ 출력을 통해 로컬 서버를 검증하고 아티팩트에 임시 출력 루트를 사용합니다.

  • 서버는 자격 증명을 저장하지 않습니다.

  • 서버는 임의의 셸 명령을 실행하지 않습니다.

환경 변수

변수

기본값

효과

CHROME_CDP_ENDPOINT

http://127.0.0.1:9222

Chrome 원격 디버깅 엔드포인트

VISUAL_HUNT_OUTPUT_ROOT

process.cwd()

다운로드된 이미지 및 매니페스트를 위한 루트 디렉토리

VISUAL_HUNT_TIMEOUT_MS

20000

페이지별 탐색/추출 타임아웃

VISUAL_HUNT_MANUAL_PAGE_TTL_MS

1800000 (30분)

수동 페이지 레지스트리의 항목 TTL; getManualPage가 새로 고침

VISUAL_HUNT_MANUAL_PAGE_MAX

50

수동 페이지 레지스트리 크기에 대한 하드 캡; 가장 오래된 항목부터 제거

VISUAL_HUNT_AUTO_REGISTER

설정 안 됨

1로 설정하면 시작할 때마다 이 서버 항목으로 ~/.claude.json을 다시 작성함. v0.3.0부터 기본적으로 꺼져 있음.

스모크 테스트를 넘어서는 수동 확인

제품의 라이브/수동 지원 부분을 확인하고 싶을 때, npm run smoke 이후에 수행할 가장 가치 있는 후속 작업은 다음과 같습니다:

  • npm run smoke:live

  • 일상적으로 사용할 Chrome 프로필로 open_instagram_visual_search 실행

  • 로그인이 필요한 경우 동일한 프로필로 open_xiaohongshu_visual_search 실행

  • 수동 검토 메모와 우회 방지 동작이 올바르게 보이는지 확인하기 위해 open_google_maps_visual_search 실행

정확한 Mac 명령

cd /Users/lanston/Desktop/Codex/visual-hunt-mcp
npm install
npm run chrome:debug
npm run smoke
npm run smoke:live

Available Tools

11 tools
close_manual_pageClose Manual PageA
DestructiveIdempotent

Close a previously opened manual-assisted page and remove it from the in-memory registry. Returns {closed:false} if the manualPageId was unknown (already closed or expired); not an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
manualPageIdYes

TDQS

A3.9/5.0
Behavior4/5

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

Description adds that it removes from registry and returns {closed:false} for unknown ID, going beyond annotations (destructiveHint, idempotentHint). No contradiction.

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 concise sentences, front-loaded with action and resource, no wasted words.

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?

Covers main action and edge case, but could describe what manualPageId represents. However, tool complexity is low, and overall is fairly complete.

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 coverage is 0%, but description adds no information about the parameter manualPageId beyond its name. Fails to compensate for the gap.

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?

Clearly states verb 'close' and resource 'manual-assisted page', distinguishing it from sibling open tools. No ambiguity.

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

Usage Guidelines3/5

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

Implies use after opening, but lacks explicit when-to-use or when-not-to-use. Doesn't reference any alternative close tools (none exist).

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

download_candidate_imagesDownload Candidate ImagesA

Download candidate images into a project folder under the current MCP working directory, using the connected browser session for cookies and referer when needed. Google-hosted previews and Google Maps imagery are blocked. candidates accepts either an array or a JSON-array string.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNameYes
candidatesYes
limitNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations indicate openWorldHint=true, meaning side effects exist, but no destructive or idempotent hints. The description adds valuable behavioral context: it uses the browser session for cookies/referer, blocks Google-hosted previews and Google Maps imagery, and accepts flexible input formats for 'candidates'. This goes beyond annotations by specifying what is blocked and how sessions are used.

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 at two sentences, yet it packs essential information: destination, browser dependency, blocked sources, and parameter flexibility. No redundant text; every sentence adds value. Structure is front-loaded with the primary action.

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?

Given the complexity of 3 parameters (including a nested object) and no output schema, the description covers the download destination and blocking behavior. However, it omits important context like response details (success/failure), error handling, the effect of the 'limit' parameter, and prerequisites for the browser session. It is adequate but not fully complete for a tool with no output schema and low parameter documentation.

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 explain all parameters. It only partially covers 'candidates' by noting it accepts arrays or JSON strings. 'projectName' and 'limit' are left unexplained, lacking any additional context on their format, purpose, or constraints. The description fails to compensate for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action ('Download candidate images'), the target location ('into a project folder under the current MCP working directory'), and the mechanism ('using the connected browser session for cookies and referer when needed'). It effectively distinguishes this tool from siblings like 'save_candidates_json' or 'search_google_images' by focusing on downloading images rather than metadata or searches.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it, nor does it reference sibling tools like 'save_candidates_json' for saving metadata instead. Usage context is only implied by the action (download) but lacks comparative decision criteria.

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

extract_manual_page_candidatesExtract Manual Page CandidatesA
Read-only

Re-extract visible image candidates from a previously opened manual-assisted page after you log in, scroll, or dismiss overlays. The manualPageId comes from a prior open_*_visual_search call. Each access refreshes the TTL.

ParametersJSON Schema
NameRequiredDescriptionDefault
manualPageIdYes
limitNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate read-only and non-destructive behavior. The description adds value by noting that each access refreshes the TTL, which goes beyond the annotations. No contradiction with annotations.

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 two sentences long, front-loaded with the core action, and contains no unnecessary words. 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?

Given the tool has 2 parameters, no output schema, and annotations, the description covers the purpose, usage scenario, and a behavioral note (TTL refresh). It does not describe return format or pagination, but is reasonably complete for a re-extraction tool.

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 0%, so the description must compensate. It explains that manualPageId originates from a prior open_*_visual_search call, adding meaning. However, it provides no additional context for the optional limit parameter, so only partial compensation.

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 tool re-extracts visible image candidates from a previously opened manual-assisted page. It specifies the verb 're-extract' and resource 'image candidates', and distinguishes from siblings by tying to a prior open_*_visual_search call.

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 provides clear context for when to use the tool: after logging in, scrolling, or dismissing overlays. It does not explicitly state when not to use it or name alternatives, but the usage scenario is well-defined.

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

open_url_and_extract_imagesOpen URL And Extract ImagesA
Read-only

Open any http or https URL in the connected local Chrome session and extract visible image candidates. javascript:, file:, and other schemes are rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
limitNo

TDQS

A3.6/5.0
Behavior4/5

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

The description discloses that the tool opens a URL in a local Chrome session and extracts visible image candidates, adding context beyond the annotations (readOnlyHint, destructiveHint). It explains the scheme restriction, but does not detail browser state changes or extraction mechanics.

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 a single sentence that efficiently conveys the core functionality and a key constraint. However, it omits parameter details, which could be structured as a short list. It is concise but at the cost of completeness.

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?

There is no output schema, so the description should explain what 'extract visible image candidates' returns (e.g., image URLs, data). It also fails to describe the return format or any pagination behavior. Combined with missing parameter explanations, the tool is inadequately specified for reliable agent invocation.

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 input schema has 0% description coverage, so the description must compensate. It mentions the 'url' parameter but does not explain the 'limit' parameter, its purpose, or how it controls extraction. This leaves the agent guessing about a critical 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 (open URL and extract images), the resource (connected local Chrome session), and the output (visible image candidates). It also explicitly rejects non-http/https schemes, distinguishing it from sibling tools that target specific sites.

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

Usage Guidelines3/5

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

The description specifies that only http/https URLs are accepted and lists rejected schemes, but it does not provide guidance on when to use this generic tool versus specialized siblings like open_google_maps_visual_search. The usage context is implied but not explicitly contrasted.

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

save_candidates_jsonSave Candidates JSONA

Save candidate metadata under the current MCP working directory without downloading image files. candidates accepts either an array or a JSON-array string.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNameYes
candidatesYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate non-read-only. The description adds that images are not downloaded, which is helpful but does not cover other behaviors like overwriting or error handling. No contradiction with annotations.

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 concise sentences: first states the core action and location, second clarifies the parameter flexibility. No unnecessary words.

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?

Covers key behavior and parameter type but lacks details on return value, success/failure, file naming, or idempotency. Adequate but not rich.

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?

The description adds value by explaining that 'candidates' accepts either an array or JSON string, which is not described in the schema. However, 'projectName' remains uncommented, and overall schema coverage is 0%.

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 tool saves candidate metadata to the MCP working directory and explicitly excludes downloading image files. This distinguishes it from sibling tools like download_candidate_images.

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

Usage Guidelines3/5

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

The description implies use for metadata-only saving without images, but does not explicitly give when/when-not guidance or name alternatives. Users must infer from sibling tool names.

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

search_google_imagesSearch Google ImagesA
Read-only

Search Google Images (udm=2) for visually strong poster and wallpaper candidates using the connected local Chrome session. Default quality is 'normal' — pass 'cinematic' or 'poster' only when you actually want a stylistic suffix appended to the query (verbose suffixes can push Google to zero-results pages).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo
qualityNo

TDQS

A4/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it mentions using a connected local Chrome session and warns that verbose quality suffixes can lead to zero results. Annotations already indicate read-only and non-destructive behavior; the description fills in additional dependencies and risks.

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 two sentences, front-loaded with the core action, and includes a crucial warning. Every clause earns its place—no superfluous text.

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

Completeness4/5

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

For a tool with 3 parameters and no output schema, the description covers the main purpose, a key parameter caveat, and the Chrome session dependency. It does not detail return values, but given the simplicity, it is mostly complete.

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?

The input schema has 0% description coverage, so the description must compensate. It explains the 'quality' parameter's default and cautionary behavior, but does not clarify 'query' (though implied) or 'limit'. Partial value added.

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 tool's purpose: searching Google Images for poster and wallpaper candidates using a local Chrome session. It specifies the resource (Google Images with udm=2) and the verb (search), distinguishing it from sibling tools that target other platforms or actions.

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

Usage Guidelines3/5

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

The description provides guidance on when to use the 'quality' parameter (pass 'cinematic' or 'poster' only when a stylistic suffix is wanted) and warns about zero-results pages. However, it does not explicitly state when to use this tool instead of other image search tools or provide exclusions.

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

search_wallpaper_sitesSearch Wallpaper SitesA
Read-only

Search supported wallpaper, photography, archive, and open-license image sources using direct site adapters with Google fallback. Pass sites as either an array of strings or a JSON-array string. Default quality suffix is 'cinematic' (kept for backwards-compat); reduce to 'normal' for noisy queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo
sitesNo

TDQS

A4.2/5.0
Behavior4/5

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

Adds context beyond annotations by explaining the Google fallback, direct site adapters, and quality suffix behavior. No contradictions with annotations.

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 concise sentences that front-load the purpose and provide necessary usage details without fluff.

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?

Covers the main behaviors like fallback and sites flexibility. Lacks details on return format or limit parameter, but the tool is search-style and return is somewhat implied.

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?

With 0% schema description coverage, the description partially compensates by explaining the `sites` parameter format (array or JSON string) and the default quality suffix. However, the `limit` and `query` parameters are not elaborated.

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 'Search', the resource (wallpaper, photography, etc., image sources), and the method (direct site adapters with Google fallback). It distinguishes from siblings like search_google_images by indicating multiple sources.

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 guidance on how to use the `sites` parameter and the default quality suffix. However, it does not explicitly state when to use this tool versus alternatives like search_google_images.

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. 11 tool updatesv0.4.0
    • First observedclose_manual_page
    • First observeddownload_candidate_images
    • First observedextract_manual_page_candidates
    • First observedopen_google_maps_visual_search
    • First observedopen_instagram_visual_search
    • First observedopen_pinterest_visual_search
    • First observedopen_url_and_extract_images
    • First observedopen_xiaohongshu_visual_search
    • First observedsave_candidates_json
    • First observedsearch_google_images
    • First observedsearch_wallpaper_sites

TDQS

A4.2/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct action or platform: opening specific sites (Google Maps, Instagram, Pinterest, Xiaohongshu, generic URL), extracting or re-extracting candidates, downloading or saving images, and searching via Google or wallpaper sites. No two tools have overlapping purposes, and descriptions clarify their unique roles.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., 'close_manual_page', 'download_candidate_images', 'open_google_maps_visual_search'). There are no deviations or mixed styles, ensuring predictability for agents.

Tool Count5/5

With 11 tools, the server is well-scoped for its purpose of visual hunting. Each tool serves a clear function without redundancy, and the count is neither too thin nor too heavy for the domain.

Completeness5/5

The tool set covers the full workflow: opening visual sources (platform-specific and generic), extracting and re-extracting candidates, downloading images, and saving metadata. There are no obvious missing operations like a 'list downloads' tool, but the core lifecycle is complete and agents can accomplish tasks without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server for searching and retrieving photos from Unsplash with proper attribution, designed for LLMs building content pages.
    3
    30
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server that enables searching and downloading Unsplash photos and collections.
    4
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Production-ready Model Context Protocol (MCP) server for the Unsplash API — search photos, fetch details, and stay compliant with Unsplash attribution & download-tracking guidelines. Unofficial; not affiliated with or endorsed by Unsplash.
    29
    71 npm
    2
    MIT