offnadir-delta-mcp 1.19.0 → 1.22.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 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
- `30` tools · MCP server version `1.19.0` · [full reference](https://offnadir-delta.com/docs/mcp)
19
+ `37` tools · MCP server version `1.22.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
- 16 of the 30 tools cost nothing, so the first thing you run is free:
80
+ 20 of the 37 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.
@@ -101,6 +101,9 @@ What is happening, where it concentrates, and what today looks like.
101
101
  | `get_world_brief` | Fetch the Daily World Brief — an AI-synthesized OSINT/GEOINT digest of the previous UTC day's worldwide event signals (headline, executive summary, top developments with why-it-matters and what-to-watch, per-theme roll-up, ranked signals). | free |
102
102
  | `query_developments` | What actually CHANGED about the events in an area — not which articles are new. | 3 tok |
103
103
  | `get_event_thread` | The full history of ONE event: its current state, and every change in the order it happened. | free |
104
+ | `search_entities` | Find a place in the location registry — ports and harbours, military bases and airfields, power and energy plants, maritime chokepoints and named seas. | 1 tok |
105
+ | `get_entity` | What has happened at one place. | 1 tok |
106
+ | `get_related_events` | What else connects to one event, and what came before and after it. | 3–8 tok |
104
107
 
105
108
  ### Plan
106
109
 
@@ -139,9 +142,13 @@ Stand up continuous coverage and be told only when the answer changes. Creating
139
142
  | `create_standing_order` | Put an area under CONTINUOUS watch: save a question plus a bounding box and Delta re-answers it on a schedule, notifying only when the answer actually changed. | free |
140
143
  | `list_standing_orders` | List the standing orders on this key, with each one’s cadence, watched area, when it last checked, when it last actually fired, and how many consecutive checks found nothing (quiet_checks — a high number means the watch is not earning its place). | free |
141
144
  | `delete_standing_order` | Delete a standing order by id, or pause/resume it instead by passing active=false/true. | free |
142
- | `list_monitored_areas` | List the places under continuous satellite measurement on this key (Delta Monitor), with each area’s metric, most recent value, change since the previous measurement, whether that value was flagged anomalous, and coverage — how many acquisitions were measured versus how many exist. | free |
145
+ | `list_monitored_areas` | List the places under continuous satellite measurement on this key (Delta Watchlist measurements), with each area’s metric, most recent value, change since the previous measurement, whether that value was flagged anomalous, and coverage — how many acquisitions were measured versus how many exist. | free |
143
146
  | `get_monitored_area` | Fetch one monitored area with its full measurement history — every acquisition that was measured, its value, and whether it was flagged anomalous. | free |
144
147
  | `create_monitored_area` | Put a place under continuous satellite measurement: pick an area and what to count, and every new Sentinel-1 / Sentinel-2 / VIIRS acquisition over it is measured automatically from then on. | free |
148
+ | `list_watches` | The Watchlist: everything this account keeps watch on — areas under satellite measurement, areas under event watch (standing orders), and real-world events being tracked — aggregated as one list with a state bucket per watch: needs_attention (anomaly, error, or a notable development), changed_today (a meaningful change in the last 24 h), awaiting_data, or stable. | free |
149
+ | `get_watch` | One watch end to end, in a single call: its target, current state, latest meaningful change, measurements with their recent series, standing-order questions, and — for an event watch — the event’s verification state, casualty/attribution fields, recent developments, imagery availability, and the full event thread (timeline + sources). | free |
150
+ | `create_watch` | Add a target to the Watchlist. | free |
151
+ | `delete_watch` | Delete a watch by id. | free |
145
152
 
146
153
  ### Workspace
147
154
 
@@ -195,6 +202,7 @@ Keys are shown once at creation, hashed at rest, and revocable at any time from
195
202
  | `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. |
196
203
  | `status://current` | How current the data is (ingestion/enrichment frontier), the Daily World Brief status, and an Operational/Delayed/Degraded roll-up. Free. |
197
204
  | `brief://{date}` | The Daily World Brief for a specific UTC date (YYYY-MM-DD). Free. |
205
+ | `watch://{watch_id}` | A Watchlist entry with its current state, latest meaningful change, measurements and (for event watches) the full event thread — the same body get_watch returns. Free. |
198
206
 
199
207
  | Prompt | Description |
200
208
  | --- | --- |
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 1.19.0.
16
+ // Generated for Off-Nadir Delta MCP 1.22.0.
17
17
  export const TOOLS = [
18
18
  {
19
19
  "name": "query_signals",
@@ -810,7 +810,12 @@ export const TOOLS = [
810
810
  "worldview",
811
811
  "iceye",
812
812
  "capella",
813
- "skysat"
813
+ "skysat",
814
+ "umbra",
815
+ "synspective",
816
+ "iqps",
817
+ "radarsat-2",
818
+ "cosmo-skymed"
814
819
  ]
815
820
  },
816
821
  "description": "Families to consider. Omit for all seven. Use this to compare \"free systematic only\" against \"what could I task\"."
@@ -1182,6 +1187,10 @@ export const TOOLS = [
1182
1187
  "type": "boolean",
1183
1188
  "description": "Only claims a later answer restated with WEAKER evidence — read these first."
1184
1189
  },
1190
+ "event_id": {
1191
+ "type": "number",
1192
+ "description": "Only claims about this event (global event id). Claims carry no event id — they are matched through the registry facilities the event is linked to, so an event with no facility link returns nothing rather than a guess (`event_link.linked` says which happened)."
1193
+ },
1185
1194
  "limit": {
1186
1195
  "type": "number",
1187
1196
  "minimum": 1,
@@ -1206,6 +1215,9 @@ export const TOOLS = [
1206
1215
  },
1207
1216
  "counts": {
1208
1217
  "type": "object"
1218
+ },
1219
+ "event_link": {
1220
+ "type": "object"
1209
1221
  }
1210
1222
  },
1211
1223
  "required": [
@@ -1657,7 +1669,7 @@ export const TOOLS = [
1657
1669
  },
1658
1670
  {
1659
1671
  "name": "list_monitored_areas",
1660
- "description": "List the places under continuous satellite measurement on this key (Delta Monitor), with each area’s metric, most recent value, change since the previous measurement, whether that value was flagged anomalous, and coverage — how many acquisitions were measured versus how many exist. Coverage window_total is null when the catalog total is UNKNOWN; null never means zero. Also returns how many areas the plan allows and how many remain. Free of token charges.",
1672
+ "description": "List the places under continuous satellite measurement on this key (Delta Watchlist measurements), with each area’s metric, most recent value, change since the previous measurement, whether that value was flagged anomalous, and coverage — how many acquisitions were measured versus how many exist. Coverage window_total is null when the catalog total is UNKNOWN; null never means zero. Also returns how many areas the plan allows and how many remain. Free of token charges.",
1661
1673
  "inputSchema": {
1662
1674
  "type": "object",
1663
1675
  "properties": {},
@@ -1789,6 +1801,379 @@ export const TOOLS = [
1789
1801
  "destructiveHint": false
1790
1802
  }
1791
1803
  },
1804
+ {
1805
+ "name": "list_watches",
1806
+ "description": "The Watchlist: everything this account keeps watch on — areas under satellite measurement, areas under event watch (standing orders), and real-world events being tracked — aggregated as one list with a state bucket per watch: needs_attention (anomaly, error, or a notable development), changed_today (a meaningful change in the last 24 h), awaiting_data, or stable. A watch groups everything on the same target: a monitored metric and a standing order on the same bbox appear as ONE watch with both capabilities. Also returns how many active watches the plan allows. Free of token charges.",
1807
+ "inputSchema": {
1808
+ "type": "object",
1809
+ "properties": {},
1810
+ "required": []
1811
+ },
1812
+ "outputSchema": {
1813
+ "type": "object",
1814
+ "properties": {
1815
+ "summary": {
1816
+ "type": "string",
1817
+ "description": "One-line natural-language summary of the result, ready to relay to a user."
1818
+ },
1819
+ "watches": {
1820
+ "type": "array",
1821
+ "items": {
1822
+ "type": "object"
1823
+ }
1824
+ },
1825
+ "buckets": {
1826
+ "type": "object"
1827
+ },
1828
+ "limits": {
1829
+ "type": "object"
1830
+ }
1831
+ },
1832
+ "required": [
1833
+ "watches"
1834
+ ]
1835
+ },
1836
+ "annotations": {
1837
+ "readOnlyHint": true,
1838
+ "openWorldHint": false,
1839
+ "destructiveHint": false
1840
+ }
1841
+ },
1842
+ {
1843
+ "name": "get_watch",
1844
+ "description": "One watch end to end, in a single call: its target, current state, latest meaningful change, measurements with their recent series, standing-order questions, and — for an event watch — the event’s verification state, casualty/attribution fields, recent developments, imagery availability, and the full event thread (timeline + sources). Built so an agent does not need a chain of follow-up calls to answer \"what is the state of what I watch\". Free of token charges unless include_passes is set; an area watch’s FULL measurement history remains get_monitored_area (export-gated) — this returns the recent series.",
1845
+ "inputSchema": {
1846
+ "type": "object",
1847
+ "properties": {
1848
+ "watch_id": {
1849
+ "type": "string",
1850
+ "description": "The id from list_watches or create_watch."
1851
+ },
1852
+ "include_passes": {
1853
+ "type": "boolean",
1854
+ "description": "Add the collection outlook for this watch: which operators can image the target, when, at what off-nadir geometry, and whether a commercial tasking order is needed. Costs the same as predict_satellite_passes because it is the same answer — omit it and the call stays free. Off-Nadir Delta does not broker tasking; the outlook names where to order."
1855
+ }
1856
+ },
1857
+ "required": [
1858
+ "watch_id"
1859
+ ]
1860
+ },
1861
+ "outputSchema": {
1862
+ "type": "object",
1863
+ "properties": {
1864
+ "summary": {
1865
+ "type": "string",
1866
+ "description": "One-line natural-language summary of the result, ready to relay to a user."
1867
+ },
1868
+ "watch": {
1869
+ "type": "object"
1870
+ },
1871
+ "thread": {
1872
+ "type": "object"
1873
+ }
1874
+ },
1875
+ "required": [
1876
+ "watch"
1877
+ ]
1878
+ },
1879
+ "annotations": {
1880
+ "readOnlyHint": true,
1881
+ "openWorldHint": false,
1882
+ "destructiveHint": false
1883
+ }
1884
+ },
1885
+ {
1886
+ "name": "create_watch",
1887
+ "description": "Add a target to the Watchlist. Two target types: an EVENT (pass the signal’s event id — the server resolves and binds the canonical event, so further reporting and even a later cluster merge stay on the same watch; never watch an article URL) or an AREA (pass a bbox — created as a saved bookmark; to actually measure something there use create_monitored_area, and to watch its events use create_standing_order — both auto-join the same watch). Free to create; event watches track state that is computed for everyone and never charge. Active watches are plan-limited.",
1888
+ "inputSchema": {
1889
+ "type": "object",
1890
+ "properties": {
1891
+ "target_type": {
1892
+ "type": "string",
1893
+ "enum": [
1894
+ "event",
1895
+ "area"
1896
+ ],
1897
+ "description": "What kind of target to watch."
1898
+ },
1899
+ "event_id": {
1900
+ "type": "number",
1901
+ "description": "The signal’s numeric event id (required for target_type \"event\")."
1902
+ },
1903
+ "bbox": {
1904
+ "type": "array",
1905
+ "items": {
1906
+ "type": "number"
1907
+ },
1908
+ "minItems": 4,
1909
+ "maxItems": 4,
1910
+ "description": "[west, south, east, north] WGS84 (required for target_type \"area\")."
1911
+ },
1912
+ "name": {
1913
+ "type": "string",
1914
+ "description": "Label for the watch (defaults from the target)."
1915
+ },
1916
+ "notify_email": {
1917
+ "type": "boolean",
1918
+ "description": "Email on meaningful changes (default false)."
1919
+ }
1920
+ },
1921
+ "required": [
1922
+ "target_type"
1923
+ ]
1924
+ },
1925
+ "outputSchema": {
1926
+ "type": "object",
1927
+ "properties": {
1928
+ "summary": {
1929
+ "type": "string",
1930
+ "description": "One-line natural-language summary of the result, ready to relay to a user."
1931
+ },
1932
+ "watch": {
1933
+ "type": "object"
1934
+ },
1935
+ "already_existed": {
1936
+ "type": "boolean"
1937
+ }
1938
+ },
1939
+ "required": [
1940
+ "watch"
1941
+ ]
1942
+ },
1943
+ "annotations": {
1944
+ "readOnlyHint": false,
1945
+ "openWorldHint": false,
1946
+ "destructiveHint": false
1947
+ }
1948
+ },
1949
+ {
1950
+ "name": "delete_watch",
1951
+ "description": "Delete a watch by id. This deletes the watch AND its underlying resources — bound monitored areas (with their measurement history) and standing orders are removed, exactly as the in-app Watchlist does. An event watch has no underlying resource; only the watch is removed. To stop without losing anything, pause instead: PATCH /api/v1/watches/{watchId} with status \"paused\" (also resumable). Free of token charges.",
1952
+ "inputSchema": {
1953
+ "type": "object",
1954
+ "properties": {
1955
+ "watch_id": {
1956
+ "type": "string",
1957
+ "description": "The id from list_watches or create_watch."
1958
+ }
1959
+ },
1960
+ "required": [
1961
+ "watch_id"
1962
+ ]
1963
+ },
1964
+ "outputSchema": {
1965
+ "type": "object",
1966
+ "properties": {
1967
+ "summary": {
1968
+ "type": "string",
1969
+ "description": "One-line natural-language summary of the result, ready to relay to a user."
1970
+ },
1971
+ "deleted": {
1972
+ "type": "string"
1973
+ },
1974
+ "removed": {
1975
+ "type": "object"
1976
+ }
1977
+ }
1978
+ },
1979
+ "annotations": {
1980
+ "readOnlyHint": false,
1981
+ "openWorldHint": false,
1982
+ "destructiveHint": true,
1983
+ "idempotentHint": true
1984
+ }
1985
+ },
1986
+ {
1987
+ "name": "search_entities",
1988
+ "description": "Find a place in the location registry — ports and harbours, military bases and airfields, power and energy plants, maritime chokepoints and named seas. Use it to turn a name into something the other tools can anchor on, or to check whether Delta knows a facility at all. Matches the registry’s own names and aliases; a facility whose only recorded name is in the local script is findable by that name, not by an English one that does not exist in the source. Returns at most 50 rows and has no pagination — this is a lookup, not a data export. Costs 1 token per lookup. Cite the returned attribution wherever a registry name is shown.",
1989
+ "inputSchema": {
1990
+ "type": "object",
1991
+ "properties": {
1992
+ "query": {
1993
+ "type": "string",
1994
+ "description": "Name or partial name (at least 2 characters)."
1995
+ },
1996
+ "subtypes": {
1997
+ "type": "array",
1998
+ "items": {
1999
+ "type": "string",
2000
+ "enum": [
2001
+ "port_facility",
2002
+ "military_base",
2003
+ "airport",
2004
+ "refinery_energy",
2005
+ "chokepoint",
2006
+ "water_body"
2007
+ ]
2008
+ },
2009
+ "description": "Restrict to these kinds of place. Omit for all."
2010
+ },
2011
+ "limit": {
2012
+ "type": "number",
2013
+ "description": "Max rows (1-50, default 20)."
2014
+ }
2015
+ },
2016
+ "required": [
2017
+ "query"
2018
+ ]
2019
+ },
2020
+ "outputSchema": {
2021
+ "type": "object",
2022
+ "properties": {
2023
+ "summary": {
2024
+ "type": "string",
2025
+ "description": "One-line natural-language summary of the result, ready to relay to a user."
2026
+ },
2027
+ "entities": {
2028
+ "type": "array",
2029
+ "items": {
2030
+ "type": "object"
2031
+ }
2032
+ },
2033
+ "limit": {
2034
+ "type": "number"
2035
+ }
2036
+ },
2037
+ "required": [
2038
+ "entities"
2039
+ ]
2040
+ },
2041
+ "annotations": {
2042
+ "readOnlyHint": true,
2043
+ "openWorldHint": false,
2044
+ "destructiveHint": false
2045
+ }
2046
+ },
2047
+ {
2048
+ "name": "get_entity",
2049
+ "description": "What has happened at one place. Returns the registry record plus every event linked to it, each carrying HOW it was linked — `alias_exact_location` means a report named this facility, `geo_proximity` means a report was geolocated within range of it and the distance is given. Read the basis before treating a link as established: proximity is an association, not a statement that the event happened at this facility. Also returns how many Analyst claims mention it. Costs 1 token per lookup.",
2050
+ "inputSchema": {
2051
+ "type": "object",
2052
+ "properties": {
2053
+ "entity_id": {
2054
+ "type": "string",
2055
+ "description": "The id from search_entities."
2056
+ }
2057
+ },
2058
+ "required": [
2059
+ "entity_id"
2060
+ ]
2061
+ },
2062
+ "outputSchema": {
2063
+ "type": "object",
2064
+ "properties": {
2065
+ "summary": {
2066
+ "type": "string",
2067
+ "description": "One-line natural-language summary of the result, ready to relay to a user."
2068
+ },
2069
+ "entity": {
2070
+ "type": "object"
2071
+ },
2072
+ "events": {
2073
+ "type": "array",
2074
+ "items": {
2075
+ "type": "object"
2076
+ }
2077
+ },
2078
+ "link_basis_counts": {
2079
+ "type": "object"
2080
+ },
2081
+ "event_count": {
2082
+ "type": "number"
2083
+ },
2084
+ "claim_count": {
2085
+ "type": "number"
2086
+ }
2087
+ },
2088
+ "required": [
2089
+ "entity"
2090
+ ]
2091
+ },
2092
+ "annotations": {
2093
+ "readOnlyHint": true,
2094
+ "openWorldHint": false,
2095
+ "destructiveHint": false
2096
+ }
2097
+ },
2098
+ {
2099
+ "name": "get_related_events",
2100
+ "description": "What else connects to one event, and what came before and after it. Returns the places the event is linked to, then two kinds of DIRECT relation kept deliberately apart: `shared_entity` (another event at the same facility, strait or sea — the connection is the place, and it is named) and `nearby` (close in space and time only, with the distance and the gap stated). Nearby is NOT a claim of connection; treat it as a prompt to look, not as evidence. `network` holds the indirect events reached by walking shared names outward — kept in a separate array so a second-hop event is never read as sharing anything with the anchor. `insights.development` orders the record into what came BEFORE and what came AFTER along time-respecting paths only, grouping equal timestamps into one step rather than inventing an order inside a day; it asserts sequence, never cause. `insights.graph` returns the event↔connector bipartite graph with rarity weights, so a name shared by many events counts for less than a rare one, and `splits_into` marks the connectors whose removal would break the network apart. `assessment` grades the location against its own 90-day baseline. Costs 3 tokens for the direct relations, plus 1 for each network hop the walk ACTUALLY reaches beyond the first, up to 8 — depth is real work (about 4x the queries and 10x the payload at hop 10 versus hop 1), so it is billed rather than bundled. You are charged for hops taken, not hops requested: when the network runs out early the extra is not charged. The ceiling is fixed by `max_hop` before the call, and `meta` reports `max_charge` next to what was actually taken.",
2101
+ "inputSchema": {
2102
+ "type": "object",
2103
+ "properties": {
2104
+ "event_id": {
2105
+ "type": "number",
2106
+ "description": "The signal id to anchor on."
2107
+ },
2108
+ "max_hop": {
2109
+ "type": "number",
2110
+ "minimum": 1,
2111
+ "maximum": 10,
2112
+ "description": "How far to walk outward from the anchor, in shared-name hops (default 5). 1 returns direct relations only. The default is deliberately shallow because a relation gets weaker with every hop; raise it to trace a chain, and read `accounting.network_depth_reached` — the network often runs out before the depth asked for, and you are only charged for the hops it actually took. This sets the CEILING on the charge (3 + max_hop - 1, capped at 8), not the charge itself."
2113
+ }
2114
+ },
2115
+ "required": [
2116
+ "event_id"
2117
+ ]
2118
+ },
2119
+ "outputSchema": {
2120
+ "type": "object",
2121
+ "properties": {
2122
+ "summary": {
2123
+ "type": "string",
2124
+ "description": "One-line natural-language summary of the result, ready to relay to a user."
2125
+ },
2126
+ "anchor": {
2127
+ "type": "object"
2128
+ },
2129
+ "entities": {
2130
+ "type": "array",
2131
+ "items": {
2132
+ "type": "object"
2133
+ }
2134
+ },
2135
+ "related": {
2136
+ "type": "array",
2137
+ "items": {
2138
+ "type": "object"
2139
+ }
2140
+ },
2141
+ "network": {
2142
+ "type": "array",
2143
+ "items": {
2144
+ "type": "object"
2145
+ }
2146
+ },
2147
+ "nearby_facilities": {
2148
+ "type": "array",
2149
+ "items": {
2150
+ "type": "object"
2151
+ }
2152
+ },
2153
+ "assessment": {
2154
+ "type": "object"
2155
+ },
2156
+ "insights": {
2157
+ "type": "object"
2158
+ },
2159
+ "accounting": {
2160
+ "type": "object"
2161
+ },
2162
+ "meta": {
2163
+ "type": "object",
2164
+ "description": "Query echo, token charge/balance (meta.tokens), and pagination where applicable."
2165
+ }
2166
+ },
2167
+ "required": [
2168
+ "related"
2169
+ ]
2170
+ },
2171
+ "annotations": {
2172
+ "readOnlyHint": true,
2173
+ "openWorldHint": false,
2174
+ "destructiveHint": false
2175
+ }
2176
+ },
1792
2177
  {
1793
2178
  "name": "lookup_elevation",
1794
2179
  "description": "Measure terrain height from the Copernicus DEM GLO-30 — a point (lat + lon), an area (bbox), or a drawn polygon, for which the statistics are computed over the samples INSIDE the ring rather than its bounding box. Returns min, max, mean, median, p10, p90 and relief (max − min), the number that governs SAR layover and shadow severity. Free of token charges. Three things the result carries that any answer must respect: it is a SURFACE model (buildings and tree canopy included, so not bare ground); `downsampled: true` means a large area was read below the 30 m posting, so min/max are smoothed inward and the relief is a floor rather than an exact figure; and `covered: false` or `tiles_missing > 0` means open ocean where the model has no data — which is absence, not 0 m. Heights are orthometric on the EGM2008 geoid, not ellipsoidal. Cite the returned `attribution` wherever a height is shown.",
@@ -2210,6 +2595,12 @@ export const RESOURCE_TEMPLATES = [
2210
2595
  "name": "Daily World Brief by date",
2211
2596
  "description": "The Daily World Brief for a specific UTC date (YYYY-MM-DD). Free.",
2212
2597
  "mimeType": "application/json"
2598
+ },
2599
+ {
2600
+ "uriTemplate": "watch://{watch_id}",
2601
+ "name": "One watch, end to end",
2602
+ "description": "A Watchlist entry with its current state, latest meaningful change, measurements and (for event watches) the full event thread — the same body get_watch returns. Free.",
2603
+ "mimeType": "application/json"
2213
2604
  }
2214
2605
  ];
2215
2606
  export const PROMPTS = [
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
21
21
  import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
22
22
  import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
23
23
  import { PROMPTS, RESOURCES, RESOURCE_TEMPLATES, TOOLS } from './catalog.js';
24
- const VERSION = '1.19.0';
24
+ const VERSION = '1.22.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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "offnadir-delta-mcp",
3
- "version": "1.19.0",
3
+ "version": "1.22.0",
4
4
  "description": "Local (stdio) MCP server for Off-Nadir Delta \u2014 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": {