Off-Nadir Delta
OfficialThis server provides AI-powered geolocated world-event intelligence and satellite imagery capabilities via the Off-Nadir Delta API.
Metered Tools
query_signals(3 tokens): Retrieve geolocated world-event signals (geopolitical, security, disaster, infrastructure) filtered by bounding box, date range, category, severity, escalation status, and market exposure — enriched with severity/GEOINT scores and satellite-collection recommendations.query_stats(1 token): Get aggregate event counts by category and day for a given area and time window.query_hotspots(1 token): Identify geographic activity concentrations via grid-binned, ranked hotspot cells with peak severity and category breakdown.search_imagery(2 tokens): Search a satellite imagery catalog (Sentinel-1/2, OPERA RTC-S1) for scenes over a specific area and date range, returning scene metadata (id, datetime, cloud cover, platform, preview).assess_signal(5–15 tokens): Run an AI remote-sensing assessment on a specific signal — what to observe, recommended sensors, and optimal collection windows. Results are cached to avoid re-charges.ask_analyst(5–45 tokens): Ask a natural-language OSINT/GEOINT question; an agentic system performs multi-step analysis and returns a structured brief with findings, recommendations, and citations.
Free Tools
get_world_brief: Fetch an AI-synthesized daily OSINT/GEOINT digest with headlines, executive summary, top developments, and ranked signals.get_usage: Check your remaining token balance, monthly allocation, and plan capabilities.
Resources & Prompts
Access pre-built resources: latest world brief, briefs by date, signal schema, current usage, and imagery collections.
Use built-in prompt templates:
daily-situation-briefing,assess-top-signal,aoi-watch, andmarket-exposure-checkfor common analytic workflows.
Off-Nadir Delta MCP
From first signal to satellite evidence. Give an AI agent a live intelligence workflow: discover an event, verify the reporting, identify what evidence is missing, determine whether a satellite can actually resolve it, and produce a collection-ready plan.
Real-time event and geospatial intelligence for OSINT, geopolitical risk, and GEOINT work — source-linked, geolocated, and current, not a training snapshot.
41 tools · MCP server version 1.28.0 · full reference
What it does
Seeing the event is easy. Knowing what you can prove — and what evidence is still missing — is the product. Delta:
monitors emerging world events and geolocates them
checks claims against source-linked open data, and reports the source breadth behind each one
assesses whether the event is observable from space, at what resolution, and by which sensor
returns a collection-ready recommendation: what to collect, where, and when
Related MCP server: geopera-mcp
Connect
Hosted server — recommended
No install. Point any MCP client at the remote endpoint and approve once over OAuth 2.1 (Dynamic Client Registration is supported, so most clients need only the URL):
https://offnadir-delta.com/api/v1/mcpIn the Claude or ChatGPT apps: Settings → Connectors → Add custom connector, paste that URL. Cursor and VS Code have one-click installs on the docs page.
Claude Code:
claude mcp add --transport http off-nadir-delta https://offnadir-delta.com/api/v1/mcpThis package — local stdio
Use this when your client cannot do remote OAuth, or you would rather hold an API key in an environment variable and pin a version. Get a key at offnadir-delta.com/account/api.
{
"mcpServers": {
"off-nadir-delta": {
"command": "npx",
"args": ["-y", "offnadir-delta-mcp"],
"env": { "OFFNADIR_DELTA_API_KEY": "ond_..." }
}
}
}Docker:
docker run -i --rm -e OFFNADIR_DELTA_API_KEY=ond_... offnadir-delta-mcpThe package forwards tools/call to the hosted server with your key. tools/list answers
locally from a generated catalog, so registries can introspect it without credentials.
First call — free
23 of the 41 tools cost nothing, so the first thing you run is free:
Give me the latest Daily World Brief. Lead with the three most significant developments, explain why each matters, and cite the supporting signals.
Then try the full signal-to-satellite workflow:
Find the highest-priority observable event from the last 24 hours, verify the reporting, and recommend the best available satellite collection plan.
Tools
Discover
What is happening, where it concentrates, and what today looks like.
Tool | What it does | Cost |
| Query geolocated world event signals (Delta Signals: geopolitical, security, disaster, and infrastructure events distilled from global news media, AI-enriched with severity/GEOINT scores and satellite-collection recommendations). | 3 tok |
| Aggregate statistics over the signal corpus — total event count plus per-category and per-day breakdown (trend) for a bounding box and date window. | 1 tok |
| Geographic hotspots — signal density grid-binned into cells, ranked by event count, each with peak severity, the categories present, and up to 5 representative event_ids (trace a cell back to its signals). | 1 tok |
| Fetch the Daily World Brief — an AI-synthesized OSINT/GEOINT digest of the previous UTC day's worldwide event signals (headline, executive summary, top developments with why-it-matters and what-to-watch, per-theme roll-up, ranked signals). | free |
| What actually CHANGED about the events in an area — not which articles are new. | 3 tok |
| The full history of ONE event: its current state, and every change in the order it happened. | free |
| Find a place in the location registry — ports and harbours, military bases and airfields, power and energy plants, maritime chokepoints and named seas. | 1 tok |
| What has happened at one place. | 1 tok |
| What else connects to one event, and what came before and after it. | 3–8 tok |
Plan
Whether a satellite can resolve it, which one, and when it next passes.
Tool | What it does | Cost |
| Search the satellite imagery catalog (Sentinel-1, Sentinel-2, NISAR L-band) for scenes over an area and date window — the natural follow-up to a signal (find imagery over the event location). | 2 tok |
| Plan the imagery evidence for ONE event in a single call, instead of guessing collections one at a time. | 4 tok |
| WHERE — and with what class (and therefore cost) of satellite — is observation most worthwhile right now? | 1 tok |
| Which events in a window can a given in-app sensor actually RESOLVE? | 1 tok |
| WHEN can this place next be imaged, and by WHAT — the timing half of collection planning. | 2 tok |
| Given competing statements, return the observation that would REFUTE the most of them — and, in the same answer, the observations that would refute none of them however convincing they look. | 3 tok |
| Measure terrain height from the Copernicus DEM GLO-30 — a point (lat + lon), an area (bbox), or a drawn polygon, for which the statistics are computed over the samples INSIDE the ring rather than its bounding box. | free |
| Compute FROM the terrain rather than reading heights out of it (that is lookup_elevation). | free |
Analyze
Turn reporting into a cited assessment you can audit afterwards.
Tool | What it does | Cost |
| Run an AI RS (remote-sensing) deep-dive assessment for a specific signal: what to observe, recommended sensors, and a collection window. | 5/15 tok |
| Ask the Delta Analyst an OSINT/GEOINT question. | 5–123 tok |
| Fetch the status and result of an ask_analyst run by job_id. | free |
| Read the LEDGER of claims this key has been given — every factual assertion the Analyst made, with its evidence class (CONFIRMED / REPORTED / PARTY_CLAIM / ASSESSMENT), how many INDEPENDENT source families backed it, and the publishers. | free |
| Research one signal's location further and, if the sources genuinely narrow it, store and return the better coordinate. | 3–29 tok |
| Measure a spectral index over an area, scene by scene, back through the Sentinel-2 archive — the answer to "how has this changed since ". | 0.5 tok |
| Count vessel-like targets in ONE SAR scene over an area, using CFAR detection on Sentinel-1. | 5 tok |
Watch
Stand up continuous coverage and be told only when the answer changes. Creating and listing cost nothing — you are metered only when a check actually fires, or a new acquisition is actually measured.
Tool | What it does | Cost |
| Put an area under CONTINUOUS watch: save a question plus a bounding box and Delta re-answers it on a schedule, notifying only when the answer actually changed. | free |
| List the standing orders on this key, with each one’s cadence, watched area, when it last checked, when it last actually fired, and how many consecutive checks found nothing (quiet_checks — a high number means the watch is not earning its place). | free |
| Delete a standing order by id, or pause/resume it instead by passing active=false/true. | free |
| List the places under continuous satellite measurement on this key (Delta Watchlist measurements), with each area’s metric, most recent value, change since the previous measurement, whether that value was flagged anomalous, and coverage — how many acquisitions were measured versus how many exist. | free |
| Fetch one monitored area with its full measurement history — every acquisition that was measured, its value, and whether it was flagged anomalous. | free |
| Put a place under continuous satellite measurement: pick an area and what to count, and every new Sentinel-1 / Sentinel-2 / VIIRS acquisition over it is measured automatically from then on. | free |
| The Watchlist: everything this account keeps watch on — areas under satellite measurement, areas under event watch (standing orders), and real-world events being tracked — aggregated as one list with a state bucket per watch: needs_attention (anomaly, error, or a notable development), changed_today (a meaningful change in the last 24 h), awaiting_data, or stable. | free |
| One watch end to end, in a single call: its target, current state, latest meaningful change, measurements with their recent series, standing-order questions, and — for an event watch — the event’s verification state, casualty/attribution fields, recent developments, imagery availability, and the full event thread (timeline + sources). | free |
| Add a target to the Watchlist. | free |
| Rename a watch, or pause and resume it. | free |
| Delete a watch by id. | free |
| Add a note to a watch, start a thread on it, or reply to one — one append-only ledger. | free |
| Delete one note from a watch. | free |
Workspace
The map assets you own — saved layer sets and your own uploaded data.
Tool | What it does | Cost |
| List the layer sets saved on this account — the named map configurations a user builds in the app, each with how many layers it holds, its tags, when it was last changed and when it was last opened. | free |
| Read one saved layer set by id: its name, description, layer count, size, tags and timestamps. | free |
| List the data this account uploaded to the map — name, format, size and when it was added — plus the formats the uploader actually accepts. | free |
Account
Pre-flight your token balance before a metered call.
Tool | What it does | Cost |
| Check the calling key's remaining token balance and plan capabilities — monthly allocation, tokens used this period, tokens remaining, and whether the plan includes AI tools over the API (assess_signal / ask_analyst). | free |
Pricing and metering
Usage-based Delta tokens, identical over REST and MCP. Costs above are generated from the same constant the biller reads, and every metered result carries the exact charge it incurred — so you never have to trust a number in a README. Free tools never touch the balance.
ask_analyst is hybrid-async: it enqueues a run and returns a job_id immediately; poll
get_analyst_job (free — the run is charged once, on completion). Most questions finish in
~30–90s; a brief with satellite-imagery lookups or many sources can take 2–3 minutes.
The API and the MCP server are available on every plan, including Free — the only gate is
your token balance. Call get_usage (free) to pre-flight. Current limits and package prices:
offnadir-delta.com/pricing.
Authentication
Two credentials are accepted on the hosted endpoint:
OAuth 2.1 with PKCE and Dynamic Client Registration — for interactive clients
Bearer API key (
Authorization: Bearer ond_...) — for servers, CI, and this stdio package
Keys are shown once at creation, hashed at rest, and revocable at any time from /account/api.
Resources and prompts
Resource | Description |
| The most recent AI-synthesized Daily World Brief (JSON). Free. |
| JSON Schema of the public Signal shape returned by query_signals / /api/v1/signals. |
| Remaining token balance and plan capabilities for the calling key. Free. |
| The satellite catalog collections searchable via search_imagery — Sentinel-1 C-band SAR, Sentinel-2 optical, and NISAR L-band SAR (provisional calibration). Free. |
| How current the data is (ingestion/enrichment frontier), the Daily World Brief status, and an Operational/Delayed/Degraded roll-up. Free. |
| The Daily World Brief for a specific UTC date (YYYY-MM-DD). Free. |
| A Watchlist entry with its current state, latest meaningful change, measurements, (for event watches) the full event thread, and the notes kept against it. The same body get_watch returns. Free. |
Prompt | Description |
| Summarize the current world situation from the Daily World Brief. |
| Find the highest-severity recent signal in an area/category and run an RS assessment. |
| Scan an area of interest for recent escalations and recommend collection. |
| Find recent events that could plausibly move a given market (oil, grain, shipping, ...) and explain each transmission channel. Informational only — not investment advice. |
Links
Live server version probe (no auth, no tokens)
License
Apache-2.0
Available Tools
20 toolsask_analystADestructiveInspect
Ask the Delta Analyst an OSINT/GEOINT question. Runs an agentic multi-step analysis over the signal corpus and returns a structured brief (summary, findings with collection recommendations, assessment, citations). Costs 5–123 tokens (usage-based, metered by the compute the question actually uses; charged ONCE, when the run completes; the exact charge and remaining balance are in the result meta.tokens). Durable async: the run is ENQUEUED and returns {status:"processing", job_id} immediately, then completes in a background worker — so it is never lost to a client timeout. Timing: most questions finish in ~30–90s; a complex brief (satellite-imagery lookups or many sources) can take 2–3 minutes. Fetch the finished brief by calling get_analyst_job with the job_id (poll every ~10–20s), or ask_analyst again with the SAME idempotencyKey (no second charge).
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Optional focus bounding box [minLon, minLat, maxLon, maxLat] (WGS84). | |
| mode | No | fast (default) or deep. Deep enables extended reasoning and wider evidence-gathering budgets — for forecasting, collection trade-offs and market-implication questions where step-by-step reasoning materially helps. It is slower and the ceiling rises from 123 to 415 tokens; charging stays metered by what the run actually consumes, so a light deep question does not cost the ceiling. | |
| question | Yes | The analytic question (≤ 500 chars). | |
| idempotencyKey | No | Optional at-most-once key. Re-sending the SAME key resolves to the SAME run: if it finished you get the brief with NO second charge; if it is still running you get its processing status. Strongly recommended — it makes a timeout recoverable. Use a fresh key to ask again. | |
| response_format | No | "full" (default) returns the prose brief alongside the structured result. "compact" omits the prose brief and returns only the structured result — which still carries the assembled structured_summary — so a completed run costs materially fewer context tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| brief | No | |
| job_id | No | Id of the analyst run — pass to get_analyst_job (also at GET /api/v1/analyst/{job_id}). |
| status | No | "processing" when the run is still going (poll get_analyst_job or re-send the same idempotencyKey). |
| message | No | |
| progress | No | Pipeline progress while the job is processing. completed_steps reaches total_steps ONLY when status is "done". |
| estimated_charge | No | The charge ceiling quoted for THIS run, fixed at enqueue (統合改善指示書 P1-1). The completed run reports the actual charge in meta.tokens.charged and echoes this ceiling as meta.tokens.maximum_promised; actual never exceeds it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations signal non-read-only behavior (destructiveHint true), and the description substantially augments this with concrete side effects: token cost range (5–123), charge-once semantics, async enqueue returning {status:'processing'}, and idempotent re-send behavior. This is transparent and does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into clear informational blocks — purpose, cost, async behavior, timing, and retrieval — with no filler. Although long, every clause contributes essential operational detail, and key facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity async tool with an output schema, the description thoroughly covers cost, enqueue response shape, timeout resilience, run duration, retrieval via a sibling tool, and idempotent retry. The structured brief itself is handled by the output schema, so no critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing baseline 3. The description adds operational meaning for idempotencyKey (no second charge, resolves to same run) and response_format (compact omits prose to save context tokens), which goes beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Ask...') and target ('Delta Analyst'), then details the operation: 'Runs an agentic multi-step analysis over the signal corpus and returns a structured brief'. It also distinguishes itself from the sibling get_analyst_job by explicitly naming that tool for fetching results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear operational context: async enqueue, polling cadence ('poll every ~10–20s'), and two explicit retrieval alternatives ('calling get_analyst_job with the job_id' or 'ask_analyst again with the SAME idempotencyKey'). It does not enumerate exclusions for when not to use this tool versus other analysis siblings, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assess_signalADestructiveIdempotentInspect
Run an AI RS (remote-sensing) deep-dive assessment for a specific signal: what to observe, recommended sensors, and a collection window. eventId is the id from query_signals. The result also carries a deterministic context block (event id/date, normalized target, AOI bbox, observability + quality verdict, and an imagery_handoff giving the exact bbox + event_date to pass to search_imagery for REAL pre/post scene candidates) — turning the assessment into an actionable collection plan. Costs 5 (quick) or 15 (deep) tokens, charged to the key owner's balance. A prior assessment for the same signal is cached (no re-charge). The exact charge and remaining balance are in the result meta.tokens. Signals that are not satellite-observable (observability:"not-observable" — e.g. political statements or broad-area events with no imageable physical mark) are rejected BEFORE any charge, so pre-filter with query_signals observability:"observable" to spend only where imagery helps.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Assessment depth. Defaults to quick. | |
| eventId | Yes | Signal id (global_event_id) from query_signals. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| meta | Yes | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| model | No | |
| cached | No | |
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations indicate idempotent and destructive (side-effect) behavior. The description adds crucial context: token costs (5/15), charging to key owner's balance, caching of prior assessments, and rejection of not-observable signals before any charge. It also details the result's context block, fulfilling transparency beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries information: purpose, result contents, cost, caching, and pre-filtering instruction. It is somewhat long but appropriate for the tool's complexity; no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich output schema (context block, meta.tokens) and the description's coverage of inputs, outputs, cost, caching, and rejection behavior, the tool is fully specified for an agent to select and invoke it correctly. It even tells the agent the follow-up action (pass imagery_handoff to search_imagery), making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters with 100% coverage, so baseline is 3. The description adds cost semantics for kind (quick=5, deep=15 tokens) and clarifies eventId as coming from query_signals, though the latter repeats schema. This extra context raises it to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Run an AI RS deep-dive assessment for a specific signal: what to observe, recommended sensors, and a collection window.' It clearly distinguishes from siblings like query_signals (listing signals) and search_imagery (finding imagery) by emphasizing the analysis and actionable plan output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit usage guidance: signals not satellite-observable are rejected before charge, so it instructs to pre-filter with query_signals observability:'observable'. It also states the result carries an imagery_handoff to pass to search_imagery, giving the agent a clear workflow. While it doesn't list alternative assessment tools, it gives a when-not-to-use condition, meeting the bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_monitored_areaAInspect
Put a place under continuous satellite measurement: pick an area and what to count, and every new Sentinel-1 / Sentinel-2 / VIIRS acquisition over it is measured automatically from then on. Use this when the question is about a quantity at a fixed place over time ("how many ships are alongside", "how much has burned", "is the water receding") rather than about events, which is create_standing_order. Creating is free; each automatic check costs a small number of tokens only when it finds new imagery.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | The area to measure, [west, south, east, north] in WGS84. Must be under 5,000 km² — measurement is per-pixel over the area, so a country-sized box is rejected rather than silently sampled. | |
| name | No | Label for the area (default "Monitored area"). | |
| metric | Yes | What to count. Plain words work: ships, fires, vegetation, water, burn, snow, built_up, moisture, night_lights. Index names are also accepted: ship_detection, fire_count, ndvi, evi, savi, ndmi, ndwi, mndwi, ndbi, ndsi, nbr, dnb, vv, vh, rvi, rfdi, cr. The sensor is chosen from the metric. | |
| start_date | No | YYYY-MM-DD to begin the history from. Defaults to 30 days ago — a longer backfill measures more scenes and therefore costs more on the first check. |
Output Schema
| Name | Required | Description |
|---|---|---|
| area | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
| metering | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, and the description adds cost behavior ('Creating is free; each automatic check costs...') and the automatic monitoring behavior ('every new acquisition... measured automatically'). It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main function, and includes decision guidance and cost context without redundancy. Every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 4-parameter schema with 100% description coverage, plus an output schema, the description provides sufficient context: it explains the persistent monitoring behavior, cost model, and when to use it. There is no missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with detailed descriptions for bbox, name, metric, and start_date, including cost implications. The description only adds a high-level mapping ('pick an area and what to count') without new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Put a place under continuous satellite measurement' and clarifies the resource (area + metric). It distinguishes from create_standing_order by explicitly contrasting quantities at a fixed place over time versus events. This clearly communicates the tool's core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance: 'Use this when the question is about a quantity at a fixed place over time' and names the alternative 'create_standing_order' for events. This gives an agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_standing_orderAInspect
Put an area under CONTINUOUS watch: save a question plus a bounding box and Delta re-answers it on a schedule, notifying only when the answer actually changed. Creating one is FREE. Each time it fires it runs ask_analyst and is metered like any Analyst question, so the cost is per CHANGE, not per check: a deterministic pass over the corpus decides whether anything new crossed the reporting bar, and quiet periods never invoke the model or charge anything. Returns projected_monthly_tokens_max — the ceiling if every single check fired — so the cost is visible before committing. Cadence and how many orders you may hold are set by your plan; the error says which limit you hit. Use it when the question is "tell me when this changes" rather than "what is happening right now".
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | Area to watch, [west, south, east, north] in WGS84. Required — a global standing order would fire on everything. | |
| name | No | Label for the order (default "Standing order"). | |
| cadence | No | How often to CHECK (checking is free; only a fired check costs tokens). Default weekly. Faster cadences may require a higher plan. | |
| question | No | The question to re-answer each time something changes. Omit for "what changed in this area, and what does it mean?". | |
| categories | No | Restrict the watch to these Delta categories (kinetic, armed_conflict, maritime, natural_disaster, infrastructure, aviation, humanitarian, protest, diplomacy). | |
| notify_email | No | Email the result when it fires (default true). Results are readable via list_standing_orders either way. | |
| min_new_events | No | How many new qualifying events must appear before a run is triggered (default 1). | |
| min_geoint_score | No | Reporting bar (0-10, default 6). Raise it to be told only about major developments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| order | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
| projected_monthly_tokens_max | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses significant behavioral traits beyond annotations: it costs nothing to create, each firing runs ask_analyst and is metered, a deterministic pre-pass avoids charging for quiet periods, and it returns projected_monthly_tokens_max for cost visibility. It also notes plan limits on cadence and order count, and that errors indicate which limit was hit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet information-dense, structured to front-load the core function, then explain the cost model, then usage guidance. Every sentence earns its place, with no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters) and the presence of an output schema, the description covers all necessary aspects: function, cost, triggering logic, return value, plan limits, and usage guidance. It provides enough context for an agent to select and invoke the tool correctly without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by explaining cost implications directly tied to parameters: cadence affects check frequency and plan requirements, and min_new_events / min_geoint_score control when a check fires and thus influences cost. This goes beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: putting an area under continuous watch via a question and bounding box, scheduled re-answering, and change-based notifications. It distinguishes itself from sibling tools like list_standing_orders and delete_standing_order by focusing on creation and from immediate-query tools like ask_analyst.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use it when the question is "tell me when this changes" rather than "what is happening right now".' It also explains the cost model, noting that creation is free and metering occurs only when the order fires, which helps users decide when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_standing_orderADestructiveIdempotentInspect
Delete a standing order by id, or pause/resume it instead by passing active=false/true. Pausing keeps the order and its history; deleting removes both. Neither costs tokens. A paused order still counts against the plan limit, so delete rather than pause when you want the slot back.
| Name | Required | Description | Default |
|---|---|---|---|
| active | No | Omit to DELETE. Pass false to pause and true to resume, keeping the order. | |
| order_id | Yes | The id returned by create_standing_order or list_standing_orders. |
Output Schema
| Name | Required | Description |
|---|---|---|
| order | No | |
| deleted | No | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true), the description adds crucial behavioral details: pausing preserves the order and history, deleting removes both, neither operation costs tokens, and a paused order still counts against the plan limit. This explains side effects and resource constraints not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences that front-load the primary action, then efficiently explains the alternative and its consequences. Every sentence adds distinct value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description needn't explain return values. It covers delete and pause/resume semantics, state effects, cost, and plan limit implications, making it complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the active parameter's behavior (omit to delete, false to pause, true to resume) with 100% coverage. The description adds extra nuance about plan limit usage and the fact that pausing keeps history, which is not in the schema. This supplements the schema meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb ('Delete') and resource ('standing order'), clearly stating the primary action and also mentioning the alternative pause/resume behavior. It distinguishes from sibling tools like create_standing_order and list_standing_orders by focusing on the delete/pause operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to delete vs pause: 'delete rather than pause when you want the slot back.' It also provides the context that pausing keeps the order/history and that neither operation costs tokens, giving clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analyst_jobARead-onlyInspect
Fetch the status and result of an ask_analyst run by job_id. Job status is ONLY "processing" (still running — poll again in ~10-20s), "done" (with the finished brief and meta.tokens), or "error". When done, result_quality.status ("complete" | "partial", with any issues[]) reports whether the structured output is fully populated — this is SEPARATE from the job status (a done job can carry a partial result). Free of token charges — the run itself is charged once on completion. A job is visible only to the API key owner that created it.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job_id returned by ask_analyst. | |
| response_format | No | "full" (default) returns the prose brief alongside the structured result. "compact" omits the prose brief and returns only the structured result — which still carries the assembled structured_summary — so a re-fetch costs materially fewer context tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| brief | No | |
| error | No | Failure reason when status is "error". |
| job_id | No | |
| status | No | "processing" | "done" | "error". |
| message | No | |
| progress | No | Pipeline progress while the job is processing. completed_steps reaches total_steps ONLY when status is "done". |
| created_at | No | |
| updated_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description aligns with that, adding rich behavioral detail: exact statuses, processing intervals, separation of result_quality from job status, token charging behavior, and owner-only visibility. These go well beyond structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five dense sentences cover statuses, polling, quality caveat, and access constraints with no filler. Information is front-loaded with the core action first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a polling endpoint with output schema, the description covers all needed operational context: status meanings, polling behavior, quality distinction, and access control. The response_format parameter is already documented in the schema, so no gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both job_id and response_format documented. The description adds little beyond the schema (e.g., that job_id comes from ask_analyst), so parameter semantics are adequately handled by the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Fetch') and a clear resource ('status and result of an ask_analyst run by job_id'), which distinguishes it from sibling tools like ask_analyst that create runs. It fully clarifies what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context is given for polling ('poll again in ~10-20s') and it implicitly identifies this as the retrieval counterpart to ask_analyst. It doesn't explicitly name alternative tools, but the wording and sibling set make the usage context obvious, though no explicit when-not-to-use list is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_monitored_areaARead-onlyInspect
Fetch one monitored area with its full measurement history — every acquisition that was measured, its value, and whether it was flagged anomalous. This is the time series behind the number that list_monitored_areas reports, so use it to answer "is it going up", "when did it change", or "how unusual is today". Anomaly flags come from a median-absolute-deviation test on the series, not a fixed threshold. Free of token charges.
| Name | Required | Description | Default |
|---|---|---|---|
| area_id | Yes | The area_id from list_monitored_areas. A metric’s polygon_id is also accepted and resolves to the same area. |
Output Schema
| Name | Required | Description |
|---|---|---|
| area | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
| metering | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds valuable behavior beyond that: discloses that anomaly flags come from a median-absolute-deviation test, that the result includes full measurement history with per-acquisition values and flags, and that the tool is "free of token charges." No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: purpose, usage, anomaly algorithm, cost. Front-loaded with the core action, no fluff or redundancy. Ideal length for a simple read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required param, no nested objects, output schema present), the description fully equips an agent: what is returned, how to use it, what's behind anomaly flags, and cost implications. Complete for its scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already explains area_id's provenance and polygon_id alias. The main description does not add new parameter-level semantics; it merely reinforces the source of area_id. Baseline 3 is appropriate because the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: "Fetch one monitored area with its full measurement history," immediately distinguishing it from the sibling list_monitored_areas, which reports only a summary number. The added context that this is "the time series behind the number" further clarifies its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states intended use cases: "use it to answer 'is it going up', 'when did it change', or 'how unusual is today'." This gives clear guidance on when to choose this tool over list_monitored_areas and other analytical siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageARead-onlyInspect
Check the calling key's remaining token balance and plan capabilities — monthly allocation, tokens used this period, tokens remaining, and whether the plan includes AI tools over the API (assess_signal / ask_analyst). Use this to pre-flight a metered call: decide whether enough balance is left before spending. Free of token charges.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | |
| tokens | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description adds valuable context: 'Free of token charges' and details on what it returns. It clarifies the tool's non-consuming nature, going beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, followed by a clear use case and a key behavioral note. No redundant information or filler, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params), the presence of an output schema, and complete annotations, the description covers all necessary aspects: what it does, what it returns, when to use it, and a distinguishing behavioral trait. Nothing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the description correctly doesn't introduce any. Schema coverage is trivially 100%, given the empty schema. The description adds implicit meaning by indicating the 'calling key' is used automatically, aligning with the baseline for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Check the calling key's remaining token balance and plan capabilities.' It enumerates concrete outputs (monthly allocation, tokens used, tokens remaining, plan capabilities) and distinguishes itself from sibling tools, none of which cover balance/plan status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use: 'Use this to pre-flight a metered call: decide whether enough balance is left before spending.' It doesn't mention alternatives or when-not, but as a unique utility among siblings, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_world_briefARead-onlyInspect
Fetch the Daily World Brief — an AI-synthesized OSINT/GEOINT digest of the previous UTC day's worldwide event signals (headline, executive summary, top developments with why-it-matters and what-to-watch, per-theme roll-up, ranked signals). Free of token charges. The result includes a freshness object (brief_date, age_hours, is_stale) — if is_stale is true this is the latest published brief and a newer day is not yet available, so relay it as possibly out of date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Brief date, YYYY-MM-DD (UTC). Defaults to the latest available. |
Output Schema
| Name | Required | Description |
|---|---|---|
| brief | Yes | |
| freshness | No | Freshness of the returned brief: brief_date, generated_at, age_hours, freshness (operational|delayed|degraded), is_stale, note. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing that the result includes a freshness object (brief_date, age_hours, is_stale) and explaining how to handle stale data. It also notes the tool is free of token charges, adding behavioral context that is not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative and every element serves a purpose, but the first sentence is quite long and contains a nested list, slightly reducing readability. Overall it's concise and front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single optional parameter, annotations, and an output schema, the description adds essential context about the brief's content, freshness object, and how to interpret staleness. It is complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single optional 'date' parameter with format and default behavior (defaults to latest available). The tool description does not add additional parameter semantics beyond this, and with 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool fetches the Daily World Brief, an AI-synthesized OSINT/GEOINT digest of the previous UTC day's events. It specifies the exact content structure (headline, executive summary, top developments, etc.), which distinguishes it from sibling tools like query_signals that provide raw data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's purpose clear—fetching a daily brief—so the context for when to use it is evident. However, it does not explicitly mention alternatives such as query_signals for raw signal data or state any exclusions, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_monitored_areasARead-onlyInspect
List the places under continuous satellite measurement on this key (Delta Monitor), with each area’s metric, most recent value, change since the previous measurement, whether that value was flagged anomalous, and coverage — how many acquisitions were measured versus how many exist. Coverage window_total is null when the catalog total is UNKNOWN; null never means zero. Also returns how many areas the plan allows and how many remain. Free of token charges.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| areas | Yes | |
| limits | No | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
| metering | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral details beyond the readOnlyHint and destructiveHint annotations: it explains that coverage window_total null means catalog total UNKNOWN, never zero, and explicitly states the operation is free of token charges. This significantly enhances transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet packed with necessary details. It front-loads the primary action, lists the returned fields in a readable flow, and adds a crucial null-semantics clarification. Every sentence earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is fully sufficient for a read-only list tool with an output schema. It covers the returned fields, plan limits, and a key data interpretation caveat, leaving no ambiguity about what the tool returns or how to interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the empty schema provides 100% coverage. The description does not need to explain parameters, and per the calibration baseline, 0 params merits a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'list' with a clear resource ('places under continuous satellite measurement on this key (Delta Monitor)'), distinguishing it from sibling tools like get_monitored_area (which fetches a single area) and create_monitored_area. The scope and returned data are explicitly stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys it returns all monitored areas with metrics, and the naming convention (list_*) implies its role. However, it does not explicitly contrast with get_monitored_area for single-area queries or provide when-not-to-use guidance, so it misses the top bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_standing_ordersARead-onlyInspect
List the standing orders on this key, with each one’s cadence, watched area, when it last checked, when it last actually fired, and how many consecutive checks found nothing (quiet_checks — a high number means the watch is not earning its place). Also returns how many orders the plan allows and how many remain. Free of token charges.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| limits | No | |
| orders | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds valuable context beyond that: it discloses that the tool is free of token charges and explains the meaning of 'quiet_checks'. This is good but does not cover potential rate limits or ordering details, which keeps it at a 4 rather than a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary action, and every clause adds value. It neither wastes words nor omits essential details, making it an exemplary model of concise, structured documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters, has an output schema, and is simple read-only listing, the description fully covers what it does, what fields are returned, how to interpret a key metric, and the cost behavior. There are no significant gaps, so a 5 is justified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty (100% coverage by default). Per the rubric, a baseline of 4 is appropriate since the description does not need to compensate for undocumented parameters; it also explains the output fields, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as listing standing orders on a key, with a specific verb ('List') and resource ('standing orders'). It lists the exact fields returned, distinguishing it from sibling tools like 'list_monitored_areas' and 'create_standing_order'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on what information is returned and even interprets the 'quiet_checks' field, helping an agent understand when this tool is useful for assessing standing-order effectiveness. However, it does not explicitly mention exclusions or alternatives, such as when to use 'list_monitored_areas' instead, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_event_imageryADestructiveInspect
Plan the imagery evidence for ONE event in a single call, instead of guessing collections one at a time. Give the event_id and what you are trying to establish (damage_assessment | flood_mapping | wildfire_assessment) and the SERVER runs the deterministic plan for that goal: it always checks BOTH in-app sensors — sentinel-1-grd (SAR: all-weather, the only look that survives cloud and night) and sentinel-2-l2a (optical, human-legible) — exactly once each, against the event’s own footprint and a pre/post window around its date. The result carries, per search, why it was made, how many scenes came back, how many actually COVER the event and are usable (cloud-obscured optical does not count), the SAR pair status, and whether a pre/post bracket exists. It also states screening / detection / identification capability: Sentinel-1/2 screen and detect at facility scale, and only object-level identification needs commercial VHR — a VHR recommendation NEVER invalidates what the free catalog already showed. Prefer this over several search_imagery calls for the same event: it cannot miss the SAR look and cannot repeat a search. An event with no resolvable footprint is refused rather than planned against a guess. Costs 4 token(s) per call (it deliberately issues two catalog searches).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | The `id` from query_signals. The server resolves its authoritative point + AOI. | |
| event_date | No | Event date YYYY-MM-DD. Optional — the event row supplies it when known. | |
| analysis_goal | Yes | What the imagery must establish — decides which collection leads and how cloud is gated. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| plan | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with destructiveHint=true, the description discloses the full behavior: the deterministic plan checks both Sentinel-1 and Sentinel-2 exactly once each, issues two catalog searches, costs 4 tokens, and returns per-search coverage/cloud/SAR-pair status. It also describes refusal behavior, screening/detection/identification capabilities, and explicitly states that a VHR recommendation does not invalidate free-catalog results—far exceeding the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but every sentence contributes substantive content: purpose, sensor behavior, output contents, capability context, usage guidance, precondition, and token cost. It is front-loaded with a clear summary, but the density of parenthetical details makes it slightly heavier than the most concise examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is remarkably complete: it enumerates what the result carries, explains screening/detection/identification limitations, gives usage preference over search_imagery, states the refusal condition, and mentions token cost and the two-search behavior. For a tool with 3 parameters and an output schema, this fully prepares 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context by explaining that analysis_goal (damage_assessment | flood_mapping | wildfire_assessment) drives the plan and cloud gating, and that event_id resolves to the event's authoritative footprint. It does not explicitly detail the optional event_date beyond implying a pre/post window, but the schema already covers that field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Plan') and a clear resource ('imagery evidence for ONE event'), and explicitly distinguishes it from the sibling search_imagery tool ('instead of guessing collections one at a time'). It further specifies the exact sensors and analysis goals, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Prefer this over several search_imagery calls for the same event' and explains why (cannot miss the SAR look and cannot repeat a search). It also defines required inputs (event_id, analysis_goal) and a precondition (an event must have a resolvable footprint, otherwise refused), providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
predict_satellite_passesADestructiveInspect
WHEN can this place next be imaged, and by WHAT — the timing half of collection planning. Propagates current orbital elements (SGP4 over day-cached CelesTrak two-line elements) for seven families and returns the access windows over a target: Sentinel-1 (SAR), Sentinel-2 and Landsat (free, SYSTEMATIC — routinely collected, so near-certain), plus WorldView, ICEYE, Capella and SkySat (commercial, AGILE — taskable ACCESS opportunities that require a paid order and are NOT guaranteed collects). Each pass carries acquisition/loss times, the closest-approach instant, peak elevation, OFF-NADIR angle, ground distance, ascending/descending, solar elevation and whether the target is sunlit (optical needs light; SAR does not), and the age of the element set it was computed from. Use it to answer "when is the next chance to see this", to choose between waiting for a free systematic pass and paying to task an agile one, and to time a pre/post change-detection pair. Give lat/lon, or a bbox whose centre is used. Horizon is capped at 7 days. If elements cannot be retrieved the result says so (retrieval_ok:false) — that means timing is UNAVAILABLE, never "no passes". Every pass is a GEOMETRIC access opportunity computed from orbital elements and swath width (geometry_only:true, acquisition_plan_verified:false): no operator collection plan is consulted, so this is when a sensor COULD see the target, never a confirmed acquisition schedule. With no start_date the window begins NOW, so the first pass listed is always still ahead. Costs 2 token(s) per call.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Target latitude (-90..90; positive = North). Required unless bbox is given. | |
| lon | No | Target longitude (-180..180; positive = East). Required unless bbox is given. | |
| bbox | No | Area [west, south, east, north] in WGS84. The CENTRE is used as the target when lat/lon are omitted. | |
| end_date | No | Inclusive end date YYYY-MM-DD (UTC). Defaults to start+2 days; the window is capped to a 7-day horizon. | |
| max_passes | No | Maximum passes to return, soonest first (default 40). | |
| satellites | No | Families to consider. Omit for all seven. Use this to compare "free systematic only" against "what could I task". | |
| start_date | No | Inclusive start date YYYY-MM-DD (UTC). Defaults to today. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| passes | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
| freshness | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behavior (SGP4 propagation, token cost, retrieval_ok:false semantics, geometry_only:true, never confirmed acquisitions), but the annotations contain destructiveHint:true, implying the tool destroys or modifies something. The description describes a purely predictive/read-only operation, directly contradicting the annotation. Per rubric, this contradiction forces a score of 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but intentionally so, front-loaded with the core question. Every sentence adds operational value (method, uncertainty, error behavior, defaults). It could be tightened but is not bloated for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is exceptionally complete: it defines output semantics (pass attributes), failure modes (retrieval_ok:false), limitations (geometry only, never confirmed), horizon cap, defaults, and cost. The presence of an output schema further reduces the burden of explaining return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 7 parameters (100% coverage), so baseline is 3. The description adds extra meaning: bbox's centre is used, satellites parameter groups free/systematic vs commercial/agile, and default behaviors for start_date and max_passes. This goes beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool predicts satellite passes, opening with "WHEN can this place next be imaged, and by WHAT — the timing half of collection planning." It names the resource (satellite pass access windows) and distinguishes itself from siblings by focusing on future collection opportunities rather than existing imagery or analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use it: to answer "when is the next chance to see this", to choose between free systematic passes and paid agile tasking, and to time change-detection pairs. It also gives practical constraints (7-day horizon, retrieval failure meaning). However, it doesn't explicitly say when not to use it or name alternative sibling tools like search_imagery for past imagery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_claimsARead-onlyInspect
Read the LEDGER of claims this key has been given — every factual assertion the Analyst made, with its evidence class (CONFIRMED / REPORTED / PARTY_CLAIM / ASSESSMENT), how many INDEPENDENT source families backed it, and the publishers. The point is the time axis: when a later answer restated the same assertion, the claim carries the link and says which way the evidence moved — restated_only surfaces those chains, and downgraded_only isolates the cases where a later answer was LESS sure than an earlier one, which is where this product contradicted itself. Use it to audit what you were told before acting on it, or to check whether an assertion has since weakened. Scoped to your own key; no other caller’s claims are visible. Free of token charges.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many claims to return (default 50). | |
| since | No | Only claims asserted on or after this date (YYYY-MM-DD or ISO 8601). | |
| restated_only | No | Only claims that sit in a restatement chain. | |
| evidence_class | No | Restrict to one evidence class. | |
| downgraded_only | No | Only claims a later answer restated with WEAKER evidence — read these first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| claims | Yes | |
| counts | No | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and non-destructive annotations, the description discloses important behavioral traits: the time-axis/evidence-movement semantics, the fact that claims track restatements and downgrades, scoping to the caller's own key, and that it is 'Free of token charges.' This adds significant context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence contributes value, explaining the ledger concept, evidence classes, restatement chains, use cases, and scope. It is front-loaded with the main purpose. The length is justified by the tool's conceptual complexity, though it could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema in the provided definition, the description thoroughly covers what the tool returns (evidence class, source family count, publishers) and its unique value proposition (time-axis tracking, downgrade detection). It leaves no major ambiguity about the tool's behavior and purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, so baseline is 3. The description adds extra meaning for restated_only and downgraded_only by explaining their purpose in identifying chains and weakened assertions, and it clarifies evidence classes with examples. This goes beyond the schema's straightforward definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Read' plus the resource 'LEDGER of claims' clearly states the tool's function. It specifies the content (factual assertions, evidence class, source families, publishers) and explicitly distinguishes itself from sibling tools by focusing on the claims ledger and its time-based evidence chains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases: 'Use it to audit what you were told before acting on it, or to check whether an assertion has since weakened.' It also notes scope restrictions (only your own key) and the meaning of restated_only and downgraded_only. However, it does not explicitly contrast with alternatives like query_signals or query_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_hotspotsADestructiveInspect
Geographic hotspots — signal density grid-binned into cells, ranked by event count, each with peak severity, the categories present, and up to 5 representative event_ids (trace a cell back to its signals). Use to find WHERE activity is concentrating. NOTE the unit: cells count satellite-observable points (meta.population = rs_observable_points); meta reports source_point_count and dropped_by_geo_count / dropped_by_severity_count so point_count is fully accountable. Costs 1 token(s) per call.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Bounding box [minLon, minLat, maxLon, maxLat] (WGS84). Omit for worldwide. | |
| date | No | Window end date, YYYY-MM-DD (UTC). Defaults to today. | |
| days | No | Window length in days. Defaults to 1. | |
| limit | No | Max source points sampled before grid-binning — NOT the number of cells returned. Defaults to 500 (the max). Lower values sample fewer events and fragment clusters (each cell trends toward count 1), so leave at the default for a representative density map. | |
| precision | No | Grid cell size in decimal degrees. Defaults to 1. | |
| categories | No | Restrict to these categories. Omit for all. | |
| minSeverity | No | Keep only points with severity_score >= this. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
| hotspots | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations indicate destructiveHint: true, but the description describes a read-only query operation that returns grid-binned data and metadata. This is a direct contradiction. According to the rubric, a score of 1 is required when the description contradicts annotations. The description does disclose token cost and the unit of cell counts, but the safety profile mismatch is a serious inconsistency that undermines trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it starts with the core purpose, includes a usage phrase, provides a clarifying note about the unit and accountability of counts, and mentions the token cost. Every sentence earns its place, and the note is valuable for interpreting results correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is quite complete for a query tool with an output schema: it explains what the tool returns (peak severity, categories, event_ids), clarifies the unit of cells, and discloses cost. However, the complete absence of any mention of the tool's safety profile (aside from the misleading destructiveHint) is a gap that could confuse an agent. The description supplies most necessary context, but the contradiction with annotations prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The schema already provides thorough descriptions for all parameters, including the nuanced 'limit' parameter. The tool description adds context about what the cells count (satellite-observable points) but does not add parameter-specific meanings beyond the schema. Hence, it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb and resource: 'Geographic hotspots — signal density grid-binned into cells, ranked by event count, each with peak severity, the categories present, and up to 5 representative event_ids'. It also provides a usage orientation ('Use to find WHERE activity is concentrating'), which differentiates it from sibling tools like query_signals (which likely returns raw signals) and query_stats (aggregate statistics).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case: 'Use to find WHERE activity is concentrating.' It does not explicitly name alternatives or exclusions, but the context signals list sibling tools, and the purpose is clear enough for an agent to choose this tool for spatial density analysis. The guidance is clear but lacks explicit 'when-not-to-use' or alternative names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_signalsBDestructiveInspect
Query geolocated world event signals (Delta Signals: geopolitical, security, disaster, and infrastructure events distilled from global news media, AI-enriched with severity/GEOINT scores and satellite-collection recommendations). Filter by bounding box, date window, and category. Costs 3 token(s) per call, charged to the API key owner's balance.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Bounding box [minLon, minLat, maxLon, maxLat] (WGS84). Omit for worldwide. | |
| date | No | Window end date, YYYY-MM-DD (UTC). Defaults to today. | |
| days | No | Window length in days ending on `date`. Defaults to 1. | |
| sort | No | Result ordering. Omit for the feed's default ranking. "geoint" ranks by the continuous GEOINT collection priority (intelligence.collection_priority) — an imageability gate times tasking value (severity, urgency, information gain, corroboration, escalation, market) — so imageable, decision-relevant events (e.g. a high-severity escalating strike) rise and non-observable news noise sinks. This is NOT the saturated geoint_score. | |
| limit | No | Maximum rows per page. Defaults to 100. | |
| cursor | No | Opaque pagination cursor from a previous response's meta.next_cursor. | |
| markets | No | Restrict to signals AI-tagged as exposing these financial markets via a direct physical/supply channel (informational only, not investment advice). Omit for all. | |
| openData | No | Keep only signals with this open-data sufficiency — free imagery is enough vs commercial tasking recommended (intelligence.open_data_sufficiency). | |
| categories | No | Restrict to these categories. Omit for all. | |
| escalating | No | Keep only signals whose escalation_trend is "escalating". | |
| minSeverity | No | Keep only signals with severity_score >= this (0-10). | |
| createdSince | No | Differential fetch: only signals first enriched at/after this ISO 8601 timestamp. | |
| taskableOnly | No | Keep only signals whose coordinate is search_ready — GEO-READY ONLY: drops country centroids, ADM1 mismatches, reporting-dateline fallbacks and unresolved fixes (intelligence.geo_validation.search_ready). It does NOT imply observable or quality-passed, so not-observable / insufficient-detail / quality-failed signals can still appear. For automated imagery tasking use collectionReadyOnly (or combine with observability:"observable"). | |
| updatedSince | No | Differential fetch: only signals (re)enriched at/after this ISO 8601 timestamp. Ignores the date window. Response signals carry last_updated_at. | |
| observability | No | Keep only signals with this satellite observability — whether a physical mark is imageable at all (intelligence.satellite_observability). | |
| responseFormat | No | Per-signal field detail. "concise" (default) returns the key decision + GEOINT fields (id, date, category, title, location, lat/lng, severity/geoint scores, collection_priority, escalation, market, rs_level/rs_sensor, observability, observability_status, verification_status, geo_status, search_ready, article_count, independent_source_count, information_gain) — cheaper to scan. "detailed" returns the full Signal object (shape per the signals://schema resource). | |
| minInformationGain | No | Keep only signals whose intelligence.expected_information_gain >= this (0-1). | |
| collectionReadyOnly | No | STRICT tasking-candidate filter: search_ready AND observability=observable AND quality.status!=failed AND a concrete collection plan (rs_target + rs_reason present) AND an event coordinate. The safe input set for automated imagery tasking — a superset of every gate taskableOnly alone does not check. | |
| observabilityStatus | No | 3-state observability filter. Unlike `observability` (binary), this exposes `insufficient_detail` — signals where imageability is unknown (no RS enrichment yet, unresolved location, or an Impossible verdict rescued because the event reads kinetic). `not_observable` = a considered "nothing to image"; neither bucket leaks insufficient_detail. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| signals | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description describes a read-only query operation, yet annotations declare destructiveHint=true and readOnlyHint=false. This contradicts the description, which also does not disclose any state-changing or destructive behavior beyond a token cost. The annotation contradiction is severe and unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose. The first sentence is dense with the Delta Signals definition but remains informative. The second sentence concisely states filter options and cost. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 19 parameters and an output schema, the description provides a high-level overview and notes cost. It does not explain pagination, use-case prioritization, or return-value structure, but those are covered by the schema and output schema. The annotation contradiction leaves a critical gap, but for the description alone, it is minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter richly described in the schema itself. The top-level description only references three filter types (bbox, date, category) that are already documented in the schema. Thus the description adds no semantic value beyond the schema, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Query geolocated world event signals' — a specific verb+resource that clearly distinguishes from siblings like query_stats and get_world_brief. The parenthetical defining Delta Signals adds context without ambiguity. The filter mention further clarifies the tool's domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states 'Filter by bounding box, date window, and category,' offering clear context on how to use the tool. However, it doesn't explicitly state when to use this tool over alternatives or when not to use it. No exclusions or explicit comparative guidance are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_statsADestructiveInspect
Aggregate statistics over the signal corpus — total event count plus per-category and per-day breakdown (trend) for a bounding box and date window. Cheaper than query_signals (returns roll-ups, not rows). NOTE the unit: total counts article-deduped events (meta.population = article_deduped_events), which is NOT cluster-collapsed, so it is >= the query_signals count for the same window. Costs 1 token(s) per call.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Bounding box [minLon, minLat, maxLon, maxLat] (WGS84). Omit for worldwide. | |
| date | No | Window end date, YYYY-MM-DD (UTC). Defaults to today. | |
| days | No | Window length in days. Defaults to 1. | |
| categories | No | Restrict to these categories. Omit for all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| stats | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint=true contradicts the description's implication of a read-only aggregation tool. The description discloses important behavioral traits (cost, unit semantics, non-cluster-collapsed counts), but the contradiction with annotations forces a score of 1 per the rubric.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all valuable: purpose, cost/comparison, and unit nuance. No fluff or repetition; information is front-loaded with the primary function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, alternative, cost, and output semantics. An output schema exists, so the return field details are not required. The only gap is the unresolved contradiction with destructiveHint, which slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all 4 parameters have descriptions), so the baseline is 3. The tool description adds general context about bbox/date windows but does not provide additional parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Aggregate statistics over the signal corpus' with specific outputs (total event count, per-category, per-day breakdown). It explicitly distinguishes itself from the sibling tool query_signals by saying it returns roll-ups rather than rows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool versus the alternative: 'Cheaper than query_signals (returns roll-ups, not rows)' clearly indicates it is for aggregate needs rather than detailed row-level queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_imaging_priorityADestructiveInspect
WHERE — and with what class (and therefore cost) of satellite — is observation most worthwhile right now? Crosses each event’s composite IMPORTANCE (severity × source breadth × market relevance) with the SPEC CLASS its required resolution demands: coarse (≤100 m), hr (≤10 m, Sentinel-class free data) or vhr (sub-metre, commercial tasking). Returns how many imageable events fall in each class with their mean importance, plus the top targets with importance, required class and AOI. Use it to triage a theatre before spending on imagery: a high-importance event that only needs hr is answerable with free Sentinel data, while a vhr one is what a paid order is for. Deterministic — no LLM, no per-event cost. Costs 1 token(s) per call.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Area [west, south, east, north] in WGS84. Omit for a global survey. | |
| top_n | No | How many top targets to return (default 12). | |
| end_date | No | Inclusive end date YYYY-MM-DD. Defaults to today. The window is capped at 30 days. | |
| categories | No | Restrict to these Delta categories (kinetic, armed_conflict, maritime, natural_disaster, infrastructure, aviation, humanitarian, protest, diplomacy). | |
| start_date | No | Inclusive start date YYYY-MM-DD. Defaults to today; clamped to your plan history floor. | |
| min_geoint_score | No | Drop events below this GEOINT score before ranking. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
| priority | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint=true directly contradicts the description's claim that the tool is 'Deterministic — no LLM, no per-event cost' and only returns ranking data. The description gives no indication of any destructive side effect, and its entire framing suggests a read-only query. This is a critical inconsistency that could lead an agent to misuse the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long (5 sentences) but each sentence carries useful information: purpose, method, output, use case, and cost. It is front-loaded with the key question and efficient in its wording. A small deduction for density — the resolution-class explanation could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a rich output schema and fully documented input parameters, the description covers the essential context: what it returns, how to think about the output, determinism, and cost. It lacks nothing critical, though the annotation contradiction undermines trust. The tool's complexity is well-served by the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions, so the baseline is 3. The tool description adds minimal parameter-specific nuance — it only mentions resolution classes indirectly, but doesn't explain how bbox, top_n, or min_geoint_score interact with the ranking logic. Thus it neither adds nor subtracts much beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific question ('WHERE — and with what class of satellite — is observation most worthwhile right now?') and explains exactly what the tool does: ranks events by importance and resolution class. It clearly distinguishes from sibling tools like search_imagery and plan_event_imagery by framing itself as a triage step before imagery spending.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the intended use case ('Use it to triage a theatre before spending on imagery') and explains the practical difference between resolution classes (hr = free Sentinel data, vhr = paid order). It doesn't name alternative tools or list exclusions, but the context is clear enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_imageryADestructiveInspect
Search the satellite imagery catalog (Sentinel-1/2, OPERA RTC-S1) for scenes over an area and date window — the natural follow-up to a signal (find imagery over the event location). Returns scene metadata (id, datetime, footprint, cloud cover, platform, orbit geometry, coverage, catalog link) — no imagery bytes. Pass eventDate to classify each scene timing=pre/post/same_day_unknown (a same-day scene is same_day_unknown, never post, without a real event time) and get pre/post bracketing + window_status + SAR sar_pair_status in meta. Pass eventPoint [lon,lat] and/or eventAoi [minLon,minLat,maxLon,maxLat] to get each scene's target_relation (covers_event_geometry = pure geometry gate; usable_for_analysis additionally requires acceptable cloud for optical, so a 99%-cloud scene is geometry-covering but not analysis-usable) — so a scene that only clips the wide bbox is not mistaken for covering the event. Costs 2 token(s) per call.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | Bounding box [minLon, minLat, maxLon, maxLat] (WGS84). Required. | |
| date | No | Window end date, YYYY-MM-DD (UTC). Defaults to today. | |
| days | No | Window length in days. Defaults to 7. | |
| limit | No | Max scenes to return. Defaults to 25. | |
| eventAoi | No | Event AOI bbox [minLon, minLat, maxLon, maxLat] (WGS84). Drives target_relation.intersects_event_aoi / event_aoi_coverage_ratio. | |
| eventDate | No | Event date, YYYY-MM-DD (UTC). When set, each scene is tagged timing=pre/post/same_day_unknown and the search window is widened to the canonical pre/post span, so meta reports has_pre_baseline / has_post / bracketing_available / window_status; for sentinel-1-grd it also reports sar_pair_status (ready | not_ready | indeterminate_event_time) + orbit_note. | |
| collection | No | Catalog collection. Defaults to sentinel-2-l2a. | |
| eventPoint | No | Event point [lon, lat] (WGS84). When set, each scene reports target_relation.covers_event_point / usable_for_event so a scene that only clips the wide bbox is not presented as covering the event. | |
| cloudCoverMax | No | Sentinel-2 only: max cloud cover %. | |
| eventTimestamp | No | Full event timestamp (ISO 8601) when known — promotes same-day scenes from same_day_unknown to pre/post by time. | |
| responseFormat | No | Per-scene field detail. "concise" (default) returns id, collection, datetime, timing, cloud_cover, platform, orbit_state, relative_orbit, instrument_mode, product_type, coverage_ratio, covers_event_point, usable_for_event, stac_item_url, preview. "detailed" adds the full footprint bbox/geometry, the complete target_relation, constellation, polarizations, absolute_orbit, incidence_angle, and non-signed asset hrefs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| scenes | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations include destructiveHint: true, but the description clearly indicates a read-only search operation returning metadata with no imagery bytes. This directly contradicts the destructive hint. While the description is rich in behavioral detail, the contradiction mandates a score of 1 per the scoring rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though lengthy, every sentence delivers critical operational detail: catalog scope, output type, parameter effects, edge-case clarifications, and cost. The structure front-loads the core purpose and methodically explains optional parameters, avoiding redundancy with the input schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, multiple collections, nuanced target_relation logic), the description is exceptionally complete. It covers what is returned, how to interpret derived fields, when to use eventDate/eventPoint/eventAoi, and even cost. The presence of an output schema reduces the need to explain returns, but the description adds value by explaining semantics, not just listing fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds rich semantics beyond the schema, especially for eventDate (timing classification, pre/post bracketing, SAR pair status) and eventPoint/eventAoi (target_relation with geometry gate vs. usability gate). It clarifies edge cases like same-day scenes without eventTimestamp and cloud-cover thresholds, far exceeding baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Search the satellite imagery catalog' with specific collections (Sentinel-1/2, OPERA RTC-S1) and scope (area and date window). It also positions it relative to siblings by calling it 'the natural follow-up to a signal (find imagery over the event location)', making it distinct from related tools like plan_event_imagery or query_signals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides a use case: 'natural follow-up to a signal (find imagery over the event location)'. It also indicates what the tool does NOT do ('no imagery bytes'), implicitly guiding agents to choose another tool if they need actual imagery. This clear context and implicit alternatives qualify as strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
survey_observable_eventsADestructiveInspect
Which events in a window can a given in-app sensor actually RESOLVE? Evaluates the FULL set (not just the top few) against each event’s precomputed required resolution, and returns how many are observable vs not, the breakdown by required resolution, and the top observable events with the ready-made imaging rationale. Observability here is resolvability — whether the physical mark is large enough for the sensor: Sentinel-2 is ~10 m optical (needs daylight and clear sky), Sentinel-1 is SAR (all-weather, day or night). Prefer this over asking about events one at a time: it is exhaustive AND cheap, and it is the honest way to answer "what can we actually see" before committing collection effort. The population is deliberately UNGATED by tasking readiness — it answers "what could this sensor resolve", not "what may we task" — so its total sits above rank_imaging_priority and counts a different unit from query_signals' clusters; see population_detail, and read collection_ready per event for taskability. Deterministic — no LLM. Costs 1 token(s) per call.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Area [west, south, east, north] in WGS84. Omit for a global survey. | |
| top_n | No | How many observable events to return (default 20). | |
| sensor | No | Which in-app sensor to evaluate against. sentinel-2 = ~10 m optical (daylight, clear sky); sentinel-1 = SAR (all-weather, day/night). Default sentinel-2. | |
| end_date | No | Inclusive end date YYYY-MM-DD. Defaults to today. The window is capped at 30 days. | |
| categories | No | Restrict to these Delta categories. | |
| start_date | No | Inclusive start date YYYY-MM-DD. Defaults to today; clamped to your plan history floor. | |
| min_geoint_score | No | Drop events below this GEOINT score before surveying. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Query echo, token charge/balance (meta.tokens), and pagination where applicable. |
| survey | Yes | |
| summary | No | One-line natural-language summary of the result, ready to relay to a user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations specify destructiveHint=true and readOnlyHint=false, implying the tool may have destructive or non-read-only side effects. The description, however, portrays a purely analytical, deterministic survey that 'returns' counts and events, with no mention of any mutation or destructive action. This directly contradicts the annotations, making the description misleading regarding safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-structured: it opens with a clear question, explains core behavior, then offers usage guidance and population caveats. Each sentence provides meaningful context (e.g., sensor differences, relation to sibling tools, determinism, cost). While slightly dense, it avoids fluff and earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the description covers purpose, usage, and return contents thoroughly, it omits any mention of destructive side effects or non-read-only behavior that the annotations indicate. Given that an output schema exists and parameters are fully documented, the description should have addressed the tool's actual side-effect profile. This critical omission makes the description incomplete and potentially unsafe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all 7 parameters with descriptions (100% coverage), so the baseline is 3. The description adds a couple of contextual notes (e.g., sensor resolution details, 30-day window cap), but these are already present in the schema's parameter descriptions. No significant extra meaning is provided beyond the schema, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific question and clearly defines the tool's function: to evaluate which events in a window a given in-app sensor can resolve, return counts, breakdown by required resolution, and top events with rationale. It explicitly distinguishes itself from siblings like rank_imaging_priority and query_signals by contrasting population and units, making its purpose unique and concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Prefer this over asking about events one at a time' and explains it is exhaustive, cheap, and the honest way to assess observability before committing collection effort. It also differentiates from rank_imaging_priority and query_signals, and instructs to read collection_ready per event for taskability, providing clear when/when-not usage.
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. Dates show when Glama detected each change.
20 tool updates
v1.8.0- Changed
ask_analyst4 fields changed- changed
Input schema / properties / idempotencyKey / descriptionPrevious value: -"Optional at-most-once key. Retry with the SAME key after a timeout to avoid a second charge; use a fresh key to ask again."New value: +"Optional at-most-once key. Re-sending the SAME key resolves to the SAME run: if it finished you get the brief with NO second charge; if it is still running you get its processing status. Strongly recommended — it makes a timeout recoverable. Use a fresh key to ask again." - added
Input schema / properties / modeAdded value: +{ + "description": "fast (default) or deep. Deep enables extended reasoning and wider evidence-gathering budgets — for forecasting, collection trade-offs and market-implication questions where step-by-step reasoning materially helps. It is slower and the ceiling rises from 123 to 415 tokens; charging stays metered by what the run actually consumes, so a light deep question does not cost the ceiling.", + "enum": [ + "fast", + "deep" + ], + "type": "string" +} - added
Input schema / properties / response_formatAdded value: +{ + "description": "\"full\" (default) returns the prose brief alongside the structured result. \"compact\" omits the prose brief and returns only the structured result — which still carries the assembled structured_summary — so a completed run costs materially fewer context tokens.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "brief": { + "type": "object" + }, + "estimated_charge": { + "description": "The charge ceiling quoted for THIS run, fixed at enqueue (統合改善指示書 P1-1). The completed run reports the actual charge in meta.tokens.charged and echoes this ceiling as meta.tokens.maximum_promised; actual never exceeds it.", + "properties": { + "maximum": { + "description": "Ceiling this run may be charged.", + "type": "integer" + }, + "minimum": { + "description": "Floor charge for any completed run.", + "type": "integer" + } + }, + "required": [ + "minimum", + "maximum" + ], + "type": "object" + }, + "job_id": { + "description": "Id of the analyst run — pass to get_analyst_job (also at GET /api/v1/analyst/{job_id}).", + "type": "string" + }, + "message": { + "type": "string" + }, + "meta": { + "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable.", + "type": "object" + }, + "progress": { + "description": "Pipeline progress while the job is processing. completed_steps reaches total_steps ONLY when status is \"done\".", + "properties": { + "agent_progress": { + "description": "The model's internal step counter (an upper bound on the steps a run may take), or null.", + "properties": { + "completed_steps": { + "type": "integer" + }, + "total_steps": { + "type": "integer" + } + }, + "type": "object" + }, + "completed_steps": { + "description": "Completed pipeline steps (0-6).", + "type": "integer" + }, + "stage": { + "description": "Current pipeline stage.", + "enum": [ + "queued", + "retrieval", + "imagery_reconciliation", + "synthesis", + "final_validation", + "persistence", + "complete" + ], + "type": "string" + }, + "total_steps": { + "description": "Always 6.", + "type": "integer" + } + }, + "required": [ + "stage", + "completed_steps", + "total_steps" + ], + "type": "object" + }, + "status": { + "description": "\"processing\" when the run is still going (poll get_analyst_job or re-send the same idempotencyKey).", + "type": "string" + } + }, + "type": "object" +}
- Changed
assess_signal1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "cached": { + "type": "boolean" + }, + "content": { + "type": "object" + }, + "kind": { + "type": "string" + }, + "meta": { + "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable.", + "type": "object" + }, + "model": { + "type": "string" + } + }, + "required": [ + "kind", + "content", + "meta" + ], + "type": "object" +}
- Added
create_monitored_area - Added
create_standing_order - Added
delete_standing_order - Added
get_analyst_job - Added
get_monitored_area - Changed
get_usage1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "plan": { + "properties": { + "api_llm_access": { + "description": "Whether AI tools over the API are enabled.", + "type": "boolean" + } + }, + "required": [ + "api_llm_access" + ], + "type": "object" + }, + "tokens": { + "properties": { + "allocation": { + "description": "Monthly token allocation for the plan.", + "type": "number" + }, + "remaining": { + "description": "Tokens remaining this period.", + "type": "number" + }, + "used": { + "description": "Tokens used in the current period.", + "type": "number" + } + }, + "required": [ + "allocation", + "used", + "remaining" + ], + "type": "object" + } + }, + "required": [ + "tokens", + "plan" + ], + "type": "object" +}
- Changed
get_world_brief1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "brief": { + "type": "object" + }, + "freshness": { + "description": "Freshness of the returned brief: brief_date, generated_at, age_hours, freshness (operational|delayed|degraded), is_stale, note.", + "type": "object" + } + }, + "required": [ + "brief" + ], + "type": "object" +}
- Added
list_monitored_areas - Added
list_standing_orders - Added
plan_event_imagery - Added
predict_satellite_passes - Added
query_claims - Changed
query_hotspots1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hotspots": { + "items": { + "type": "object" + }, + "type": "array" + }, + "meta": { + "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable.", + "type": "object" + }, + "summary": { + "description": "One-line natural-language summary of the result, ready to relay to a user.", + "type": "string" + } + }, + "required": [ + "meta", + "hotspots" + ], + "type": "object" +}
- Changed
query_signals7 fields changed- added
Input schema / properties / collectionReadyOnlyAdded value: +{ + "description": "STRICT tasking-candidate filter: search_ready AND observability=observable AND quality.status!=failed AND a concrete collection plan (rs_target + rs_reason present) AND an event coordinate. The safe input set for automated imagery tasking — a superset of every gate taskableOnly alone does not check.", + "type": "boolean" +} - added
Input schema / properties / observabilityStatusAdded value: +{ + "description": "3-state observability filter. Unlike `observability` (binary), this exposes `insufficient_detail` — signals where imageability is unknown (no RS enrichment yet, unresolved location, or an Impossible verdict rescued because the event reads kinetic). `not_observable` = a considered \"nothing to image\"; neither bucket leaks insufficient_detail.", + "enum": [ + "observable", + "not_observable", + "insufficient_detail" + ], + "type": "string" +} - changed
Input schema / properties / responseFormat / descriptionPrevious value: -"Per-signal field detail. \"concise\" (default) returns key decision + GEOINT fields; \"detailed\" returns the full Signal object."New value: +"Per-signal field detail. \"concise\" (default) returns the key decision + GEOINT fields (id, date, category, title, location, lat/lng, severity/geoint scores, collection_priority, escalation, market, rs_level/rs_sensor, observability, observability_status, verification_status, geo_status, search_ready, article_count, independent_source_count, information_gain) — cheaper to scan. \"detailed\" returns the full Signal object (shape per the signals://schema resource)." - changed
Input schema / properties / sort / descriptionPrevious value: -"Result ordering. Omit for the feed's default ranking."New value: +"Result ordering. Omit for the feed's default ranking. \"geoint\" ranks by the continuous GEOINT collection priority (intelligence.collection_priority) — an imageability gate times tasking value (severity, urgency, information gain, corroboration, escalation, market) — so imageable, decision-relevant events (e.g. a high-severity escalating strike) rise and non-observable news noise sinks. This is NOT the saturated geoint_score." - changed
Input schema / properties / sort / enumPrevious value: -[ - "severity", - "recent", - "sources" -]New value: +[ + "severity", + "recent", + "sources", + "geoint" +] - added
Input schema / properties / taskableOnlyAdded value: +{ + "description": "Keep only signals whose coordinate is search_ready — GEO-READY ONLY: drops country centroids, ADM1 mismatches, reporting-dateline fallbacks and unresolved fixes (intelligence.geo_validation.search_ready). It does NOT imply observable or quality-passed, so not-observable / insufficient-detail / quality-failed signals can still appear. For automated imagery tasking use collectionReadyOnly (or combine with observability:\"observable\").", + "type": "boolean" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "meta": { + "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable.", + "type": "object" + }, + "signals": { + "items": { + "type": "object" + }, + "type": "array" + }, + "summary": { + "description": "One-line natural-language summary of the result, ready to relay to a user.", + "type": "string" + } + }, + "required": [ + "meta", + "signals" + ], + "type": "object" +}
- Changed
query_stats1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "meta": { + "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable.", + "type": "object" + }, + "stats": { + "type": "object" + }, + "summary": { + "description": "One-line natural-language summary of the result, ready to relay to a user.", + "type": "string" + } + }, + "required": [ + "meta", + "stats" + ], + "type": "object" +}
- Added
rank_imaging_priority - Changed
search_imagery6 fields changed- added
Input schema / properties / eventAoiAdded value: +{ + "description": "Event AOI bbox [minLon, minLat, maxLon, maxLat] (WGS84). Drives target_relation.intersects_event_aoi / event_aoi_coverage_ratio.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" +} - added
Input schema / properties / eventDateAdded value: +{ + "description": "Event date, YYYY-MM-DD (UTC). When set, each scene is tagged timing=pre/post/same_day_unknown and the search window is widened to the canonical pre/post span, so meta reports has_pre_baseline / has_post / bracketing_available / window_status; for sentinel-1-grd it also reports sar_pair_status (ready | not_ready | indeterminate_event_time) + orbit_note.", + "type": "string" +} - added
Input schema / properties / eventPointAdded value: +{ + "description": "Event point [lon, lat] (WGS84). When set, each scene reports target_relation.covers_event_point / usable_for_event so a scene that only clips the wide bbox is not presented as covering the event.", + "items": { + "type": "number" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" +} - added
Input schema / properties / eventTimestampAdded value: +{ + "description": "Full event timestamp (ISO 8601) when known — promotes same-day scenes from same_day_unknown to pre/post by time.", + "type": "string" +} - changed
Input schema / properties / responseFormat / descriptionPrevious value: -"Per-scene field detail. \"concise\" (default) or \"detailed\" (adds footprint, constellation, polarizations)."New value: +"Per-scene field detail. \"concise\" (default) returns id, collection, datetime, timing, cloud_cover, platform, orbit_state, relative_orbit, instrument_mode, product_type, coverage_ratio, covers_event_point, usable_for_event, stac_item_url, preview. \"detailed\" adds the full footprint bbox/geometry, the complete target_relation, constellation, polarizations, absolute_orbit, incidence_angle, and non-signed asset hrefs." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "meta": { + "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable.", + "type": "object" + }, + "scenes": { + "items": { + "type": "object" + }, + "type": "array" + }, + "summary": { + "description": "One-line natural-language summary of the result, ready to relay to a user.", + "type": "string" + } + }, + "required": [ + "meta", + "scenes" + ], + "type": "object" +}
- Added
survey_observable_events
2 tool updates
v0.1.2- Changed
query_hotspots1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max source points to bin. Defaults to 500."New value: +"Max source points sampled before grid-binning — NOT the number of cells returned. Defaults to 500 (the max). Lower values sample fewer events and fragment clusters (each cell trends toward count 1), so leave at the default for a representative density map."
- Changed
query_signals3 fields changed- changed
Input schema / properties / observability / descriptionPrevious value: -"Keep only signals with this satellite observability (intelligence.satellite_observability)."New value: +"Keep only signals with this satellite observability — whether a physical mark is imageable at all (intelligence.satellite_observability)." - changed
Input schema / properties / openData / descriptionPrevious value: -"Keep only signals with this open-data sufficiency (intelligence.open_data_sufficiency)."New value: +"Keep only signals with this open-data sufficiency — free imagery is enough vs commercial tasking recommended (intelligence.open_data_sufficiency)." - changed
Input schema / properties / updatedSince / descriptionPrevious value: -"Differential fetch: only signals (re)enriched at/after this ISO 8601 timestamp. Ignores the date window."New value: +"Differential fetch: only signals (re)enriched at/after this ISO 8601 timestamp. Ignores the date window. Response signals carry last_updated_at."
8 tool updates
v0.1.0- First observed
ask_analyst - First observed
assess_signal - First observed
get_usage - First observed
get_world_brief - First observed
query_hotspots - First observed
query_signals - First observed
query_stats - First observed
search_imagery
TDQS
Most tools have clearly distinct purposes across signal querying, imagery planning, analyst Q&A, and monitoring. A few adjacent tools (e.g., plan_event_imagery vs search_imagery, rank_imaging_priority vs survey_observable_events) require careful reading of descriptions, but the boundaries are explicit enough to avoid gross misselection.
All tool names follow a consistent verb_noun snake_case pattern (get_, query_, create_, delete_, list_, plan_, rank_, survey_, predict_, assess_, ask_), with no camelCase or mixed conventions.
At 20 tools, the server is broad in scope but the count is on the heavy side. Each tool serves a distinct function, but the overall surface feels dense compared to a typical well-scoped server (3-15 tools). No redundancy, but the large number increases cognitive load.
The server covers core workflows well, but lifecycle coverage is incomplete: monitored areas have create/list/get but no delete or update, and standing orders lack a true update (only pause/resume via delete_standing_order). This creates dead ends for users wanting to modify or remove monitoring. Signal querying and imagery planning are thorough.
Maintenance
Related MCP Connectors
- earthOAuthcom.mireye
MCP server for Mireye Earth — federal-source-cited geospatial data for any MCP-aware agent.
Real-time planetary signal engine and Model Context Protocol (MCP) server for autonomous AI agents.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Geospatial AI MCP server — satellite imagery, embeddings, weather, GNS governance
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that gives any agent real-time news plus the contextual intelligence to use it well — tone distribution, emerging stories, narrative shifts, spike alerts, and tone-over-time charts — powered by Overtone's publisher network. Works with any MCP-compatible client: Claude Desktop, Claude Code, Cursor, Windsurf, Codex, Kimi K2, and more.71MIT
- AlicenseCqualityCmaintenanceMCP server for the Geopera geospatial data platform that enables AI agents to discover imagery, place and manage orders, and run analytics using the same API as other Geopera clients.100MIT
- AlicenseNot gradedqualityCmaintenanceProduction-grade MCP server wrapping SkyFi's satellite imagery platform API. Enables AI agents to conversationally search, price, order, and monitor satellite imagery through the Model Context Protocol.MIT
- FlicenseBqualityBmaintenanceA Python MCP server for discovering and analyzing Sentinel-2 L2A imagery, enabling AI agents to search scenes, check quality, and compute spectral indices like NDVI, NDWI, and NBR from remote COG windows.4-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Off-Nadir-Lab/offnadir-delta-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server