offnadir-delta-mcp 1.38.0 → 2.0.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/README.md +7 -20
- package/dist/catalog.js +121 -598
- package/dist/index.js +8 -13
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ satellite can actually resolve it, and produce a collection-ready plan.
|
|
|
16
16
|
Real-time event and geospatial intelligence for OSINT, geopolitical risk, and GEOINT work —
|
|
17
17
|
source-linked, geolocated, and current, not a training snapshot.
|
|
18
18
|
|
|
19
|
-
`
|
|
19
|
+
`35` tools · MCP server version `2.0.0` · [full reference](https://offnadir-delta.com/docs/mcp)
|
|
20
20
|
|
|
21
21
|
## What it does
|
|
22
22
|
|
|
@@ -77,7 +77,7 @@ locally from a generated catalog, so registries can introspect it without creden
|
|
|
77
77
|
|
|
78
78
|
### First call — free
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
21 of the 35 tools cost nothing, so the first thing you run is free:
|
|
81
81
|
|
|
82
82
|
> Give me the latest Daily World Brief. Lead with the three most significant developments,
|
|
83
83
|
> explain why each matters, and cite the supporting signals.
|
|
@@ -91,17 +91,15 @@ Then try the full signal-to-satellite workflow:
|
|
|
91
91
|
|
|
92
92
|
### Discover
|
|
93
93
|
|
|
94
|
-
What is happening,
|
|
94
|
+
What is happening, what changed, and what today looks like.
|
|
95
95
|
|
|
96
96
|
| Tool | What it does | Cost |
|
|
97
97
|
| --- | --- | --- |
|
|
98
98
|
| `query_signals` | Geolocated world events from global news media, AI-enriched with severity/GEOINT scores and collection recommendations. | 3 tok |
|
|
99
|
-
| `query_stats` | Roll-ups over the corpus: totals plus per-category and per-day breakdown. | 1 tok |
|
|
100
|
-
| `query_hotspots` | Where activity concentrates: density grid-binned into ranked cells with peak severity, categories and representative event_ids. | 1 tok |
|
|
101
99
|
| `get_world_brief` | AI world brief: daily (prior UTC day, all plans) or weekly/monthly by plan. | free |
|
|
102
100
|
| `query_developments` | What actually CHANGED about the events in an area, not which articles are new. | 3 tok |
|
|
103
101
|
| `get_event_thread` | One event end to end: state plus every change in order — the "new event or update" distinction a feed cannot make. | free |
|
|
104
|
-
| `search_entities` | Find a place
|
|
102
|
+
| `search_entities` | Find a named place (airport, base, plant, port, dam, strait…) in any language or by IATA/ICAO code. | 1 tok |
|
|
105
103
|
| `get_entity` | What has happened at one place: the registry record plus its most recent linked events, each with HOW it was linked. | 1 tok |
|
|
106
104
|
| `get_related_events` | The relations recorded for one event: others at the same registry facility, naming the same place, or stored as the same campaign, each saying what is shared; plus reports merged into it. | 1 tok |
|
|
107
105
|
|
|
@@ -128,7 +126,6 @@ Turn reporting into a cited assessment you can audit afterwards.
|
|
|
128
126
|
| `assess_signal` | AI remote-sensing deep-dive for one signal: what to observe, sensors, a collection window. | 5/15 tok |
|
|
129
127
|
| `ask_analyst` | Ask the Delta Analyst an OSINT/GEOINT question; returns a structured brief. | 5–123 tok |
|
|
130
128
|
| `get_analyst_job` | Status and result of an ask_analyst run. | free |
|
|
131
|
-
| `query_claims` | The ledger of claims this key was given, each with its evidence class, independent source families and publishers. | free |
|
|
132
129
|
| `measure_index_series` | Measure a spectral index over an area scene by scene through the Sentinel-2 archive. | 0.5 tok |
|
|
133
130
|
| `detect_ships` | Count vessel-like targets in ONE Sentinel-1 SAR scene by CFAR detection — radar sees through cloud and at night. | 5 tok |
|
|
134
131
|
|
|
@@ -138,17 +135,15 @@ Stand up continuous coverage and be told only when the answer changes. Creating
|
|
|
138
135
|
|
|
139
136
|
| Tool | What it does | Cost |
|
|
140
137
|
| --- | --- | --- |
|
|
141
|
-
| `create_standing_order` | Put an area under CONTINUOUS watch
|
|
138
|
+
| `create_standing_order` | Put an area under CONTINUOUS watch (the app’s "Watch this area"): checked weekly, notifying only when new events cross the bar. | free |
|
|
142
139
|
| `list_standing_orders` | 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. | free |
|
|
143
|
-
| `delete_standing_order` | Delete a standing order, or pause/resume with active=false/true. | free |
|
|
144
140
|
| `list_monitored_areas` | Places under continuous satellite measurement: metric, latest value, change, anomaly flag, coverage. | free |
|
|
145
141
|
| `get_monitored_area` | One monitored area with its full measurement history. | free |
|
|
146
142
|
| `create_monitored_area` | Put a place under continuous satellite measurement — every new Sentinel-1/2 or VIIRS acquisition (or FIRMS fire detection) is measured. | free |
|
|
147
143
|
| `list_watches` | The Watchlist as one list, each entry with a state bucket. | free |
|
|
148
144
|
| `get_watch` | 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. | free |
|
|
149
|
-
| `get_decision_package` | Everything needed to decide what to collect next about one watch, in one object. | 5 tok |
|
|
150
145
|
| `create_watch` | Add a target to the Watchlist. | free |
|
|
151
|
-
| `update_watch` |
|
|
146
|
+
| `update_watch` | Pause, resume or close a watch. | free |
|
|
152
147
|
| `delete_watch` | Delete a watch and its underlying resources — bound monitored areas with their history, and standing orders. | free |
|
|
153
148
|
| `add_note` | Add a note to a watch, start a thread, or reply. | free |
|
|
154
149
|
| `delete_note` | Delete one note from a watch. | free |
|
|
@@ -195,25 +190,17 @@ Two credentials are accepted on the hosted endpoint:
|
|
|
195
190
|
Keys are shown once at creation, hashed at rest, and revocable at any time from
|
|
196
191
|
[/account/api](https://offnadir-delta.com/account/api).
|
|
197
192
|
|
|
198
|
-
## Resources
|
|
193
|
+
## Resources
|
|
199
194
|
|
|
200
195
|
| Resource | Description |
|
|
201
196
|
| --- | --- |
|
|
202
197
|
| `brief://latest` | The most recent AI-synthesized Daily World Brief (JSON). Free. |
|
|
203
198
|
| `signals://schema` | JSON Schema of the public Signal shape returned by query_signals / /api/v1/signals. |
|
|
204
199
|
| `usage://current` | Remaining token balance and plan capabilities for the calling key. Free. |
|
|
205
|
-
| `imagery://collections` | The satellite catalog collections searchable via search_imagery — Sentinel-1 C-band SAR, Sentinel-2 optical, and NISAR L-band SAR (provisional calibration). Free. |
|
|
206
200
|
| `status://current` | How current the data is (ingestion/enrichment frontier), the Daily World Brief status, and an Operational/Delayed/Degraded roll-up. Free. |
|
|
207
201
|
| `brief://{date}` | The Daily World Brief for a specific UTC date (YYYY-MM-DD). Free. |
|
|
208
202
|
| `watch://{watch_id}` | A Watchlist entry with its current state, latest meaningful change, measurements, (for event watches) the full event thread, and the notes kept against it. The same body get_watch returns. Free. |
|
|
209
203
|
|
|
210
|
-
| Prompt | Description |
|
|
211
|
-
| --- | --- |
|
|
212
|
-
| `daily-situation-briefing` | Summarize the current world situation from the Daily World Brief. |
|
|
213
|
-
| `assess-top-signal` | Find the highest-severity recent signal in an area/category and run an RS assessment. |
|
|
214
|
-
| `aoi-watch` | Scan an area of interest for recent escalations and recommend collection. |
|
|
215
|
-
| `market-exposure-check` | Find recent events that could plausibly move a given market (oil, grain, shipping, ...) and explain each transmission channel. Informational only — not investment advice. |
|
|
216
|
-
|
|
217
204
|
## Links
|
|
218
205
|
|
|
219
206
|
- [Tool reference, setup, and one-click installs](https://offnadir-delta.com/docs/mcp)
|
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
|
|
16
|
+
// Generated for Off-Nadir Delta MCP 2.0.0.
|
|
17
17
|
export const TOOLS = [
|
|
18
18
|
{
|
|
19
19
|
"name": "query_signals",
|
|
@@ -30,14 +30,22 @@ export const TOOLS = [
|
|
|
30
30
|
"maxItems": 4,
|
|
31
31
|
"description": "[minLon, minLat, maxLon, maxLat] WGS84. Omit for worldwide."
|
|
32
32
|
},
|
|
33
|
-
"
|
|
33
|
+
"startDate": {
|
|
34
34
|
"type": "string",
|
|
35
|
-
"description": "
|
|
35
|
+
"description": "Date range start, YYYY-MM-DD (UTC). With endDate. Records start 2026-09-23 (earlier: unrecorded, not quiet). Plan-bounded: meta.window_clamp."
|
|
36
36
|
},
|
|
37
|
-
"
|
|
38
|
-
"type": "
|
|
39
|
-
"
|
|
40
|
-
|
|
37
|
+
"endDate": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "Date range end, YYYY-MM-DD (UTC), inclusive."
|
|
40
|
+
},
|
|
41
|
+
"recency": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"enum": [
|
|
44
|
+
"15m",
|
|
45
|
+
"1h",
|
|
46
|
+
"24h"
|
|
47
|
+
],
|
|
48
|
+
"description": "Last reported within. Default 24h when no date range."
|
|
41
49
|
},
|
|
42
50
|
"categories": {
|
|
43
51
|
"type": "array",
|
|
@@ -58,6 +66,40 @@ export const TOOLS = [
|
|
|
58
66
|
},
|
|
59
67
|
"description": "Restrict to these categories."
|
|
60
68
|
},
|
|
69
|
+
"q": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"description": "Text search: all words; \"phrase\"; -exclude."
|
|
72
|
+
},
|
|
73
|
+
"stages": {
|
|
74
|
+
"type": "array",
|
|
75
|
+
"items": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"enum": [
|
|
78
|
+
"reported",
|
|
79
|
+
"localized",
|
|
80
|
+
"pinpointed"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"description": "reported=country/province, localized=town, pinpointed=block/facility."
|
|
84
|
+
},
|
|
85
|
+
"minSeverityBand": {
|
|
86
|
+
"type": "integer",
|
|
87
|
+
"enum": [
|
|
88
|
+
4,
|
|
89
|
+
6,
|
|
90
|
+
9
|
|
91
|
+
],
|
|
92
|
+
"description": "severity_band >= this."
|
|
93
|
+
},
|
|
94
|
+
"minPublishers": {
|
|
95
|
+
"type": "integer",
|
|
96
|
+
"enum": [
|
|
97
|
+
2,
|
|
98
|
+
3,
|
|
99
|
+
5
|
|
100
|
+
],
|
|
101
|
+
"description": "At least this many publishers."
|
|
102
|
+
},
|
|
61
103
|
"markets": {
|
|
62
104
|
"type": "array",
|
|
63
105
|
"items": {
|
|
@@ -76,61 +118,23 @@ export const TOOLS = [
|
|
|
76
118
|
},
|
|
77
119
|
"description": "Markets exposed via a physical/supply channel."
|
|
78
120
|
},
|
|
79
|
-
"
|
|
80
|
-
"type": "integer",
|
|
81
|
-
"minimum": 1,
|
|
82
|
-
"maximum": 500,
|
|
83
|
-
"description": "Max rows per page. Default 100."
|
|
84
|
-
},
|
|
85
|
-
"cursor": {
|
|
86
|
-
"type": "string",
|
|
87
|
-
"description": "Cursor from meta.next_cursor."
|
|
88
|
-
},
|
|
89
|
-
"minSeverity": {
|
|
90
|
-
"type": "number",
|
|
91
|
-
"minimum": 0,
|
|
92
|
-
"maximum": 10,
|
|
93
|
-
"description": "severity_score >= this (0-10)."
|
|
94
|
-
},
|
|
95
|
-
"minSeverityBand": {
|
|
96
|
-
"type": "integer",
|
|
97
|
-
"minimum": 1,
|
|
98
|
-
"maximum": 10,
|
|
99
|
-
"description": "severity_band >= this."
|
|
100
|
-
},
|
|
101
|
-
"escalating": {
|
|
102
|
-
"type": "boolean",
|
|
103
|
-
"description": "escalation_trend is \"escalating\"."
|
|
104
|
-
},
|
|
105
|
-
"sort": {
|
|
121
|
+
"placement": {
|
|
106
122
|
"type": "string",
|
|
107
123
|
"enum": [
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"geoint"
|
|
124
|
+
"all",
|
|
125
|
+
"map",
|
|
126
|
+
"list"
|
|
112
127
|
],
|
|
113
|
-
"description": "
|
|
128
|
+
"description": "map=a point; list=country/province only."
|
|
114
129
|
},
|
|
115
|
-
"
|
|
130
|
+
"observable": {
|
|
116
131
|
"type": "string",
|
|
117
|
-
"
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
"stages": {
|
|
124
|
-
"type": "array",
|
|
125
|
-
"items": {
|
|
126
|
-
"type": "string",
|
|
127
|
-
"enum": [
|
|
128
|
-
"reported",
|
|
129
|
-
"localized",
|
|
130
|
-
"pinpointed"
|
|
131
|
-
]
|
|
132
|
-
},
|
|
133
|
-
"description": "reported=country/province, localized=town, pinpointed=block/facility."
|
|
132
|
+
"enum": [
|
|
133
|
+
"any",
|
|
134
|
+
"yes",
|
|
135
|
+
"no"
|
|
136
|
+
],
|
|
137
|
+
"description": "A satellite could see it."
|
|
134
138
|
},
|
|
135
139
|
"sensors": {
|
|
136
140
|
"type": "array",
|
|
@@ -146,209 +150,58 @@ export const TOOLS = [
|
|
|
146
150
|
"none"
|
|
147
151
|
]
|
|
148
152
|
},
|
|
149
|
-
"description": "Recommended sensor
|
|
150
|
-
},
|
|
151
|
-
"minGeoint": {
|
|
152
|
-
"type": "number",
|
|
153
|
-
"minimum": 0,
|
|
154
|
-
"maximum": 10,
|
|
155
|
-
"description": "geoint_score >= this (0-10)."
|
|
156
|
-
},
|
|
157
|
-
"plottableOnly": {
|
|
158
|
-
"type": "boolean",
|
|
159
|
-
"description": "Precise enough to be a point."
|
|
153
|
+
"description": "Recommended sensor (unassessed passes)."
|
|
160
154
|
},
|
|
161
|
-
"
|
|
162
|
-
"type": "boolean",
|
|
163
|
-
"description": "A satellite could see it."
|
|
164
|
-
},
|
|
165
|
-
"q": {
|
|
166
|
-
"type": "string",
|
|
167
|
-
"description": "Text search: all words; \"phrase\"; -exclude."
|
|
168
|
-
},
|
|
169
|
-
"reportedSince": {
|
|
170
|
-
"type": "string",
|
|
171
|
-
"description": "Last reported at/after (ISO)."
|
|
172
|
-
},
|
|
173
|
-
"minPublishers": {
|
|
174
|
-
"type": "integer",
|
|
175
|
-
"minimum": 1,
|
|
176
|
-
"description": "At least this many publishers."
|
|
177
|
-
},
|
|
178
|
-
"unplottableOnly": {
|
|
179
|
-
"type": "boolean",
|
|
180
|
-
"description": "Only events that cannot be a point."
|
|
181
|
-
},
|
|
182
|
-
"responseFormat": {
|
|
183
|
-
"type": "string",
|
|
184
|
-
"enum": [
|
|
185
|
-
"concise",
|
|
186
|
-
"detailed"
|
|
187
|
-
],
|
|
188
|
-
"description": "\"detailed\": full Signal (signals://schema)."
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
"outputSchema": {
|
|
193
|
-
"type": "object",
|
|
194
|
-
"properties": {
|
|
195
|
-
"meta": {
|
|
196
|
-
"type": "object",
|
|
197
|
-
"description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable."
|
|
198
|
-
},
|
|
199
|
-
"summary": {
|
|
200
|
-
"type": "string",
|
|
201
|
-
"description": "One-line natural-language summary of the result, ready to relay to a user."
|
|
202
|
-
},
|
|
203
|
-
"signals": {
|
|
204
|
-
"type": "array",
|
|
205
|
-
"items": {
|
|
206
|
-
"type": "object"
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
"required": [
|
|
211
|
-
"meta",
|
|
212
|
-
"signals"
|
|
213
|
-
]
|
|
214
|
-
},
|
|
215
|
-
"annotations": {
|
|
216
|
-
"readOnlyHint": false,
|
|
217
|
-
"openWorldHint": false,
|
|
218
|
-
"destructiveHint": true
|
|
219
|
-
}
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
"name": "query_stats",
|
|
223
|
-
"description": "Roll-ups over the corpus: totals plus per-category and per-day breakdown. `total` counts the same events query_signals returns, so it matches its meta.total_count for the same query.",
|
|
224
|
-
"inputSchema": {
|
|
225
|
-
"type": "object",
|
|
226
|
-
"properties": {
|
|
227
|
-
"bbox": {
|
|
228
|
-
"type": "array",
|
|
229
|
-
"items": {
|
|
230
|
-
"type": "number"
|
|
231
|
-
},
|
|
232
|
-
"minItems": 4,
|
|
233
|
-
"maxItems": 4,
|
|
234
|
-
"description": "[minLon, minLat, maxLon, maxLat] WGS84. Omit for worldwide."
|
|
235
|
-
},
|
|
236
|
-
"date": {
|
|
237
|
-
"type": "string",
|
|
238
|
-
"description": "Window end date, YYYY-MM-DD (UTC). Defaults to today. Records start 2026-09-23 (earlier: unrecorded, not quiet). Plan-bounded: meta.window_clamp."
|
|
239
|
-
},
|
|
240
|
-
"days": {
|
|
241
|
-
"type": "integer",
|
|
242
|
-
"minimum": 1,
|
|
243
|
-
"description": "Window length in days. Defaults to 1."
|
|
244
|
-
},
|
|
245
|
-
"categories": {
|
|
155
|
+
"collectionLevels": {
|
|
246
156
|
"type": "array",
|
|
247
157
|
"items": {
|
|
248
158
|
"type": "string",
|
|
249
159
|
"enum": [
|
|
250
|
-
"
|
|
251
|
-
"
|
|
252
|
-
"
|
|
253
|
-
"
|
|
254
|
-
"
|
|
255
|
-
"
|
|
256
|
-
"humanitarian",
|
|
257
|
-
"protest",
|
|
258
|
-
"diplomacy",
|
|
259
|
-
"other"
|
|
160
|
+
"GSD<0.1m",
|
|
161
|
+
"GSD<0.5m",
|
|
162
|
+
"GSD<1m",
|
|
163
|
+
"GSD<10m",
|
|
164
|
+
"GSD<100m",
|
|
165
|
+
"Impossible"
|
|
260
166
|
]
|
|
261
167
|
},
|
|
262
|
-
"description": "
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
},
|
|
266
|
-
"outputSchema": {
|
|
267
|
-
"type": "object",
|
|
268
|
-
"properties": {
|
|
269
|
-
"meta": {
|
|
270
|
-
"type": "object",
|
|
271
|
-
"description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable."
|
|
272
|
-
},
|
|
273
|
-
"summary": {
|
|
274
|
-
"type": "string",
|
|
275
|
-
"description": "One-line natural-language summary of the result, ready to relay to a user."
|
|
276
|
-
},
|
|
277
|
-
"stats": {
|
|
278
|
-
"type": "object"
|
|
279
|
-
}
|
|
280
|
-
},
|
|
281
|
-
"required": [
|
|
282
|
-
"meta",
|
|
283
|
-
"stats"
|
|
284
|
-
]
|
|
285
|
-
},
|
|
286
|
-
"annotations": {
|
|
287
|
-
"readOnlyHint": false,
|
|
288
|
-
"openWorldHint": false,
|
|
289
|
-
"destructiveHint": true
|
|
290
|
-
}
|
|
291
|
-
},
|
|
292
|
-
{
|
|
293
|
-
"name": "query_hotspots",
|
|
294
|
-
"description": "Where activity concentrates: density grid-binned into ranked cells with peak severity, categories and representative event_ids. Events too coarse to place are counted in meta.dropped_by_plottable_count, not spread over the grid.",
|
|
295
|
-
"inputSchema": {
|
|
296
|
-
"type": "object",
|
|
297
|
-
"properties": {
|
|
298
|
-
"bbox": {
|
|
299
|
-
"type": "array",
|
|
300
|
-
"items": {
|
|
301
|
-
"type": "number"
|
|
302
|
-
},
|
|
303
|
-
"minItems": 4,
|
|
304
|
-
"maxItems": 4,
|
|
305
|
-
"description": "[minLon, minLat, maxLon, maxLat] WGS84. Omit for worldwide."
|
|
306
|
-
},
|
|
307
|
-
"date": {
|
|
308
|
-
"type": "string",
|
|
309
|
-
"description": "Window end date, YYYY-MM-DD (UTC). Defaults to today. Records start 2026-09-23 (earlier: unrecorded, not quiet). Plan-bounded: meta.window_clamp."
|
|
310
|
-
},
|
|
311
|
-
"days": {
|
|
312
|
-
"type": "integer",
|
|
313
|
-
"minimum": 1,
|
|
314
|
-
"description": "Window length in days. Defaults to 1."
|
|
168
|
+
"description": "Resolution needed (unassessed passes)."
|
|
315
169
|
},
|
|
316
|
-
"
|
|
170
|
+
"escalationTrends": {
|
|
317
171
|
"type": "array",
|
|
318
172
|
"items": {
|
|
319
173
|
"type": "string",
|
|
320
174
|
"enum": [
|
|
321
|
-
"
|
|
322
|
-
"
|
|
323
|
-
"
|
|
324
|
-
"
|
|
325
|
-
"infrastructure",
|
|
326
|
-
"aviation",
|
|
327
|
-
"humanitarian",
|
|
328
|
-
"protest",
|
|
329
|
-
"diplomacy",
|
|
330
|
-
"other"
|
|
175
|
+
"escalating",
|
|
176
|
+
"de-escalating",
|
|
177
|
+
"stable",
|
|
178
|
+
"new"
|
|
331
179
|
]
|
|
332
180
|
},
|
|
333
|
-
"description": "
|
|
181
|
+
"description": "Trend (unassessed passes)."
|
|
334
182
|
},
|
|
335
|
-
"
|
|
336
|
-
"type": "
|
|
337
|
-
"
|
|
338
|
-
|
|
339
|
-
|
|
183
|
+
"sort": {
|
|
184
|
+
"type": "string",
|
|
185
|
+
"enum": [
|
|
186
|
+
"latest",
|
|
187
|
+
"oldest",
|
|
188
|
+
"geoint"
|
|
189
|
+
],
|
|
190
|
+
"description": "Default latest. geoint: visible first, then geoint_score, stage."
|
|
340
191
|
},
|
|
341
|
-
"
|
|
342
|
-
"type": "
|
|
343
|
-
"
|
|
344
|
-
"maximum": 10,
|
|
345
|
-
"description": "Keep only events with severity_score >= this."
|
|
192
|
+
"updatedSince": {
|
|
193
|
+
"type": "string",
|
|
194
|
+
"description": "Refolded at/after (ISO); narrows the window."
|
|
346
195
|
},
|
|
347
196
|
"limit": {
|
|
348
197
|
"type": "integer",
|
|
349
198
|
"minimum": 1,
|
|
350
199
|
"maximum": 500,
|
|
351
|
-
"description": "Max
|
|
200
|
+
"description": "Max rows per page. Default 100."
|
|
201
|
+
},
|
|
202
|
+
"cursor": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"description": "Cursor from meta.next_cursor."
|
|
352
205
|
}
|
|
353
206
|
}
|
|
354
207
|
},
|
|
@@ -363,7 +216,7 @@ export const TOOLS = [
|
|
|
363
216
|
"type": "string",
|
|
364
217
|
"description": "One-line natural-language summary of the result, ready to relay to a user."
|
|
365
218
|
},
|
|
366
|
-
"
|
|
219
|
+
"signals": {
|
|
367
220
|
"type": "array",
|
|
368
221
|
"items": {
|
|
369
222
|
"type": "object"
|
|
@@ -372,7 +225,7 @@ export const TOOLS = [
|
|
|
372
225
|
},
|
|
373
226
|
"required": [
|
|
374
227
|
"meta",
|
|
375
|
-
"
|
|
228
|
+
"signals"
|
|
376
229
|
]
|
|
377
230
|
},
|
|
378
231
|
"annotations": {
|
|
@@ -503,15 +356,13 @@ export const TOOLS = [
|
|
|
503
356
|
],
|
|
504
357
|
"description": "Catalog collection. Default sentinel-2-l2a."
|
|
505
358
|
},
|
|
506
|
-
"
|
|
359
|
+
"startDate": {
|
|
507
360
|
"type": "string",
|
|
508
|
-
"description": "
|
|
361
|
+
"description": "Date range start, YYYY-MM-DD (UTC). With endDate; omit both for the last 7 days (max 30)."
|
|
509
362
|
},
|
|
510
|
-
"
|
|
511
|
-
"type": "
|
|
512
|
-
"
|
|
513
|
-
"maximum": 30,
|
|
514
|
-
"description": "Window length in days. Default 7."
|
|
363
|
+
"endDate": {
|
|
364
|
+
"type": "string",
|
|
365
|
+
"description": "Date range end, YYYY-MM-DD (UTC), inclusive."
|
|
515
366
|
},
|
|
516
367
|
"eventDate": {
|
|
517
368
|
"type": "string",
|
|
@@ -550,14 +401,6 @@ export const TOOLS = [
|
|
|
550
401
|
"minimum": 1,
|
|
551
402
|
"maximum": 100,
|
|
552
403
|
"description": "Max scenes. Default 25."
|
|
553
|
-
},
|
|
554
|
-
"responseFormat": {
|
|
555
|
-
"type": "string",
|
|
556
|
-
"enum": [
|
|
557
|
-
"concise",
|
|
558
|
-
"detailed"
|
|
559
|
-
],
|
|
560
|
-
"description": "\"detailed\" adds footprint geometry, full target_relation and SAR metadata."
|
|
561
404
|
}
|
|
562
405
|
},
|
|
563
406
|
"required": [
|
|
@@ -1204,14 +1047,6 @@ export const TOOLS = [
|
|
|
1204
1047
|
"idempotencyKey": {
|
|
1205
1048
|
"type": "string",
|
|
1206
1049
|
"description": "At-most-once key. Re-sending the SAME key returns the SAME run with no second charge, so a timeout is recoverable."
|
|
1207
|
-
},
|
|
1208
|
-
"response_format": {
|
|
1209
|
-
"type": "string",
|
|
1210
|
-
"enum": [
|
|
1211
|
-
"full",
|
|
1212
|
-
"compact"
|
|
1213
|
-
],
|
|
1214
|
-
"description": "\"compact\" drops the prose brief, returning only the structured result."
|
|
1215
1050
|
}
|
|
1216
1051
|
},
|
|
1217
1052
|
"required": [
|
|
@@ -1318,14 +1153,6 @@ export const TOOLS = [
|
|
|
1318
1153
|
"job_id": {
|
|
1319
1154
|
"type": "string",
|
|
1320
1155
|
"description": "The job_id returned by ask_analyst."
|
|
1321
|
-
},
|
|
1322
|
-
"response_format": {
|
|
1323
|
-
"type": "string",
|
|
1324
|
-
"enum": [
|
|
1325
|
-
"full",
|
|
1326
|
-
"compact"
|
|
1327
|
-
],
|
|
1328
|
-
"description": "\"compact\" drops the prose brief and returns only the structured result."
|
|
1329
1156
|
}
|
|
1330
1157
|
},
|
|
1331
1158
|
"required": [
|
|
@@ -1414,79 +1241,6 @@ export const TOOLS = [
|
|
|
1414
1241
|
"destructiveHint": false
|
|
1415
1242
|
}
|
|
1416
1243
|
},
|
|
1417
|
-
{
|
|
1418
|
-
"name": "query_claims",
|
|
1419
|
-
"description": "The ledger of claims this key was given, each with its evidence class, independent source families and publishers. The point is the time axis: a restated assertion links to the earlier one and says which way the evidence moved.",
|
|
1420
|
-
"inputSchema": {
|
|
1421
|
-
"type": "object",
|
|
1422
|
-
"properties": {
|
|
1423
|
-
"since": {
|
|
1424
|
-
"type": "string",
|
|
1425
|
-
"description": "Only claims asserted on/after this date."
|
|
1426
|
-
},
|
|
1427
|
-
"evidence_class": {
|
|
1428
|
-
"type": "string",
|
|
1429
|
-
"enum": [
|
|
1430
|
-
"CONFIRMED",
|
|
1431
|
-
"REPORTED",
|
|
1432
|
-
"PARTY_CLAIM",
|
|
1433
|
-
"DISPUTED",
|
|
1434
|
-
"ASSESSMENT",
|
|
1435
|
-
"UNKNOWN"
|
|
1436
|
-
],
|
|
1437
|
-
"description": "Restrict to one evidence class."
|
|
1438
|
-
},
|
|
1439
|
-
"restated_only": {
|
|
1440
|
-
"type": "boolean",
|
|
1441
|
-
"description": "Only claims that sit in a restatement chain."
|
|
1442
|
-
},
|
|
1443
|
-
"downgraded_only": {
|
|
1444
|
-
"type": "boolean",
|
|
1445
|
-
"description": "Only claims a later answer restated with WEAKER evidence — read these first."
|
|
1446
|
-
},
|
|
1447
|
-
"event_id": {
|
|
1448
|
-
"type": "string",
|
|
1449
|
-
"description": "Only claims about this event (the UUID from query_signals). `event_link.linked` says whether any resolved."
|
|
1450
|
-
},
|
|
1451
|
-
"limit": {
|
|
1452
|
-
"type": "number",
|
|
1453
|
-
"minimum": 1,
|
|
1454
|
-
"maximum": 200,
|
|
1455
|
-
"description": "How many claims to return (default 50)."
|
|
1456
|
-
}
|
|
1457
|
-
},
|
|
1458
|
-
"required": []
|
|
1459
|
-
},
|
|
1460
|
-
"outputSchema": {
|
|
1461
|
-
"type": "object",
|
|
1462
|
-
"properties": {
|
|
1463
|
-
"summary": {
|
|
1464
|
-
"type": "string",
|
|
1465
|
-
"description": "One-line natural-language summary of the result, ready to relay to a user."
|
|
1466
|
-
},
|
|
1467
|
-
"claims": {
|
|
1468
|
-
"type": "array",
|
|
1469
|
-
"items": {
|
|
1470
|
-
"type": "object"
|
|
1471
|
-
}
|
|
1472
|
-
},
|
|
1473
|
-
"counts": {
|
|
1474
|
-
"type": "object"
|
|
1475
|
-
},
|
|
1476
|
-
"event_link": {
|
|
1477
|
-
"type": "object"
|
|
1478
|
-
}
|
|
1479
|
-
},
|
|
1480
|
-
"required": [
|
|
1481
|
-
"claims"
|
|
1482
|
-
]
|
|
1483
|
-
},
|
|
1484
|
-
"annotations": {
|
|
1485
|
-
"readOnlyHint": true,
|
|
1486
|
-
"openWorldHint": false,
|
|
1487
|
-
"destructiveHint": false
|
|
1488
|
-
}
|
|
1489
|
-
},
|
|
1490
1244
|
{
|
|
1491
1245
|
"name": "query_developments",
|
|
1492
1246
|
"description": "What actually CHANGED about the events in an area, not which articles are new. Each change is labelled `world` (the event's own state moved) or `measurement` (what we can see moved). Plan-dependent values say so (`locked_by`).",
|
|
@@ -1502,14 +1256,13 @@ export const TOOLS = [
|
|
|
1502
1256
|
"maxItems": 4,
|
|
1503
1257
|
"description": "[minLon, minLat, maxLon, maxLat]. Omit for worldwide."
|
|
1504
1258
|
},
|
|
1505
|
-
"
|
|
1259
|
+
"start_date": {
|
|
1506
1260
|
"type": "string",
|
|
1507
|
-
"description": "
|
|
1261
|
+
"description": "Date range start (YYYY-MM-DD). With end_date; omit both for today. Records start 2026-09-23 (earlier: unrecorded, not quiet). Plan-bounded: meta.window_clamp."
|
|
1508
1262
|
},
|
|
1509
|
-
"
|
|
1510
|
-
"type": "
|
|
1511
|
-
"
|
|
1512
|
-
"description": "Window length ending at `date` (default 7)."
|
|
1263
|
+
"end_date": {
|
|
1264
|
+
"type": "string",
|
|
1265
|
+
"description": "Date range end (YYYY-MM-DD), inclusive."
|
|
1513
1266
|
},
|
|
1514
1267
|
"categories": {
|
|
1515
1268
|
"type": "array",
|
|
@@ -1648,7 +1401,7 @@ export const TOOLS = [
|
|
|
1648
1401
|
},
|
|
1649
1402
|
{
|
|
1650
1403
|
"name": "create_standing_order",
|
|
1651
|
-
"description": "Put an area under CONTINUOUS watch
|
|
1404
|
+
"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.**",
|
|
1652
1405
|
"inputSchema": {
|
|
1653
1406
|
"type": "object",
|
|
1654
1407
|
"properties": {
|
|
@@ -1661,38 +1414,10 @@ export const TOOLS = [
|
|
|
1661
1414
|
"maxItems": 4,
|
|
1662
1415
|
"description": "[west, south, east, north] WGS84. Required — a global order would fire on everything."
|
|
1663
1416
|
},
|
|
1664
|
-
"question": {
|
|
1665
|
-
"type": "string",
|
|
1666
|
-
"description": "Omit for \"what changed in this area, and what does it mean?\"."
|
|
1667
|
-
},
|
|
1668
1417
|
"name": {
|
|
1669
1418
|
"type": "string",
|
|
1670
1419
|
"description": "Label for the order (default \"Standing order\")."
|
|
1671
1420
|
},
|
|
1672
|
-
"cadence": {
|
|
1673
|
-
"type": "string",
|
|
1674
|
-
"enum": [
|
|
1675
|
-
"daily",
|
|
1676
|
-
"weekly",
|
|
1677
|
-
"monthly"
|
|
1678
|
-
],
|
|
1679
|
-
"description": "How often to CHECK (checking is free). Default weekly; faster may need a higher plan."
|
|
1680
|
-
},
|
|
1681
|
-
"categories": {
|
|
1682
|
-
"type": "array",
|
|
1683
|
-
"items": {
|
|
1684
|
-
"type": "string"
|
|
1685
|
-
},
|
|
1686
|
-
"description": "Restrict the watch to these Delta categories."
|
|
1687
|
-
},
|
|
1688
|
-
"min_geoint_score": {
|
|
1689
|
-
"type": "number",
|
|
1690
|
-
"description": "Reporting bar (0-10, default 6)."
|
|
1691
|
-
},
|
|
1692
|
-
"min_new_events": {
|
|
1693
|
-
"type": "number",
|
|
1694
|
-
"description": "New qualifying events needed to trigger a run (default 1)."
|
|
1695
|
-
},
|
|
1696
1421
|
"notify_email": {
|
|
1697
1422
|
"type": "boolean",
|
|
1698
1423
|
"description": "Email on fire (default true); readable via list_standing_orders anyway."
|
|
@@ -1711,12 +1436,6 @@ export const TOOLS = [
|
|
|
1711
1436
|
},
|
|
1712
1437
|
"order": {
|
|
1713
1438
|
"type": "object"
|
|
1714
|
-
},
|
|
1715
|
-
"projected_monthly_tokens_typical": {
|
|
1716
|
-
"type": "number"
|
|
1717
|
-
},
|
|
1718
|
-
"projected_monthly_tokens_max": {
|
|
1719
|
-
"type": "number"
|
|
1720
1439
|
}
|
|
1721
1440
|
},
|
|
1722
1441
|
"required": [
|
|
@@ -1890,47 +1609,6 @@ export const TOOLS = [
|
|
|
1890
1609
|
"destructiveHint": false
|
|
1891
1610
|
}
|
|
1892
1611
|
},
|
|
1893
|
-
{
|
|
1894
|
-
"name": "delete_standing_order",
|
|
1895
|
-
"description": "Delete a standing order, or pause/resume with active=false/true. A paused order still counts against the plan limit.",
|
|
1896
|
-
"inputSchema": {
|
|
1897
|
-
"type": "object",
|
|
1898
|
-
"properties": {
|
|
1899
|
-
"order_id": {
|
|
1900
|
-
"type": "string",
|
|
1901
|
-
"description": "From create_standing_order or list_standing_orders."
|
|
1902
|
-
},
|
|
1903
|
-
"active": {
|
|
1904
|
-
"type": "boolean",
|
|
1905
|
-
"description": "Omit to DELETE. false pauses, true resumes."
|
|
1906
|
-
}
|
|
1907
|
-
},
|
|
1908
|
-
"required": [
|
|
1909
|
-
"order_id"
|
|
1910
|
-
]
|
|
1911
|
-
},
|
|
1912
|
-
"outputSchema": {
|
|
1913
|
-
"type": "object",
|
|
1914
|
-
"properties": {
|
|
1915
|
-
"summary": {
|
|
1916
|
-
"type": "string",
|
|
1917
|
-
"description": "One-line natural-language summary of the result, ready to relay to a user."
|
|
1918
|
-
},
|
|
1919
|
-
"deleted": {
|
|
1920
|
-
"type": "string"
|
|
1921
|
-
},
|
|
1922
|
-
"order": {
|
|
1923
|
-
"type": "object"
|
|
1924
|
-
}
|
|
1925
|
-
}
|
|
1926
|
-
},
|
|
1927
|
-
"annotations": {
|
|
1928
|
-
"readOnlyHint": false,
|
|
1929
|
-
"openWorldHint": false,
|
|
1930
|
-
"destructiveHint": true,
|
|
1931
|
-
"idempotentHint": true
|
|
1932
|
-
}
|
|
1933
|
-
},
|
|
1934
1612
|
{
|
|
1935
1613
|
"name": "list_monitored_areas",
|
|
1936
1614
|
"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.**",
|
|
@@ -2027,6 +1705,10 @@ export const TOOLS = [
|
|
|
2027
1705
|
"type": "string",
|
|
2028
1706
|
"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."
|
|
2029
1707
|
},
|
|
1708
|
+
"satellite": {
|
|
1709
|
+
"type": "string",
|
|
1710
|
+
"description": "Pick the sensor like the app does (e.g. ship detection on NISAR_L2_GCOV_PROVISIONAL_V1). Default: the metric’s first."
|
|
1711
|
+
},
|
|
2030
1712
|
"name": {
|
|
2031
1713
|
"type": "string",
|
|
2032
1714
|
"description": "Label for the area (default \"Monitored area\")."
|
|
@@ -2164,103 +1846,6 @@ export const TOOLS = [
|
|
|
2164
1846
|
"destructiveHint": false
|
|
2165
1847
|
}
|
|
2166
1848
|
},
|
|
2167
|
-
{
|
|
2168
|
-
"name": "get_decision_package",
|
|
2169
|
-
"description": "Everything needed to decide what to collect next about one watch, in one object. **Only `absent` asserts a negative** — `inconclusive` means imagery could not answer, `not_collected` means no valid look happened. `revision` is a content hash.",
|
|
2170
|
-
"inputSchema": {
|
|
2171
|
-
"type": "object",
|
|
2172
|
-
"properties": {
|
|
2173
|
-
"watch_id": {
|
|
2174
|
-
"type": "string",
|
|
2175
|
-
"description": "Id from list_watches."
|
|
2176
|
-
}
|
|
2177
|
-
},
|
|
2178
|
-
"required": [
|
|
2179
|
-
"watch_id"
|
|
2180
|
-
]
|
|
2181
|
-
},
|
|
2182
|
-
"outputSchema": {
|
|
2183
|
-
"type": "object",
|
|
2184
|
-
"properties": {
|
|
2185
|
-
"summary": {
|
|
2186
|
-
"type": "string",
|
|
2187
|
-
"description": "One-line natural-language summary of the result, ready to relay to a user."
|
|
2188
|
-
},
|
|
2189
|
-
"schema_version": {
|
|
2190
|
-
"type": "string"
|
|
2191
|
-
},
|
|
2192
|
-
"package_id": {
|
|
2193
|
-
"type": "string"
|
|
2194
|
-
},
|
|
2195
|
-
"external_key": {
|
|
2196
|
-
"type": "string"
|
|
2197
|
-
},
|
|
2198
|
-
"revision": {
|
|
2199
|
-
"type": "string"
|
|
2200
|
-
},
|
|
2201
|
-
"generated_at": {
|
|
2202
|
-
"type": "string"
|
|
2203
|
-
},
|
|
2204
|
-
"watch": {
|
|
2205
|
-
"type": "object"
|
|
2206
|
-
},
|
|
2207
|
-
"target": {
|
|
2208
|
-
"type": "object"
|
|
2209
|
-
},
|
|
2210
|
-
"current_state": {
|
|
2211
|
-
"type": "object"
|
|
2212
|
-
},
|
|
2213
|
-
"claims": {
|
|
2214
|
-
"type": "array",
|
|
2215
|
-
"items": {
|
|
2216
|
-
"type": "object"
|
|
2217
|
-
}
|
|
2218
|
-
},
|
|
2219
|
-
"collection_options": {
|
|
2220
|
-
"type": "object"
|
|
2221
|
-
},
|
|
2222
|
-
"observations": {
|
|
2223
|
-
"type": "array",
|
|
2224
|
-
"items": {
|
|
2225
|
-
"type": "object"
|
|
2226
|
-
}
|
|
2227
|
-
},
|
|
2228
|
-
"negative_evidence": {
|
|
2229
|
-
"type": "array",
|
|
2230
|
-
"items": {
|
|
2231
|
-
"type": "object"
|
|
2232
|
-
}
|
|
2233
|
-
},
|
|
2234
|
-
"assessments": {
|
|
2235
|
-
"type": "array",
|
|
2236
|
-
"items": {
|
|
2237
|
-
"type": "object"
|
|
2238
|
-
}
|
|
2239
|
-
},
|
|
2240
|
-
"limitations": {
|
|
2241
|
-
"type": "array",
|
|
2242
|
-
"items": {
|
|
2243
|
-
"type": "string"
|
|
2244
|
-
}
|
|
2245
|
-
},
|
|
2246
|
-
"note": {
|
|
2247
|
-
"type": "string"
|
|
2248
|
-
}
|
|
2249
|
-
},
|
|
2250
|
-
"required": [
|
|
2251
|
-
"summary",
|
|
2252
|
-
"revision",
|
|
2253
|
-
"negative_evidence",
|
|
2254
|
-
"limitations",
|
|
2255
|
-
"note"
|
|
2256
|
-
]
|
|
2257
|
-
},
|
|
2258
|
-
"annotations": {
|
|
2259
|
-
"readOnlyHint": false,
|
|
2260
|
-
"openWorldHint": false,
|
|
2261
|
-
"destructiveHint": true
|
|
2262
|
-
}
|
|
2263
|
-
},
|
|
2264
1849
|
{
|
|
2265
1850
|
"name": "create_watch",
|
|
2266
1851
|
"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.",
|
|
@@ -2356,7 +1941,7 @@ export const TOOLS = [
|
|
|
2356
1941
|
},
|
|
2357
1942
|
{
|
|
2358
1943
|
"name": "update_watch",
|
|
2359
|
-
"description": "
|
|
1944
|
+
"description": "Pause, resume or close a watch. **Pausing is not a display state**: monitored areas stop being measured and charged, standing orders stop checking. **Closing states how the question ended** (close_reason).",
|
|
2360
1945
|
"inputSchema": {
|
|
2361
1946
|
"type": "object",
|
|
2362
1947
|
"properties": {
|
|
@@ -2364,10 +1949,6 @@ export const TOOLS = [
|
|
|
2364
1949
|
"type": "string",
|
|
2365
1950
|
"description": "Id from list_watches."
|
|
2366
1951
|
},
|
|
2367
|
-
"name": {
|
|
2368
|
-
"type": "string",
|
|
2369
|
-
"description": "New label."
|
|
2370
|
-
},
|
|
2371
1952
|
"status": {
|
|
2372
1953
|
"type": "string",
|
|
2373
1954
|
"enum": [
|
|
@@ -2577,7 +2158,7 @@ export const TOOLS = [
|
|
|
2577
2158
|
},
|
|
2578
2159
|
{
|
|
2579
2160
|
"name": "search_entities",
|
|
2580
|
-
"description": "Find a place
|
|
2161
|
+
"description": "Find a named place (airport, base, plant, port, dam, strait…) in any language or by IATA/ICAO code. Max 50.",
|
|
2581
2162
|
"inputSchema": {
|
|
2582
2163
|
"type": "object",
|
|
2583
2164
|
"properties": {
|
|
@@ -2594,11 +2175,16 @@ export const TOOLS = [
|
|
|
2594
2175
|
"military_base",
|
|
2595
2176
|
"airport",
|
|
2596
2177
|
"refinery_energy",
|
|
2178
|
+
"nuclear_facility",
|
|
2179
|
+
"launch_site",
|
|
2180
|
+
"dam",
|
|
2181
|
+
"bridge",
|
|
2182
|
+
"government_site",
|
|
2597
2183
|
"chokepoint",
|
|
2598
2184
|
"water_body"
|
|
2599
2185
|
]
|
|
2600
2186
|
},
|
|
2601
|
-
"description": "
|
|
2187
|
+
"description": "Kinds to keep. Omit for all."
|
|
2602
2188
|
},
|
|
2603
2189
|
"limit": {
|
|
2604
2190
|
"type": "number",
|
|
@@ -2672,9 +2258,6 @@ export const TOOLS = [
|
|
|
2672
2258
|
},
|
|
2673
2259
|
"events_24h": {
|
|
2674
2260
|
"type": "number"
|
|
2675
|
-
},
|
|
2676
|
-
"claim_count": {
|
|
2677
|
-
"type": "number"
|
|
2678
2261
|
}
|
|
2679
2262
|
},
|
|
2680
2263
|
"required": [
|
|
@@ -3026,9 +2609,10 @@ export const TOOLS = [
|
|
|
3026
2609
|
"type": "string",
|
|
3027
2610
|
"enum": [
|
|
3028
2611
|
"sentinel-1-grd",
|
|
3029
|
-
"sentinel-1-rtc"
|
|
2612
|
+
"sentinel-1-rtc",
|
|
2613
|
+
"NISAR_L2_GCOV_PROVISIONAL_V1"
|
|
3030
2614
|
],
|
|
3031
|
-
"description": "Collection of the scene
|
|
2615
|
+
"description": "Collection of the scene (Sentinel-1, or NISAR L-band — converted first, extra tokens)."
|
|
3032
2616
|
},
|
|
3033
2617
|
"item_id": {
|
|
3034
2618
|
"type": "string",
|
|
@@ -3115,12 +2699,6 @@ export const RESOURCES = [
|
|
|
3115
2699
|
"description": "Remaining token balance and plan capabilities for the calling key. Free.",
|
|
3116
2700
|
"mimeType": "application/json"
|
|
3117
2701
|
},
|
|
3118
|
-
{
|
|
3119
|
-
"uri": "imagery://collections",
|
|
3120
|
-
"name": "Imagery collections",
|
|
3121
|
-
"description": "The satellite catalog collections searchable via search_imagery — Sentinel-1 C-band SAR, Sentinel-2 optical, and NISAR L-band SAR (provisional calibration). Free.",
|
|
3122
|
-
"mimeType": "application/json"
|
|
3123
|
-
},
|
|
3124
2702
|
{
|
|
3125
2703
|
"uri": "status://current",
|
|
3126
2704
|
"name": "Data freshness & pipeline status",
|
|
@@ -3142,59 +2720,4 @@ export const RESOURCE_TEMPLATES = [
|
|
|
3142
2720
|
"mimeType": "application/json"
|
|
3143
2721
|
}
|
|
3144
2722
|
];
|
|
3145
|
-
export const PROMPTS = [
|
|
3146
|
-
{
|
|
3147
|
-
"name": "daily-situation-briefing",
|
|
3148
|
-
"description": "Summarize the current world situation from the Daily World Brief.",
|
|
3149
|
-
"arguments": [
|
|
3150
|
-
{
|
|
3151
|
-
"name": "date",
|
|
3152
|
-
"description": "UTC date YYYY-MM-DD (optional; defaults to latest).",
|
|
3153
|
-
"required": false
|
|
3154
|
-
}
|
|
3155
|
-
]
|
|
3156
|
-
},
|
|
3157
|
-
{
|
|
3158
|
-
"name": "assess-top-signal",
|
|
3159
|
-
"description": "Find the highest-severity recent signal in an area/category and run an RS assessment.",
|
|
3160
|
-
"arguments": [
|
|
3161
|
-
{
|
|
3162
|
-
"name": "bbox",
|
|
3163
|
-
"description": "Bounding box \"minLon,minLat,maxLon,maxLat\" (optional).",
|
|
3164
|
-
"required": false
|
|
3165
|
-
},
|
|
3166
|
-
{
|
|
3167
|
-
"name": "category",
|
|
3168
|
-
"description": "Category filter (optional).",
|
|
3169
|
-
"required": false
|
|
3170
|
-
}
|
|
3171
|
-
]
|
|
3172
|
-
},
|
|
3173
|
-
{
|
|
3174
|
-
"name": "aoi-watch",
|
|
3175
|
-
"description": "Scan an area of interest for recent escalations and recommend collection.",
|
|
3176
|
-
"arguments": [
|
|
3177
|
-
{
|
|
3178
|
-
"name": "bbox",
|
|
3179
|
-
"description": "Bounding box \"minLon,minLat,maxLon,maxLat\".",
|
|
3180
|
-
"required": true
|
|
3181
|
-
}
|
|
3182
|
-
]
|
|
3183
|
-
},
|
|
3184
|
-
{
|
|
3185
|
-
"name": "market-exposure-check",
|
|
3186
|
-
"description": "Find recent events that could plausibly move a given market (oil, grain, shipping, ...) and explain each transmission channel. Informational only — not investment advice.",
|
|
3187
|
-
"arguments": [
|
|
3188
|
-
{
|
|
3189
|
-
"name": "market",
|
|
3190
|
-
"description": "Market to check: oil, natural_gas, grain, shipping, defense, metals, semiconductors, fx, equities.",
|
|
3191
|
-
"required": true
|
|
3192
|
-
},
|
|
3193
|
-
{
|
|
3194
|
-
"name": "days",
|
|
3195
|
-
"description": "Lookback window in days (optional; default 3).",
|
|
3196
|
-
"required": false
|
|
3197
|
-
}
|
|
3198
|
-
]
|
|
3199
|
-
}
|
|
3200
|
-
];
|
|
2723
|
+
export const PROMPTS = [];
|
package/dist/index.js
CHANGED
|
@@ -10,18 +10,18 @@
|
|
|
10
10
|
* registries only speak local stdio, or prefer a bearer key over interactive
|
|
11
11
|
* OAuth. This binary gives them the same tool surface with a single env var.
|
|
12
12
|
*
|
|
13
|
-
* Introspection (initialize / tools/list / resources/list
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* Introspection (initialize / tools/list / resources/list) is answered from a
|
|
14
|
+
* bundled catalog and needs NO credentials, so registries can inspect the server
|
|
15
|
+
* in a bare container. Only tools/call and resources/read reach the network, and
|
|
16
|
+
* those require OFFNADIR_DELTA_API_KEY.
|
|
17
17
|
*/
|
|
18
18
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
19
19
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
20
20
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
21
21
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
22
|
-
import { CallToolRequestSchema,
|
|
23
|
-
import {
|
|
24
|
-
const VERSION = '
|
|
22
|
+
import { CallToolRequestSchema, ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
23
|
+
import { RESOURCES, RESOURCE_TEMPLATES, TOOLS } from './catalog.js';
|
|
24
|
+
const VERSION = '2.0.0';
|
|
25
25
|
const REMOTE_URL = new URL(process.env.OFFNADIR_DELTA_MCP_URL ?? 'https://offnadir-delta.com/api/v1/mcp');
|
|
26
26
|
/** Lazily-connected client to the hosted remote MCP server. */
|
|
27
27
|
let remote = null;
|
|
@@ -63,12 +63,11 @@ async function getRemote() {
|
|
|
63
63
|
throw err;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
const server = new Server({ name: 'off-nadir-delta', title: 'Off-Nadir Delta', version: VERSION }, { capabilities: { tools: {}, resources: {}
|
|
66
|
+
const server = new Server({ name: 'off-nadir-delta', title: 'Off-Nadir Delta', version: VERSION }, { capabilities: { tools: {}, resources: {} } });
|
|
67
67
|
// --- Introspection: answered locally, no network, no credentials. ---
|
|
68
68
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
69
69
|
server.setRequestHandler(ListResourcesRequestSchema, async () => ({ resources: RESOURCES }));
|
|
70
70
|
server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({ resourceTemplates: RESOURCE_TEMPLATES }));
|
|
71
|
-
server.setRequestHandler(ListPromptsRequestSchema, async () => ({ prompts: PROMPTS }));
|
|
72
71
|
// --- Execution: forwarded to the hosted remote server with the caller's key. ---
|
|
73
72
|
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
74
73
|
const client = await getRemote();
|
|
@@ -78,10 +77,6 @@ server.setRequestHandler(ReadResourceRequestSchema, async (req) => {
|
|
|
78
77
|
const client = await getRemote();
|
|
79
78
|
return client.readResource({ uri: req.params.uri });
|
|
80
79
|
});
|
|
81
|
-
server.setRequestHandler(GetPromptRequestSchema, async (req) => {
|
|
82
|
-
const client = await getRemote();
|
|
83
|
-
return client.getPrompt({ name: req.params.name, arguments: req.params.arguments ?? {} });
|
|
84
|
-
});
|
|
85
80
|
async function main() {
|
|
86
81
|
const transport = new StdioServerTransport();
|
|
87
82
|
await server.connect(transport);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "offnadir-delta-mcp",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Local (stdio) MCP server for Off-Nadir Delta
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Local (stdio) MCP server for Off-Nadir Delta — live, geolocated world-event intelligence, a Daily World Brief, satellite-imagery search, and an OSINT/GEOINT analyst. Forwards to the hosted server with your API key.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"offnadir-delta-mcp": "dist/index.js"
|