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 is a local TypeScript MCP server for macOS that connects to your existing Chrome session over CDP and helps Codex / Claude find visually strong image candidates for posters, wallpapers, and inspiration boards.

v0.4.0 · 11 tools · audited end-to-end · 15/15 behavioural tests pass · 108 images downloaded in a real-world 10-topic stress test · ships with eval suite and full-test harness.

It is designed to:

  • use the official @modelcontextprotocol/sdk with McpServer and registerTool

  • connect to a local Chrome instance via chromium.connectOverCDP(...)

  • reuse your local logged-in browser profile when you choose to do manual-assisted review

  • avoid bypassing paywalls, login walls, CAPTCHA, or platform controls

  • return candidate metadata and optionally download image files into a project folder created under the MCP server's current working directory

Why CDP

This project uses Chrome DevTools Protocol instead of launching a fresh automation browser so the MCP server can reuse a local Chrome profile you control. That makes Instagram and Xiaohongshu workflows more practical because the browser session can already be logged in, while the MCP server still stays local on your Mac.

Related MCP server: unsplash-mcp

Why Instagram / Xiaohongshu Are Manual-Assisted

Instagram and Xiaohongshu often require login, can change layout frequently, and may gate content behind platform controls. This MCP deliberately opens those pages in your connected local Chrome and only extracts visible public image candidates when available. It does not try to bypass login, rate limits, or access restrictions.

Download Scope

This project can now download image files for sources such as Unsplash, Pexels, Pixabay, wallpaper sites, and visible image URLs surfaced from manual-assisted social browsing when your connected Chrome session has access. A few guardrails still apply:

  • Google-hosted previews and Google Maps imagery stay blocked

  • Instagram and Xiaohongshu still depend on your connected Chrome login state and whatever visible image URLs the page actually exposes

  • you are still responsible for checking licensing before reuse

  • save_candidates_json remains metadata-only, while download_candidate_images writes image files plus a download manifest

Features

MCP tools (11)

Tool

Reliability

Notes

search_wallpaper_sites

★★★★★

Flagship. Curated 6-source set (Unsplash, Pexels, Pixabay, Wikimedia, Wallhaven, Alpha Coders). 100% topic coverage in stress tests.

open_xiaohongshu_visual_search

★★★★★

Flagship for travel/design topics. 100% topic coverage.

open_google_maps_visual_search

★★★

Manual-assisted. Most images correctly blocked from download by design — use for visual inspiration.

open_pinterest_visual_search

★★

Manual-assisted. Pinterest serves a login modal on most searches; log in via Chrome, then call extract_manual_page_candidates.

open_instagram_visual_search

★★

Manual-assisted. Same login-wall pattern as Pinterest.

search_google_images

★★

Inconsistent due to Google's lazy-loaded udm=2 layout. Prefer search_wallpaper_sites for primary search.

open_url_and_extract_images

★★★★

Generic extractor. Works on Wikipedia, blogs, brand pages.

extract_manual_page_candidates

★★★★★

Re-extract after manual scroll/login on a held page.

close_manual_page

★★★★★

Cleanup. Idempotent.

save_candidates_json

★★★★★

Metadata-only persistence.

download_candidate_images

★★★★★

Download with referer + user-agent from connected Chrome. Google-hosted previews are blocked by design.

Default source set (v0.4.0 curated)

The default search_wallpaper_sites source list was trimmed in v0.4.0 from 13 sources to the 6 that returned downloadable candidates on >80% of topics in real-world stress testing:

  1. Unsplash — modern editorial photography

  2. Pexels — modern editorial photography

  3. Pixabay — modern editorial photography

  4. Wikimedia Commons — landmarks, architecture, public-domain

  5. Wallhaven — top free 4K/8K wallpapers

  6. Alpha Coders / Wallpaper Abyss — top free 4K/8K wallpapers

Adapters for the dropped sources still ship — pass them explicitly when you need them: sites: ["openverse.org", "loc.gov", "images.nasa.gov", "rawpixel.com", "publicdomainpictures.net", "wallpaperscraft.com", "hdqwalls.com"].

Candidate scoring

Each candidate gets a lightweight scoreHint based on:

  • image size

  • aspect ratio closeness to common poster / wallpaper ratios

  • title or alt text keywords such as poster, cinematic, wallpaper, 4k, 8k, travel, film, and landscape

Install

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

Start Chrome For MCP

npm run chrome:debug

This helper binds Chrome remote debugging to 127.0.0.1 only. It does not expose the CDP port publicly.

If you prefer the raw script:

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

Validation Workflow

Run the deterministic MCP smoke test after Chrome is up:

npm run smoke

For a comprehensive behavioural sweep covering all 11 tools (schema coercion, query optimization, manual-page lifecycle, login-wall suppression, false-positive filters, security guards):

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

What npm run smoke validates:

  • the local MCP server starts over stdio from the current dist/ output

  • tools/list exposes the expected tool set

  • open_url_and_extract_images can extract visible candidates from a local fixture page

  • extract_manual_page_candidates and close_manual_page are exposed for manual-assisted follow-up flows

  • save_candidates_json writes candidate metadata to a temporary output root

  • download_candidate_images downloads an allowed local image and skips a blocked Google-hosted candidate with a clear reason

The smoke test uses a temporary VISUAL_HUNT_OUTPUT_ROOT and cleans it up on success. To keep the artifacts for inspection:

npm run smoke -- --keep-output

For a higher-confidence pass that also hits live Google Images and wallpaper search flows through your connected Chrome session:

npm run smoke:live

Use npm run validate as the stable default validation command. It now runs npm run build first and then the deterministic smoke test.

Run MCP Locally

npm run dev

For production-style use:

npm run build
node dist/index.js

Claude Desktop Config

{
  "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"
      }
    }
  }
}

Example Prompts

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.

Notes

  • Logs are written to stderr only so MCP JSON-RPC on stdout stays clean.

  • Chrome must already be running with remote debugging enabled.

  • Output folders are created under the MCP server's current working directory by default. Example: /path/to/visual-hunt-mcp/<project>/images.

  • Override the output root with VISUAL_HUNT_OUTPUT_ROOT if you want downloads somewhere else.

  • save_candidates_json writes metadata to <output-root>/<project>/candidates.json.

  • download_candidate_images writes image files to <output-root>/<project>/images and a manifest to <output-root>/<project>/downloads.json.

  • scripts/smoke-test.mjs is the quickest way to validate the MCP contract end-to-end against a local server process.

  • scripts/smoke-test.mjs validates the local server through the current dist/ output and uses a temporary output root for artifacts.

  • The server does not store credentials.

  • The server does not execute arbitrary shell commands.

Environment variables

Var

Default

Effect

CHROME_CDP_ENDPOINT

http://127.0.0.1:9222

Chrome remote-debugging endpoint

VISUAL_HUNT_OUTPUT_ROOT

process.cwd()

Root directory for downloaded images and manifests

VISUAL_HUNT_TIMEOUT_MS

20000

Per-page navigation/extraction timeout

VISUAL_HUNT_MANUAL_PAGE_TTL_MS

1800000 (30 min)

TTL for entries in the manual-page registry; getManualPage refreshes

VISUAL_HUNT_MANUAL_PAGE_MAX

50

Hard cap on manual-page registry size; oldest evicted first

VISUAL_HUNT_AUTO_REGISTER

unset

Set to 1 to rewrite ~/.claude.json with this server entry on every startup. Off by default since v0.3.0.

Manual Checks Beyond Smoke

When you want to sanity-check the live/manual-assisted parts of the product, these are the highest-value follow-ups after npm run smoke:

  • npm run smoke:live

  • open_instagram_visual_search with the same Chrome profile you plan to use day-to-day

  • open_xiaohongshu_visual_search with that same profile if login is required

  • open_google_maps_visual_search to confirm the manual-review note and non-bypass behavior still look right

Exact Mac Commands

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.

TDQS

A4.2/5.0
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

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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
    24
    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
    88
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CTlanston/visual-hunt-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server