look_at
Satellite still of a place — a Sentinel-2 ARCHIVE image (the screen as a picture). Pose = lat/lng OR
entity_type+id (anchor); same pose family as look_from. Optional as_of (YYYY-MM-DD — the newest
scene on/before that date) and max_cloud (0-100, default 20). AGENT KEYS ONLY (a browser session is
refused BEFORE any charge). Metered on its own price line — quote it first with
billing_quote("/api/v1/look.at") — and refunded in full if no image is delivered. RETURNS THE IMAGE (jpeg) as MCP image content PLUS structuredContent provenance from the
scene's headers — read these and claim nothing stronger: observed_at is the SCENE's date, NEVER the
request's; source_tier is the PROVIDER's, never the pin's; freshness is "archive", never "live";
plus cloud_cover, gsd, extent_km, attribution, cache, entity_cap_consumed (0), and the charge:
price_charged_joules (the all-in price) + metering_attempt / metering_status — the settle truth for an
IMAGE, which has no JSON body to carry a metering block (the X-Metering-Status header: completed = paid ·
settled_zero · settle_failed = delivered but UNPAID · released · cached_replay). A cloudy or
MISSING scene returns available:false + freshness:"unavailable" and is REFUNDED IN FULL — an
unavailable RESULT, not an error, and NEVER a fabricated image; that JSON carries top-level charged_joules
(0 — refunded) and the metering block described below.
⚠ CHARGING: the meter RESERVES before the query runs and SETTLES after delivery for what was actually
delivered (an empty result settles to 0; a partial traversal settles for the hops delivered; a 4xx
releases the reservation). An abandoned or timed-out call still settles once the backend delivers.
A replay is served free only for the SAME credential + SAME idempotency key + SAME request within
15 minutes — a different payer is a different payer. Every call through this relay carries a fresh
key, so a retry here is always a new charge. Price with billing_quote first; verify any charge
with the billing_attempts tool (own wallet: reserved vs settled, per attempt).
WHAT YOU PAID: the JSON response carries a top-level charged_joules — the all-in PRICE of this call —
and a metering block written AFTER the settle has run: {attempt_id, settlement, settled_joules, check}.
metering.settlement is whether you PAID: settled · settled_zero (empty result, nothing moved) ·
settle_failed (delivered but UNPAID — the wallet is then locked until it clears; the next metered call
402s naming the attempt, the amount and what clears it) · released (4xx/5xx, nothing moved) · unknown.
settled_joules is what actually left the wallet (0 unless settled). A cached replay carries no block.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| lat | No | ||
| lng | No | ||
| as_of | No | ||
| max_cloud | No | ||
| entity_type | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||