visual-hunt-mcp
visual-hunt-mcp
visual-hunt-mcp — это локальный TypeScript MCP-сервер для macOS, который подключается к вашему текущему сеансу Chrome через CDP и помогает Codex / Claude находить визуально сильные изображения для плакатов, обоев и досок вдохновения.
v0.4.0 · 11 инструментов · сквозной аудит · 15/15 пройденных поведенческих тестов · 108 изображений загружено в ходе стресс-теста по 10 темам · поставляется с набором для оценки и полной тестовой обвязкой.
Он разработан для того, чтобы:
использовать официальный
@modelcontextprotocol/sdkсMcpServerиregisterToolподключаться к локальному экземпляру Chrome через
chromium.connectOverCDP(...)повторно использовать ваш локальный профиль браузера, когда вы выбираете ручной просмотр
избегать обхода платных стен, экранов входа, CAPTCHA или ограничений платформы
возвращать метаданные кандидатов и при необходимости загружать файлы изображений в папку проекта, созданную в текущей рабочей директории MCP-сервера
Зачем нужен CDP
Этот проект использует протокол Chrome DevTools вместо запуска отдельного браузера для автоматизации, поэтому MCP-сервер может повторно использовать локальный профиль Chrome, который вы контролируете. Это делает рабочие процессы в Instagram и Xiaohongshu более практичными, так как сеанс браузера может быть уже авторизован, в то время как MCP-сервер остается локальным на вашем Mac.
Related MCP server: unsplash-mcp
Почему Instagram / Xiaohongshu требуют ручного участия
Instagram и Xiaohongshu часто требуют входа в систему, могут часто менять макет и скрывать контент за элементами управления платформы. Этот MCP намеренно открывает эти страницы в вашем подключенном локальном Chrome и извлекает только видимые общедоступные изображения, когда они доступны. Он не пытается обойти вход в систему, ограничения по частоте запросов или ограничения доступа.
Область загрузки
Этот проект теперь может загружать файлы изображений из таких источников, как Unsplash, Pexels, Pixabay, сайты с обоями, а также видимые URL-адреса изображений, полученные в ходе ручного просмотра, когда ваш подключенный сеанс Chrome имеет к ним доступ. По-прежнему действуют некоторые ограничения:
превью, размещенные на Google, и изображения Google Maps остаются заблокированными
Instagram и Xiaohongshu по-прежнему зависят от состояния вашего входа в Chrome и от того, какие URL-адреса изображений фактически отображаются на странице
вы по-прежнему несете ответственность за проверку лицензирования перед повторным использованием
save_candidates_jsonпо-прежнему работает только с метаданными, в то время какdownload_candidate_imagesзаписывает файлы изображений и манифест загрузки
Функции
Инструменты MCP (11)
Инструмент | Надежность | Примечания |
| ★★★★★ | Флагман. Набор из 6 проверенных источников (Unsplash, Pexels, Pixabay, Wikimedia, Wallhaven, Alpha Coders). 100% охват тем в стресс-тестах. |
| ★★★★★ | Флагман для тем путешествий/дизайна. 100% охват тем. |
| ★★★ | Ручное участие. Большинство изображений намеренно заблокированы для загрузки — используйте для визуального вдохновения. |
| ★★ | Ручное участие. Pinterest показывает модальное окно входа в большинстве поисковых запросов; войдите через Chrome, затем вызовите |
| ★★ | Ручное участие. Тот же шаблон с экраном входа, что и у Pinterest. |
| ★★ | Нестабильно из-за макета Google с ленивой загрузкой |
| ★★★★ | Универсальный экстрактор. Работает с Wikipedia, блогами, страницами брендов. |
| ★★★★★ | Повторное извлечение после ручной прокрутки/входа на открытой странице. |
| ★★★★★ | Очистка. Идемпотентно. |
| ★★★★★ | Сохранение только метаданных. |
| ★★★★★ | Загрузка с referer + user-agent из подключенного Chrome. Превью от Google заблокированы намеренно. |
Набор источников по умолчанию (v0.4.0)
Список источников по умолчанию для search_wallpaper_sites был сокращен в v0.4.0 с 13 до 6, которые возвращали загружаемых кандидатов для более чем 80% тем в ходе стресс-тестирования:
Unsplash — современная редакционная фотография
Pexels — современная редакционная фотография
Pixabay — современная редакционная фотография
Wikimedia Commons — достопримечательности, архитектура, общественное достояние
Wallhaven — лучшие бесплатные обои 4K/8K
Alpha Coders / Wallpaper Abyss — лучшие бесплатные обои 4K/8K
Адаптеры для удаленных источников по-прежнему поставляются — передавайте их явно, когда они вам нужны: sites: ["openverse.org", "loc.gov", "images.nasa.gov", "rawpixel.com", "publicdomainpictures.net", "wallpaperscraft.com", "hdqwalls.com"].
Оценка кандидатов
Каждый кандидат получает легкий scoreHint, основанный на:
размере изображения
близости соотношения сторон к распространенным форматам плакатов / обоев
ключевых словах в заголовке или alt-тексте, таких как
poster,cinematic,wallpaper,4k,8k,travel,filmиlandscape
Установка
cd /Users/lanston/Desktop/Codex/visual-hunt-mcp
npm installЗапуск Chrome для MCP
npm run chrome:debugЭтот помощник привязывает удаленную отладку Chrome только к 127.0.0.1. Он не открывает порт CDP публично.
Если вы предпочитаете исходный скрипт:
chmod +x scripts/start-chrome-mcp.sh
./scripts/start-chrome-mcp.shРабочий процесс проверки
Запустите детерминированный дымовой тест MCP после запуска Chrome:
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-сервер запускается через stdio из текущего вывода
dist/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Для более уверенного прохождения, которое также затрагивает реальные потоки Google Images и поиска обоев через ваш подключенный сеанс Chrome:
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, чтобы JSON-RPC MCP вstdoutоставался чистым.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 |
|
| Корневой каталог для загруженных изображений и манифестов |
|
| Тайм-аут навигации/извлечения для каждой страницы |
|
| TTL для записей в реестре ручных страниц; |
|
| Жесткое ограничение размера реестра ручных страниц; самые старые удаляются первыми |
| не задано | Установите |
Ручные проверки помимо дымового теста
Когда вы хотите проверить работоспособность частей продукта, требующих ручного участия, это самые ценные последующие действия после npm run smoke:
npm run smoke:liveopen_instagram_visual_searchс тем же профилем Chrome, который вы планируете использовать ежедневно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:liveAvailable Tools
11 toolsclose_manual_pageClose Manual PageADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| manualPageId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | Yes | ||
| candidates | Yes | ||
| limit | No |
TDQS
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.
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.
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.
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.
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.
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 CandidatesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| manualPageId | Yes | ||
| limit | No |
TDQS
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.
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.
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.
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.
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.
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_google_maps_visual_searchOpen Google Maps Visual SearchARead-only
Open Google Maps in the connected local Chrome session for safe, manual-assisted visual inspiration review. Map tile URLs (maps/vt/...) are filtered out automatically; remaining Google-hosted preview URLs cannot be downloaded by this MCP.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds useful behavioral specifics: map tile URLs are automatically filtered and remaining preview URLs cannot be downloaded. This provides context beyond annotations, though it does not detail the exact opening behavior (e.g., tab creation, return value).
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, each with clear purpose. The first sentence is front-loaded with the main action, and the second adds necessary filtering details. No superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the tool's purpose and some behavioral traits, but lacks detail on parameter semantics and invocation behavior. With no output schema and 0% parameter coverage, the description should provide more complete guidance for an agent to correctly use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does not describe the 'query' or 'limit' parameters, leaving their meaning and usage ambiguous. The description focuses on the tool's function rather than the parameters, which is a significant gap.
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 tool opens Google Maps for 'safe, manual-assisted visual inspiration review,' specifying the verb, resource, and scope. It distinguishes itself from sibling tools like open_instagram_visual_search by focusing on Google Maps and manual review.
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 implies the tool is for manual-assisted review, providing context for when to use it. It mentions filtering of map tile URLs and the inability to download preview URLs, which are behavioral hints. However, it does not explicitly state when not to use this tool compared to 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.
open_instagram_visual_searchOpen Instagram Visual SearchARead-only
Open Instagram in the connected local Chrome session for manual-assisted visual review and extract only visible images. When pageState.status is login_required or blocked, candidates is intentionally empty — log in via the connected Chrome window and re-extract with extract_manual_page_candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, and open-world behavior. Description adds context about empty candidates in certain page states and suggests re-extraction steps, which is valuable beyond annotations.
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 with no unnecessary words. First sentence states core functionality, second sentence handles an important edge case. Information is front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so description should clarify return values. It partially does by mentioning 'candidates' and 'visible images', but does not explain the full output structure or behavior of the 'limit' parameter. Adequate 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 coverage is 0% and description does not explain the 'query' or 'limit' parameters. The meaning of 'query' can be inferred, but 'limit' is not mentioned at all, leaving ambiguity.
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 the tool opens Instagram for manual-assisted visual review and extracts visible images. It differentiates from sibling tools by specifying Instagram and mentions handling of login_required/blocked states, distinguishing from other open tools.
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 says when to use (for manual-assisted visual review on Instagram) and what to do when login_required or blocked (log in manually, then use extract_manual_page_candidates). Provides a clear alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_pinterest_visual_searchOpen Pinterest Visual SearchARead-only
Open Pinterest pin search results in the connected local Chrome session and extract visible image candidates. Pinterest occasionally serves a login wall — log in via the connected Chrome window and call extract_manual_page_candidates to re-extract.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds valuable context: it uses a connected local Chrome session, extracts only visible candidates, and addresses the occasional login wall with a fallback action. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first states the primary function, and the second provides a critical usage note. No extraneous content, and the key information is front-loaded.
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 login wall scenario but lacks details on extraction behavior (e.g., scrolling, handling of dynamic content) and the format of returned candidates. With no output schema, these gaps reduce completeness for an agent expecting clear expectations.
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%, and the description does not explain the parameters 'query' or 'limit' beyond their names. It fails to compensate for the lack of schema descriptions, leaving the agent without guidance on expected input format or constraints.
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 opens Pinterest search results and extracts visible image candidates, using specific verbs like 'open' and 'extract'. It distinguishes from siblings by specifying Pinterest, as opposed to other platforms like Google Maps or Instagram.
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 provides guidance on when to use an alternative tool: if a login wall appears, call extract_manual_page_candidates. However, it does not explicitly compare to other sibling tools or state when to prefer this over open_url_and_extract_images.
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 ImagesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| limit | No |
TDQS
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.
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.
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.
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.
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.
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.
open_xiaohongshu_visual_searchOpen Xiaohongshu Visual SearchARead-only
Open Xiaohongshu search results in the connected local Chrome session and extract visible images. Best path for Chinese-language queries. When pageState reports a login wall, candidates is empty — log in via Chrome and call extract_manual_page_candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. Description adds value by explaining login wall behavior and that candidates are empty in that case. No contradictions, but could elaborate more on output format.
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 wasted words. Front-loaded with primary action, followed by important conditional guidance. Exemplary conciseness.
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?
Covers purpose, usage context, and a special case. Lacks parameter details and output explanation, but given no output schema and annotations, it's mostly adequate.
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 and the description does not mention parameters (query, limit). It fails to add any meaning beyond the schema, which is minimal.
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 tool opens Xiaohongshu search results and extracts visible images, with a specific verb (open, extract), resource (Xiaohongshu), and distinguishes from siblings by mentioning it's best for Chinese-language queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (best for Chinese-language queries) and when-not-to-use (login wall scenario, with alternative: extract_manual_page_candidates). Provides clear context and conditional guidance.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | Yes | ||
| candidates | Yes |
TDQS
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.
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.
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.
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.
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.
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 ImagesARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No | ||
| quality | No |
TDQS
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.
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.
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.
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.
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.
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 SitesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No | ||
| sites | No |
TDQS
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.
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.
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.
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.
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.
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.
11 tool updates
v0.4.0- First observed
close_manual_page - First observed
download_candidate_images - First observed
extract_manual_page_candidates - First observed
open_google_maps_visual_search - First observed
open_instagram_visual_search - First observed
open_pinterest_visual_search - First observed
open_url_and_extract_images - First observed
open_xiaohongshu_visual_search - First observed
save_candidates_json - First observed
search_google_images - First observed
search_wallpaper_sites
TDQS
Scored across 11 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for visual regression testing: triage a PR's UI diffs from your coding agent.
MCP connector for iMessage & Contacts via a local Mac agent + Vercel relay
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
Focused MCP server for OpenAI image/audio generation (v2.0.0). Wraps endpoints via HAPI CLI.
Related MCP Servers
- AlicenseBqualityBmaintenanceMCP server to search and download stock images from Pexels, Unsplash, and Pixabay2622 npm3MIT
- AlicenseAqualityDmaintenanceAn MCP server for searching and retrieving photos from Unsplash with proper attribution, designed for LLMs building content pages.330MIT
- AlicenseAqualityCmaintenanceMCP server that enables searching and downloading Unsplash photos and collections.4MIT
- AlicenseAqualityAmaintenanceProduction-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.2971 npm2MIT