offnadir-delta-mcp 1.5.0 → 1.7.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 1.5.0.
16
+ // Generated for Off-Nadir Delta MCP 1.7.0.
17
17
  export const TOOLS = [
18
18
  {
19
19
  "name": "query_signals",
@@ -689,7 +689,7 @@ export const TOOLS = [
689
689
  },
690
690
  {
691
691
  "name": "survey_observable_events",
692
- "description": "Which events in a window can a given in-app sensor actually RESOLVE? Evaluates the FULL set (not just the top few) against each event’s precomputed required resolution, and returns how many are observable vs not, the breakdown by required resolution, and the top observable events with the ready-made imaging rationale. Observability here is resolvability — whether the physical mark is large enough for the sensor: Sentinel-2 is ~10 m optical (needs daylight and clear sky), Sentinel-1 is SAR (all-weather, day or night). Prefer this over asking about events one at a time: it is exhaustive AND cheap, and it is the honest way to answer \"what can we actually see\" before committing collection effort. Deterministic — no LLM. Costs 1 token(s) per call.",
692
+ "description": "Which events in a window can a given in-app sensor actually RESOLVE? Evaluates the FULL set (not just the top few) against each event’s precomputed required resolution, and returns how many are observable vs not, the breakdown by required resolution, and the top observable events with the ready-made imaging rationale. Observability here is resolvability — whether the physical mark is large enough for the sensor: Sentinel-2 is ~10 m optical (needs daylight and clear sky), Sentinel-1 is SAR (all-weather, day or night). Prefer this over asking about events one at a time: it is exhaustive AND cheap, and it is the honest way to answer \"what can we actually see\" before committing collection effort. The population is deliberately UNGATED by tasking readiness — it answers \"what could this sensor resolve\", not \"what may we task\" — so its total sits above rank_imaging_priority and counts a different unit from query_signals' clusters; see population_detail, and read collection_ready per event for taskability. Deterministic — no LLM. Costs 1 token(s) per call.",
693
693
  "inputSchema": {
694
694
  "type": "object",
695
695
  "properties": {
@@ -766,7 +766,7 @@ export const TOOLS = [
766
766
  },
767
767
  {
768
768
  "name": "predict_satellite_passes",
769
- "description": "WHEN can this place next be imaged, and by WHAT — the timing half of collection planning. Propagates current orbital elements (SGP4 over day-cached CelesTrak two-line elements) for seven families and returns the access windows over a target: Sentinel-1 (SAR), Sentinel-2 and Landsat (free, SYSTEMATIC — scheduled acquisitions you will get), plus WorldView, ICEYE, Capella and SkySat (commercial, AGILE — taskable ACCESS opportunities that require a paid order and are NOT guaranteed collects). Each pass carries acquisition/loss times, the closest-approach instant, peak elevation, OFF-NADIR angle, ground distance, ascending/descending, solar elevation and whether the target is sunlit (optical needs light; SAR does not), and the age of the element set it was computed from. Use it to answer \"when is the next chance to see this\", to choose between waiting for a free systematic pass and paying to task an agile one, and to time a pre/post change-detection pair. Give lat/lon, or a bbox whose centre is used. Horizon is capped at 7 days. If elements cannot be retrieved the result says so (retrieval_ok:false) — that means timing is UNAVAILABLE, never \"no passes\". Costs 2 token(s) per call.",
769
+ "description": "WHEN can this place next be imaged, and by WHAT — the timing half of collection planning. Propagates current orbital elements (SGP4 over day-cached CelesTrak two-line elements) for seven families and returns the access windows over a target: Sentinel-1 (SAR), Sentinel-2 and Landsat (free, SYSTEMATIC — routinely collected, so near-certain), plus WorldView, ICEYE, Capella and SkySat (commercial, AGILE — taskable ACCESS opportunities that require a paid order and are NOT guaranteed collects). Each pass carries acquisition/loss times, the closest-approach instant, peak elevation, OFF-NADIR angle, ground distance, ascending/descending, solar elevation and whether the target is sunlit (optical needs light; SAR does not), and the age of the element set it was computed from. Use it to answer \"when is the next chance to see this\", to choose between waiting for a free systematic pass and paying to task an agile one, and to time a pre/post change-detection pair. Give lat/lon, or a bbox whose centre is used. Horizon is capped at 7 days. If elements cannot be retrieved the result says so (retrieval_ok:false) — that means timing is UNAVAILABLE, never \"no passes\". Every pass is a GEOMETRIC access opportunity computed from orbital elements and swath width (geometry_only:true, acquisition_plan_verified:false): no operator collection plan is consulted, so this is when a sensor COULD see the target, never a confirmed acquisition schedule. With no start_date the window begins NOW, so the first pass listed is always still ahead. Costs 2 token(s) per call.",
770
770
  "inputSchema": {
771
771
  "type": "object",
772
772
  "properties": {
@@ -1136,6 +1136,72 @@ export const TOOLS = [
1136
1136
  "destructiveHint": false
1137
1137
  }
1138
1138
  },
1139
+ {
1140
+ "name": "query_claims",
1141
+ "description": "Read the LEDGER of claims this key has been given — every factual assertion the Analyst made, with its evidence class (CONFIRMED / REPORTED / PARTY_CLAIM / ASSESSMENT), how many INDEPENDENT source families backed it, and the publishers. The point is the time axis: when a later answer restated the same assertion, the claim carries the link and says which way the evidence moved — restated_only surfaces those chains, and downgraded_only isolates the cases where a later answer was LESS sure than an earlier one, which is where this product contradicted itself. Use it to audit what you were told before acting on it, or to check whether an assertion has since weakened. Scoped to your own key; no other caller’s claims are visible. Free of token charges.",
1142
+ "inputSchema": {
1143
+ "type": "object",
1144
+ "properties": {
1145
+ "since": {
1146
+ "type": "string",
1147
+ "description": "Only claims asserted on or after this date (YYYY-MM-DD or ISO 8601)."
1148
+ },
1149
+ "evidence_class": {
1150
+ "type": "string",
1151
+ "enum": [
1152
+ "CONFIRMED",
1153
+ "REPORTED",
1154
+ "PARTY_CLAIM",
1155
+ "DISPUTED",
1156
+ "ASSESSMENT",
1157
+ "UNKNOWN"
1158
+ ],
1159
+ "description": "Restrict to one evidence class."
1160
+ },
1161
+ "restated_only": {
1162
+ "type": "boolean",
1163
+ "description": "Only claims that sit in a restatement chain."
1164
+ },
1165
+ "downgraded_only": {
1166
+ "type": "boolean",
1167
+ "description": "Only claims a later answer restated with WEAKER evidence — read these first."
1168
+ },
1169
+ "limit": {
1170
+ "type": "number",
1171
+ "minimum": 1,
1172
+ "maximum": 200,
1173
+ "description": "How many claims to return (default 50)."
1174
+ }
1175
+ },
1176
+ "required": []
1177
+ },
1178
+ "outputSchema": {
1179
+ "type": "object",
1180
+ "properties": {
1181
+ "summary": {
1182
+ "type": "string",
1183
+ "description": "One-line natural-language summary of the result, ready to relay to a user."
1184
+ },
1185
+ "claims": {
1186
+ "type": "array",
1187
+ "items": {
1188
+ "type": "object"
1189
+ }
1190
+ },
1191
+ "counts": {
1192
+ "type": "object"
1193
+ }
1194
+ },
1195
+ "required": [
1196
+ "claims"
1197
+ ]
1198
+ },
1199
+ "annotations": {
1200
+ "readOnlyHint": true,
1201
+ "openWorldHint": false,
1202
+ "destructiveHint": false
1203
+ }
1204
+ },
1139
1205
  {
1140
1206
  "name": "create_standing_order",
1141
1207
  "description": "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. Creating one is FREE. Each time it fires it runs ask_analyst and is metered like any Analyst question, so the cost is per CHANGE, not per check: a deterministic pass over the corpus decides whether anything new crossed the reporting bar, and quiet periods never invoke the model or charge anything. Returns projected_monthly_tokens_max — the ceiling if every single check fired — so the cost is visible before committing. Cadence and how many orders you may hold are set by your plan; the error says which limit you hit. Use it when the question is \"tell me when this changes\" rather than \"what is happening right now\".",
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.5.0';
24
+ const VERSION = '1.7.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.5.0",
3
+ "version": "1.7.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": {