Skip to main content
Glama

bhoonidhi-mcp

License: MIT

Сервер MCP, который позволяет ИИ-агенту искать, сохранять, скачивать и откладывать в корзину спутниковые сцены с портала Bhoonidhi Browse & Order (NRSC) на естественном языке. Агент может превратить фразу вроде «Sentinel-2 над Шиллонгом в прошлом январе» в реальный поиск по живому порталу, честно увидеть, что доступно для скачивания, сохранить поиск для повторного использования, посмотреть, что принесёт скачивание, и — после входа в систему — скачать сцены открытого доступа или отложить их в корзину.

Это тонкий адаптер над SDK bhoonidhi-downloader — тем же клиентом, который использует CLI bhd, — поэтому логика портала не дублируется.

Статус

Поиск и сохранение без входа; скачивание и корзина — со входом. Инструменты обращаются к полному архиву 41 спутниковой миссии и 79 сенсоров, ищут по живому порталу и сохраняют запросы в переиспользуемые slug — всё без учётных данных. Для скачивания сцен открытого доступа и добавления сцен в корзину Bhoonidhi требуется вход, который выполняется отдельно, с помощью bhd auth login (сервер переиспользует эту сессию).

Related MCP server: Google Earth Engine MCP Server

Инструменты

Инструмент

Что делает

Вход

list_archive

Словарь спутников, сенсоров и поисковых токенов, поддерживаемых порталом, в реальном времени с Bhoonidhi.

нет

resolve_location

Превращает название места («Loktak Lake») в центроид и ограничивающую рамку. Отклоняет входные данные, которые не являются названиями мест.

нет

search_scenes

Поиск сцен на естественном языке по области и диапазону дат. Приводит неформальное название спутника к точным токенам и сообщает доступность каждой сцены (Ready / Archived / OnOrder / Priced). Не хранит состояние — ничего не сохраняется.

нет

preview_download

Сухой прогон: показывает, что принесёт скачивание результатов, а что будет пропущено, до начала скачивания.

нет

save_query

Сохраняет поисковый запрос (те же аргументы, что и search_scenes) в переиспользуемый slug, чтобы позже можно было скачать его или добавить в корзину.

нет

list_queries

Перечисляет сохранённые запросы в виде компактных сводок: slug, имя, диапазон дат, спутники, область и доступность.

нет

show_query

Возвращает один сохранённый запрос по slug и его сцены.

нет

remove_query

Удаляет сохранённый запрос по slug.

нет

auth_status

Сообщает, настроен ли вход. Никогда не обрабатывает пароль или токен.

нет

download_query

Скачивает сцены открытого доступа из сохранённого запроса в фоне, в фиксированный корневой каталог, заданный на сервере. Немедленно возвращает job_id.

да

download_status

Одноразовая проверка фонового скачивания по job_id: скачанные байты, скорость передачи, процент, когда размер известен, и детали по каждой сцене.

нет

download_wait

Блокирует выполнение до завершения скачивания (или предельного таймаута), затем сообщает результат — эффективный примитив, на котором фоновый наблюдатель строит цикл ожидания.

нет

cart_add

Добавляет сцены сохранённого запроса в корзину (маршрутизирует каждую на ready / on-order / priced).

да

cart_list

Перечисляет сцены, находящиеся в корзине.

да

cart_remove

Удаляет сцены из корзины.

да

Доступность имеет значение: сцена OpenData не обязательно готова к скачиванию. search_scenes и preview_download различают Ready (можно скачать сейчас) и Archived (открытые данные, но на портале может потребоваться запрос), чтобы агент не обещал лишнего.

Скачивание выполняется в фоне, независимо от диалога: download_query сразу возвращает job_id, и передача продолжается сама. Проверьте прогресс один раз с помощью download_status — он сообщает скачанные байты, скорость передачи и процент, когда размер известен, — или доведите задачу до конца с помощью download_wait, который блокирует выполнение до завершения (или до предельного таймаута), чтобы агент мог поручить фоновому наблюдателю и продолжать разговор, а не крутиться в цикле ожидания. Задача живёт только пока жив процесс сервера, поэтому, если скачивание оказывается большим, статус рекомендует выполнить отдельную команду bhd query download <slug>, которая останется у вас.

Установка

Сервер — это Python-пакет с консольной точкой входа bhoonidhi-mcp. Установите его из исходников с помощью uv:

git clone https://github.com/geovicco-dev/bhoonidhi-mcp
cd bhoonidhi-mcp
uv sync

Эта команда открывает bhoonidhi-mcp по пути .venv/bin/bhoonidhi-mcp. Сервер работает через stdio и запускается MCP-клиентом — вы указываете клиенту на эту команду.

Подключение клиента

Каждому MCP-клиенту нужно одно и то же: команда запуска. Используйте абсолютный путь к точке входа (надёжнее всего для GUI- и CLI-клиентов):

/path/to/bhoonidhi-mcp/.venv/bin/bhoonidhi-mcp

Claude Desktop / Claude Code

claude_desktop_config.json (или claude mcp add):

{
  "mcpServers": {
    "bhoonidhi": {
      "command": "/path/to/bhoonidhi-mcp/.venv/bin/bhoonidhi-mcp",
      "args": []
    }
  }
}

OpenCode

~/.config/opencode/opencode.json:

{
  "mcp": {
    "bhoonidhi": {
      "type": "local",
      "command": ["/path/to/bhoonidhi-mcp/.venv/bin/bhoonidhi-mcp"],
      "enabled": true
    }
  }
}

MCP Inspector (чтобы попробовать без агента)

npx @modelcontextprotocol/inspector /path/to/bhoonidhi-mcp/.venv/bin/bhoonidhi-mcp

Пример

Спросите агента простым языком:

«Какие сцены Sentinel-2 есть над Шиллонгом за январь 2024, и сколько из них я реально могу скачать?»

Агент вызывает resolve_location для Шиллонга, затем search_scenes и отвечает по результатам — например, что все сцены имеют статус Archived (открытые данные, но каждая может потребовать запроса на портале перед скачиванием), а не утверждает, что все готовы.

Примеры запросов для проверки

Скопируйте их в любого подключённого агента, чтобы понять, что он умеет.

Изучение архива

  • «Какие спутники и сенсоры есть у Bhoonidhi?»

  • «Какие сенсоры установлены на ResourceSat-2A и с каким разрешением?»

  • «Есть ли у Bhoonidhi радиолокационные спутники?»

Поиск сцен

  • «Найди сцены Sentinel-2 над Шиллонгом за январь 2024.»

  • «Покажи снимки Cartosat в радиусе 20 км от Бенгалуру за первую половину 2024.»

  • «Есть ли сцены Sentinel-1 над Сундарбаном за март 2024?»

  • «Какие снимки Landsat-8 покрывают национальный парк Казиранга прошлой зимой?»

  • «Найди сцены MODIS над Качским Ранном за декабрь 2023.»

Проверка доступности для скачивания

  • «Из этих сцен Sentinel-2 сколько я могу скачать прямо сейчас?»

  • «Какие из них нужно заказать или оплатить?»

Предпросмотр скачивания

  • «Покажи, что принесёт скачивание этих сцен.»

Сохранение поиска для повторного использования

  • «Сохрани этот поиск Sentinel-2, чтобы скачать его позже.»

  • «Покажи мои сохранённые поиски.»

  • «Покажи, что в поиске, который я сохранил как .»

  • «Удали сохранённый поиск .»

Скачивание и корзина (нужен вход — см. ниже)

  • «Я вошёл в Bhoonidhi?»

  • «Скачай сцены открытого доступа из моего сохранённого поиска .»

  • «Как идёт скачивание?»

  • «Скачай и сообщи, когда закончишь, — я продолжу работать.»

  • «Добавь платные сцены из в мою корзину.»

  • «Что у меня в корзине на этой неделе?»

Вход (для скачивания и корзины)

Поиск, сохранённые запросы и предпросмотры не требуют учётных данных. Скачивание сцен и добавление их в корзину — требуют. Выполните вход один раз, вне MCP — сервер переиспользует ту же сессию, которую записывает CLI bhd:

bhd auth login

MCP-сервер никогда не принимает имя пользователя или пароль в качестве аргумента инструмента, и auth_status никогда не возвращает ваш токен. Для headless-установки без интерактивного входа можно вместо этого задать BHOONIDHI_USERNAME / BHOONIDHI_PASSWORD в окружении сервера; сервер читает их только для установления сессии.

Конфигурация

Задаётся переменными окружения (все необязательные):

Variable

Default

Purpose

BHOONIDHI_MCP_GEOCODER_USER_AGENT

bhoonidhi-mcp/0.1

User-Agent, отправляемый в Nominatim (его политика использования просит указывать описательный User-Agent).

BHOONIDHI_MCP_FUZZY_THRESHOLD

88

Оценка (0–100), которую должно набрать совпадение названия спутника, чтобы считаться уверенным; ниже неё кандидаты возвращаются агенту для подтверждения.

BHOONIDHI_MCP_MAX_RESULTS

50

Максимум сцен, возвращаемых инлайн в search_scenes.

BHOONIDHI_MCP_DOWNLOAD_ROOT

~/Downloads

Разрешённый корневой каталог, под который записываются все скачивания: <root>/<slug>/. Агент не может выбрать произвольный путь.

BHOONIDHI_MCP_DOWNLOAD_PARALLEL

4

Параллельные загрузчики.

BHOONIDHI_MCP_LARGE_DOWNLOAD_MB

500

Когда текущий общий объём скачивания (или известный размер) превышает это значение, статус помечает его как большой и направляет агента к передаче задачи или выполнению отдельной команды.

BHOONIDHI_USERNAME / BHOONIDHI_PASSWORD

(не задано)

Необязательный headless-вход. Предпочтительно bhd auth login; заполняйте эти переменные вне MCP, никогда не коммитьте их.

Разработка

uv sync
uv run pytest        # test suite
uv run ruff check .  # lint

Лицензия

MIT — см. LICENSE.

Available Tools

15 tools
auth_statusA

Report whether a Bhoonidhi login is configured for downloads and cart.

Never asks for or returns a password or token. If credentials are set in the server's environment (BHOONIDHI_USERNAME / BHOONIDHI_PASSWORD) it establishes the session so the answer matches what a download or cart action would find. Returns authenticated=True with the username when a usable session exists, or authenticated=False with guidance to log in ('bhd auth login' out of band, or set those environment variables). Call this before download or cart actions to tell the user if a login is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral disclosure burden. It states that the tool never asks for or returns passwords or tokens, may establish a session using environment credentials, and returns specific shapes (authenticated=True with username, or authenticated=False with guidance). This is rich, honest behavioral context.

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 longer than a single sentence, but every line earns its place: purpose, security guarantee, credential source, session behavior, return values, and usage timing. It is front-loaded with the core purpose and structured in readable short paragraphs.

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

Completeness5/5

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

For a zero-parameter status tool with no output schema, the description fully specifies return values, the conditions that produce them, and the follow-up guidance the agent should convey. There are no missing required behaviors.

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

Parameters4/5

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

There are zero parameters and schema coverage is 100%, so there is no parameter behavior for the description to clarify. The baseline of 4 applies because nothing further is needed.

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 opens with a specific verb—report—and a clear resource: whether a Bhoonidhi login is configured for downloads and cart. It distinguishes itself from sibling tools like download_status and cart_list by focusing on authentication readiness, and the closing instruction 'Call this before download or cart actions' makes the tool's role unmistakable.

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 explicitly says to call this before download or cart actions to tell the user if a login is needed, and it gives concrete fallback authentication methods ('bhd auth login' or environment variables). It does not enumerate exclusions or explicitly compare against sibling alternatives, but the usage context is clear and actionable.

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

cart_addA

Stage a saved query's scenes to the Bhoonidhi cart.

Give the slug from save_query or list_queries. Each scene is routed to the cart its access type needs (ready / on-order / priced); select narrows to specific scenes (1-based indices or scene IDs). Needs a login (see auth_status). Use this for on-order and priced scenes; priced ones still need purchasing on the portal afterwards. Returns counts of what was staged and what failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
selectNo

TDQS

A4.8/5.0
Behavior5/5

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

With zero annotations, the description carries the full burden and meets it: it discloses the auth requirement, the routing behavior by access type (ready/on-order/priced), the non-obvious limitation that priced scenes still require purchasing on the portal afterward, and the return shape (counts of staged and failed). None of this could be inferred from the name or bare schema.

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?

Five short sentences, each carrying distinct information: purpose, slug provenance, routing and select mechanics, login prerequisite, usage guidance with limitation, and return value. The purpose is front-loaded and no sentence is filler.

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

Completeness5/5

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

For a moderate-complexity tool with no annotations and no output schema, the description covers everything needed to call it correctly: what it does, where the required slug comes from, selection semantics, required auth, workflow caveats, and return format. The only minor ambiguity, whether ready scenes should also be added here, does not block correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, and the description fully compensates: slug is explained as coming from save_query or list_queries, and select is clarified as narrowing to specific scenes via 1-based indices or scene IDs. The bare schema provides only the titles 'Slug' and 'Select', so the description is the sole source of semantic meaning.

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?

Opens with a specific verb-resource-destination statement: 'Stage a saved query's scenes to the Bhoonidhi cart,' which names the action, the input resource, and the target. It is immediately distinguishable from siblings like cart_remove, cart_list, and save_query by referencing saved-query scenes and the staging-to-cart behavior.

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?

Gives explicit when-to-use context ('Use this for on-order and priced scenes'), a prerequisite ('Needs a login (see auth_status)'), and an input source ('Give the slug from save_query or list_queries'). It stops short of a 5 because it never names alternative tools for exclusion, e.g., what to use for ready scenes or for completing purchases.

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

cart_listA

List scenes currently staged in the Bhoonidhi cart.

Cart items are filed by the date they were added; with no window this shows today only, so pass since/until (ISO dates, e.g. "2026-08-10") or last (e.g. "1 week") to widen it. filter_by limits to a state: ready, archived, onorder, or priced. Needs a login (see auth_status).

ParametersJSON Schema
NameRequiredDescriptionDefault
lastNo
sinceNo
untilNo
filter_byNo

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It reveals that no window means today only, that filtering is by state, and that authentication is required. It does not describe output format or failure behavior, but for a basic listing tool this is adequate.

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 compact and front-loaded with the core purpose. Each additional sentence earns its place by explaining a parameter behavior, a default, or an auth prerequisite. No filler or repetition.

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

Completeness4/5

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

The description covers all optional parameters, the default date window, filter states, and authentication. There is no output schema, so return details are not specified, but 'List scenes' conveys the primary result. Minor gaps around ordering or pagination prevent a 5.

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

Parameters5/5

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

Schema description coverage is 0%, and the description fully compensates by explaining since/until with ISO date examples, last with a relative example, and filter_by with explicit allowed values. Every parameter is given meaningful semantic context beyond the bare schema.

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

Purpose4/5

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

The description states a specific verb and resource: 'List scenes currently staged in the Bhoonidhi cart.' This clearly identifies the tool's function. It does not explicitly contrast itself with siblings like list_archive, but the name and wording are sufficiently distinct.

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 usage context: default to today only, how to widen with since/until/last, filter_by allowed states, and the login requirement. It does not explicitly mention when to prefer this over search_scenes or list_archive, but the guidance is otherwise solid.

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

cart_removeA

Remove scenes from the Bhoonidhi cart.

Two ways to address rows: pass slug to index a saved query's scenes, or omit it and let select index the merged cart itself (the same row numbers cart_list shows under the same since/until/last/filter_by window). Needs a login (see auth_status).

ParametersJSON Schema
NameRequiredDescriptionDefault
lastNo
slugNo
sinceNo
untilNo
selectNo
filter_byNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the transparency burden. It does disclose the login requirement and the subtle row-indexing semantics for select, which is useful. However, it is silent on whether slug-mode mutates the saved query, whether removal is reversible, and what happens on invalid select/slug input.

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 compact, front-loaded with the core purpose, and then adds the necessary mode/auth context. Every sentence contributes meaningful guidance with no filler.

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?

The description is sufficient for understanding the two addressing modes and the auth dependency. However, with no output schema and no mention of return values, errors, or slug-mode effects on the saved query, an agent may still be uncertain about observable outcomes.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains the key parameters: slug switches indexing to a saved query's scenes, while select indexes the merged cart when slug is omitted. It also ties since/until/last/filter_by to the cart_list window, though individual formats and allowed values are not specified.

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

Purpose4/5

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

The first line states a specific action ('Remove scenes') and resource ('Bhoonidhi cart'), so the core purpose is clear. It does not explicitly distinguish itself from sibling remove_query beyond the word 'scenes' versus 'query,' which prevents a perfect 5.

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?

It gives clear operational guidance for the two addressing modes: pass slug to reference a saved query's scenes, or omit it and use select on the merged cart under the same cart_list window. It also notes the login prerequisite, but does not explicitly state when to prefer remove_query or what preconditions each mode requires.

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

download_queryA

Download a saved query's open-access scenes in the background.

Give the slug from save_query or list_queries. Downloads run to a fixed, server-configured root (BHOONIDHI_MCP_DOWNLOAD_ROOT, default ~/Downloads), under a per-slug folder — you cannot choose an arbitrary path. select narrows to specific scenes (1-based indices or full scene IDs); omit it for the whole query. force re-downloads files already present.

Needs a login (see auth_status). Priced and on-order scenes are skipped — stage those with cart_add instead. Returns immediately with a job_id: the download runs on its own and does NOT depend on this conversation, so never block by sleeping and re-polling. To follow it hands-free, delegate a background watcher that loops download_wait on the job_id and reports back, keeping you free to keep talking; the result's 'handoff' note says so. File sizes are unknown until each transfer starts (the portal reveals them only then); once a download proves large, download_status/download_wait flag it and 'large_download' offers a standalone command that outlives this session. Interrupted downloads restart from scratch (no resume support).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
forceNo
selectNo

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and discharges it thoroughly. It discloses that the tool returns immediately with a job_id, runs independently of the conversation, writes to a fixed server-configured root the user cannot override, restarts interrupted downloads from scratch with no resume support, and hides file sizes until a transfer begins. These are exactly the operational surprises an agent needs to know before calling.

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 long (~250 words) but front-loaded with the core purpose and heavily information-dense; nearly every sentence adds operational value, including the async watcher pattern and the large_download handoff. A few parentheticals ('the portal reveals them only then') are slightly redundant, so it is not perfectly tight, but the length is largely justified by the tool's complexity.

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

Completeness5/5

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

Given no output schema and no annotations, this description is remarkably complete for a complex async tool. It covers prerequisites, parameter semantics, return value (job_id), the asynchronous lifecycle, failure behavior, exclusions, and alternatives — including the non-obvious advice to delegate a background watcher via download_wait. Nothing an agent needs to invoke and supervise this tool correctly is left unspecified.

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

Parameters5/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 fully compensate, and it does. slug is grounded ('Give the slug from save_query or list_queries'), force is explained ('re-downloads files already present'), and select gets richer semantics than the bare schema: '1-based indices or full scene IDs; omit it for the whole query.' Every parameter is given meaning the schema alone cannot convey.

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 opening sentence, 'Download a saved query's open-access scenes in the background,' states a specific verb (download), a precise resource (a saved query's open-access scenes), and the execution mode (background). It differentiates clearly from siblings: preview_download (previews rather than downloads), download_status/download_wait (monitor rather than initiate), and search_scenes (searches rather than downloads).

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

Usage Guidelines5/5

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

The description is explicit about when to use this tool: it tells the agent where to get the slug ('from save_query or list_queries'), names a prerequisite ('Needs a login (see auth_status)'), and gives specific exclusions with alternatives ('Priced and on-order scenes are skipped — stage those with cart_add instead'). It also instructs how NOT to use it (never block by sleeping and re-polling) and directs to the watcher/download_wait pattern and large_download for oversized transfers.

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

download_statusA

Check a background download started by download_query (one-off).

Give the job_id from download_query. Returns the live state: running (with bytes_downloaded, mb_downloaded, rate_mb_s, percent when the total size is known, and per-scene detail), completed (with per-scene outcomes), or failed (with the error). Use this for a single progress check. To follow a job to completion without tying up the conversation, use download_wait from a delegated watcher instead. Jobs exist only while the server runs; an unknown id returns status="not_found".

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral disclosure burden. It does this well by describing the possible states (running, completed, failed, not_found), key progress fields, and the job lifecycle caveat that jobs exist only while the server runs. It stops short of stating explicit non-mutating behavior, but the status-check semantics make that reasonably clear.

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 compact yet information-dense. The main purpose is front-loaded in the first sentence, and every subsequent sentence contributes meaningful detail about states, usage, alternatives, or lifecycle. No filler or repetition.

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

Completeness5/5

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

There is no output schema, so the description correctly takes on the job of explaining return shapes: running fields, completed outcomes, failed error, and not_found. For a simple one-parameter status tool, this covers everything an agent needs to invoke it correctly and interpret its result.

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

Parameters5/5

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

The input schema only provides a bare 'job_id' property with no description (0% coverage), so the description must compensate. It does so directly: 'Give the job_id from download_query' tells the agent exactly where the value comes from, and the not_found behavior clarifies what happens with an invalid id.

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

Purpose5/5

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

Description opens with a specific action and resource: 'Check a background download started by download_query'. It clearly identifies this as a one-off status check, and the contrast with download_wait distinguishes it from the most similar sibling.

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

Usage Guidelines5/5

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

Explicitly tells the agent when to use this tool: 'Use this for a single progress check.' It also names the alternative, download_wait, and the condition for choosing it: following a job to completion without tying up the conversation via a delegated watcher. It even explains how to obtain the required job_id from download_query.

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

download_waitA

Wait for a background download to finish, then report — for a watcher.

Give the job_id from download_query. Blocks inside the server and returns as soon as the download completes or fails, or after timeout_s (capped at 120s) with the latest progress if still running. This is the efficient way to follow a job: a delegated background watcher calls it in a loop and stops when status is "completed" or "failed", so the main conversation is never blocked on sleeps. Prefer this over repeated sleep+download_status. An unknown id returns status="not_found".

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
timeout_sNo

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden. It clearly discloses that the tool blocks server-side, returns on completion/failure/timeout, caps timeout_s at 120s, returns progress when still running, and returns status='not_found' for unknown ids.

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 front-loaded with a one-sentence summary, then expands with precise behavioral details and usage guidance. Every sentence adds value, and there is no filler or redundancy.

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

Completeness5/5

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

Despite lacking an output schema and annotations, the description covers all needed operational aspects: blocking behavior, timeout semantics, status values, unknown-id handling, and the recommended loop pattern. An agent can call this tool correctly with the information provided.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates strongly. It identifies job_id as coming from download_query and explains the behavior and cap for timeout_s. This gives the agent meaningful semantics beyond the bare schema.

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

Purpose5/5

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

The description states a specific verb and resource: wait for a background download to finish and report. It also distinguishes itself from sibling tools by referencing download_query for job_id and positioning itself against repeated sleep+download_status calls.

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

Usage Guidelines5/5

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

Explicitly says when to use this tool: in a watcher loop to follow a job efficiently. It also names the alternative pattern it replaces (repeated sleep+download_status) and explains the stopping condition based on status values.

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

list_archiveA

List every satellite and sensor the Bhoonidhi portal supports.

Returns the vocabulary of valid satellites, sensors, and exact search tokens, with each product's resolution and date coverage. Call this to discover what can be searched. Set refresh=True to bypass the local cache.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It does well by revealing the tool returns vocabulary data with resolution and date coverage, and that results are locally cached unless refresh=True is set. It does not mention authentication requirements or rate limits, but for a simple read-only listing tool this is reasonably transparent.

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 three short sentences with no filler. It front-loads the action and resource, then adds return-value details and parameter behavior. Every sentence contributes necessary information.

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 simple read-only tool with one optional parameter and no output schema, the description is largely complete: it explains what is returned and how to refresh cached data. It could also state whether authentication is required or what the default cache behavior means in practice, but these are minor omissions for this tool.

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

Parameters4/5

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

The schema provides only a title and default for the refresh parameter, with 0% description coverage. The description compensates by giving the exact semantic: 'Set refresh=True to bypass the local cache.' This tells the agent how the parameter affects behavior, which is the key information needed.

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 opens with a specific verb and resource: 'List every satellite and sensor the Bhoonidhi portal supports.' It further clarifies the return value as the vocabulary of valid satellites, sensors, exact search tokens, resolution, and date coverage. This clearly distinguishes it from sibling tools like search_scenes or cart operations.

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 explicitly states when to call the tool: 'Call this to discover what can be searched.' It also explains when to set refresh=True to bypass the local cache. However, it does not explicitly contrast this with alternatives or mention when not to use it, though the sibling list makes the distinction fairly clear.

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

list_queriesA

List every saved query as compact summaries.

Returns each saved query's slug, name, date range, satellites, area of interest, scene count, and a plain-English availability summary — but not the full scene lists (call show_query for one query's scenes). Use this to find the slug for a query the user saved earlier.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses exactly what fields are returned, that results are compact summaries, that full scene lists are omitted, and that availability is summarized in plain English. It does not discuss authentication, pagination, or error behavior, but for a zero-parameter list tool the core behavior is transparent.

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 front-loaded with the core purpose, then lists return fields, then states the key exclusion and points to the alternative. Every sentence adds value and none are redundant.

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

Completeness5/5

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

For a no-input list operation with no output schema, the description is complete: it says what is returned, what is not returned, how to get the fuller data, and what the intended use case is. There are no gaps that would prevent an agent from invoking the tool correctly.

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

Parameters4/5

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

The tool takes no parameters, so there are no parameter semantics to clarify. The description appropriately focuses on the output shape rather than inputs, satisfying the baseline expected for a zero-parameter tool.

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 starts with a precise verb and resource: 'List every saved query as compact summaries.' It clearly distinguishes itself from show_query by stating it returns summaries, not full scene lists, and explicitly routes to show_query for scenes.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool: 'Use this to find the slug for a query the user saved earlier.' It also names the alternative, show_query, for full scene lists, giving an agent clear routing guidance.

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

preview_downloadA

Dry-run a download for a search: show what would be fetched, no login.

Takes the same arguments as search_scenes, plus out_dir (where files would go) and force (preview re-downloading files already present). It runs the search and predicts, per scene, what a real download would do: would_download (staged, ready), may_404 (open data but archived — attempted but may fail until requested on the portal), already_here / already_elsewhere (a matching file exists), or skipped_on_order / skipped_priced (needs the portal).

Use this before telling a user to download, so they know how many scenes are actually fetchable. Nothing is downloaded and no login is used. File sizes are not known until a download starts (the portal exposes them only in the download response headers), and interrupted downloads cannot be resumed — both are stated in the result's disclaimers.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
maxxNo
maxyNo
minxNo
minyNo
forceNo
sensorNo
out_dirNo./downloads
productNo
end_dateYes
radius_kmNo
satelliteYes
start_dateYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description fully discloses key behaviors: no login is used, nothing is downloaded, per-scene prediction statuses are enumerated, and important limitations are surfaced (file sizes unknown until download starts, interrupted downloads cannot be resumed). This goes well beyond the minimum expected.

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 front-loaded with the core purpose and stays organized: scope, argument relationship, status categories, usage recommendation, and caveats. Every sentence contributes meaningful information without redundancy.

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

Completeness5/5

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

Despite having no output schema, the description explains the prediction statuses and disclaimers sufficiently for an agent to know what the tool returns and what limitations apply. It also covers login behavior, download behavior, and how this tool fits into the download workflow, making it complete for a 14-parameter tool.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explicitly explains out_dir and force, and references 'same arguments as search_scenes' for the rest, which adds semantic meaning beyond the raw schema. However, individual search parameters like lat, minx, sensor, and product are not described here, relying on the sibling tool's definition.

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 opens with a clear verb and resource: 'Dry-run a download for a search,' which immediately distinguishes it from the actual download tools. It also clarifies it shares arguments with search_scenes, further disambiguating it from siblings like download_query or search_scenes.

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

Usage Guidelines5/5

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

It explicitly states when to use it: 'Use this before telling a user to download, so they know how many scenes are actually fetchable.' It also contrasts itself with a real download by noting 'Nothing is downloaded and no login is used,' and references search_scenes for argument compatibility.

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

remove_queryA

Delete a saved query by slug.

Give the slug from save_query or list_queries. Removes the saved query from disk; the scenes themselves are unaffected. Returns status="not_found" if no query has that slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of disclosing side effects. It states that the query is removed from disk, that scenes remain unaffected, and that a not_found status is returned for unknown slugs. This is strong behavioral coverage for a one-parameter destructive tool.

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

Conciseness5/5

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

Three tight sentences, no filler. The primary action is front-loaded, followed by necessary sourcing and side-effect details. Every sentence earns its place.

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

Completeness5/5

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

For a simple tool with one required parameter and no output schema, the description covers the action, the slug source, the side effect, and the error case. Nothing essential is missing for an agent to invoke it correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must add meaning. It does so by explaining that slug comes from save_query or list_queries and that an unmatched slug produces not_found. This gives the parameter semantic context beyond its bare string type.

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 opens with a specific verb and resource: 'Delete a saved query by slug.' This clearly differentiates it from sibling tools like save_query, list_queries, and show_query, leaving no ambiguity about the operation.

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?

It explicitly tells the agent where to obtain the required slug: 'Give the slug from save_query or list_queries.' It also clarifies a non-effect (scenes unaffected), which helps set correct expectations. It does not list explicit when-not-to-use cases, but no sibling tool performs the same deletion role.

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

resolve_locationA

Resolve a place name to a centroid and bounding box.

Turns a place like "Shillong" or "Loktak Lake" into latitude/longitude and a bounding box (minx, miny, maxx, maxy) that search_scenes can use as its area of interest. Returns found=False when the place can't be resolved.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses the output shape (centroid plus bounding box) and the failure mode (found=False when the place cannot be resolved). It omits potential ambiguity or coordinate system details, but this is adequate for a simple lookup tool.

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

Conciseness5/5

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

The description is compact and well-structured, leading with the core purpose, then adding an illustrative example, the concrete output format, downstream use, and the failure case. Every sentence adds value.

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

Completeness5/5

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

For a single-parameter tool with no output schema, this description is complete: it tells the agent what to pass, what will come back, what the failure signal is, and how the result connects to a sibling tool. No critical context is missing.

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

Parameters4/5

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

The schema provides only a 'name' string with no description, so the description must compensate. It clarifies that 'name' is a natural-language place name and provides concrete examples. It does not over-specify format, which is appropriate for free-form place names.

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 opens with a specific verb and resource: resolving a place name to a centroid and bounding box. It gives concrete examples ('Shillong', 'Loktak Lake') and clearly distinguishes this geocoding-style tool from sibling data-management/search tools.

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?

It clearly states the intended downstream usage: the bounding box can be used as the area of interest for search_scenes. This gives an agent strong contextual guidance, though it does not explicitly mention when not to use it or name alternatives.

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

save_queryA

Persist a search as a saved query and return a reusable slug.

Takes the same arguments as search_scenes, plus an optional name and description. Unlike search_scenes (which is stateless and leaves nothing behind), this saves the search on the portal so it can be acted on later: the returned slug is what downloading and cart staging key off. Call this once the user has confirmed a search returns the scenes they want, then hand the slug to the bhd CLI (download / cart) until those actions land in-server.

Returns status="ok" with the slug and the shaped saved query. If the satellite is ambiguous or the request is invalid, returns the same status="ambiguous_satellite" / "invalid_request" shapes as search_scenes, and saves nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
maxxNo
maxyNo
minxNo
minyNo
nameNo
sensorNo
productNo
end_dateYes
radius_kmNo
satelliteYes
start_dateYes
descriptionNo

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well. It discloses the stateful persistence side effect, that nothing is saved on error, and the exact status shapes returned. This is strong behavioral disclosure for a stateful tool.

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 longer than a minimal one, but each section adds distinct value: purpose, sibling contrast, invocation timing, return shapes, and error behavior. The core purpose is front-loaded, though some wording around 'shaped saved query' and the bhd CLI could be tightened.

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 14-parameter stateful tool with no annotations and no output schema, the description covers the key operational facts: what is created, what is returned, how the slug is used, and what happens on error. The main gap is that authentication requirements and the exact structure of the 'shaped saved query' are not specified.

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?

At 0% schema coverage, the description compensates partially by saying it takes the same arguments as search_scenes plus optional name and description. This is a useful semantic anchor, but it delegates most parameter meaning to another tool and does not explain formats or the roles of satellite, dates, or geometry fields.

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 opens with a specific verb and resource: 'Persist a search as a saved query and return a reusable slug.' It clearly distinguishes this from the stateless search_scenes sibling by saying what save_query does that search_scenes does not.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: call it once the user has confirmed the search returns the desired scenes, then use the slug with download/cart. It also contrasts it against search_scenes, which is stateless and leaves nothing behind, making the alternative condition clear.

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

search_scenesA

Search Bhoonidhi scenes for a satellite over an area and date range.

The satellite may be a casual name ("Sentinel-2", "cartosat"); it is matched to the portal's exact tokens, and a constellation expands to all its platforms. Dates are ISO (YYYY-MM-DD). Give the area either as a bounding box (minx/maxx/miny/maxy) or a point with radius (lat/lon/radius_km) — typically from resolve_location. sensor narrows to one sensor on the matched satellite(s) (e.g. "SSAR", "LISS3"); product further narrows to one product under that sensor (e.g. "GCOV", "L2C-Chlorophyll") — see list_archive for the exact sensor/product names each satellite carries. The search is stateless and needs no login.

If the satellite name is ambiguous, returns status="ambiguous_satellite" with candidate names instead of guessing.

Each scene carries an "availability": Ready (downloadable now), Archived (open data but may need a portal request first), OnOrder (must be requested), or Priced (must be purchased). The result includes a plain-English "summary" of these counts and a "how_to_act" block. Tell the user clearly when scenes are Archived, OnOrder, or Priced and what each needs. This search is stateless: to act on these scenes, call save_query with the same arguments to persist them and get a , then download_query (open data) or cart_add (on-order / priced) on that slug — both need a login (see auth_status). Downloads cannot be resumed if interrupted (the portal has no range support).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
maxxNo
maxyNo
minxNo
minyNo
sensorNo
productNo
end_dateYes
radius_kmNo
satelliteYes
start_dateYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it delivers: it discloses statelessness, no-login requirement, ambiguous-satellite behavior, availability categories (Ready/Archived/OnOrder/Priced), and the non-resumable download limitation. This is far beyond what the schema alone would communicate.

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 well-structured and front-loaded with the core purpose, then details. It is dense but justifiably so for a 12-parameter tool. Minor redundancy exists: 'stateless' is stated twice and the download-resume note is tangential to searching, so it loses a point.

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

Completeness5/5

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

Given no output schema and no annotations, this description covers all essential context: what the tool does, how to specify each kind of input, what the response classes mean, how to handle ambiguity, and exactly which sibling tools to call next. Very little is left for an agent to guess.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates thoroughly: it explains satellite name matching, ISO date format, the bbox vs. point-with-radius area alternatives, and how sensor/product narrow results. It meaningfully clarifies nearly every parameter group in the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Search Bhoonidhi scenes for a satellite over an area and date range.' It clearly describes the scope and outputs, and distinguishes itself from downstream persistence/action siblings by explicitly framing the search as stateless.

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

Usage Guidelines5/5

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

The description gives strong routing guidance: use resolve_location for area input, list_archive for exact sensor/product names, and save_query/download_query/cart_add for acting on results. It also clarifies that search needs no login while downstream actions do, so an agent knows when this tool is the right entry point.

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

show_queryA

Return one saved query by slug, with its scenes.

Give the slug from save_query or list_queries. Returns the full saved query: its selections, area of interest, date range, and shaped scenes with availability. Returns status="not_found" if no query has that slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes

TDQS

A4.5/5.0
Behavior4/5

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

Because no annotations are provided, the description carries the full behavioral burden. It discloses the return payload—selections, area of interest, date range, shaped scenes with availability—and the not_found status for missing slugs. It doesn't explicitly state read-only semantics or auth prerequisites, but for a retrieval tool this is solid coverage.

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 compact and front-loaded: purpose in the first line, input source in the second, then return details. Every sentence adds useful information with no filler.

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

Completeness5/5

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

For a one-parameter read tool with no output schema and no annotations, the description covers purpose, parameter provenance, return shape, and an error case. An agent can confidently call it and interpret the response correctly.

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

Parameters4/5

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

Schema coverage is 0% and the schema only defines slug as a string. The description compensates by explaining that the slug comes from save_query or list_queries and that an unknown slug returns status='not_found', adding meaning beyond the bare schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Return one saved query by slug, with its scenes.' This clearly identifies the tool as single-query retrieval, distinct from list_queries which lists queries, and from remove_query which deletes them.

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?

It gives concrete guidance on where the slug comes from: 'Give the slug from save_query or list_queries.' This helps the agent know this tool is for already-saved queries and how to obtain valid input, though it does not explicitly contrast with alternatives or state when not to use it.

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. 15 tool updatesv0.2.0
    • First observedauth_status
    • First observedcart_add
    • First observedcart_list
    • First observedcart_remove
    • First observeddownload_query
    • First observeddownload_status
    • First observeddownload_wait
    • First observedlist_archive
    • First observedlist_queries
    • First observedpreview_download
    • First observedremove_query
    • First observedresolve_location
    • First observedsave_query
    • First observedsearch_scenes
    • First observedshow_query

TDQS

A4.3/5.0

Scored across 15 tools

Disambiguation5/5

Each tool targets a distinct action or resource: search is separated from preview, save, download, and cart operations, and download_status vs download_wait are clearly one-off vs watcher. Even where arguments overlap, the descriptions draw explicit boundaries.

Naming Consistency3/5

Most query tools follow verb_noun (remove_query, search_scenes, list_queries), but cart_* uses noun-verb order (cart_add, cart_list) and auth_status/download_status/download_wait are noun-phrase style. Everything is snake_case and readable, but the naming pattern is mixed rather than uniform.

Tool Count5/5

15 tools is within the ideal range, and each tool covers a distinct stage of the archive-to-download/cart workflow. There is no apparent redundancy or padding.

Completeness4/5

The set covers discovery, geocoding, search, dry-run preview, saved-query lifecycle, auth status, download execution/monitoring, and cart management. Minor gaps like no in-server edit of saved queries, no active-download listing, and no direct archival request action are workarounds via the portal or CLI.

Maintenance

ActivitySlowing
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers