@cyanheads/aviation-weather-mcp-server 0.1.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/AGENTS.md +379 -0
- package/CLAUDE.md +379 -0
- package/Dockerfile +99 -0
- package/LICENSE +201 -0
- package/README.md +311 -0
- package/changelog/0.1.x/0.1.1.md +23 -0
- package/changelog/template.md +127 -0
- package/dist/config/server-config.d.ts +14 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +31 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/aviation-preflight-brief.prompt.d.ts +12 -0
- package/dist/mcp-server/prompts/definitions/aviation-preflight-brief.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/aviation-preflight-brief.prompt.js +65 -0
- package/dist/mcp-server/prompts/definitions/aviation-preflight-brief.prompt.js.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-find-stations.tool.d.ts +40 -0
- package/dist/mcp-server/tools/definitions/aviation-find-stations.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-find-stations.tool.js +130 -0
- package/dist/mcp-server/tools/definitions/aviation-find-stations.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-get-advisories.tool.d.ts +49 -0
- package/dist/mcp-server/tools/definitions/aviation-get-advisories.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-get-advisories.tool.js +133 -0
- package/dist/mcp-server/tools/definitions/aviation-get-advisories.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-get-metar.tool.d.ts +42 -0
- package/dist/mcp-server/tools/definitions/aviation-get-metar.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-get-metar.tool.js +129 -0
- package/dist/mcp-server/tools/definitions/aviation-get-metar.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-get-pireps.tool.d.ts +60 -0
- package/dist/mcp-server/tools/definitions/aviation-get-pireps.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-get-pireps.tool.js +238 -0
- package/dist/mcp-server/tools/definitions/aviation-get-pireps.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-get-taf.tool.d.ts +42 -0
- package/dist/mcp-server/tools/definitions/aviation-get-taf.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/aviation-get-taf.tool.js +140 -0
- package/dist/mcp-server/tools/definitions/aviation-get-taf.tool.js.map +1 -0
- package/dist/services/aviation-weather/aviation-weather-service.d.ts +60 -0
- package/dist/services/aviation-weather/aviation-weather-service.d.ts.map +1 -0
- package/dist/services/aviation-weather/aviation-weather-service.js +512 -0
- package/dist/services/aviation-weather/aviation-weather-service.js.map +1 -0
- package/dist/services/aviation-weather/types.d.ts +283 -0
- package/dist/services/aviation-weather/types.d.ts.map +1 -0
- package/dist/services/aviation-weather/types.js +7 -0
- package/dist/services/aviation-weather/types.js.map +1 -0
- package/package.json +107 -0
- package/server.json +127 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAG3C,QAAA,MAAM,kBAAkB;;;iBAatB,CAAC;AAIH,uEAAuE;AACvE,wBAAgB,eAAe,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAMpE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Server-specific configuration for aviation-weather-mcp-server.
|
|
3
|
+
* Reads AWC_BASE_URL and AWC_TIMEOUT_MS from the environment.
|
|
4
|
+
* @module config/server-config
|
|
5
|
+
*/
|
|
6
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
7
|
+
import { parseEnvConfig } from '@cyanheads/mcp-ts-core/config';
|
|
8
|
+
const ServerConfigSchema = z.object({
|
|
9
|
+
awcBaseUrl: z
|
|
10
|
+
.string()
|
|
11
|
+
.url()
|
|
12
|
+
.default('https://aviationweather.gov/api/data')
|
|
13
|
+
.describe('Base URL for the AWC Data API'),
|
|
14
|
+
awcTimeoutMs: z.coerce
|
|
15
|
+
.number()
|
|
16
|
+
.int()
|
|
17
|
+
.min(1000)
|
|
18
|
+
.max(60000)
|
|
19
|
+
.default(10000)
|
|
20
|
+
.describe('Request timeout in milliseconds'),
|
|
21
|
+
});
|
|
22
|
+
let _config;
|
|
23
|
+
/** Returns validated server config, parsing from env on first call. */
|
|
24
|
+
export function getServerConfig() {
|
|
25
|
+
_config ??= parseEnvConfig(ServerConfigSchema, {
|
|
26
|
+
awcBaseUrl: 'AWC_BASE_URL',
|
|
27
|
+
awcTimeoutMs: 'AWC_TIMEOUT_MS',
|
|
28
|
+
});
|
|
29
|
+
return _config;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=server-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,OAAO,CAAC,sCAAsC,CAAC;SAC/C,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,YAAY,EAAE,CAAC,CAAC,MAAM;SACnB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,KAAK,CAAC;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,iCAAiC,CAAC;CAC/C,CAAC,CAAC;AAEH,IAAI,OAAuD,CAAC;AAE5D,uEAAuE;AACvE,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,cAAc,CAAC,kBAAkB,EAAE;QAC7C,UAAU,EAAE,cAAc;QAC1B,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview aviation-weather-mcp-server MCP server entry point.
|
|
4
|
+
* @module index
|
|
5
|
+
*/
|
|
6
|
+
import { createApp } from '@cyanheads/mcp-ts-core';
|
|
7
|
+
import { aviationPreflightBrief } from './mcp-server/prompts/definitions/aviation-preflight-brief.prompt.js';
|
|
8
|
+
import { aviationFindStations } from './mcp-server/tools/definitions/aviation-find-stations.tool.js';
|
|
9
|
+
import { aviationGetAdvisories } from './mcp-server/tools/definitions/aviation-get-advisories.tool.js';
|
|
10
|
+
import { aviationGetMetar } from './mcp-server/tools/definitions/aviation-get-metar.tool.js';
|
|
11
|
+
import { aviationGetPireps } from './mcp-server/tools/definitions/aviation-get-pireps.tool.js';
|
|
12
|
+
import { aviationGetTaf } from './mcp-server/tools/definitions/aviation-get-taf.tool.js';
|
|
13
|
+
import { initAviationWeatherService } from './services/aviation-weather/aviation-weather-service.js';
|
|
14
|
+
await createApp({
|
|
15
|
+
tools: [
|
|
16
|
+
aviationFindStations,
|
|
17
|
+
aviationGetMetar,
|
|
18
|
+
aviationGetTaf,
|
|
19
|
+
aviationGetPireps,
|
|
20
|
+
aviationGetAdvisories,
|
|
21
|
+
],
|
|
22
|
+
resources: [],
|
|
23
|
+
prompts: [aviationPreflightBrief],
|
|
24
|
+
instructions: `Aviation weather from the NWS Aviation Weather Center (aviationweather.gov). Keyless, no API key required. Covers METARs, TAFs, PIREPs, and SIGMETs/AIRMETs.
|
|
25
|
+
IMPORTANT: This data is for informational purposes only. Flight operations in IMC or controlled airspace require an official preflight briefing from an authorized source (e.g., 1800wxbrief.com).
|
|
26
|
+
Station IDs are ICAO format (4 letters, e.g. KSEA, KJFK). Use aviation_find_stations to resolve unknown IDs or discover stations in a region.`,
|
|
27
|
+
setup(core) {
|
|
28
|
+
initAviationWeatherService(core.config, core.storage);
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qEAAqE,CAAC;AAC7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,+DAA+D,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,yDAAyD,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yDAAyD,CAAC;AAErG,MAAM,SAAS,CAAC;IACd,KAAK,EAAE;QACL,oBAAoB;QACpB,gBAAgB;QAChB,cAAc;QACd,iBAAiB;QACjB,qBAAqB;KACtB;IACD,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;IACjC,YAAY,EAAE;;8IAE8H;IAC5I,KAAK,CAAC,IAAI;QACR,0BAA0B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Prompt for structured preflight weather briefing.
|
|
3
|
+
* Guides the LLM to call METAR, TAF, and advisories in sequence and synthesize a go/no-go picture.
|
|
4
|
+
* @module mcp-server/prompts/definitions/aviation-preflight-brief
|
|
5
|
+
*/
|
|
6
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
7
|
+
export declare const aviationPreflightBrief: import("@cyanheads/mcp-ts-core").PromptDefinition<z.ZodObject<{
|
|
8
|
+
departure_icao: z.ZodString;
|
|
9
|
+
destination_icao: z.ZodString;
|
|
10
|
+
alternates: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, z.core.$strip>>;
|
|
12
|
+
//# sourceMappingURL=aviation-preflight-brief.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aviation-preflight-brief.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/aviation-preflight-brief.prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAU,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEnD,eAAO,MAAM,sBAAsB;;;;kBA6DjC,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Prompt for structured preflight weather briefing.
|
|
3
|
+
* Guides the LLM to call METAR, TAF, and advisories in sequence and synthesize a go/no-go picture.
|
|
4
|
+
* @module mcp-server/prompts/definitions/aviation-preflight-brief
|
|
5
|
+
*/
|
|
6
|
+
import { prompt, z } from '@cyanheads/mcp-ts-core';
|
|
7
|
+
export const aviationPreflightBrief = prompt('aviation_preflight_brief', {
|
|
8
|
+
description: 'Build a complete preflight weather briefing for a flight. Calls aviation_get_metar, aviation_get_taf, aviation_get_pireps, and aviation_get_advisories in sequence and synthesizes a go/no-go picture with flight categories and active hazards. Provide departure and destination ICAO IDs (e.g., KSEA, KJFK); alternates are optional.',
|
|
9
|
+
args: z.object({
|
|
10
|
+
departure_icao: z.string().describe('Departure airport ICAO identifier (e.g., KSEA).'),
|
|
11
|
+
destination_icao: z.string().describe('Destination airport ICAO identifier (e.g., KJFK).'),
|
|
12
|
+
alternates: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('Optional comma-separated alternate airport ICAO IDs (e.g., "KBFI,KBOS").'),
|
|
16
|
+
}),
|
|
17
|
+
generate: (args) => {
|
|
18
|
+
const allIcaos = [args.departure_icao, args.destination_icao];
|
|
19
|
+
if (args.alternates) {
|
|
20
|
+
allIcaos.push(...args.alternates
|
|
21
|
+
.split(',')
|
|
22
|
+
.map((s) => s.trim())
|
|
23
|
+
.filter(Boolean));
|
|
24
|
+
}
|
|
25
|
+
const icaoList = allIcaos.join(', ');
|
|
26
|
+
return [
|
|
27
|
+
{
|
|
28
|
+
role: 'user',
|
|
29
|
+
content: {
|
|
30
|
+
type: 'text',
|
|
31
|
+
text: `Please provide a complete preflight weather briefing for the following flight:
|
|
32
|
+
|
|
33
|
+
**Departure:** ${args.departure_icao}
|
|
34
|
+
**Destination:** ${args.destination_icao}${args.alternates ? `\n**Alternates:** ${args.alternates}` : ''}
|
|
35
|
+
|
|
36
|
+
Follow this sequence:
|
|
37
|
+
|
|
38
|
+
1. **Current conditions (METARs)** — Call \`aviation_get_metar\` for: ${icaoList}
|
|
39
|
+
- Report flight category (VFR/MVFR/IFR/LIFR) for each station
|
|
40
|
+
- Note ceiling, visibility, wind, and altimeter
|
|
41
|
+
|
|
42
|
+
2. **Forecasts (TAFs)** — Call \`aviation_get_taf\` for: ${args.departure_icao}, ${args.destination_icao}
|
|
43
|
+
- Identify any forecast deterioration or improvement during the planned flight window
|
|
44
|
+
- Flag TEMPO/BECMG/PROB groups that could affect operations
|
|
45
|
+
|
|
46
|
+
3. **PIREPs** — Call \`aviation_get_pireps\` centered on ${args.departure_icao} and ${args.destination_icao}
|
|
47
|
+
- Report any significant turbulence (MOD or greater) or icing (LGT or greater)
|
|
48
|
+
- Note altitude ranges where hazards were reported
|
|
49
|
+
- Absence of PIREPs does not guarantee smooth conditions
|
|
50
|
+
|
|
51
|
+
4. **Advisories** — Call \`aviation_get_advisories\` for the entire route area
|
|
52
|
+
- List any active SIGMETs or AIRMETs (turbulence, icing, IFR, convective)
|
|
53
|
+
- Include valid times and affected altitudes
|
|
54
|
+
|
|
55
|
+
5. **Briefing summary** — Synthesize the above into:
|
|
56
|
+
- **Go/No-Go recommendation** based on the aggregate picture
|
|
57
|
+
- **Primary concerns** listed in order of severity
|
|
58
|
+
- **Alternate considerations** if relevant
|
|
59
|
+
- **Reminder:** This briefing is for informational purposes only. Flight in IMC or controlled airspace requires an official preflight briefing from an authorized source (e.g., 1800wxbrief.com).`,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=aviation-preflight-brief.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aviation-preflight-brief.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/aviation-preflight-brief.prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,0BAA0B,EAAE;IACvE,WAAW,EACT,0UAA0U;IAC5U,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;QACtF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC1F,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,0EAA0E,CAAC;KACxF,CAAC;IACF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;QACjB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CACX,GAAG,IAAI,CAAC,UAAU;iBACf,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CACnB,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;iBAEC,IAAI,CAAC,cAAc;mBACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;;;;wEAIhC,QAAQ;;;;2DAIrB,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,gBAAgB;;;;2DAI7C,IAAI,CAAC,cAAc,QAAQ,IAAI,CAAC,gBAAgB;;;;;;;;;;;;;qMAa0F;iBAC5L;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tool to resolve airport/weather stations by ICAO ID, bounding box, or US state.
|
|
3
|
+
* @module mcp-server/tools/definitions/aviation-find-stations
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const aviationFindStations: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
station_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
|
+
bbox: z.ZodOptional<z.ZodObject<{
|
|
10
|
+
minLat: z.ZodNumber;
|
|
11
|
+
minLon: z.ZodNumber;
|
|
12
|
+
maxLat: z.ZodNumber;
|
|
13
|
+
maxLon: z.ZodNumber;
|
|
14
|
+
}, z.core.$strip>>;
|
|
15
|
+
state: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
17
|
+
stations: z.ZodArray<z.ZodObject<{
|
|
18
|
+
icao_id: z.ZodNullable<z.ZodString>;
|
|
19
|
+
iata_id: z.ZodNullable<z.ZodString>;
|
|
20
|
+
faa_id: z.ZodNullable<z.ZodString>;
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
lat: z.ZodNumber;
|
|
23
|
+
lon: z.ZodNumber;
|
|
24
|
+
elevation_ft: z.ZodNumber;
|
|
25
|
+
state: z.ZodString;
|
|
26
|
+
country: z.ZodString;
|
|
27
|
+
data_types: z.ZodArray<z.ZodString>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
}, z.core.$strip>, readonly [{
|
|
30
|
+
readonly reason: "station_not_found";
|
|
31
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
32
|
+
readonly when: "None of the requested IDs match any known station.";
|
|
33
|
+
readonly recovery: "ICAO IDs are 4 letters (e.g., KSEA). IATA IDs (3-letter like SEA) may not map 1:1. Try a bbox search around the airport coordinates.";
|
|
34
|
+
}, {
|
|
35
|
+
readonly reason: "missing_search_criteria";
|
|
36
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
37
|
+
readonly when: "None of station_ids, bbox, or state was provided.";
|
|
38
|
+
readonly recovery: "Provide at least one of: station_ids (array of IDs), bbox (lat/lon bounds), or state (2-letter US state abbreviation).";
|
|
39
|
+
}], undefined>;
|
|
40
|
+
//# sourceMappingURL=aviation-find-stations.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aviation-find-stations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/aviation-find-stations.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAqBjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8H/B,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tool to resolve airport/weather stations by ICAO ID, bounding box, or US state.
|
|
3
|
+
* @module mcp-server/tools/definitions/aviation-find-stations
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { getAviationWeatherService } from '../../../services/aviation-weather/aviation-weather-service.js';
|
|
8
|
+
/** Bounding box schema shared across tools. */
|
|
9
|
+
const BboxSchema = z
|
|
10
|
+
.object({
|
|
11
|
+
minLat: z.number().min(-90).max(90).describe('Southern boundary latitude in decimal degrees.'),
|
|
12
|
+
minLon: z
|
|
13
|
+
.number()
|
|
14
|
+
.min(-180)
|
|
15
|
+
.max(180)
|
|
16
|
+
.describe('Western boundary longitude in decimal degrees.'),
|
|
17
|
+
maxLat: z.number().min(-90).max(90).describe('Northern boundary latitude in decimal degrees.'),
|
|
18
|
+
maxLon: z
|
|
19
|
+
.number()
|
|
20
|
+
.min(-180)
|
|
21
|
+
.max(180)
|
|
22
|
+
.describe('Eastern boundary longitude in decimal degrees.'),
|
|
23
|
+
})
|
|
24
|
+
.describe('Geographic bounding box for spatial queries.');
|
|
25
|
+
export const aviationFindStations = tool('aviation_find_stations', {
|
|
26
|
+
title: 'Find Aviation Weather Stations',
|
|
27
|
+
description: 'Resolve an airport or weather reporting station by ICAO, IATA, or FAA identifier, or discover stations within a bounding box or US state. Returns all identifier variants (ICAO/IATA/FAA), coordinates, elevation, and available data types (METAR, TAF, SYNOP, etc.). At least one of station_ids, bbox, or state is required. Use this tool to translate a human-readable airport name or 3-letter IATA code to its 4-letter ICAO ID (e.g., SEA → KSEA) before calling aviation_get_metar, aviation_get_taf, or aviation_get_pireps.',
|
|
28
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
29
|
+
input: z.object({
|
|
30
|
+
station_ids: z
|
|
31
|
+
.array(z.string().describe('An ICAO, IATA, or FAA station identifier.'))
|
|
32
|
+
.min(1)
|
|
33
|
+
.max(20)
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('One or more station IDs (ICAO preferred, e.g. KSEA; IATA and FAA also accepted).'),
|
|
36
|
+
bbox: BboxSchema.optional(),
|
|
37
|
+
state: z
|
|
38
|
+
.string()
|
|
39
|
+
.length(2)
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Two-letter US state abbreviation (e.g., "WA") to list all stations in that state.'),
|
|
42
|
+
}),
|
|
43
|
+
output: z.object({
|
|
44
|
+
stations: z
|
|
45
|
+
.array(z
|
|
46
|
+
.object({
|
|
47
|
+
icao_id: z
|
|
48
|
+
.string()
|
|
49
|
+
.nullable()
|
|
50
|
+
.describe('ICAO 4-letter station ID, or null if not assigned.'),
|
|
51
|
+
iata_id: z.string().nullable().describe('IATA 3-letter code, or null if not assigned.'),
|
|
52
|
+
faa_id: z.string().nullable().describe('FAA identifier, or null if not assigned.'),
|
|
53
|
+
name: z.string().describe('Human-readable site name.'),
|
|
54
|
+
lat: z.number().describe('Latitude in decimal degrees.'),
|
|
55
|
+
lon: z.number().describe('Longitude in decimal degrees.'),
|
|
56
|
+
elevation_ft: z.number().describe('Station elevation in feet MSL.'),
|
|
57
|
+
state: z
|
|
58
|
+
.string()
|
|
59
|
+
.describe('US state abbreviation, or empty string for non-US stations.'),
|
|
60
|
+
country: z.string().describe('Country code or name.'),
|
|
61
|
+
data_types: z
|
|
62
|
+
.array(z.string().describe('An available data type (e.g., "METAR", "TAF", "SYNOP").'))
|
|
63
|
+
.describe('List of data products available at this station.'),
|
|
64
|
+
})
|
|
65
|
+
.describe('An aviation weather reporting station.'))
|
|
66
|
+
.describe('Matching stations.'),
|
|
67
|
+
}),
|
|
68
|
+
errors: [
|
|
69
|
+
{
|
|
70
|
+
reason: 'station_not_found',
|
|
71
|
+
code: JsonRpcErrorCode.NotFound,
|
|
72
|
+
when: 'None of the requested IDs match any known station.',
|
|
73
|
+
recovery: 'ICAO IDs are 4 letters (e.g., KSEA). IATA IDs (3-letter like SEA) may not map 1:1. Try a bbox search around the airport coordinates.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
reason: 'missing_search_criteria',
|
|
77
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
78
|
+
when: 'None of station_ids, bbox, or state was provided.',
|
|
79
|
+
recovery: 'Provide at least one of: station_ids (array of IDs), bbox (lat/lon bounds), or state (2-letter US state abbreviation).',
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
async handler(input, ctx) {
|
|
83
|
+
if (!input.station_ids?.length && !input.bbox && !input.state) {
|
|
84
|
+
throw ctx.fail('missing_search_criteria', 'At least one of station_ids, bbox, or state is required.', {
|
|
85
|
+
...ctx.recoveryFor('missing_search_criteria'),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
ctx.log.info('Finding aviation stations', {
|
|
89
|
+
stationIds: input.station_ids,
|
|
90
|
+
hasBbox: !!input.bbox,
|
|
91
|
+
state: input.state,
|
|
92
|
+
});
|
|
93
|
+
const svc = getAviationWeatherService();
|
|
94
|
+
const stations = await svc.fetchStations({
|
|
95
|
+
...(input.station_ids?.length ? { stationIds: input.station_ids } : {}),
|
|
96
|
+
...(input.bbox ? { bbox: input.bbox } : {}),
|
|
97
|
+
...(input.state ? { state: input.state } : {}),
|
|
98
|
+
}, ctx);
|
|
99
|
+
if (stations.length === 0) {
|
|
100
|
+
throw ctx.fail('station_not_found', 'No stations found matching the search criteria.', {
|
|
101
|
+
...ctx.recoveryFor('station_not_found'),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
ctx.log.info('Stations found', { count: stations.length });
|
|
105
|
+
return { stations };
|
|
106
|
+
},
|
|
107
|
+
format: (result) => {
|
|
108
|
+
const lines = [`**${result.stations.length} station(s) found**\n`];
|
|
109
|
+
for (const s of result.stations) {
|
|
110
|
+
lines.push(`## ${s.name}`);
|
|
111
|
+
const ids = [
|
|
112
|
+
s.icao_id ? `ICAO: ${s.icao_id}` : null,
|
|
113
|
+
s.iata_id ? `IATA: ${s.iata_id}` : null,
|
|
114
|
+
s.faa_id ? `FAA: ${s.faa_id}` : null,
|
|
115
|
+
]
|
|
116
|
+
.filter(Boolean)
|
|
117
|
+
.join(' | ');
|
|
118
|
+
lines.push(`**IDs:** ${ids}`);
|
|
119
|
+
lines.push(`**Location:** ${s.lat.toFixed(4)}, ${s.lon.toFixed(4)} | **Elevation:** ${s.elevation_ft} ft`);
|
|
120
|
+
if (s.state || s.country) {
|
|
121
|
+
lines.push(`**Region:** ${[s.state, s.country].filter(Boolean).join(', ')}`);
|
|
122
|
+
}
|
|
123
|
+
if (s.data_types.length > 0) {
|
|
124
|
+
lines.push(`**Data types:** ${s.data_types.join(', ')}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=aviation-find-stations.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aviation-find-stations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/aviation-find-stations.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tool to fetch active SIGMETs and AIRMETs for a region.
|
|
3
|
+
* @module mcp-server/tools/definitions/aviation-get-advisories
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
export declare const aviationGetAdvisories: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
7
|
+
advisory_type: z.ZodDefault<z.ZodEnum<{
|
|
8
|
+
sigmet: "sigmet";
|
|
9
|
+
airmet: "airmet";
|
|
10
|
+
all: "all";
|
|
11
|
+
}>>;
|
|
12
|
+
hazard: z.ZodOptional<z.ZodEnum<{
|
|
13
|
+
CONVECTIVE: "CONVECTIVE";
|
|
14
|
+
TURBULENCE: "TURBULENCE";
|
|
15
|
+
ICING: "ICING";
|
|
16
|
+
IFR: "IFR";
|
|
17
|
+
"MTN OBSCN": "MTN OBSCN";
|
|
18
|
+
"SURFACE WIND": "SURFACE WIND";
|
|
19
|
+
LLWS: "LLWS";
|
|
20
|
+
}>>;
|
|
21
|
+
bbox: z.ZodOptional<z.ZodObject<{
|
|
22
|
+
minLat: z.ZodNumber;
|
|
23
|
+
minLon: z.ZodNumber;
|
|
24
|
+
maxLat: z.ZodNumber;
|
|
25
|
+
maxLon: z.ZodNumber;
|
|
26
|
+
}, z.core.$strip>>;
|
|
27
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
28
|
+
advisories: z.ZodArray<z.ZodObject<{
|
|
29
|
+
advisory_type: z.ZodString;
|
|
30
|
+
series_id: z.ZodString;
|
|
31
|
+
hazard: z.ZodString;
|
|
32
|
+
severity: z.ZodNullable<z.ZodNumber>;
|
|
33
|
+
issued_by: z.ZodString;
|
|
34
|
+
valid_from: z.ZodString;
|
|
35
|
+
valid_to: z.ZodString;
|
|
36
|
+
altitude_low_ft: z.ZodNullable<z.ZodNumber>;
|
|
37
|
+
altitude_high_ft: z.ZodNullable<z.ZodNumber>;
|
|
38
|
+
movement: z.ZodNullable<z.ZodObject<{
|
|
39
|
+
direction_deg: z.ZodNullable<z.ZodNumber>;
|
|
40
|
+
speed_kt: z.ZodNullable<z.ZodNumber>;
|
|
41
|
+
}, z.core.$strip>>;
|
|
42
|
+
polygon: z.ZodArray<z.ZodObject<{
|
|
43
|
+
lat: z.ZodNumber;
|
|
44
|
+
lon: z.ZodNumber;
|
|
45
|
+
}, z.core.$strip>>;
|
|
46
|
+
raw_text: z.ZodString;
|
|
47
|
+
}, z.core.$strip>>;
|
|
48
|
+
}, z.core.$strip>, undefined, undefined>;
|
|
49
|
+
//# sourceMappingURL=aviation-get-advisories.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aviation-get-advisories.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/aviation-get-advisories.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AA2BjD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA+HhC,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tool to fetch active SIGMETs and AIRMETs for a region.
|
|
3
|
+
* @module mcp-server/tools/definitions/aviation-get-advisories
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { getAviationWeatherService } from '../../../services/aviation-weather/aviation-weather-service.js';
|
|
7
|
+
const BboxSchema = z
|
|
8
|
+
.object({
|
|
9
|
+
minLat: z.number().min(-90).max(90).describe('Southern boundary latitude in decimal degrees.'),
|
|
10
|
+
minLon: z
|
|
11
|
+
.number()
|
|
12
|
+
.min(-180)
|
|
13
|
+
.max(180)
|
|
14
|
+
.describe('Western boundary longitude in decimal degrees.'),
|
|
15
|
+
maxLat: z.number().min(-90).max(90).describe('Northern boundary latitude in decimal degrees.'),
|
|
16
|
+
maxLon: z
|
|
17
|
+
.number()
|
|
18
|
+
.min(-180)
|
|
19
|
+
.max(180)
|
|
20
|
+
.describe('Eastern boundary longitude in decimal degrees.'),
|
|
21
|
+
})
|
|
22
|
+
.describe('Geographic bounding box to filter advisories by polygon overlap.');
|
|
23
|
+
const PolygonPointSchema = z
|
|
24
|
+
.object({
|
|
25
|
+
lat: z.number().describe('Latitude in decimal degrees.'),
|
|
26
|
+
lon: z.number().describe('Longitude in decimal degrees.'),
|
|
27
|
+
})
|
|
28
|
+
.describe('A polygon vertex as a lat/lon coordinate pair.');
|
|
29
|
+
export const aviationGetAdvisories = tool('aviation_get_advisories', {
|
|
30
|
+
title: 'Get Active Aviation Advisories (SIGMETs / AIRMETs)',
|
|
31
|
+
description: 'Get active SIGMETs and AIRMETs for a region. Returns each advisory with hazard type (CONVECTIVE, TURBULENCE, ICING, IFR, MTN OBSCN, etc.), severity, altitude range, valid period, polygon coordinates, and raw text. Coverage is US-centric (NWS Aviation Weather Center). During fair-weather periods no advisories may be active — an empty result is normal, not an error. Filter by advisory_type, hazard, or bbox.',
|
|
32
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
33
|
+
input: z.object({
|
|
34
|
+
advisory_type: z
|
|
35
|
+
.enum(['sigmet', 'airmet', 'all'])
|
|
36
|
+
.default('all')
|
|
37
|
+
.describe('Filter by advisory type. "sigmet" includes convective SIGMETs. "airmet" includes AIRMET Sierra (IFR/mountain obscuration), Tango (turbulence), and Zulu (icing). "all" returns both.'),
|
|
38
|
+
hazard: z
|
|
39
|
+
.enum(['CONVECTIVE', 'TURBULENCE', 'ICING', 'IFR', 'MTN OBSCN', 'SURFACE WIND', 'LLWS'])
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Optional hazard filter. CONVECTIVE = convective SIGMETs; TURBULENCE = AIRMET Tango; ICING = AIRMET Zulu; IFR = AIRMET Sierra (IFR conditions); MTN OBSCN = AIRMET Sierra (mountain obscuration); SURFACE WIND = low-level wind shear; LLWS = low-level wind shear.'),
|
|
42
|
+
bbox: BboxSchema.optional(),
|
|
43
|
+
}),
|
|
44
|
+
output: z.object({
|
|
45
|
+
advisories: z
|
|
46
|
+
.array(z
|
|
47
|
+
.object({
|
|
48
|
+
advisory_type: z.string().describe('Advisory type: SIGMET or AIRMET.'),
|
|
49
|
+
series_id: z.string().describe('Unique advisory identifier (e.g., BOSMA0).'),
|
|
50
|
+
hazard: z
|
|
51
|
+
.string()
|
|
52
|
+
.describe('Hazard type (e.g., CONVECTIVE, TURBULENCE, ICING, IFR, MTN OBSCN).'),
|
|
53
|
+
severity: z
|
|
54
|
+
.number()
|
|
55
|
+
.nullable()
|
|
56
|
+
.describe('Severity integer for convective SIGMETs (higher = more intense). Null for AIRMETs.'),
|
|
57
|
+
issued_by: z.string().describe('ICAO ID of the issuing meteorological watch office.'),
|
|
58
|
+
valid_from: z
|
|
59
|
+
.string()
|
|
60
|
+
.describe('Advisory validity start time in ISO 8601 format (UTC).'),
|
|
61
|
+
valid_to: z.string().describe('Advisory validity end time in ISO 8601 format (UTC).'),
|
|
62
|
+
altitude_low_ft: z
|
|
63
|
+
.number()
|
|
64
|
+
.nullable()
|
|
65
|
+
.describe('Lower altitude bound in feet MSL, or null if not specified.'),
|
|
66
|
+
altitude_high_ft: z
|
|
67
|
+
.number()
|
|
68
|
+
.nullable()
|
|
69
|
+
.describe('Upper altitude bound in feet MSL, or null if not specified.'),
|
|
70
|
+
movement: z
|
|
71
|
+
.object({
|
|
72
|
+
direction_deg: z
|
|
73
|
+
.number()
|
|
74
|
+
.nullable()
|
|
75
|
+
.describe('Movement direction in degrees true, or null if stationary.'),
|
|
76
|
+
speed_kt: z
|
|
77
|
+
.number()
|
|
78
|
+
.nullable()
|
|
79
|
+
.describe('Movement speed in knots, or null if stationary.'),
|
|
80
|
+
})
|
|
81
|
+
.nullable()
|
|
82
|
+
.describe('System movement vector, or null if not available.'),
|
|
83
|
+
polygon: z
|
|
84
|
+
.array(PolygonPointSchema)
|
|
85
|
+
.describe('Geographic boundary of the advisory as a polygon of lat/lon points.'),
|
|
86
|
+
raw_text: z
|
|
87
|
+
.string()
|
|
88
|
+
.describe('Original encoded SIGMET or AIRMET text as issued by the meteorological watch office.'),
|
|
89
|
+
})
|
|
90
|
+
.describe('An active SIGMET or AIRMET advisory.'))
|
|
91
|
+
.describe('Active advisories matching the filter criteria. May be empty during fair weather periods.'),
|
|
92
|
+
}),
|
|
93
|
+
async handler(input, ctx) {
|
|
94
|
+
ctx.log.info('Fetching advisories', {
|
|
95
|
+
advisoryType: input.advisory_type,
|
|
96
|
+
hazard: input.hazard,
|
|
97
|
+
hasBbox: !!input.bbox,
|
|
98
|
+
});
|
|
99
|
+
const svc = getAviationWeatherService();
|
|
100
|
+
const advisories = await svc.fetchAdvisories({
|
|
101
|
+
advisoryType: input.advisory_type,
|
|
102
|
+
...(input.hazard ? { hazard: input.hazard } : {}),
|
|
103
|
+
...(input.bbox ? { bbox: input.bbox } : {}),
|
|
104
|
+
}, ctx);
|
|
105
|
+
ctx.log.info('Advisories retrieved', { count: advisories.length });
|
|
106
|
+
return { advisories };
|
|
107
|
+
},
|
|
108
|
+
format: (result) => {
|
|
109
|
+
const lines = [`**${result.advisories.length} active advisory(ies)**\n`];
|
|
110
|
+
for (const a of result.advisories) {
|
|
111
|
+
lines.push(`## ${a.advisory_type}: ${a.series_id} — ${a.hazard}`);
|
|
112
|
+
if (a.severity != null)
|
|
113
|
+
lines.push(`**Severity:** ${a.severity}`);
|
|
114
|
+
lines.push(`**Issued by:** ${a.issued_by} | **Valid:** ${a.valid_from} → ${a.valid_to}`);
|
|
115
|
+
const altLow = a.altitude_low_ft != null ? `${a.altitude_low_ft.toLocaleString()} ft` : 'SFC';
|
|
116
|
+
const altHigh = a.altitude_high_ft != null ? `${a.altitude_high_ft.toLocaleString()} ft` : 'UNL';
|
|
117
|
+
lines.push(`**Altitude:** ${altLow} – ${altHigh}`);
|
|
118
|
+
if (a.movement) {
|
|
119
|
+
const movDir = a.movement.direction_deg != null ? `${a.movement.direction_deg}°` : 'stationary';
|
|
120
|
+
const movSpd = a.movement.speed_kt != null ? ` at ${a.movement.speed_kt} kt` : '';
|
|
121
|
+
lines.push(`**Movement:** ${movDir}${movSpd}`);
|
|
122
|
+
}
|
|
123
|
+
if (a.polygon.length > 0) {
|
|
124
|
+
const pts = a.polygon.map((p) => `${p.lat.toFixed(2)},${p.lon.toFixed(2)}`).join(' → ');
|
|
125
|
+
lines.push(`**Polygon (${a.polygon.length} pts):** ${pts}`);
|
|
126
|
+
}
|
|
127
|
+
lines.push(`**Raw text:** \`${a.raw_text}\``);
|
|
128
|
+
lines.push('');
|
|
129
|
+
}
|
|
130
|
+
return [{ type: 'text', text: lines.join('\n').trim() }];
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=aviation-get-advisories.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aviation-get-advisories.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/aviation-get-advisories.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yDAAyD,CAAC;AAEpG,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC9F,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,GAAG,CAAC;SACT,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC9F,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,GAAG,CAAC;SACT,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,gDAAgD,CAAC;CAC9D,CAAC;KACD,QAAQ,CAAC,kEAAkE,CAAC,CAAC;AAEhF,MAAM,kBAAkB,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACxD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC1D,CAAC;KACD,QAAQ,CAAC,gDAAgD,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,EAAE;IACnE,KAAK,EAAE,oDAAoD;IAC3D,WAAW,EACT,0ZAA0Z;IAC5Z,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,aAAa,EAAE,CAAC;aACb,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;aACjC,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,sLAAsL,CACvL;QACH,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;aACvF,QAAQ,EAAE;aACV,QAAQ,CACP,oQAAoQ,CACrQ;QACH,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;KAC5B,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC;aACV,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACtE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YAC5E,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,oEAAoE,CAAC;YACjF,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,oFAAoF,CACrF;YACH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;YACrF,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,CAAC,wDAAwD,CAAC;YACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YACrF,eAAe,EAAE,CAAC;iBACf,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,6DAA6D,CAAC;YAC1E,gBAAgB,EAAE,CAAC;iBAChB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,6DAA6D,CAAC;YAC1E,QAAQ,EAAE,CAAC;iBACR,MAAM,CAAC;gBACN,aAAa,EAAE,CAAC;qBACb,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,4DAA4D,CAAC;gBACzE,QAAQ,EAAE,CAAC;qBACR,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,iDAAiD,CAAC;aAC/D,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,mDAAmD,CAAC;YAChE,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,kBAAkB,CAAC;iBACzB,QAAQ,CAAC,qEAAqE,CAAC;YAClF,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,CACP,sFAAsF,CACvF;SACJ,CAAC;aACD,QAAQ,CAAC,sCAAsC,CAAC,CACpD;aACA,QAAQ,CACP,2FAA2F,CAC5F;KACJ,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAClC,YAAY,EAAE,KAAK,CAAC,aAAa;YACjC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI;SACtB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,yBAAyB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,eAAe,CAC1C;YACE,YAAY,EAAE,KAAK,CAAC,aAAa;YACjC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,EACD,GAAG,CACJ,CAAC;QAEF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,UAAU,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAa,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,2BAA2B,CAAC,CAAC;QACnF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,SAAS,iBAAiB,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEzF,MAAM,MAAM,GAAG,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9F,MAAM,OAAO,GACX,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YACnF,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;YAEnD,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,MAAM,GACV,CAAC,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;gBACnF,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClF,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxF,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tool to fetch current weather observations (METARs) for one or more airports.
|
|
3
|
+
* @module mcp-server/tools/definitions/aviation-get-metar
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const aviationGetMetar: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
station_ids: z.ZodArray<z.ZodString>;
|
|
9
|
+
hours: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
observations: z.ZodArray<z.ZodObject<{
|
|
12
|
+
station_id: z.ZodString;
|
|
13
|
+
name: z.ZodString;
|
|
14
|
+
lat: z.ZodNumber;
|
|
15
|
+
lon: z.ZodNumber;
|
|
16
|
+
elevation_ft: z.ZodNumber;
|
|
17
|
+
flight_category: z.ZodString;
|
|
18
|
+
metar_type: z.ZodString;
|
|
19
|
+
observed_at: z.ZodString;
|
|
20
|
+
wind: z.ZodObject<{
|
|
21
|
+
direction_deg: z.ZodNullable<z.ZodNumber>;
|
|
22
|
+
speed_kt: z.ZodNumber;
|
|
23
|
+
gust_kt: z.ZodNullable<z.ZodNumber>;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
visibility_sm: z.ZodString;
|
|
26
|
+
ceiling_ft: z.ZodNullable<z.ZodNumber>;
|
|
27
|
+
clouds: z.ZodArray<z.ZodObject<{
|
|
28
|
+
cover: z.ZodString;
|
|
29
|
+
base_ft: z.ZodNumber;
|
|
30
|
+
}, z.core.$strip>>;
|
|
31
|
+
temp_c: z.ZodNumber;
|
|
32
|
+
dewpoint_c: z.ZodNumber;
|
|
33
|
+
altimeter_inhg: z.ZodNumber;
|
|
34
|
+
raw_metar: z.ZodString;
|
|
35
|
+
}, z.core.$strip>>;
|
|
36
|
+
}, z.core.$strip>, readonly [{
|
|
37
|
+
readonly reason: "no_stations_found";
|
|
38
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
39
|
+
readonly when: "None of the requested station IDs returned METAR data.";
|
|
40
|
+
readonly recovery: "Verify ICAO IDs with aviation_find_stations. Not all stations transmit METARs. Check that the station IDs are 4-letter ICAO format (e.g., KSEA not SEA).";
|
|
41
|
+
}], undefined>;
|
|
42
|
+
//# sourceMappingURL=aviation-get-metar.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aviation-get-metar.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/aviation-get-metar.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAUjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwJ3B,CAAC"}
|