offnadir-delta-mcp 2.1.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/catalog.js CHANGED
@@ -13,7 +13,7 @@
13
13
  * Actual `tools/call` / `resources/read` / `prompts/get` requests are forwarded
14
14
  * to the remote server with the caller's OFFNADIR_DELTA_API_KEY (see index.ts).
15
15
  */
16
- // Generated for Off-Nadir Delta MCP 2.1.0.
16
+ // Generated for Off-Nadir Delta MCP 3.1.0.
17
17
  export const TOOLS = [
18
18
  {
19
19
  "name": "query_signals",
@@ -116,7 +116,7 @@ export const TOOLS = [
116
116
  "equities"
117
117
  ]
118
118
  },
119
- "description": "Markets exposed via a physical/supply channel."
119
+ "description": "Exposed markets (physical/supply channel)."
120
120
  },
121
121
  "placement": {
122
122
  "type": "string",
@@ -127,62 +127,13 @@ export const TOOLS = [
127
127
  ],
128
128
  "description": "map=a point; list=country/province only."
129
129
  },
130
- "observable": {
131
- "type": "string",
132
- "enum": [
133
- "any",
134
- "yes",
135
- "no"
136
- ],
137
- "description": "A satellite could see it."
138
- },
139
130
  "linkedTo": {
140
131
  "type": "string",
141
- "description": "Events sharing a connector: facility:<entity_id>, place:<place_key>, actor:<name>. Plan-gated."
142
- },
143
- "sensors": {
144
- "type": "array",
145
- "items": {
146
- "type": "string",
147
- "enum": [
148
- "sentinel-2",
149
- "sentinel-1-sar",
150
- "viirs-thermal",
151
- "planet",
152
- "vhr-optical",
153
- "multi-sensor",
154
- "none"
155
- ]
156
- },
157
- "description": "Recommended sensor (unassessed passes)."
158
- },
159
- "collectionLevels": {
160
- "type": "array",
161
- "items": {
162
- "type": "string",
163
- "enum": [
164
- "GSD<0.1m",
165
- "GSD<0.5m",
166
- "GSD<1m",
167
- "GSD<10m",
168
- "GSD<100m",
169
- "Impossible"
170
- ]
171
- },
172
- "description": "Resolution needed (unassessed passes)."
132
+ "description": "Shares a connector: facility:<entity_id>, place:<place_key>, actor:<name>. Plan-gated."
173
133
  },
174
- "escalationTrends": {
175
- "type": "array",
176
- "items": {
177
- "type": "string",
178
- "enum": [
179
- "escalating",
180
- "de-escalating",
181
- "stable",
182
- "new"
183
- ]
184
- },
185
- "description": "Trend (unassessed passes)."
134
+ "watchId": {
135
+ "type": "string",
136
+ "description": "Events linked to this watch (list_watches id)."
186
137
  },
187
138
  "sort": {
188
139
  "type": "string",
@@ -191,21 +142,21 @@ export const TOOLS = [
191
142
  "oldest",
192
143
  "geoint"
193
144
  ],
194
- "description": "Default latest. geoint: visible first, then geoint_score, stage (plan-gated; else latest (filter_clamp))."
145
+ "description": "Default latest. geoint (plan-gated): observable, then geoint_score."
195
146
  },
196
147
  "updatedSince": {
197
148
  "type": "string",
198
- "description": "Refolded at/after (ISO); narrows the window."
149
+ "description": "Refolded at/after (ISO)."
199
150
  },
200
151
  "limit": {
201
152
  "type": "integer",
202
153
  "minimum": 1,
203
- "maximum": 500,
204
- "description": "Max rows per page. Default 100."
154
+ "maximum": 50,
155
+ "description": "Page size (default 20). Rows are digests; full rows: full_records."
205
156
  },
206
157
  "cursor": {
207
158
  "type": "string",
208
- "description": "Cursor from meta.next_cursor."
159
+ "description": "From meta.next_cursor."
209
160
  }
210
161
  }
211
162
  },
@@ -225,6 +176,24 @@ export const TOOLS = [
225
176
  "items": {
226
177
  "type": "object"
227
178
  }
179
+ },
180
+ "full_records": {
181
+ "type": "object",
182
+ "description": "The same query on the REST API and the Python SDK, which return every field and larger pages.",
183
+ "properties": {
184
+ "note": {
185
+ "type": "string"
186
+ },
187
+ "rest": {
188
+ "type": "string"
189
+ },
190
+ "sdk": {
191
+ "type": "string"
192
+ },
193
+ "docs": {
194
+ "type": "string"
195
+ }
196
+ }
228
197
  }
229
198
  },
230
199
  "required": [
@@ -403,8 +372,8 @@ export const TOOLS = [
403
372
  "limit": {
404
373
  "type": "integer",
405
374
  "minimum": 1,
406
- "maximum": 100,
407
- "description": "Max scenes. Default 25."
375
+ "maximum": 25,
376
+ "description": "Max scenes. Default 10."
408
377
  }
409
378
  },
410
379
  "required": [
@@ -427,6 +396,24 @@ export const TOOLS = [
427
396
  "items": {
428
397
  "type": "object"
429
398
  }
399
+ },
400
+ "full_records": {
401
+ "type": "object",
402
+ "description": "The same query on the REST API and the Python SDK, which return every field and larger pages.",
403
+ "properties": {
404
+ "note": {
405
+ "type": "string"
406
+ },
407
+ "rest": {
408
+ "type": "string"
409
+ },
410
+ "sdk": {
411
+ "type": "string"
412
+ },
413
+ "docs": {
414
+ "type": "string"
415
+ }
416
+ }
430
417
  }
431
418
  },
432
419
  "required": [
@@ -564,83 +551,6 @@ export const TOOLS = [
564
551
  "destructiveHint": true
565
552
  }
566
553
  },
567
- {
568
- "name": "survey_observable_events",
569
- "description": "Which events a sensor can actually RESOLVE, over the FULL set. **The population is ungated by tasking readiness**, so its total sits above rank_imaging_priority and counts a different unit from query_signals clusters.",
570
- "inputSchema": {
571
- "type": "object",
572
- "properties": {
573
- "sensor": {
574
- "type": "string",
575
- "enum": [
576
- "sentinel-2",
577
- "sentinel-1"
578
- ],
579
- "description": "sentinel-2 = ~10 m optical (needs daylight and clear sky); sentinel-1 = SAR."
580
- },
581
- "bbox": {
582
- "type": "array",
583
- "items": {
584
- "type": "number"
585
- },
586
- "minItems": 4,
587
- "maxItems": 4,
588
- "description": "[west, south, east, north] WGS84. Omit for global."
589
- },
590
- "start_date": {
591
- "type": "string",
592
- "description": "YYYY-MM-DD, inclusive. Default today. Records start 2026-09-23 (earlier: unrecorded, not quiet). Plan-bounded: meta.window_clamp."
593
- },
594
- "end_date": {
595
- "type": "string",
596
- "description": "YYYY-MM-DD, inclusive. Default today; capped at 30 days."
597
- },
598
- "categories": {
599
- "type": "array",
600
- "items": {
601
- "type": "string"
602
- },
603
- "description": "Restrict to these Delta categories."
604
- },
605
- "min_geoint_score": {
606
- "type": "number",
607
- "description": "Drop events below this GEOINT score before surveying."
608
- },
609
- "top_n": {
610
- "type": "number",
611
- "minimum": 1,
612
- "maximum": 50,
613
- "description": "How many observable events to return (default 20)."
614
- }
615
- },
616
- "required": []
617
- },
618
- "outputSchema": {
619
- "type": "object",
620
- "properties": {
621
- "meta": {
622
- "type": "object",
623
- "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable."
624
- },
625
- "summary": {
626
- "type": "string",
627
- "description": "One-line natural-language summary of the result, ready to relay to a user."
628
- },
629
- "survey": {
630
- "type": "object"
631
- }
632
- },
633
- "required": [
634
- "meta",
635
- "survey"
636
- ]
637
- },
638
- "annotations": {
639
- "readOnlyHint": false,
640
- "openWorldHint": false,
641
- "destructiveHint": true
642
- }
643
- },
644
554
  {
645
555
  "name": "predict_satellite_passes",
646
556
  "description": "WHEN a place can next be imaged and by WHAT: 13 free-systematic and commercial-taskable families. **Every pass is a GEOMETRIC access opportunity** — no operator plan is consulted. retrieval_ok:false means timing is UNAVAILABLE, never \"no passes\".",
@@ -1315,8 +1225,8 @@ export const TOOLS = [
1315
1225
  "limit": {
1316
1226
  "type": "number",
1317
1227
  "minimum": 1,
1318
- "maximum": 200,
1319
- "description": "Developments to return (default 50)."
1228
+ "maximum": 50,
1229
+ "description": "Developments to return (default 20)."
1320
1230
  },
1321
1231
  "offset": {
1322
1232
  "type": "number",
@@ -1404,32 +1314,27 @@ export const TOOLS = [
1404
1314
  }
1405
1315
  },
1406
1316
  {
1407
- "name": "create_standing_order",
1408
- "description": "Put an area under CONTINUOUS watch (the app’s \"Watch this area\"): checked weekly, notifying only when new events cross the bar. **Cost is per CHANGE, not per check.**",
1317
+ "name": "list_watches",
1318
+ "description": "The Watchlist as one list, each entry with a state bucket. `updated_since` returns only watches whose CONTENT changed after that instant — what a synchronised copy should poll.",
1409
1319
  "inputSchema": {
1410
1320
  "type": "object",
1411
1321
  "properties": {
1412
- "bbox": {
1413
- "type": "array",
1414
- "items": {
1415
- "type": "number"
1416
- },
1417
- "minItems": 4,
1418
- "maxItems": 4,
1419
- "description": "[west, south, east, north] WGS84. Required — a global order would fire on everything."
1322
+ "updated_since": {
1323
+ "type": "string",
1324
+ "description": "ISO 8601. Only watches whose CONTENT changed after it — the evidence, not renames."
1420
1325
  },
1421
- "name": {
1326
+ "cursor": {
1422
1327
  "type": "string",
1423
- "description": "Label for the order (default \"Standing order\")."
1328
+ "description": "Cursor from meta.next_cursor."
1424
1329
  },
1425
- "notify_email": {
1426
- "type": "boolean",
1427
- "description": "Email on fire (default true); readable via list_standing_orders anyway."
1330
+ "limit": {
1331
+ "type": "integer",
1332
+ "description": "Watches per page when paging (1..500, default 100).",
1333
+ "minimum": 1,
1334
+ "maximum": 500
1428
1335
  }
1429
1336
  },
1430
- "required": [
1431
- "bbox"
1432
- ]
1337
+ "required": []
1433
1338
  },
1434
1339
  "outputSchema": {
1435
1340
  "type": "object",
@@ -1438,31 +1343,66 @@ export const TOOLS = [
1438
1343
  "type": "string",
1439
1344
  "description": "One-line natural-language summary of the result, ready to relay to a user."
1440
1345
  },
1441
- "order": {
1346
+ "watches": {
1347
+ "type": "array",
1348
+ "items": {
1349
+ "type": "object"
1350
+ }
1351
+ },
1352
+ "buckets": {
1353
+ "type": "object"
1354
+ },
1355
+ "limits": {
1356
+ "type": "object"
1357
+ },
1358
+ "meta": {
1442
1359
  "type": "object"
1443
1360
  }
1444
1361
  },
1445
1362
  "required": [
1446
- "order"
1363
+ "watches"
1447
1364
  ]
1448
1365
  },
1449
1366
  "annotations": {
1450
- "readOnlyHint": false,
1367
+ "readOnlyHint": true,
1451
1368
  "openWorldHint": false,
1452
1369
  "destructiveHint": false
1453
1370
  }
1454
1371
  },
1455
1372
  {
1456
- "name": "list_layer_sets",
1457
- "description": "The layer sets saved on this account. The layer tree itself is not returned: it is an internal format, and opening it is the map's job.",
1373
+ "name": "list_notifications",
1374
+ "description": "What changed across the Watchlist, newest first: one row per change a watch reported, with read state. Reading does not mark them read. A value the plan does not open is `locked`, never filled in.",
1458
1375
  "inputSchema": {
1459
1376
  "type": "object",
1460
1377
  "properties": {
1378
+ "unread_only": {
1379
+ "type": "boolean",
1380
+ "description": "Only notifications not yet read."
1381
+ },
1382
+ "kind": {
1383
+ "type": "string",
1384
+ "enum": [
1385
+ "event_development",
1386
+ "related_event",
1387
+ "monitoring_anomaly",
1388
+ "site_event",
1389
+ "new_imagery",
1390
+ "standing_order"
1391
+ ]
1392
+ },
1393
+ "watch_id": {
1394
+ "type": "string",
1395
+ "description": "Id from list_watches."
1396
+ },
1397
+ "cursor": {
1398
+ "type": "string",
1399
+ "description": "Cursor from meta.next_cursor."
1400
+ },
1461
1401
  "limit": {
1462
1402
  "type": "integer",
1403
+ "description": "Rows per page (1..25, default 10).",
1463
1404
  "minimum": 1,
1464
- "maximum": 100,
1465
- "description": "Max layer sets to return (default 50)."
1405
+ "maximum": 25
1466
1406
  }
1467
1407
  },
1468
1408
  "required": []
@@ -1474,18 +1414,36 @@ export const TOOLS = [
1474
1414
  "type": "string",
1475
1415
  "description": "One-line natural-language summary of the result, ready to relay to a user."
1476
1416
  },
1477
- "layer_sets": {
1417
+ "notifications": {
1478
1418
  "type": "array",
1479
1419
  "items": {
1480
1420
  "type": "object"
1481
1421
  }
1482
1422
  },
1483
- "total": {
1484
- "type": "integer"
1423
+ "meta": {
1424
+ "type": "object"
1425
+ },
1426
+ "full_records": {
1427
+ "type": "object",
1428
+ "description": "The same query on the REST API and the Python SDK, which return every field and larger pages.",
1429
+ "properties": {
1430
+ "note": {
1431
+ "type": "string"
1432
+ },
1433
+ "rest": {
1434
+ "type": "string"
1435
+ },
1436
+ "sdk": {
1437
+ "type": "string"
1438
+ },
1439
+ "docs": {
1440
+ "type": "string"
1441
+ }
1442
+ }
1485
1443
  }
1486
1444
  },
1487
1445
  "required": [
1488
- "layer_sets"
1446
+ "notifications"
1489
1447
  ]
1490
1448
  },
1491
1449
  "annotations": {
@@ -1495,18 +1453,22 @@ export const TOOLS = [
1495
1453
  }
1496
1454
  },
1497
1455
  {
1498
- "name": "get_layer_set",
1499
- "description": "One saved layer set by id. The serialized layer tree is deliberately not exposed — an internal representation, not a public contract.",
1456
+ "name": "get_watch",
1457
+ "description": "One watch end to end: target, state, latest change, measurements with recent series, standing-order questions, and for an event watch its stage, developments and thread, plus this account's notes.",
1500
1458
  "inputSchema": {
1501
1459
  "type": "object",
1502
1460
  "properties": {
1503
- "layer_set_id": {
1461
+ "watch_id": {
1504
1462
  "type": "string",
1505
- "description": "The layer set id."
1463
+ "description": "Id from list_watches."
1464
+ },
1465
+ "include_passes": {
1466
+ "type": "boolean",
1467
+ "description": "Add the collection outlook. Costs the same as predict_satellite_passes; omit it and the call is free."
1506
1468
  }
1507
1469
  },
1508
1470
  "required": [
1509
- "layer_set_id"
1471
+ "watch_id"
1510
1472
  ]
1511
1473
  },
1512
1474
  "outputSchema": {
@@ -1516,12 +1478,15 @@ export const TOOLS = [
1516
1478
  "type": "string",
1517
1479
  "description": "One-line natural-language summary of the result, ready to relay to a user."
1518
1480
  },
1519
- "layer_set": {
1481
+ "watch": {
1482
+ "type": "object"
1483
+ },
1484
+ "thread": {
1520
1485
  "type": "object"
1521
1486
  }
1522
1487
  },
1523
1488
  "required": [
1524
- "layer_set"
1489
+ "watch"
1525
1490
  ]
1526
1491
  },
1527
1492
  "annotations": {
@@ -1531,355 +1496,35 @@ export const TOOLS = [
1531
1496
  }
1532
1497
  },
1533
1498
  {
1534
- "name": "list_uploaded_layers",
1535
- "description": "The data this account uploaded to the map, plus the formats the uploader accepts. Uploading happens in the app; GeoJSON and GeoTIFF only.",
1499
+ "name": "create_watch",
1500
+ "description": "Add a target to the Watchlist. EVENT: the signal's event id binds the canonical event — **never watch an article URL**. AREA: a bbox. SITE: entity_id or lat+lon, and scale.",
1536
1501
  "inputSchema": {
1537
1502
  "type": "object",
1538
1503
  "properties": {
1539
- "limit": {
1540
- "type": "integer",
1541
- "minimum": 1,
1542
- "maximum": 100,
1543
- "description": "Max uploads to return (default 50)."
1544
- }
1545
- },
1546
- "required": []
1547
- },
1548
- "outputSchema": {
1549
- "type": "object",
1550
- "properties": {
1551
- "summary": {
1504
+ "target_type": {
1552
1505
  "type": "string",
1553
- "description": "One-line natural-language summary of the result, ready to relay to a user."
1506
+ "enum": [
1507
+ "event",
1508
+ "area",
1509
+ "site"
1510
+ ]
1511
+ },
1512
+ "event_id": {
1513
+ "type": "string",
1514
+ "description": "EVENT: signal uuid."
1554
1515
  },
1555
- "uploads": {
1516
+ "bbox": {
1556
1517
  "type": "array",
1557
1518
  "items": {
1558
- "type": "object"
1559
- }
1519
+ "type": "number"
1520
+ },
1521
+ "minItems": 4,
1522
+ "maxItems": 4,
1523
+ "description": "AREA: [W,S,E,N] WGS84, at most 100,000 km² (larger → 400)."
1560
1524
  },
1561
- "total": {
1562
- "type": "integer"
1563
- },
1564
- "accepted_formats": {
1565
- "type": "array",
1566
- "items": {
1567
- "type": "string"
1568
- }
1569
- }
1570
- },
1571
- "required": [
1572
- "uploads"
1573
- ]
1574
- },
1575
- "annotations": {
1576
- "readOnlyHint": true,
1577
- "openWorldHint": false,
1578
- "destructiveHint": false
1579
- }
1580
- },
1581
- {
1582
- "name": "list_standing_orders",
1583
- "description": "The standing orders on this key: cadence, area, last check, last actual fire, and quiet_checks — a high quiet_checks means the watch is not earning its place.",
1584
- "inputSchema": {
1585
- "type": "object",
1586
- "properties": {},
1587
- "required": []
1588
- },
1589
- "outputSchema": {
1590
- "type": "object",
1591
- "properties": {
1592
- "summary": {
1593
- "type": "string",
1594
- "description": "One-line natural-language summary of the result, ready to relay to a user."
1595
- },
1596
- "orders": {
1597
- "type": "array",
1598
- "items": {
1599
- "type": "object"
1600
- }
1601
- },
1602
- "limits": {
1603
- "type": "object"
1604
- }
1605
- },
1606
- "required": [
1607
- "orders"
1608
- ]
1609
- },
1610
- "annotations": {
1611
- "readOnlyHint": true,
1612
- "openWorldHint": false,
1613
- "destructiveHint": false
1614
- }
1615
- },
1616
- {
1617
- "name": "list_monitored_areas",
1618
- "description": "Places under continuous satellite measurement: metric, latest value, change, anomaly flag, coverage. **coverage.window_total is null when the catalog total is UNKNOWN; null never means zero.**",
1619
- "inputSchema": {
1620
- "type": "object",
1621
- "properties": {},
1622
- "required": []
1623
- },
1624
- "outputSchema": {
1625
- "type": "object",
1626
- "properties": {
1627
- "summary": {
1628
- "type": "string",
1629
- "description": "One-line natural-language summary of the result, ready to relay to a user."
1630
- },
1631
- "areas": {
1632
- "type": "array",
1633
- "items": {
1634
- "type": "object"
1635
- }
1636
- },
1637
- "limits": {
1638
- "type": "object"
1639
- },
1640
- "metering": {
1641
- "type": "object"
1642
- }
1643
- },
1644
- "required": [
1645
- "areas"
1646
- ]
1647
- },
1648
- "annotations": {
1649
- "readOnlyHint": true,
1650
- "openWorldHint": false,
1651
- "destructiveHint": false
1652
- }
1653
- },
1654
- {
1655
- "name": "get_monitored_area",
1656
- "description": "One monitored area with its full measurement history. Anomaly flags come from a median-absolute-deviation test, not a fixed threshold. Needs a plan that includes data export.",
1657
- "inputSchema": {
1658
- "type": "object",
1659
- "properties": {
1660
- "area_id": {
1661
- "type": "string",
1662
- "description": "From list_monitored_areas; a metric's polygon_id also resolves."
1663
- }
1664
- },
1665
- "required": [
1666
- "area_id"
1667
- ]
1668
- },
1669
- "outputSchema": {
1670
- "type": "object",
1671
- "properties": {
1672
- "summary": {
1673
- "type": "string",
1674
- "description": "One-line natural-language summary of the result, ready to relay to a user."
1675
- },
1676
- "area": {
1677
- "type": "object"
1678
- },
1679
- "metering": {
1680
- "type": "object"
1681
- }
1682
- },
1683
- "required": [
1684
- "area"
1685
- ]
1686
- },
1687
- "annotations": {
1688
- "readOnlyHint": true,
1689
- "openWorldHint": false,
1690
- "destructiveHint": false
1691
- }
1692
- },
1693
- {
1694
- "name": "create_monitored_area",
1695
- "description": "Put a place under continuous satellite measurement — every new Sentinel-1/2 or VIIRS acquisition (or FIRMS fire detection) is measured. For a QUANTITY at a fixed place; for events use create_standing_order.",
1696
- "inputSchema": {
1697
- "type": "object",
1698
- "properties": {
1699
- "bbox": {
1700
- "type": "array",
1701
- "items": {
1702
- "type": "number"
1703
- },
1704
- "minItems": 4,
1705
- "maxItems": 4,
1706
- "description": "[west, south, east, north] WGS84, under 5,000 km² — a larger box is rejected, not sampled."
1707
- },
1708
- "metric": {
1709
- "type": "string",
1710
- "description": "Plain words (ships, fires, vegetation, water, burn, snow, built_up, moisture, night_lights) or index ids (ndvi, ndwi, nbr, vv, vh …). The sensor follows."
1711
- },
1712
- "satellite": {
1713
- "type": "string",
1714
- "description": "Pick the sensor like the app does (e.g. ship detection on NISAR_L2_GCOV_PROVISIONAL_V1). Default: the metric’s first."
1715
- },
1716
- "name": {
1717
- "type": "string",
1718
- "description": "Label for the area (default \"Monitored area\")."
1719
- },
1720
- "start_date": {
1721
- "type": "string",
1722
- "description": "YYYY-MM-DD to backfill from. Default 3 months ago; longer costs more on the first check."
1723
- }
1724
- },
1725
- "required": [
1726
- "bbox",
1727
- "metric"
1728
- ]
1729
- },
1730
- "outputSchema": {
1731
- "type": "object",
1732
- "properties": {
1733
- "summary": {
1734
- "type": "string",
1735
- "description": "One-line natural-language summary of the result, ready to relay to a user."
1736
- },
1737
- "area": {
1738
- "type": "object"
1739
- },
1740
- "metering": {
1741
- "type": "object"
1742
- }
1743
- },
1744
- "required": [
1745
- "area"
1746
- ]
1747
- },
1748
- "annotations": {
1749
- "readOnlyHint": false,
1750
- "openWorldHint": false,
1751
- "destructiveHint": false
1752
- }
1753
- },
1754
- {
1755
- "name": "list_watches",
1756
- "description": "The Watchlist as one list, each entry with a state bucket. `updated_since` returns only watches whose CONTENT changed after that instant — what a synchronised copy should poll.",
1757
- "inputSchema": {
1758
- "type": "object",
1759
- "properties": {
1760
- "updated_since": {
1761
- "type": "string",
1762
- "description": "ISO 8601. Only watches whose CONTENT changed after it — the evidence, not renames."
1763
- },
1764
- "cursor": {
1765
- "type": "string",
1766
- "description": "Cursor from meta.next_cursor."
1767
- },
1768
- "limit": {
1769
- "type": "integer",
1770
- "description": "Watches per page when paging (1..500, default 100).",
1771
- "minimum": 1,
1772
- "maximum": 500
1773
- }
1774
- },
1775
- "required": []
1776
- },
1777
- "outputSchema": {
1778
- "type": "object",
1779
- "properties": {
1780
- "summary": {
1781
- "type": "string",
1782
- "description": "One-line natural-language summary of the result, ready to relay to a user."
1783
- },
1784
- "watches": {
1785
- "type": "array",
1786
- "items": {
1787
- "type": "object"
1788
- }
1789
- },
1790
- "buckets": {
1791
- "type": "object"
1792
- },
1793
- "limits": {
1794
- "type": "object"
1795
- },
1796
- "meta": {
1797
- "type": "object"
1798
- }
1799
- },
1800
- "required": [
1801
- "watches"
1802
- ]
1803
- },
1804
- "annotations": {
1805
- "readOnlyHint": true,
1806
- "openWorldHint": false,
1807
- "destructiveHint": false
1808
- }
1809
- },
1810
- {
1811
- "name": "get_watch",
1812
- "description": "One watch end to end: target, state, latest change, measurements with recent series, standing-order questions, and for an event watch its stage, developments and thread, plus this account's notes.",
1813
- "inputSchema": {
1814
- "type": "object",
1815
- "properties": {
1816
- "watch_id": {
1817
- "type": "string",
1818
- "description": "Id from list_watches."
1819
- },
1820
- "include_passes": {
1821
- "type": "boolean",
1822
- "description": "Add the collection outlook. Costs the same as predict_satellite_passes; omit it and the call is free."
1823
- }
1824
- },
1825
- "required": [
1826
- "watch_id"
1827
- ]
1828
- },
1829
- "outputSchema": {
1830
- "type": "object",
1831
- "properties": {
1832
- "summary": {
1833
- "type": "string",
1834
- "description": "One-line natural-language summary of the result, ready to relay to a user."
1835
- },
1836
- "watch": {
1837
- "type": "object"
1838
- },
1839
- "thread": {
1840
- "type": "object"
1841
- }
1842
- },
1843
- "required": [
1844
- "watch"
1845
- ]
1846
- },
1847
- "annotations": {
1848
- "readOnlyHint": true,
1849
- "openWorldHint": false,
1850
- "destructiveHint": false
1851
- }
1852
- },
1853
- {
1854
- "name": "create_watch",
1855
- "description": "Add a target to the Watchlist. EVENT: the signal's event id binds the canonical event — **never watch an article URL**. AREA: a bbox. SITE: entity_id or lat+lon, and scale.",
1856
- "inputSchema": {
1857
- "type": "object",
1858
- "properties": {
1859
- "target_type": {
1860
- "type": "string",
1861
- "enum": [
1862
- "event",
1863
- "area",
1864
- "site"
1865
- ]
1866
- },
1867
- "event_id": {
1868
- "type": "string",
1869
- "description": "EVENT: signal uuid."
1870
- },
1871
- "bbox": {
1872
- "type": "array",
1873
- "items": {
1874
- "type": "number"
1875
- },
1876
- "minItems": 4,
1877
- "maxItems": 4,
1878
- "description": "AREA: [W,S,E,N] WGS84."
1879
- },
1880
- "entity_id": {
1881
- "type": "string",
1882
- "description": "SITE: registry id"
1525
+ "entity_id": {
1526
+ "type": "string",
1527
+ "description": "SITE: registry id"
1883
1528
  },
1884
1529
  "lat": {
1885
1530
  "type": "number"
@@ -2086,59 +1731,18 @@ export const TOOLS = [
2086
1731
  "gaps": {
2087
1732
  "type": "array",
2088
1733
  "items": {
2089
- "type": "string"
2090
- },
2091
- "description": "What would change this judgment. Only meaningful with a confidence."
2092
- },
2093
- "next_check": {
2094
- "type": "string",
2095
- "description": "When/what to look at next."
2096
- }
2097
- },
2098
- "required": [
2099
- "watch_id",
2100
- "note"
2101
- ]
2102
- },
2103
- "outputSchema": {
2104
- "type": "object",
2105
- "properties": {
2106
- "summary": {
2107
- "type": "string",
2108
- "description": "One-line natural-language summary of the result, ready to relay to a user."
2109
- },
2110
- "note": {
2111
- "type": "object"
2112
- }
2113
- },
2114
- "required": [
2115
- "note"
2116
- ]
2117
- },
2118
- "annotations": {
2119
- "readOnlyHint": false,
2120
- "openWorldHint": false,
2121
- "destructiveHint": false
2122
- }
2123
- },
2124
- {
2125
- "name": "delete_note",
2126
- "description": "Delete one note from a watch. The deletion itself stays in the account's action log.",
2127
- "inputSchema": {
2128
- "type": "object",
2129
- "properties": {
2130
- "watch_id": {
2131
- "type": "string",
2132
- "description": "Id from list_watches."
1734
+ "type": "string"
1735
+ },
1736
+ "description": "What would change this judgment. Only meaningful with a confidence."
2133
1737
  },
2134
- "note_id": {
1738
+ "next_check": {
2135
1739
  "type": "string",
2136
- "description": "Note id from get_watch."
1740
+ "description": "When/what to look at next."
2137
1741
  }
2138
1742
  },
2139
1743
  "required": [
2140
1744
  "watch_id",
2141
- "note_id"
1745
+ "note"
2142
1746
  ]
2143
1747
  },
2144
1748
  "outputSchema": {
@@ -2148,16 +1752,18 @@ export const TOOLS = [
2148
1752
  "type": "string",
2149
1753
  "description": "One-line natural-language summary of the result, ready to relay to a user."
2150
1754
  },
2151
- "deleted": {
2152
- "type": "string"
1755
+ "note": {
1756
+ "type": "object"
2153
1757
  }
2154
- }
1758
+ },
1759
+ "required": [
1760
+ "note"
1761
+ ]
2155
1762
  },
2156
1763
  "annotations": {
2157
1764
  "readOnlyHint": false,
2158
1765
  "openWorldHint": false,
2159
- "destructiveHint": true,
2160
- "idempotentHint": true
1766
+ "destructiveHint": false
2161
1767
  }
2162
1768
  },
2163
1769
  {
@@ -2336,352 +1942,6 @@ export const TOOLS = [
2336
1942
  "openWorldHint": false,
2337
1943
  "destructiveHint": false
2338
1944
  }
2339
- },
2340
- {
2341
- "name": "lookup_elevation",
2342
- "description": "Terrain height from the Copernicus DEM GLO-30 for a point, bbox or polygon, with relief — the number that governs SAR layover and shadow. A SURFACE model; `covered: false` is no data, not 0 m. Cite the `attribution`.",
2343
- "inputSchema": {
2344
- "type": "object",
2345
- "properties": {
2346
- "lat": {
2347
- "type": "number",
2348
- "minimum": -90,
2349
- "maximum": 90,
2350
- "description": "Latitude of a single point to measure (use with lon)."
2351
- },
2352
- "lon": {
2353
- "type": "number",
2354
- "minimum": -180,
2355
- "maximum": 180,
2356
- "description": "Longitude of a single point to measure (use with lat)."
2357
- },
2358
- "bbox": {
2359
- "type": "array",
2360
- "items": {
2361
- "type": "number"
2362
- },
2363
- "minItems": 4,
2364
- "maxItems": 4,
2365
- "description": "[lon_min, lat_min, lon_max, lat_max] WGS84."
2366
- },
2367
- "polygon": {
2368
- "type": "array",
2369
- "items": {
2370
- "type": "array",
2371
- "items": {
2372
- "type": "number"
2373
- },
2374
- "minItems": 2,
2375
- "maxItems": 2
2376
- },
2377
- "minItems": 3,
2378
- "description": "WGS84 ring [[lon, lat], …]. Statistics cover only the samples inside it."
2379
- }
2380
- }
2381
- },
2382
- "outputSchema": {
2383
- "type": "object",
2384
- "properties": {
2385
- "mode": {
2386
- "type": "string",
2387
- "description": "Which form was measured: 'point', 'bbox' or 'polygon'."
2388
- },
2389
- "elevation": {
2390
- "type": "object"
2391
- },
2392
- "attribution": {
2393
- "type": "string",
2394
- "description": "Required Copernicus DEM credit (licence Article 6(b))."
2395
- }
2396
- },
2397
- "required": [
2398
- "elevation"
2399
- ]
2400
- },
2401
- "annotations": {
2402
- "readOnlyHint": true,
2403
- "openWorldHint": false,
2404
- "destructiveHint": false
2405
- }
2406
- },
2407
- {
2408
- "name": "analyze_terrain",
2409
- "description": "Compute FROM the terrain. `sar_geometry` returns layover, shadow, foreshortening and mean LOCAL incidence — **required, not assumed, because it changes with pass direction**. `profile` returns ground along a line and a line-of-sight verdict. Cite the `attribution`.",
2410
- "inputSchema": {
2411
- "type": "object",
2412
- "required": [
2413
- "operation"
2414
- ],
2415
- "properties": {
2416
- "operation": {
2417
- "type": "string",
2418
- "enum": [
2419
- "sar_geometry",
2420
- "profile"
2421
- ],
2422
- "description": "'sar_geometry' = layover/shadow over an area; 'profile' = ground along a line + line-of-sight."
2423
- },
2424
- "bbox": {
2425
- "type": "array",
2426
- "items": {
2427
- "type": "number"
2428
- },
2429
- "minItems": 4,
2430
- "maxItems": 4,
2431
- "description": "For 'sar_geometry': [lon_min, lat_min, lon_max, lat_max] WGS84."
2432
- },
2433
- "incidence_deg": {
2434
- "type": "number",
2435
- "minimum": 10,
2436
- "maximum": 80,
2437
- "description": "For 'sar_geometry'. Sentinel-1 IW spans ~29-46°."
2438
- },
2439
- "look_azimuth_deg": {
2440
- "type": "number",
2441
- "minimum": 0,
2442
- "maximum": 360,
2443
- "description": "For 'sar_geometry': bearing along ground range. Right-looking descending ≈ 270."
2444
- },
2445
- "lat": {
2446
- "type": "number",
2447
- "minimum": -90,
2448
- "maximum": 90,
2449
- "description": "For 'profile': latitude of the observer end."
2450
- },
2451
- "lon": {
2452
- "type": "number",
2453
- "minimum": -180,
2454
- "maximum": 180,
2455
- "description": "For 'profile': longitude of the observer end."
2456
- },
2457
- "to_lat": {
2458
- "type": "number",
2459
- "minimum": -90,
2460
- "maximum": 90,
2461
- "description": "For 'profile': latitude of the far end."
2462
- },
2463
- "to_lon": {
2464
- "type": "number",
2465
- "minimum": -180,
2466
- "maximum": 180,
2467
- "description": "For 'profile': longitude of the far end."
2468
- },
2469
- "observer_height_m": {
2470
- "type": "number",
2471
- "minimum": 0,
2472
- "description": "For 'profile': eye height above ground, default 2 m."
2473
- }
2474
- }
2475
- },
2476
- "outputSchema": {
2477
- "type": "object",
2478
- "properties": {
2479
- "operation": {
2480
- "type": "string"
2481
- },
2482
- "sar_geometry": {
2483
- "type": "object"
2484
- },
2485
- "profile": {
2486
- "type": "object"
2487
- },
2488
- "attribution": {
2489
- "type": "string",
2490
- "description": "Required Copernicus DEM credit (licence Article 6(b))."
2491
- }
2492
- }
2493
- },
2494
- "annotations": {
2495
- "readOnlyHint": true,
2496
- "openWorldHint": false,
2497
- "destructiveHint": false
2498
- }
2499
- },
2500
- {
2501
- "name": "measure_index_series",
2502
- "description": "Measure a spectral index over an area scene by scene through the Sentinel-2 archive. **Call `estimate_only: true` first** — free, and returns the scene count, real date span and cost. At most 24 scenes, so a longer period is a SAMPLE. Cite the `attribution`.",
2503
- "inputSchema": {
2504
- "type": "object",
2505
- "required": [
2506
- "index",
2507
- "start",
2508
- "end"
2509
- ],
2510
- "properties": {
2511
- "polygon": {
2512
- "type": "array",
2513
- "items": {
2514
- "type": "array",
2515
- "items": {
2516
- "type": "number"
2517
- }
2518
- },
2519
- "description": "WGS84 ring [[lon, lat], …], 3+ vertices. Statistics cover the samples inside it."
2520
- },
2521
- "bbox": {
2522
- "type": "array",
2523
- "items": {
2524
- "type": "number"
2525
- },
2526
- "minItems": 4,
2527
- "maxItems": 4,
2528
- "description": "Alternative to polygon: [lon_min, lat_min, lon_max, lat_max] WGS84."
2529
- },
2530
- "index": {
2531
- "type": "string",
2532
- "enum": [
2533
- "ndvi",
2534
- "evi",
2535
- "savi",
2536
- "ndmi",
2537
- "ndwi",
2538
- "mndwi",
2539
- "ndbi",
2540
- "ndsi",
2541
- "nbr",
2542
- "iron-oxide",
2543
- "clay",
2544
- "ferrous"
2545
- ],
2546
- "description": "Which optical index to measure."
2547
- },
2548
- "start": {
2549
- "type": "string",
2550
- "description": "YYYY-MM-DD (UTC). Clamped forward to 2015-06-27 if earlier."
2551
- },
2552
- "end": {
2553
- "type": "string",
2554
- "description": "End date YYYY-MM-DD (UTC)."
2555
- },
2556
- "max_scenes": {
2557
- "type": "integer",
2558
- "minimum": 1,
2559
- "maximum": 24,
2560
- "description": "Cap on scenes measured in this call. Server maximum 24."
2561
- },
2562
- "max_cloud_cover": {
2563
- "type": "number",
2564
- "minimum": 1,
2565
- "maximum": 100,
2566
- "description": "Scene cloud-cover ceiling in percent. Default 30."
2567
- },
2568
- "estimate_only": {
2569
- "type": "boolean",
2570
- "description": "True = free: scene count, date span and cost, without measuring."
2571
- }
2572
- }
2573
- },
2574
- "outputSchema": {
2575
- "type": "object",
2576
- "properties": {
2577
- "summary": {
2578
- "type": "string",
2579
- "description": "One-line natural-language summary of the result, ready to relay to a user."
2580
- },
2581
- "estimate": {
2582
- "type": "object"
2583
- },
2584
- "series": {
2585
- "type": "object"
2586
- },
2587
- "meta": {
2588
- "type": "object",
2589
- "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable."
2590
- },
2591
- "attribution": {
2592
- "type": "string"
2593
- }
2594
- }
2595
- },
2596
- "annotations": {
2597
- "readOnlyHint": false,
2598
- "openWorldHint": false,
2599
- "destructiveHint": true
2600
- }
2601
- },
2602
- {
2603
- "name": "detect_ships",
2604
- "description": "Count vessel-like targets in ONE Sentinel-1 SAR scene by CFAR detection — radar sees through cloud and at night. **Read `caveats` before reporting the number**: land mask, offshore exclusion and partial coverage change what it means.",
2605
- "inputSchema": {
2606
- "type": "object",
2607
- "required": [
2608
- "collection",
2609
- "item_id"
2610
- ],
2611
- "properties": {
2612
- "collection": {
2613
- "type": "string",
2614
- "enum": [
2615
- "sentinel-1-grd",
2616
- "sentinel-1-rtc",
2617
- "NISAR_L2_GCOV_PROVISIONAL_V1"
2618
- ],
2619
- "description": "Collection of the scene (Sentinel-1, or NISAR L-band — converted first, extra tokens)."
2620
- },
2621
- "item_id": {
2622
- "type": "string",
2623
- "description": "STAC item id from search_imagery."
2624
- },
2625
- "bbox": {
2626
- "type": "array",
2627
- "items": {
2628
- "type": "number"
2629
- },
2630
- "minItems": 4,
2631
- "maxItems": 4,
2632
- "description": "[lon_min, lat_min, lon_max, lat_max] WGS84, within the scene."
2633
- },
2634
- "geometry": {
2635
- "type": "object"
2636
- },
2637
- "algorithm_version": {
2638
- "type": "string",
2639
- "enum": [
2640
- "auto",
2641
- "v2",
2642
- "v3"
2643
- ],
2644
- "description": "'auto' (default) picks the recommended version for the sensor."
2645
- }
2646
- }
2647
- },
2648
- "outputSchema": {
2649
- "type": "object",
2650
- "properties": {
2651
- "summary": {
2652
- "type": "string",
2653
- "description": "One-line natural-language summary of the result, ready to relay to a user."
2654
- },
2655
- "count": {
2656
- "type": "integer",
2657
- "description": "Vessel-like targets detected. Read `caveats` before quoting it."
2658
- },
2659
- "ships": {
2660
- "type": "object"
2661
- },
2662
- "caveats": {
2663
- "type": "array",
2664
- "items": {
2665
- "type": "string"
2666
- }
2667
- },
2668
- "scene": {
2669
- "type": "object"
2670
- },
2671
- "processing": {
2672
- "type": "object"
2673
- },
2674
- "meta": {
2675
- "type": "object",
2676
- "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable."
2677
- }
2678
- }
2679
- },
2680
- "annotations": {
2681
- "readOnlyHint": false,
2682
- "openWorldHint": false,
2683
- "destructiveHint": true
2684
- }
2685
1945
  }
2686
1946
  ];
2687
1947
  export const RESOURCES = [