Skip to main content
Glama

bhoonidhi-mcp

License: MIT

AI 에이전트가 ISRO의 Bhoonidhi Browse & Order 포털(NRSC)에서 위성 장면을 자연어로 검색, 저장, 다운로드, 장바구니에 담을 수 있게 해주는 MCP 서버입니다. 에이전트는 "지난 1월 실롱 위의 Sentinel-2" 같은 문장을 실제 포털에 대한 실제 검색으로 바꾸고, 다운로드 가능한 항목을 정직하게 확인하며, 나중에 재사용할 검색을 저장하고, 다운로드가 가져올 내용을 미리 보고, 로그인 후에는 오픈 액세스 장면을 다운로드하거나 장바구니에 단계적으로 담을 수 있습니다.

이것은 bhoonidhi-downloader SDK( bhd CLI가 사용하는 것과 동일한 클라이언트) 위의 얇은 어댑터이므로 포털 로직이 중복되지 않습니다.

상태

로그인 없이 검색 및 저장, 로그인으로 다운로드 및 장바구니. 이 도구는 41개 위성 임무와 79개 센서의 전체 아카이브에 도달하고, 실시간 포털을 검색하며, 재사용 가능한 슬러그로 검색을 저장합니다 — 모두 자격 증명 없이 가능합니다. 오픈 액세스 장면 다운로드 및 Bhoonidhi 장바구니에 장면 단계적 추가는 로그인이 필요하며, bhd auth login으로 대역 외에서 수행됩니다(서버는 해당 세션을 재사용합니다).

Related MCP server: Google Earth Engine MCP Server

도구

도구

기능

로그인

list_archive

포털이 지원하는 위성, 센서, 검색 토큰의 어휘를 Bhoonidhi에서 실시간으로 제공합니다.

아니요

resolve_location

장소 이름("로크타크 호수")을 중심점과 경계 상자로 변환합니다. 장소 이름이 아닌 입력은 거부합니다.

아니요

search_scenes

지역 및 날짜 범위에 대한 자연어 장면 검색. 캐주얼한 위성 이름을 정확한 토큰으로 해석하고, 각 장면의 가용성(Ready / Archived / OnOrder / Priced)을 보고합니다. 상태 비저장 — 저장되지 않습니다.

아니요

preview_download

드라이 런: 다운로드가 가져올 내용과 건너뛸 내용을 다운로드 전에 보여줍니다.

아니요

save_query

검색(search_scenes와 동일한 인수)을 재사용 가능한 슬러그로 저장하여 나중에 다운로드하거나 장바구니에 담을 수 있습니다.

아니요

list_queries

저장된 쿼리를 간결한 요약으로 나열합니다: 슬러그, 이름, 날짜 범위, 위성, 지역, 가용성.

아니요

show_query

슬러그로 저장된 쿼리 하나를 장면과 함께 반환합니다.

아니요

remove_query

슬러그로 저장된 쿼리를 삭제합니다.

아니요

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> 명령을 실행하도록 권장합니다.

설치

서버는 콘솔 진입점 bhoonidhi-mcp가 있는 Python 패키지입니다. uv로 소스에서 설치하세요:

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

이렇게 하면 .venv/bin/bhoonidhi-mcp에 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

예시

에이전트에게 평이한 언어로 물어보세요:

"2024년 1월 실롱 위의 Sentinel-2 장면은 무엇이며, 실제로 다운로드할 수 있는 것은 몇 개인가요?"

에이전트는 실롱에 대해 resolve_location을 호출한 다음 search_scenes를 호출하고 결과에서 답합니다 — 예를 들어 모든 장면이 Archived(오픈 데이터이지만 각각 다운로드 전에 포털에서 요청이 필요할 수 있음)라고 말하는 대신 모두 준비되었다고 주장하지 않습니다.

시도할 프롬프트

연결된 에이전트에 복사하여 무엇을 할 수 있는지 느껴보세요.

아카이브 탐색

  • "Bhoonidhi에는 어떤 위성과 센서가 있나요?"

  • "ResourceSat-2A는 어떤 센서를 탑재하고 있으며, 해상도는 얼마인가요?"

  • "Bhoonidhi에 레이더 위성이 있나요?"

장면 검색

  • "2024년 1월 실롱 위의 Sentinel-2 장면을 찾아주세요."

  • "2024년 상반기 벵갈루루에서 20km 이내의 Cartosat 이미지를 보여주세요."

  • "2024년 3월 순다르반스 위의 Sentinel-1 장면이 있나요?"

  • "지난 겨울 카지랑가 국립공원을 덮는 Landsat-8 이미지는 무엇인가요?"

  • "2023년 12월 카치의 란 위의 MODIS 장면을 찾아주세요."

다운로드 가능한 항목 확인

  • "그 Sentinel-2 장면 중 지금 실제로 다운로드할 수 있는 것은 몇 개인가요?"

  • "이 중 주문하거나 비용을 지불해야 하는 것은 무엇인가요?"

다운로드 미리 보기

  • "그 장면들을 다운로드하면 무엇을 가져올지 미리 보여주세요."

재사용할 검색 저장

  • "나중에 다운로드할 수 있도록 그 Sentinel-2 검색을 저장해주세요."

  • "저장된 검색을 나열해주세요."

  • "로 저장한 검색에 무엇이 있는지 보여주세요."

  • "저장된 검색 을 삭제하세요."

다운로드 및 장바구니 (로그인 필요 — 아래 참조)

  • "Bhoonidhi에 로그인되어 있나요?"

  • "저장된 검색 의 오픈 데이터 장면을 다운로드하세요."

  • "그 다운로드 진행 상황은 어떤가요?"

  • "을 다운로드하고 완료되면 알려주세요 — 계속 작업하겠습니다."

  • "의 유료 장면을 내 장바구니에 추가하세요."

  • "이번 주 내 장바구니에는 무엇이 있나요?"

로그인 (다운로드 및 장바구니용)

검색, 저장된 쿼리, 미리 보기에는 자격 증명이 필요 없습니다. 장면 다운로드 및 장바구니 단계적 추가에는 필요합니다. 대역 외에서 한 번 로그인하세요 — 서버는 bhd CLI가 쓰는 것과 동일한 세션을 재사용합니다:

bhd auth login

MCP 서버는 도구 인수로 사용자 이름이나 비밀번호를 절대 받지 않으며, auth_status는 토큰을 절대 반환하지 않습니다. 대화형 로그인이 없는 헤드리스 설정의 경우 서버 환경에 BHOONIDHI_USERNAME / BHOONIDHI_PASSWORD를 설정할 수 있습니다. 서버는 세션을 설정하는 데만 이를 읽습니다.

구성

환경 변수로 설정(모두 선택 사항):

변수

기본값

용도

BHOONIDHI_MCP_GEOCODER_USER_AGENT

bhoonidhi-mcp/0.1

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

(설정 안 됨)

선택적 헤드리스 로그인. bhd auth login을 선호합니다. 대역 외에서 채우고 절대 커밋하지 마세요.

개발

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