SkyFi MCP Server
Integration with Google ADK and Gemini for building AI agents that use SkyFi satellite imagery tools.
Integration with LangChain framework for building AI agents that use SkyFi satellite imagery tools.
Integration with LangGraph framework for building stateful AI agents that use SkyFi satellite imagery tools.
Integration with OpenAI for using SkyFi MCP tools via OpenAI's API.
Integration with Vercel AI SDK for building AI applications that consume SkyFi MCP tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SkyFi MCP Serversearch for satellite imagery of New York City from last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SkyFi MCP Server
Official Model Context Protocol server for the SkyFi satellite imagery platform. Enables any AI agent to search, price, order, and monitor satellite imagery through conversational tool calls.
Quick Start (< 10 minutes)
1. Install
npm install skyfi-mcp@0.1.02. Configure
Create ~/.skyfi/config.json:
{ "api_key": "sk_your_skyfi_api_key" }Or set the environment variable:
export SKYFI_API_KEY=sk_your_key3. Run (Local STDIO)
npx skyfi-mcp4. Connect
Claude Code / Claude Desktop:
{
"mcpServers": {
"skyfi": {
"command": "npx",
"args": ["skyfi-mcp"],
"env": { "SKYFI_API_KEY": "sk_your_key" }
}
}
}Claude.ai (remote MCP — no install needed):
Open Claude.ai → Settings → Integrations → Add MCP Server
Enter the server URL:
https://skyfi-mcp.skyfi-xian.workers.dev/mcpAdd your SkyFi API key as a custom header:
X-SkyFi-API-Key: sk_your_keySave — Claude will automatically exchange your key for a session token
Remote (any framework):
# First request: send your API key to get a session token
POST https://skyfi-mcp.skyfi-xian.workers.dev/mcp
Header: X-SkyFi-API-Key: sk_your_key
→ Response includes X-MCP-Token header
# All subsequent requests: use the session token
POST https://skyfi-mcp.skyfi-xian.workers.dev/mcp
Header: X-MCP-Token: mcp_sess_<your_token>Your raw API key is only sent once. The session token has a 4-hour idle TTL (extends on each request) and 7-day max lifetime.
Related MCP server: SkyFi MCP Server
Standout Differentiators
Reliability scorecard: generated operational snapshot at
mcp-docs/STATUS.md(npm run status:refresh)Golden demo workflow: maritime monitoring showcase at
mcp-docs/GOLDEN_DEMO_MARITIME.mdCost intelligence tool:
recommend_archive_purchaseranks options by price/quality strategy with budget filtering
Authentication
Token Exchange (Remote)
The remote server uses a token exchange model to protect your SkyFi API key:
Initialize — Send
X-SkyFi-API-Keyon your first request. The server validates it and returns anX-MCP-Tokensession token.Use — All subsequent requests use
X-MCP-Token. Your raw API key never appears in agent traffic again.Expire — Session tokens expire after 4 hours idle or 7 days max. Re-send your API key to get a new one.
Service Tokens (Pipelines)
For automated pipelines that run unattended, create a long-lived service token:
# Call the create_service_token tool with an active session
→ Returns: mcp_svc_<token> (90-day lifetime, no idle expiry)Service tokens support optional scopes (restrict which tools can be called) and budget caps (server-side spend limits).
Local (STDIO)
Local mode reads your API key from ~/.skyfi/config.json or SKYFI_API_KEY env var at startup. No token exchange needed.
Tools (19)
Category | Tools |
Geocoding |
|
Discovery |
|
Pricing |
|
Cost Intelligence |
|
Ordering |
|
History |
|
Monitoring |
|
Order Safety
Orders use a two-step confirmation flow enforced server-side:
Quote → returns price and
quote_id(valid 15 min)Execute → requires
quote_id+user_confirmed: true+idempotency_key
The execute_* tools cannot be called without all three fields. This is enforced at the schema level and cannot be bypassed by prompt injection.
Security
API key protection — Raw key sent once, exchanged for scoped token. Key encrypted at rest (AES-256-GCM) with derived keys (HKDF).
Key hashing — Usage metrics use HMAC-SHA-256 with a separate derived key. Not reversible without the server secret.
Per-request isolation — Each request creates an independent SkyFi client. No shared mutable auth state. One tenant's credentials cannot leak to another.
Rate limiting — Per-key: 100 calls/min, 20/10s burst. Daily caps: 10 orders, $10K spend.
Service token scoping — Optional tool restrictions and budget caps, enforced server-side.
Prompt injection defense — All inputs treated as data. String length caps (500 chars). Control character stripping. Order confirmation enforced server-side, not in prompts.
Framework Support
Framework | Transport | Guide |
Google ADK | STDIO / HTTP+SSE | |
LangChain / LangGraph | STDIO / HTTP+SSE | |
Vercel AI SDK | HTTP+SSE | |
Claude Web | HTTP+SSE | |
OpenAI | HTTP+SSE | |
Claude Code | STDIO / HTTP+SSE | |
Gemini | HTTP+SSE |
Compatibility matrix and transport expectations: docs/integrations/COMPATIBILITY.md
Simulation Mode
Test the full order flow without placing real orders:
SKYFI_SIMULATE=true npx skyfi-mcpOr per-request: pass "simulate": true in quote/execute tool calls.
Deployment
Cloudflare Workers (live):
https://skyfi-mcp.skyfi-xian.workers.dev/mcpSelf-deploy:
npx wrangler deployDocker:
docker compose upDevelopment
npm install
npm run build # Build with tsup
npm test # Run test suite
npm run typecheck # TypeScript check
npm run lint # ESLintLicense
MIT
Available Tools
19 toolscheck_capture_feasibilityA
Analyze feasibility for a tasking order: satellite availability, revisit window, cloud cover forecast, and a plain-language summary. You MUST call this and present its output to the user before placing any tasking order. Precondition: call this before quote_tasking_order.
| Name | Required | Description | Default |
|---|---|---|---|
| aoi | Yes | GeoJSON Polygon for the tasking area | |
| sensor_type | Yes | Sensor type for tasking | |
| desired_date_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses that the tool must be called before tasking orders and that its output must be presented to the user. It also establishes sequencing with quote_tasking_order. While it doesn't explicitly state read-only status, the tool's name and role imply a non-mutating analysis, and the mandatory-call behavior is a significant disclosure.
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, each earning its place. The first sentence delivers the core function and output summary; the second imposes the mandatory usage and precondition. There is no filler or 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?
The description covers the tool's role, output contents, and mandatory usage, which is sufficient for a 3-parameter tool. It lacks explicit read-only disclosure and error behavior, but the sibling context and the tool's name make the non-mutating nature clear. Overall, it gives a complete operational picture for an agent.
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 describes aoi and sensor_type, and the nested desired_date_range has property-level descriptions. The description adds no parameter-specific guidance beyond listing high-level analysis outputs. With moderate schema coverage (67%) and no compensating detail, the parameter semantics are adequate but not enriched.
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 with a specific verb ('Analyze') and resource ('feasibility for a tasking order'), and enumerates the components (satellite availability, revisit window, cloud cover forecast, plain-language summary). This distinguishes it from sibling order-related tools like quote_tasking_order and execute_tasking_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 explicit usage guidance: 'You MUST call this and present its output to the user before placing any tasking order' and identifies a specific precondition: 'call this before quote_tasking_order.' This clearly indicates when to use the tool relative to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhook_subscriptionA
Register a webhook endpoint to receive push notifications when new imagery matching a monitoring rule is available. Requires an active monitor_id from setup_aoi_monitoring.
| Name | Required | Description | Default |
|---|---|---|---|
| secret | No | Shared secret for webhook signature verification | |
| monitor_id | Yes | Monitor ID from setup_aoi_monitoring | |
| endpoint_url | Yes | HTTPS URL to receive webhook notifications |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full behavioral disclosure burden. It mentions the monitor_id requirement but omits key behavioral details such as return values, idempotency, error handling, or what side effects (e.g., immediate verification request) might occur.
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 action and purpose, and the prerequisite is valuable context. No redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description clearly states purpose and prerequisite, but for a creation operation with no output schema, it should also mention expected return (e.g., subscription ID) and potential error conditions. It is partially complete but missing these elements.
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 description adds no extra semantic beyond what the schema already states (e.g., monitor_id source is already in 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 specifies the action ('Register') and resource ('webhook endpoint') with its purpose ('receive push notifications'), and distinguishes from sibling setup_aoi_monitoring by referencing monitor_id dependency.
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 a prerequisite ('Requires an active monitor_id from setup_aoi_monitoring'), giving clear context for when to use the tool. However, it does not mention when not to use it or alternatives like polling via get_notification_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_archive_priceA
Returns itemized pricing for a given archive order (scene, AOI, resolution) before commitment. Use this to give the user a cost estimate before generating a binding quote.
| Name | Required | Description | Default |
|---|---|---|---|
| aoi | Yes | GeoJSON Polygon for the order area | |
| scene_id | Yes | Scene ID from search results | |
| resolution_tier | No | Resolution tier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the operation is pre-commitment and returns an itemized estimate, which is useful behavioral context. However, it does not mention side effects, authentication, or other potential behaviors beyond the fact that it is not a binding commitment.
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 main action ('Returns itemized pricing'), and every word earns its place. The first sentence describes the function, the second provides usage guidance. No unnecessary 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?
Given the tool's moderate complexity (nested aoi object, 3 params, no output schema), the description covers the essential aspects: what it does, key inputs, and when to use it. It could additionally describe the output structure or potential limitations, but the existing information is reasonably complete for a pricing estimate tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the parameters are already well-documented. The description merely mentions 'scene, AOI, resolution' in the text, which adds no new meaning beyond what the schema provides. 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 the tool returns itemized pricing for an archive order with explicit parameters (scene, AOI, resolution). It distinguishes itself from siblings by emphasizing 'before commitment' and 'cost estimate' as opposed to a binding quote, making its role unique.
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 says 'Use this to give the user a cost estimate before generating a binding quote,' which gives clear context for when to use it. It implies exclusion of binding quotes, though it does not name the alternative tool (e.g., quote_archive_order) directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_tasking_costA
Estimate the cost for a new satellite capture tasking order. Use this to give the user a cost preview before checking feasibility or generating a quote.
| Name | Required | Description | Default |
|---|---|---|---|
| aoi | Yes | GeoJSON Polygon for the tasking area | |
| sensor_type | Yes | Sensor type for tasking | |
| resolution_tier | No | Desired resolution tier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. The term 'cost preview' implies non-committal estimation, which adds some context. However, it does not describe return format, potential side effects, or any limitations, leaving important operational details undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with zero waste. It front-loads the main purpose ('Estimate the cost...') and then gives usage timing, making it easy to parse.
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 tool has no output schema and no annotations, and the description omits what the estimated cost output looks like or any additional behavioral details. While the schema thoroughly documents parameters, the description could clarify the return format or optionality for a more complete understanding.
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 has 100% description coverage for all three parameters (aoi, sensor_type, resolution_tier), providing clear semantics. The description adds no additional parameter-specific information, so the baseline score 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 the tool's purpose with a specific verb ('Estimate') and resource ('new satellite capture tasking order'). It distinguishes from sibling tools like estimate_archive_price and quote_tasking_order by focusing on the cost preview stage.
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 instructs when to use the tool: 'before checking feasibility or generating a quote'. It provides clear context but does not enumerate alternatives or exclusions, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_archive_orderADestructive
Place an archive order using a confirmed quote. Preconditions: (1) you must have a valid quote_id from quote_archive_order, (2) the user must have explicitly confirmed they want to proceed, (3) you must provide an idempotency_key (UUID) for safe retries. Do NOT call this tool autonomously — always wait for user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| aoi | Yes | GeoJSON Polygon for the order area | |
| label | No | Optional label for this order | |
| archive_id | Yes | Archive ID from search_archive results | |
| user_confirmed | Yes | Must be true — confirms the user has reviewed the price and approved the order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, which signals a mutating action. The description adds behavioral context by specifying that this is an irreversible commit requiring explicit user confirmation and safe retry with an idempotency_key. However, it does not explicitly disclose the financial impact or cancellation policy beyond 'place an order,' and the mention of idempotency_key is not backed by an actual parameter in the schema.
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, front-loaded with the purpose, followed by preconditions in a numbered list and a strong usage warning. Every sentence adds value and the structure makes it easy to scan. No redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the approval flow and preconditions, which is essential for a committed order tool. However, it does not explain what the agent should expect after execution (e.g., order ID, status) and, more importantly, the mismatched parameters (quote_id, idempotency_key) create a gap between the stated context and the actual schema. With no output schema, the description should at least align with the input contract, which it fails to do.
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?
Although the schema has 100% description coverage, the tool description introduces parameters (quote_id, idempotency_key) that do not exist in the input schema. This can mislead the agent into thinking it must provide fields that are not accepted. The description does not add useful meaning to the actual parameters (archive_id, aoi, label, user_confirmed) beyond what the schema already provides, and the mismatch actively harms parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Place an archive order using a confirmed quote.' This distinguishes it from quote_archive_order (which creates a quote) and execute_tasking_order (which places a tasking order). However, the mention of 'quote_id' is confusing because the input schema does not include a quote_id parameter, slightly muddying the purpose.
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 explicit preconditions and usage boundaries: a valid quote_id is required, user confirmation is mandatory, and an idempotency_key is needed for retries. It explicitly states 'Do NOT call this tool autonomously — always wait for user confirmation,' and references 'quote_archive_order' as the source of the quote. This gives excellent when-to-use versus when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_tasking_orderADestructive
Place a tasking order using a confirmed quote. Preconditions: (1) valid quote_id from quote_tasking_order, (2) explicit user confirmation, (3) idempotency_key (UUID). Do NOT call this tool autonomously — always wait for user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| aoi | Yes | GeoJSON Polygon for the tasking area | |
| label | No | Optional label for this order | |
| resolution | Yes | Required image resolution | |
| window_end | Yes | Capture window end (ISO 8601) | |
| product_type | Yes | Satellite product type | |
| window_start | Yes | Capture window start (ISO 8601) | |
| user_confirmed | Yes | Must be true — confirms the user has reviewed feasibility and pricing and approved | |
| max_cloud_cover_pct | No | Maximum acceptable cloud cover % |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint annotation already signals mutating behavior. The description adds meaningful context: it must not be called autonomously, requires user confirmation, and needs an idempotency key. This goes beyond the annotation, though it doesn't cover failure modes or return behavior.
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: the first states the purpose, the second lists preconditions and a warning. It is front-loaded, concise, and every sentence carries critical information 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?
For a complex tool with 8 parameters, the description omits that quote_id and idempotency_key are not in the schema, creating a significant invocation gap. It also does not clarify the order lifecycle or confirmation details. The schema fills in parameter semantics, but the mismatch hurts overall 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?
Although schema coverage is 100%, the description references quote_id and idempotency_key as essential preconditions, but these fields are absent from the input schema. This mismatch confuses parameter understanding and the description does not map actual schema parameters to the preconditions, reducing its added value.
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 a specific verb 'Place' with the resource 'tasking order' and clarifies the requirement for a confirmed quote. This distinguishes it from sibling tools like execute_archive_order and quote_tasking_order, making the purpose unambiguous.
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 lists preconditions: valid quote_id from quote_tasking_order, explicit user confirmation, and idempotency_key. It also provides a clear exclusion: 'Do NOT call this tool autonomously — always wait for user confirmation.' This is strong when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_open_dataA
Browse freely available datasets on SkyFi, filterable by provider and region. Use this when the user asks about free or open satellite data.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| region | No | Filter by region name | |
| provider | No | Filter by data provider name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the action ('browse') and filtering capabilities but does not disclose pagination behavior, return format, or whether the operation is read-only. The schema indicates page and limit parameters, but the description adds no behavioral nuance beyond the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences. The first defines the tool's function, the second gives usage context. No wasted words or redundant restatements of the 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?
With no output schema and no annotations, the description leaves the return value implicit. It correctly identifies the tool's purpose and filter options, but does not explain what the response looks like or that pagination is possible. This is a minor gap for a simple browsing tool, but could be more informative.
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 50% (region and provider have descriptions). The tool description mentions both provider and region as filters, adding slight context, but page and limit are left undefined in both schema and description. For a list-browsing tool, page/limit are self-explanatory, so this is adequate but not exceptional.
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 a specific verb ('Browse') and resource ('freely available datasets on SkyFi'), and clarifies the distinction from siblings by emphasizing 'free or open' data. This clearly differentiates it from tools like search_archive or purchase-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit usage directive: 'Use this when the user asks about free or open satellite data.' This gives a clear trigger condition, though it does not explicitly name alternative tools or exclusion criteria, which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_order_imageA
Return download URL and metadata for a completed order's imagery. Use this when the user wants to download or access imagery from a delivered order.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order ID of a completed order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of transparency. It indicates a read-only action by returning a URL and metadata, but does not disclose any potential caveats like URL expiration, authentication, or errors. This is acceptable for a simple fetch tool but leaves gaps.
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 primary purpose and followed by a usage directive. Every word is purposeful with no redundancy or unnecessary detail.
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 single-parameter read tool with no output schema, the description gives sufficient context: it states the return type (download URL and metadata), the condition (completed order), and the use case. While it could elaborate on the metadata structure, it is functionally complete for an agent to invoke.
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 provides a description for order_id ('Order ID of a completed order') with 100% coverage. The tool description repeats the 'completed/delivered' constraint but adds no additional parameter meaning beyond the schema, so the baseline of 3 applies.
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 action: 'Return download URL and metadata for a completed order's imagery.' It specifies a specific verb and resource, and the reference to 'imagery' distinguishes it from sibling tools like get_order_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?
The description explicitly says 'Use this when the user wants to download or access imagery from a delivered order,' providing a direct condition for when the tool should be used. This gives clear guidance without needing to reference alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocodeA
Forward geocoding: accepts a human-readable location string (e.g. 'Port of Rotterdam') and returns lat/lng coordinates. Use this when the user mentions a place by name and you need coordinates for search or ordering tools.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A human-readable location string, e.g. 'Port of Rotterdam' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states the core behavior (accepts string, returns lat/lng) but does not disclose potential failure modes (e.g., ambiguous locations, no match) or the return format (single pair vs. list of candidates). This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place: the first defines the operation, the second gives a usage scenario. No fluff, front-loaded with the key term.
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 simple one-parameter tool with no annotations and no output schema, the description is complete enough: it explains what, how, and when. Minor omission is the exact output format, but that's not critical for a basic geocode.
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 fully describes the 'query' parameter with a clear example, and the description repeats that example but adds no new semantic meaning beyond the schema. Baseline 3 is appropriate given 100% 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 starts with 'Forward geocoding' which is a specific verb+resource pair, and clearly states it accepts a location string and returns coordinates. It distinguishes from the sibling reverse_geocode by explicitly naming 'Forward' versus implicitly reverse.
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 gives a clear when-to-use scenario: 'when the user mentions a place by name and you need coordinates for search or ordering tools.' However, it does not explicitly exclude reverse geocoding or mention the alternative sibling, 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.
get_bounding_boxA
Returns a bounding box polygon for a named place, directly usable as an AOI in search and order tools. Use this to convert a place name into a GeoJSON polygon for subsequent tool calls.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A named place to look up a bounding box for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses only the basic return type ('GeoJSON polygon') and the intended downstream use, but does not mention error behavior, side effects, authentication, or limitations. This is minimal behavioral disclosure.
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 the primary action, and no filler. Every word contributes to understanding the tool's purpose and usage.
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 simple single-parameter tool, the description is almost complete: it states the return type (GeoJSON polygon) and the use case (AOI for search/order). It lacks details like error handling or coordinate reference system, but these are not critical for an AI agent to invoke the tool 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?
The input schema already fully documents the single 'query' parameter with a clear description ('A named place to look up a bounding box for'). The tool description adds no new parameter-specific meaning, so the baseline of 3 applies.
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 'Returns a bounding box polygon for a named place' with a specific verb and resource. The phrase 'directly usable as an AOI in search and order tools' adds a distinguishing use-case, differentiating it from siblings like geocode that return coordinates rather than polygons.
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 instructs 'Use this to convert a place name into a GeoJSON polygon for subsequent tool calls,' providing clear context for when to invoke it. It does not list explicit exclusions or alternatives, but the usage intent is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notification_statusA
Check delivery history and status for webhook subscriptions. Use this to verify notifications are being delivered or to diagnose delivery failures.
| Name | Required | Description | Default |
|---|---|---|---|
| monitor_id | No | Filter by monitor ID | |
| subscription_id | No | Filter by subscription ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only operation ('Check') and indicates the tool returns historical delivery information, but it does not disclose details such as return format, pagination, required permissions, or rate limits. For a simple getter, this is adequate but could be richer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first sentence states the purpose, and the second gives a concrete use case. No unnecessary words or repetition; every sentence earns its place.
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 tool has two optional filter parameters and no output schema, but the description does not mention that filtering by monitor or subscription is possible, nor does it describe what the returned status/history looks like. This leaves gaps for an agent trying to use the tool effectively, though the core purpose is clear.
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 fully describes both parameters (monitor_id and subscription_id) with 'Filter by...' descriptions, providing 100% coverage. The tool description adds no parameter-specific meaning beyond the schema, so the baseline score 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 the tool's function: 'Check delivery history and status for webhook subscriptions.' This uses a specific verb ('Check') and a specific resource ('delivery history and status for webhook subscriptions'), distinguishing it from siblings like create_webhook_subscription (creation) and get_order_status (order 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?
The description provides explicit usage context: 'Use this to verify notifications are being delivered or to diagnose delivery failures.' This tells the agent when to invoke the tool, though it does not explicitly name alternatives or exclusion cases. The guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_statusA
Return current status and progress for an order by ID. Use this to check on a previously placed order.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order ID to check status for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavioral traits. It only states that it returns status and progress, which is essentially a paraphrase of the tool name. It does not mention whether the operation is read-only (though implied), any required permissions, potential errors, or what happens for invalid order IDs. This is a significant gap given the lack of 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, with the primary action stated first and the usage context second. It is concise, front-loaded, and contains no unnecessary information. Every sentence earns its place.
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 simple single-parameter get tool with no output schema, the description covers purpose and usage but lacks detail about the return structure or error behavior. Since there is no output schema, the agent may not know what 'status' and 'progress' look like, but the tool's simplicity somewhat mitigates this. Overall, it is adequate but has clear gaps.
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 fully describes the single parameter 'order_id' with 100% coverage. The description adds contextual meaning by specifying that it is for 'a previously placed order,' which helps the agent understand that the ID refers to an existing order. This adds slight value beyond the schema's basic description.
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: 'Return current status and progress for an order by ID.' The verb 'return' is specific, and the resource is clearly an order. It conveys scope (status and progress) but does not explicitly distinguish itself from sibling tools like 'list_orders' or 'get_notification_status', though the focus on order status is implied.
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 direct usage instruction: 'Use this to check on a previously placed order.' This provides clear context for when to use the tool. It does not mention exclusions or alternative tools, but the context is explicit enough for an agent to select this tool for checking order status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersA
List the user's historical orders with filters for date range and status. Use this when the user asks about their past orders or order history.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| status | No | Filter by order status | |
| date_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It clarifies the read-only scope by saying 'user's historical orders', but it doesn't mention pagination behavior, default ordering, or response shape. This is adequate for a simple list tool but not rich.
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 front-loaded, with two sentences. The first states the purpose, and the second adds usage guidance. There is slight redundancy between 'historical orders' and 'past orders', but overall it is 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 4 parameters including a nested object and no output schema, the description omits critical details like pagination semantics and return format. The agent cannot fully understand how to use page/limit or what the response will contain, so the tool is under-described.
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 only 25%, and the description merely mentions 'filters for date range and status', which is already evident from the schema. It doesn't explain the meaning of page and limit parameters, which are effectively undocumented. The description adds little 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 verb 'List' and the resource 'user's historical orders', with specific filters for date range and status. This distinguishes it from sibling tools like get_order_status, which presumably targets a single 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?
It provides a direct use case: 'Use this when the user asks about their past orders or order history.' However, it doesn't explicitly mention when not to use it or point to alternatives like get_order_status for single order status, so it's clear but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_archive_orderA
Generate a binding quote for an archive order. Returns a quote_id (valid 15 minutes) and a human-readable summary of what will be purchased and at what price. Present this to the user and wait for explicit confirmation before calling execute_archive_order.
| Name | Required | Description | Default |
|---|---|---|---|
| aoi | Yes | GeoJSON Polygon for the order area — must overlap the archive footprint | |
| archive_id | Yes | Archive ID from search_archive results (archiveId field) | |
| overlap_sqkm | Yes | Overlap area in sq km from search results (overlapSqkm) | |
| price_per_sqkm_usd | Yes | Price per sq km from search results (priceForOneSquareKm) | |
| price_full_scene_usd | Yes | Full scene price from search results (priceFullScene) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the return value (quote_id valid 15 minutes, human-readable summary) and the required confirmation workflow. It does not, however, state whether the quote has server-side side effects or what happens on expiration, but what it does disclose is valuable and goes beyond basic schema information.
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 exceptionally concise—two sentences that are front-loaded with the core purpose. Every clause provides critical information: the binding nature, return format, expiration, and the required confirmation step. No word is wasted.
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 five parameters, no output schema, and no annotations, the description covers the essential context: what the tool returns, how long it's valid, and the required follow-up action. It does not explain parameter inputs, but the schema fully covers those. The description is sufficient for an agent to use the tool correctly, though it could mention error conditions or non-binding alternatives.
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?
All five parameters are fully described in the input schema, so the schema provides 100% coverage. The description adds no additional parameter-specific meaning beyond what the schema already conveys, which meets the baseline expectation for this dimension.
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 with a specific verb ('Generate') and resource ('binding quote for an archive order'). It distinguishes itself from the sibling execute_archive_order by indicating the quote must be confirmed before execution, making its role in the workflow unambiguous.
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 usage context: generate a quote, present it to the user, and wait for explicit confirmation before calling execute_archive_order. While it implies this is a pre-execution step, it does not explicitly mention when to use this instead of the similarly named estimate_archive_price tool, though 'binding' hints at the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_tasking_orderA
Generate a binding quote for a new satellite capture tasking order. Returns a quote_id and summary. Precondition: call check_capture_feasibility first and present results to the user. Present this quote to the user and wait for confirmation before calling execute_tasking_order.
| Name | Required | Description | Default |
|---|---|---|---|
| aoi | Yes | GeoJSON Polygon for the tasking area | |
| resolution | Yes | Required image resolution | |
| window_end | Yes | Capture window end (ISO 8601, e.g. 2026-04-30T23:59:59+00:00) | |
| product_type | Yes | Satellite product type | |
| window_start | Yes | Capture window start (ISO 8601, e.g. 2026-04-01T00:00:00+00:00) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the transparency burden. It discloses that the quote is 'binding', returns a quote_id and summary, and requires feasibility check and user confirmation before execution. This adds meaningful behavioral context beyond basic functionality, though it doesn't detail cancellation or expiration policies.
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: purpose and return value, precondition, and next action. Every sentence adds essential information without redundancy or filler. It is well-structured and front-loaded with the primary 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 no output schema, the description mentions the return (quote_id and summary) and the critical workflow. It references sibling tools (check_capture_feasibility, execute_tasking_order) for context. Minor gaps like error cases or quote expiration could be added, but the description covers the essential usage pattern adequately.
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 parameters are fully documented in the schema (aoi, resolution, product_type, window_start, window_end). The description does not add additional parameter-specific semantics, but the baseline of 3 is appropriate because the schema carries the detail.
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 specifies a clear verb with a resource: 'Generate a binding quote for a new satellite capture tasking order.' It distinguishes this from sibling tools like quote_archive_order (archive orders) and estimate_tasking_cost (non-binding estimates) by using 'binding quote' and 'capture tasking 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?
Explicit workflow guidance is provided: 'Precondition: call check_capture_feasibility first and present results to the user.' It also states the follow-up: 'Present this quote to the user and wait for confirmation before calling execute_tasking_order.' This clearly indicates when to use the tool and what to do before/after.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_archive_purchaseA
Rank candidate archive scenes by cost, quality, or a balanced strategy. Use this after search/pricing to pick the best scene under an optional budget.
| Name | Required | Description | Default |
|---|---|---|---|
| top_k | No | Number of ranked recommendations to return. | |
| strategy | No | Recommendation strategy. | balanced |
| candidates | Yes | List of candidate scenes with price and quality metadata. | |
| max_budget_usd | No | Optional maximum budget to filter candidates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions ranking strategies and budget but does not state whether this is a read-only analysis, what the return structure looks like, or how the budget filter is applied. The name implies 'recommend' (non-executing), but the description should explicitly clarify side effects (or lack thereof).
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: the first defines the core action, the second gives usage context. Every word contributes, no redundancy or 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?
This tool has 4 parameters, no output schema, and no annotations. The description gives the workflow position and core purpose, but lacks details about the return format (e.g., ranked list of scene IDs with scores), tie-breaking behavior, or handling of invalid candidates. Given moderate complexity, it is minimally adequate but with notable gaps.
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 per guidelines. The description reinforces the strategy enum ('cost, quality, or balanced') and the budget concept, but does not add new parameter details beyond what the schema already provides. It adds modest value by framing the parameters in a business context.
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 clear verb ('Rank') and specific resource ('candidate archive scenes'), and further clarifies the ranking criteria (cost, quality, balanced) and the goal ('pick the best scene under an optional budget'). This distinguishes it from sibling tools like search_archive or execute_archive_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 explicitly says 'Use this after search/pricing', giving a concrete workflow context. It does not explicitly name alternatives or state when not to use, but the instruction clearly positions this tool as a downstream decision step, which is sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reverse_geocodeA
Returns a place name for a given coordinate pair. Use this when you have lat/lng coordinates and need a human-readable location name.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude in decimal degrees | |
| lon | Yes | Longitude in decimal degrees |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the output (a place name) but does not mention error behavior, return format, or any side effects. Since this is a simple lookup, a basic description is acceptable, but it lacks detail about what exactly is returned or how invalid inputs are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The description is front-loaded with the action ('Returns a place name') and immediately gives the usage context. Perfectly concise.
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 simple tool with full parameter schema and no output schema, the description is nearly sufficient. It lacks detail on the output format (e.g., string vs. structured object), but given the simplicity and that the output is just a 'place name,' a 4 is fair.
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%, and the schema already provides clear descriptions for both lat and lon. The description adds only the phrase 'coordinate pair,' which does not enrich parameter understanding beyond what the schema already states. Baseline 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 the tool returns a place name for a coordinate pair, using a specific verb and resource. It distinguishes from sibling geocode (forward geocoding) by emphasizing the direction (lat/lng to place name).
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 the use case: 'Use this when you have lat/lng coordinates and need a human-readable location name.' This implies the alternative (geocode) is for the reverse direction, making the intended usage very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_archiveA
Search available satellite imagery by AOI, date range, resolution, and sensor type. Returns scenes with IDs, capture dates, cloud cover, preview URLs, and per-scene pricing. Use this as the first step when the user wants to find existing imagery.
| Name | Required | Description | Default |
|---|---|---|---|
| aoi | Yes | GeoJSON Polygon defining the area of interest | |
| page | No | ||
| limit | No | ||
| date_range | No | ||
| sensor_type | No | Sensor type filter | |
| resolution_tier | No | Minimum resolution tier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses output contents (IDs, capture dates, cloud cover, preview URLs, pricing) and implies a read-only search, but it lacks details on pagination behavior, defaults, ordering, or error conditions. It provides some useful behavioral context but not a complete picture.
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 compact sentences: the first states the action and filters, the second covers return values and usage. There is no fluff or redundancy; it is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main purpose, key filters, and output fields, which is adequate. However, given the tool's complexity (nested AOI object, pagination, multiple enums) and the absence of output schema or annotations, it leaves important gaps around pagination behavior, parameter formats, and the exact meaning of 'available' imagery. It is sufficient but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, so the description should compensate. It names the main filter dimensions (AOI, date range, resolution, sensor type) but omits pagination parameters (page/limit) entirely. It does not explain enum meanings or input formats beyond what the schema provides, leaving gaps for less obvious parameters.
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 a specific verb 'Search' with a clear resource 'available satellite imagery' and enumerates filter dimensions (AOI, date range, resolution, sensor type). It also lists return contents, distinguishing it from tasking-related siblings like quote_tasking_order and fetch_order_image.
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 final sentence explicitly states usage: 'Use this as the first step when the user wants to find existing imagery.' This gives clear when-to-use context but does not mention alternatives or when not to use, so it falls short of the strongest usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_aoi_monitoringA
Configure recurring monitoring of an AOI for new imagery. Set sensor preferences, resolution requirements, and notification frequency. Use this when the user wants to be alerted when new imagery becomes available over a specific area.
| Name | Required | Description | Default |
|---|---|---|---|
| aoi | Yes | GeoJSON Polygon for the monitoring area | |
| frequency | No | Notification frequency | on_availability |
| sensor_type | No | Preferred sensor type filter | |
| min_resolution_m | No | Minimum resolution in meters |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It adds context about recurring monitoring and notification frequency, but does not disclose side effects such as creating persistent subscriptions, lifecycle management, or potential costs. It provides moderate behavioral insight but leaves gaps.
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 tight sentences: the first names the action, the second clarifies usage. Information is front-loaded, with no redundant or filler words. It is appropriately brief while conveying necessary context.
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 tool has moderate complexity (4 params, nested AOI object, no output schema). The description covers the purpose, key configurable aspects, and a concrete usage scenario. It could also mention expected output or how to manage the monitoring, but given the schema fills in param details, the description is largely 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 coverage is 100%, so the baseline is 3. The description restates that sensor, resolution, and notification frequency are configurable, but does not add deeper semantics beyond what the schema already states. It reinforces the tool's purpose but offers no extra parametric detail.
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 a specific verb-resource pair ('Configure recurring monitoring of an AOI') and clearly specifies the domain (new imagery). It distinguishes this from sibling tools by focusing on ongoing alerting rather than one-time search or order, making its purpose unambiguous.
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 the intended use case with 'Use this when the user wants to be alerted when new imagery becomes available over a specific area.' This gives clear context, though it does not mention when-not to use it or name alternative tools, so it stops short of a fully explicit exclusion/inclusion matrix.
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.
19 tool updates
v0.1.0- First observed
check_capture_feasibility - First observed
create_webhook_subscription - First observed
estimate_archive_price - First observed
estimate_tasking_cost - First observed
execute_archive_order - First observed
execute_tasking_order - First observed
explore_open_data - First observed
fetch_order_image - First observed
geocode - First observed
get_bounding_box - First observed
get_notification_status - First observed
get_order_status - First observed
list_orders - First observed
quote_archive_order - First observed
quote_tasking_order - First observed
recommend_archive_purchase - First observed
reverse_geocode - First observed
search_archive - First observed
setup_aoi_monitoring
TDQS
Scored across 19 tools
Each tool has a clearly distinct purpose, with workflow steps (estimate vs quote vs execute) and resource types (archive vs tasking vs monitoring) cleanly separated. No two tools overlap in function; even related tools like geocode and get_bounding_box serve different output needs.
All tool names follow a consistent verb_noun pattern in snake_case, using descriptive verbs (estimate, quote, execute, get, list) and clear noun targets (archive_order, tasking_order, notification_status). There is no mixing of styles or conventions.
At 19 tools, the set is slightly above the ideal 3-15 range, but the breadth is justified by the platform covering archive ordering, tasking, monitoring, geocoding, and order management. Each tool earns its place in the workflow, and the count feels reasonable rather than bloated.
Core lifecycles are well-covered: search/explore, estimate, quote, execute, track, and retrieve for both archive and tasking orders, plus monitoring setup and geocoding utilities. Minor gaps exist, such as lacking explicit tools to cancel or update monitoring/webhook subscriptions, but these are non-critical and don't create dead ends.
Maintenance
Related MCP Connectors
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Pay-per-use weather, environment, finance, and on-chain intelligence tools for AI agents via x402.
Discover, inspect and run 63,000+ agent tools from one balance. Pay per call, no subscriptions.
Verified, pay-per-use API tools for AI agents through one authenticated connection.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with SkyFi's geospatial data services for ordering satellite imagery, searching data catalogs, checking pricing and feasibility, and monitoring areas of interest.8 npmMIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI agents to search, order, and monitor satellite and geospatial imagery through SkyFi's API, including archive searches, pricing estimates, and order tracking.-
- AlicenseNot gradedqualityDmaintenanceIntegrates SkyFi satellite imagery and OpenStreetMap services with AI applications to enable high-resolution image searching, ordering, and area monitoring. It provides 21 tools for geospatial tasks, including geocoding, tasking quotes, and satellite pass prediction.3MIT

Planet MCPofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with the Planet API for satellite imagery ordering, subscriptions, and data management through natural language.16Apache 2.0