offnadir-delta-mcp 1.6.0 → 1.7.1
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 +19 -3
- package/dist/index.js +1 -1
- package/package.json +1 -1
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.
|
|
16
|
+
// Generated for Off-Nadir Delta MCP 1.7.1.
|
|
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 —
|
|
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": {
|
|
@@ -942,6 +942,14 @@ export const TOOLS = [
|
|
|
942
942
|
"idempotencyKey": {
|
|
943
943
|
"type": "string",
|
|
944
944
|
"description": "Optional at-most-once key. Re-sending the SAME key resolves to the SAME run: if it finished you get the brief with NO second charge; if it is still running you get its processing status. Strongly recommended — it makes a timeout recoverable. Use a fresh key to ask again."
|
|
945
|
+
},
|
|
946
|
+
"response_format": {
|
|
947
|
+
"type": "string",
|
|
948
|
+
"enum": [
|
|
949
|
+
"full",
|
|
950
|
+
"compact"
|
|
951
|
+
],
|
|
952
|
+
"description": "\"full\" (default) returns the prose brief alongside the structured result. \"compact\" omits the prose brief and returns only the structured result — which still carries the assembled structured_summary — so a completed run costs materially fewer context tokens."
|
|
945
953
|
}
|
|
946
954
|
},
|
|
947
955
|
"required": [
|
|
@@ -1048,6 +1056,14 @@ export const TOOLS = [
|
|
|
1048
1056
|
"job_id": {
|
|
1049
1057
|
"type": "string",
|
|
1050
1058
|
"description": "The job_id returned by ask_analyst."
|
|
1059
|
+
},
|
|
1060
|
+
"response_format": {
|
|
1061
|
+
"type": "string",
|
|
1062
|
+
"enum": [
|
|
1063
|
+
"full",
|
|
1064
|
+
"compact"
|
|
1065
|
+
],
|
|
1066
|
+
"description": "\"full\" (default) returns the prose brief alongside the structured result. \"compact\" omits the prose brief and returns only the structured result — which still carries the assembled structured_summary — so a re-fetch costs materially fewer context tokens."
|
|
1051
1067
|
}
|
|
1052
1068
|
},
|
|
1053
1069
|
"required": [
|
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.
|
|
24
|
+
const VERSION = '1.7.1';
|
|
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.
|
|
3
|
+
"version": "1.7.1",
|
|
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": {
|