astronomy-oracle 0.1.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/LICENSE +21 -0
- package/README.md +142 -0
- package/data/NGC.csv +13970 -0
- package/data/addendum.csv +65 -0
- package/dist/astro/coordinates.d.ts +20 -0
- package/dist/astro/coordinates.d.ts.map +1 -0
- package/dist/astro/coordinates.js +45 -0
- package/dist/astro/coordinates.js.map +1 -0
- package/dist/astro/time.d.ts +20 -0
- package/dist/astro/time.d.ts.map +1 -0
- package/dist/astro/time.js +53 -0
- package/dist/astro/time.js.map +1 -0
- package/dist/astro/visibility.d.ts +25 -0
- package/dist/astro/visibility.d.ts.map +1 -0
- package/dist/astro/visibility.js +119 -0
- package/dist/astro/visibility.js.map +1 -0
- package/dist/data/catalog.d.ts +20 -0
- package/dist/data/catalog.d.ts.map +1 -0
- package/dist/data/catalog.js +127 -0
- package/dist/data/catalog.js.map +1 -0
- package/dist/data/parse-coordinates.d.ts +13 -0
- package/dist/data/parse-coordinates.d.ts.map +1 -0
- package/dist/data/parse-coordinates.js +39 -0
- package/dist/data/parse-coordinates.js.map +1 -0
- package/dist/format.d.ts +20 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +204 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/search.d.ts +11 -0
- package/dist/lib/search.d.ts.map +1 -0
- package/dist/lib/search.js +21 -0
- package/dist/lib/search.js.map +1 -0
- package/dist/register-tools.d.ts +6 -0
- package/dist/register-tools.d.ts.map +1 -0
- package/dist/register-tools.js +12 -0
- package/dist/register-tools.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +14 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/lookup-object.d.ts +6 -0
- package/dist/tools/lookup-object.d.ts.map +1 -0
- package/dist/tools/lookup-object.js +82 -0
- package/dist/tools/lookup-object.js.map +1 -0
- package/dist/tools/plan-session.d.ts +6 -0
- package/dist/tools/plan-session.d.ts.map +1 -0
- package/dist/tools/plan-session.js +118 -0
- package/dist/tools/plan-session.js.map +1 -0
- package/dist/tools/search-objects.d.ts +6 -0
- package/dist/tools/search-objects.d.ts.map +1 -0
- package/dist/tools/search-objects.js +108 -0
- package/dist/tools/search-objects.js.map +1 -0
- package/dist/types.d.ts +72 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +28 -0
- package/dist/types.js.map +1 -0
- package/package.json +43 -0
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown formatting functions for MCP tool responses.
|
|
3
|
+
*/
|
|
4
|
+
import type { CelestialObject, VisibilityInfo, SessionObject } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Format a single celestial object as detailed markdown.
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatObject(obj: CelestialObject, visibility?: VisibilityInfo): string;
|
|
9
|
+
/**
|
|
10
|
+
* Format an array of search results as a markdown table.
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatSearchResults(objects: CelestialObject[]): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format a session plan with objects grouped by time window.
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatSessionPlan(windows: Map<string, SessionObject[]>, location: {
|
|
17
|
+
lat: number;
|
|
18
|
+
lon: number;
|
|
19
|
+
}, date: Date): string;
|
|
20
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAgDpB;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,eAAe,EACpB,UAAU,CAAC,EAAE,cAAc,GAC1B,MAAM,CAgFR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAkCtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,EACrC,QAAQ,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACtC,IAAI,EAAE,IAAI,GACT,MAAM,CAyER"}
|
package/dist/format.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown formatting functions for MCP tool responses.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Convert RA in degrees to "HHh MMm SS.Ss" format.
|
|
6
|
+
* RA degrees / 15 = hours.
|
|
7
|
+
*/
|
|
8
|
+
function degreesToHMS(deg) {
|
|
9
|
+
const totalHours = deg / 15;
|
|
10
|
+
const hours = Math.floor(totalHours);
|
|
11
|
+
const remainMinutes = (totalHours - hours) * 60;
|
|
12
|
+
const minutes = Math.floor(remainMinutes);
|
|
13
|
+
const seconds = (remainMinutes - minutes) * 60;
|
|
14
|
+
return `${hours}h ${String(minutes).padStart(2, "0")}m ${seconds.toFixed(1).padStart(4, "0")}s`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Convert Dec in degrees to "+DD° MM' SS.S\"" format.
|
|
18
|
+
*/
|
|
19
|
+
function degreesToDMS(deg) {
|
|
20
|
+
const sign = deg >= 0 ? "+" : "-";
|
|
21
|
+
const abs = Math.abs(deg);
|
|
22
|
+
const degrees = Math.floor(abs);
|
|
23
|
+
const remainArcmin = (abs - degrees) * 60;
|
|
24
|
+
const arcmin = Math.floor(remainArcmin);
|
|
25
|
+
const arcsec = (remainArcmin - arcmin) * 60;
|
|
26
|
+
return `${sign}${degrees}° ${String(arcmin).padStart(2, "0")}' ${arcsec.toFixed(1).padStart(4, "0")}"`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Format a Date as "HH:MM UTC".
|
|
30
|
+
*/
|
|
31
|
+
function formatTime(date) {
|
|
32
|
+
const h = String(date.getUTCHours()).padStart(2, "0");
|
|
33
|
+
const m = String(date.getUTCMinutes()).padStart(2, "0");
|
|
34
|
+
return `${h}:${m} UTC`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Build the display name for an object, e.g. "M31 / NGC0224 / \"Andromeda Galaxy\""
|
|
38
|
+
*/
|
|
39
|
+
function buildTitle(obj) {
|
|
40
|
+
const parts = [];
|
|
41
|
+
if (obj.messier)
|
|
42
|
+
parts.push(obj.messier);
|
|
43
|
+
parts.push(obj.name);
|
|
44
|
+
if (obj.commonName)
|
|
45
|
+
parts.push(`"${obj.commonName}"`);
|
|
46
|
+
return parts.join(" / ");
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Format a single celestial object as detailed markdown.
|
|
50
|
+
*/
|
|
51
|
+
export function formatObject(obj, visibility) {
|
|
52
|
+
const lines = [];
|
|
53
|
+
// Title
|
|
54
|
+
lines.push(`# ${buildTitle(obj)}`);
|
|
55
|
+
lines.push("");
|
|
56
|
+
// Core properties
|
|
57
|
+
lines.push(`- **Type:** ${obj.typeName}`);
|
|
58
|
+
lines.push(`- **Constellation:** ${obj.constellation}`);
|
|
59
|
+
lines.push(`- **RA:** ${degreesToHMS(obj.ra)}`);
|
|
60
|
+
lines.push(`- **Dec:** ${degreesToDMS(obj.dec)}`);
|
|
61
|
+
if (obj.magnitude !== null) {
|
|
62
|
+
lines.push(`- **Magnitude:** ${obj.magnitude}`);
|
|
63
|
+
}
|
|
64
|
+
if (obj.surfaceBrightness !== null) {
|
|
65
|
+
lines.push(`- **Surface Brightness:** ${obj.surfaceBrightness} mag/arcsec²`);
|
|
66
|
+
}
|
|
67
|
+
if (obj.majorAxis !== null) {
|
|
68
|
+
const size = obj.minorAxis !== null
|
|
69
|
+
? `${obj.majorAxis}' × ${obj.minorAxis}'`
|
|
70
|
+
: `${obj.majorAxis}'`;
|
|
71
|
+
lines.push(`- **Angular Size:** ${size}`);
|
|
72
|
+
if (obj.positionAngle !== null) {
|
|
73
|
+
lines.push(`- **Position Angle:** ${obj.positionAngle}°`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (obj.hubbleType) {
|
|
77
|
+
lines.push(`- **Hubble Type:** ${obj.hubbleType}`);
|
|
78
|
+
}
|
|
79
|
+
// Cross-references
|
|
80
|
+
const xrefs = [];
|
|
81
|
+
if (obj.messier)
|
|
82
|
+
xrefs.push(obj.messier);
|
|
83
|
+
if (obj.ngcCrossRef)
|
|
84
|
+
xrefs.push(obj.ngcCrossRef);
|
|
85
|
+
if (obj.icCrossRef)
|
|
86
|
+
xrefs.push(obj.icCrossRef);
|
|
87
|
+
if (obj.otherIdentifiers)
|
|
88
|
+
xrefs.push(obj.otherIdentifiers);
|
|
89
|
+
if (xrefs.length > 0) {
|
|
90
|
+
lines.push("");
|
|
91
|
+
lines.push(`**Cross-references:** ${xrefs.join(", ")}`);
|
|
92
|
+
}
|
|
93
|
+
// Visibility section
|
|
94
|
+
if (visibility) {
|
|
95
|
+
lines.push("");
|
|
96
|
+
lines.push("## Current Visibility");
|
|
97
|
+
lines.push("");
|
|
98
|
+
if (visibility.neverRises) {
|
|
99
|
+
lines.push("This object **never rises** above the horizon at your location.");
|
|
100
|
+
}
|
|
101
|
+
else if (visibility.isCircumpolar) {
|
|
102
|
+
lines.push("This object is **circumpolar** — it never sets at your location.");
|
|
103
|
+
lines.push("");
|
|
104
|
+
lines.push(`- **Altitude:** ${visibility.altitude.toFixed(1)}°`);
|
|
105
|
+
lines.push(`- **Azimuth:** ${visibility.azimuth.toFixed(1)}°`);
|
|
106
|
+
if (visibility.transitTime) {
|
|
107
|
+
lines.push(`- **Transit:** ${formatTime(visibility.transitTime)}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
lines.push(`- **Altitude:** ${visibility.altitude.toFixed(1)}°`);
|
|
112
|
+
lines.push(`- **Azimuth:** ${visibility.azimuth.toFixed(1)}°`);
|
|
113
|
+
if (visibility.riseTime) {
|
|
114
|
+
lines.push(`- **Rise:** ${formatTime(visibility.riseTime)}`);
|
|
115
|
+
}
|
|
116
|
+
if (visibility.transitTime) {
|
|
117
|
+
lines.push(`- **Transit:** ${formatTime(visibility.transitTime)}`);
|
|
118
|
+
}
|
|
119
|
+
if (visibility.setTime) {
|
|
120
|
+
lines.push(`- **Set:** ${formatTime(visibility.setTime)}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return lines.join("\n");
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Format an array of search results as a markdown table.
|
|
128
|
+
*/
|
|
129
|
+
export function formatSearchResults(objects) {
|
|
130
|
+
if (objects.length === 0) {
|
|
131
|
+
return "No objects found.";
|
|
132
|
+
}
|
|
133
|
+
const lines = [];
|
|
134
|
+
lines.push(`Found ${objects.length} object(s):`);
|
|
135
|
+
lines.push("");
|
|
136
|
+
lines.push("| Name | Type | Mag | Size | Constellation | Common Name |");
|
|
137
|
+
lines.push("| --- | --- | ---: | --- | --- | --- |");
|
|
138
|
+
for (const obj of objects) {
|
|
139
|
+
const name = obj.messier
|
|
140
|
+
? `${obj.messier} (${obj.name})`
|
|
141
|
+
: obj.name;
|
|
142
|
+
const mag = obj.magnitude !== null ? String(obj.magnitude) : "—";
|
|
143
|
+
const size = obj.majorAxis !== null
|
|
144
|
+
? obj.minorAxis !== null
|
|
145
|
+
? `${obj.majorAxis}' × ${obj.minorAxis}'`
|
|
146
|
+
: `${obj.majorAxis}'`
|
|
147
|
+
: "—";
|
|
148
|
+
const common = obj.commonName ?? "—";
|
|
149
|
+
lines.push(`| ${name} | ${obj.typeName} | ${mag} | ${size} | ${obj.constellation} | ${common} |`);
|
|
150
|
+
}
|
|
151
|
+
return lines.join("\n");
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Format a session plan with objects grouped by time window.
|
|
155
|
+
*/
|
|
156
|
+
export function formatSessionPlan(windows, location, date) {
|
|
157
|
+
const lines = [];
|
|
158
|
+
lines.push("# Observing Session Plan");
|
|
159
|
+
lines.push("");
|
|
160
|
+
lines.push(`**Location:** ${Math.abs(location.lat).toFixed(2)}°${location.lat >= 0 ? "N" : "S"}, ${Math.abs(location.lon).toFixed(2)}°${location.lon >= 0 ? "E" : "W"} `);
|
|
161
|
+
lines.push(`**Date:** ${date.toISOString().slice(0, 10)}`);
|
|
162
|
+
const sections = [
|
|
163
|
+
{
|
|
164
|
+
key: "evening",
|
|
165
|
+
title: "Early Evening",
|
|
166
|
+
timeRange: "sunset–22:00",
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
key: "midnight",
|
|
170
|
+
title: "Late Night",
|
|
171
|
+
timeRange: "22:00–02:00",
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
key: "predawn",
|
|
175
|
+
title: "Pre-Dawn",
|
|
176
|
+
timeRange: "02:00–sunrise",
|
|
177
|
+
},
|
|
178
|
+
];
|
|
179
|
+
for (const section of sections) {
|
|
180
|
+
lines.push("");
|
|
181
|
+
lines.push(`## ${section.title} (${section.timeRange})`);
|
|
182
|
+
lines.push("");
|
|
183
|
+
const objects = windows.get(section.key);
|
|
184
|
+
if (!objects || objects.length === 0) {
|
|
185
|
+
lines.push("No notable objects in this window.");
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
lines.push("| Object | Type | Mag | Peak Alt | Transit | Score |");
|
|
189
|
+
lines.push("| --- | --- | ---: | ---: | --- | ---: |");
|
|
190
|
+
for (const so of objects) {
|
|
191
|
+
const name = so.object.messier
|
|
192
|
+
? `${so.object.messier} (${so.object.name})`
|
|
193
|
+
: so.object.name;
|
|
194
|
+
const mag = so.object.magnitude !== null ? String(so.object.magnitude) : "—";
|
|
195
|
+
const peakAlt = `${so.peakAltitude.toFixed(1)}°`;
|
|
196
|
+
const transit = formatTime(so.transitTime);
|
|
197
|
+
lines.push(`| ${name} | ${so.object.typeName} | ${mag} | ${peakAlt} | ${transit} | ${so.score} |`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
lines.push("");
|
|
201
|
+
lines.push("*Score reflects overall observability based on altitude, magnitude, and object type. Higher is better (0–100).*");
|
|
202
|
+
return lines.join("\n");
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;GAGG;AACH,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,UAAU,GAAG,GAAG,GAAG,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AAClG,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAC5C,OAAO,GAAG,IAAI,GAAG,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AACzG,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAU;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,GAAoB;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,GAAG,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAoB,EACpB,UAA2B;IAE3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,QAAQ;IACR,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,aAAa,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAElD,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,GAAG,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,6BAA6B,GAAG,CAAC,iBAAiB,cAAc,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,GACR,GAAG,CAAC,SAAS,KAAK,IAAI;YACpB,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,OAAO,GAAG,CAAC,SAAS,GAAG;YACzC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,GAAG,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,mBAAmB;IACnB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,GAAG,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,GAAG,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,GAAG,CAAC,gBAAgB;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,qBAAqB;IACrB,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CACR,iEAAiE,CAClE,CAAC;QACJ,CAAC;aAAM,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CACR,kEAAkE,CACnE,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/D,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/D,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA0B;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,4DAA4D,CAC7D,CAAC;IACF,KAAK,CAAC,IAAI,CACR,wCAAwC,CACzC,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO;YACtB,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,IAAI,GAAG;YAChC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACjE,MAAM,IAAI,GACR,GAAG,CAAC,SAAS,KAAK,IAAI;YACpB,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,IAAI;gBACtB,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,OAAO,GAAG,CAAC,SAAS,GAAG;gBACzC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,GAAG;YACvB,CAAC,CAAC,GAAG,CAAC;QACV,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC;QAErC,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,MAAM,GAAG,CAAC,QAAQ,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,CAAC,aAAa,MAAM,MAAM,IAAI,CACtF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAqC,EACrC,QAAsC,EACtC,IAAU;IAEV,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,iBAAiB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAC/J,CAAC;IACF,KAAK,CAAC,IAAI,CACR,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAC/C,CAAC;IAEF,MAAM,QAAQ,GAIT;QACH;YACE,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,cAAc;SAC1B;QACD;YACE,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,aAAa;SACzB;QACD;YACE,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,eAAe;SAC3B;KACF,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CACR,sDAAsD,CACvD,CAAC;QACF,KAAK,CAAC,IAAI,CACR,0CAA0C,CAC3C,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO;gBAC5B,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG;gBAC5C,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;YACnB,MAAM,GAAG,GACP,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACnE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YACjD,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAE3C,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,MAAM,GAAG,MAAM,OAAO,MAAM,OAAO,MAAM,EAAE,CAAC,KAAK,IAAI,CACvF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,iHAAiH,CAClH,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,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;;GAEG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point for the astronomy-oracle MCP server.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync } from "node:fs";
|
|
6
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
|
+
import { createServer } from "./server.js";
|
|
8
|
+
const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
|
|
9
|
+
console.error(`Astronomy Oracle v${pkg.version} — celestial object catalog & observing planner MCP server`);
|
|
10
|
+
const server = createServer(pkg.version);
|
|
11
|
+
const transport = new StdioServerTransport();
|
|
12
|
+
await server.connect(transport);
|
|
13
|
+
process.on("SIGINT", async () => {
|
|
14
|
+
await server.close();
|
|
15
|
+
process.exit(0);
|
|
16
|
+
});
|
|
17
|
+
process.on("SIGTERM", async () => {
|
|
18
|
+
await server.close();
|
|
19
|
+
process.exit(0);
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAC;AACF,OAAO,CAAC,KAAK,CACX,qBAAqB,GAAG,CAAC,OAAO,4DAA4D,CAC7F,CAAC;AAEF,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fuzzy search helper for catalog lookups.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Case-insensitive substring search across multiple fields of an item.
|
|
6
|
+
* Returns all items where at least one specified field contains the query.
|
|
7
|
+
* Returns all items if query is empty.
|
|
8
|
+
* Safely skips null/undefined field values.
|
|
9
|
+
*/
|
|
10
|
+
export declare function fuzzySearch<T extends object>(items: T[], query: string, fields: (keyof T & string)[]): T[];
|
|
11
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/lib/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAC1C,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,GAC3B,CAAC,EAAE,CAYL"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fuzzy search helper for catalog lookups.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Case-insensitive substring search across multiple fields of an item.
|
|
6
|
+
* Returns all items where at least one specified field contains the query.
|
|
7
|
+
* Returns all items if query is empty.
|
|
8
|
+
* Safely skips null/undefined field values.
|
|
9
|
+
*/
|
|
10
|
+
export function fuzzySearch(items, query, fields) {
|
|
11
|
+
if (!query || query.trim() === "")
|
|
12
|
+
return [...items];
|
|
13
|
+
const lowerQuery = query.toLowerCase();
|
|
14
|
+
return items.filter((item) => fields.some((field) => {
|
|
15
|
+
const value = item[field];
|
|
16
|
+
if (value == null || typeof value !== "string")
|
|
17
|
+
return false;
|
|
18
|
+
return value.toLowerCase().includes(lowerQuery);
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/lib/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,KAAU,EACV,KAAa,EACb,MAA4B;IAE5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAEvC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC7D,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-tools.d.ts","sourceRoot":"","sources":["../src/register-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAIrD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register all MCP tools with the server.
|
|
3
|
+
*/
|
|
4
|
+
import { registerLookupObject } from "./tools/lookup-object.js";
|
|
5
|
+
import { registerSearchObjects } from "./tools/search-objects.js";
|
|
6
|
+
import { registerPlanSession } from "./tools/plan-session.js";
|
|
7
|
+
export function registerTools(server) {
|
|
8
|
+
registerLookupObject(server);
|
|
9
|
+
registerSearchObjects(server);
|
|
10
|
+
registerPlanSession(server);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=register-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-tools.js","sourceRoot":"","sources":["../src/register-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAOxD"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP server factory for astronomy-oracle.
|
|
3
|
+
*/
|
|
4
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
+
import { registerTools } from "./register-tools.js";
|
|
6
|
+
export function createServer(version) {
|
|
7
|
+
const server = new McpServer({
|
|
8
|
+
name: "astronomy-oracle",
|
|
9
|
+
version: version ?? "0.0.0",
|
|
10
|
+
});
|
|
11
|
+
registerTools(server);
|
|
12
|
+
return server;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,OAAO,IAAI,OAAO;KAC5B,CAAC,CAAC;IACH,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lookup_object tool — find a celestial object by name, designation, or common name.
|
|
3
|
+
*/
|
|
4
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
+
export declare function registerLookupObject(server: McpServer): void;
|
|
6
|
+
//# sourceMappingURL=lookup-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup-object.d.ts","sourceRoot":"","sources":["../../src/tools/lookup-object.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkCzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgE5D"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lookup_object tool — find a celestial object by name, designation, or common name.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { getCatalog } from "../data/catalog.js";
|
|
6
|
+
import { fuzzySearch } from "../lib/search.js";
|
|
7
|
+
import { riseTransitSet } from "../astro/visibility.js";
|
|
8
|
+
import { formatObject } from "../format.js";
|
|
9
|
+
function findObject(store, name) {
|
|
10
|
+
// Try exact Messier match (uppercase)
|
|
11
|
+
const upperName = name.toUpperCase();
|
|
12
|
+
const messierMatch = store.byMessier.get(upperName);
|
|
13
|
+
if (messierMatch)
|
|
14
|
+
return messierMatch;
|
|
15
|
+
// Try exact primary name match
|
|
16
|
+
const byNameMatch = store.byName.get(name);
|
|
17
|
+
if (byNameMatch)
|
|
18
|
+
return byNameMatch;
|
|
19
|
+
// Try exact common name match (lowercase)
|
|
20
|
+
const commonMatch = store.byCommonName.get(name.toLowerCase());
|
|
21
|
+
if (commonMatch)
|
|
22
|
+
return commonMatch;
|
|
23
|
+
// Fuzzy search fallback
|
|
24
|
+
const allObjects = [...store.all.values()];
|
|
25
|
+
const fuzzyResults = fuzzySearch(allObjects, name, [
|
|
26
|
+
"name",
|
|
27
|
+
"messier",
|
|
28
|
+
"commonName",
|
|
29
|
+
"otherIdentifiers",
|
|
30
|
+
]);
|
|
31
|
+
return fuzzyResults.length > 0 ? fuzzyResults[0] : null;
|
|
32
|
+
}
|
|
33
|
+
export function registerLookupObject(server) {
|
|
34
|
+
server.tool("lookup_object", "Look up a celestial object by Messier number (e.g. M31), NGC/IC designation (e.g. NGC7000), or common name (e.g. Andromeda Galaxy). Optionally compute visibility from a given location and time.", {
|
|
35
|
+
name: z
|
|
36
|
+
.string()
|
|
37
|
+
.describe("Object name, Messier number, NGC/IC designation, or common name"),
|
|
38
|
+
latitude: z
|
|
39
|
+
.number()
|
|
40
|
+
.min(-90)
|
|
41
|
+
.max(90)
|
|
42
|
+
.optional()
|
|
43
|
+
.describe("Observer latitude in degrees (-90 to 90)"),
|
|
44
|
+
longitude: z
|
|
45
|
+
.number()
|
|
46
|
+
.min(-180)
|
|
47
|
+
.max(180)
|
|
48
|
+
.optional()
|
|
49
|
+
.describe("Observer longitude in degrees (-180 to 180)"),
|
|
50
|
+
date: z
|
|
51
|
+
.string()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("Date/time in ISO 8601 format (defaults to now)"),
|
|
54
|
+
}, async ({ name, latitude, longitude, date }) => {
|
|
55
|
+
const store = await getCatalog();
|
|
56
|
+
const obj = findObject(store, name);
|
|
57
|
+
if (!obj) {
|
|
58
|
+
return {
|
|
59
|
+
content: [
|
|
60
|
+
{
|
|
61
|
+
type: "text",
|
|
62
|
+
text: `No object found matching "${name}". Try the search_objects tool to browse by type, constellation, or magnitude.`,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
let visibility;
|
|
68
|
+
if (latitude !== undefined && longitude !== undefined) {
|
|
69
|
+
const obsDate = date ? new Date(date) : new Date();
|
|
70
|
+
visibility = riseTransitSet(obj.ra, obj.dec, latitude, longitude, obsDate);
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
content: [
|
|
74
|
+
{
|
|
75
|
+
type: "text",
|
|
76
|
+
text: formatObject(obj, visibility),
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=lookup-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup-object.js","sourceRoot":"","sources":["../../src/tools/lookup-object.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plan_session tool — generate an observing session plan for a location and date.
|
|
3
|
+
*/
|
|
4
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
+
export declare function registerPlanSession(server: McpServer): void;
|
|
6
|
+
//# sourceMappingURL=plan-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-session.d.ts","sourceRoot":"","sources":["../../src/tools/plan-session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6H3D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plan_session tool — generate an observing session plan for a location and date.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { getCatalog } from "../data/catalog.js";
|
|
6
|
+
import { OBJECT_TYPES } from "../types.js";
|
|
7
|
+
import { riseTransitSet } from "../astro/visibility.js";
|
|
8
|
+
import { formatSessionPlan } from "../format.js";
|
|
9
|
+
const typeKeys = Object.keys(OBJECT_TYPES).filter((k) => k !== "NonEx" && k !== "Dup");
|
|
10
|
+
/**
|
|
11
|
+
* Classify a transit time's UTC hour into a session window.
|
|
12
|
+
*/
|
|
13
|
+
function classifyWindow(transitTime) {
|
|
14
|
+
const hour = transitTime.getUTCHours();
|
|
15
|
+
if (hour >= 18 && hour < 22)
|
|
16
|
+
return "evening";
|
|
17
|
+
if (hour >= 22 || hour < 2)
|
|
18
|
+
return "midnight";
|
|
19
|
+
if (hour >= 2 && hour < 6)
|
|
20
|
+
return "predawn";
|
|
21
|
+
// Default: pick closest window
|
|
22
|
+
if (hour >= 6 && hour < 15)
|
|
23
|
+
return "predawn"; // morning → predawn is closest
|
|
24
|
+
return "evening"; // afternoon → evening is closest
|
|
25
|
+
}
|
|
26
|
+
export function registerPlanSession(server) {
|
|
27
|
+
server.tool("plan_session", "Generate an observing session plan for a given location and date. Returns the best celestial objects to observe grouped by time window (evening, midnight, pre-dawn), scored by observability.", {
|
|
28
|
+
latitude: z
|
|
29
|
+
.number()
|
|
30
|
+
.min(-90)
|
|
31
|
+
.max(90)
|
|
32
|
+
.describe("Observer latitude in degrees (-90 to 90)"),
|
|
33
|
+
longitude: z
|
|
34
|
+
.number()
|
|
35
|
+
.min(-180)
|
|
36
|
+
.max(180)
|
|
37
|
+
.describe("Observer longitude in degrees (-180 to 180)"),
|
|
38
|
+
date: z
|
|
39
|
+
.string()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("Date in ISO 8601 format (defaults to today)"),
|
|
42
|
+
minAltitude: z
|
|
43
|
+
.number()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("Minimum peak altitude in degrees (default 15)"),
|
|
46
|
+
maxMagnitude: z
|
|
47
|
+
.number()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe("Maximum (faintest) visual magnitude to include"),
|
|
50
|
+
types: z
|
|
51
|
+
.array(z.enum(typeKeys))
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("Object type codes to include (e.g. [\"G\", \"PN\", \"OCl\"])"),
|
|
54
|
+
}, async (params) => {
|
|
55
|
+
const store = await getCatalog();
|
|
56
|
+
const { latitude, longitude, date: dateStr, minAltitude: minAltParam, maxMagnitude, types, } = params;
|
|
57
|
+
const obsDate = dateStr ? new Date(dateStr) : new Date();
|
|
58
|
+
const minAltitude = minAltParam ?? 15;
|
|
59
|
+
// Filter candidates
|
|
60
|
+
let candidates = [...store.all.values()];
|
|
61
|
+
// Only include objects with known magnitude
|
|
62
|
+
candidates = candidates.filter((obj) => obj.magnitude !== null);
|
|
63
|
+
if (maxMagnitude !== undefined) {
|
|
64
|
+
candidates = candidates.filter((obj) => obj.magnitude <= maxMagnitude);
|
|
65
|
+
}
|
|
66
|
+
if (types && types.length > 0) {
|
|
67
|
+
const typeSet = new Set(types);
|
|
68
|
+
candidates = candidates.filter((obj) => typeSet.has(obj.type));
|
|
69
|
+
}
|
|
70
|
+
// Compute visibility and score each candidate
|
|
71
|
+
const sessionObjects = [];
|
|
72
|
+
for (const obj of candidates) {
|
|
73
|
+
const vis = riseTransitSet(obj.ra, obj.dec, latitude, longitude, obsDate);
|
|
74
|
+
// Skip objects that never rise
|
|
75
|
+
if (vis.neverRises)
|
|
76
|
+
continue;
|
|
77
|
+
// Compute peak altitude: 90 - |lat - dec| (simple approximation)
|
|
78
|
+
const peakAltitude = 90 - Math.abs(latitude - obj.dec);
|
|
79
|
+
// Skip objects that don't reach minAltitude
|
|
80
|
+
if (peakAltitude < minAltitude)
|
|
81
|
+
continue;
|
|
82
|
+
// Need a transit time for window classification
|
|
83
|
+
const transitTime = vis.transitTime;
|
|
84
|
+
if (!transitTime)
|
|
85
|
+
continue;
|
|
86
|
+
const window = classifyWindow(transitTime);
|
|
87
|
+
// Score = peakAltitude + max(0, (12 - magnitude) * 5) + min(majorAxis or 0, 30)
|
|
88
|
+
const magBonus = Math.max(0, (12 - (obj.magnitude ?? 12)) * 5);
|
|
89
|
+
const sizeBonus = Math.min(obj.majorAxis ?? 0, 30);
|
|
90
|
+
const score = Math.round(peakAltitude + magBonus + sizeBonus);
|
|
91
|
+
sessionObjects.push({
|
|
92
|
+
object: obj,
|
|
93
|
+
peakAltitude,
|
|
94
|
+
transitTime,
|
|
95
|
+
window,
|
|
96
|
+
score,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// Group by window, sort by score desc, take top 15 per window
|
|
100
|
+
const windows = new Map();
|
|
101
|
+
for (const w of ["evening", "midnight", "predawn"]) {
|
|
102
|
+
const inWindow = sessionObjects
|
|
103
|
+
.filter((so) => so.window === w)
|
|
104
|
+
.sort((a, b) => b.score - a.score)
|
|
105
|
+
.slice(0, 15);
|
|
106
|
+
windows.set(w, inWindow);
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
content: [
|
|
110
|
+
{
|
|
111
|
+
type: "text",
|
|
112
|
+
text: formatSessionPlan(windows, { lat: latitude, lon: longitude }, obsDate),
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=plan-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-session.js","sourceRoot":"","sources":["../../src/tools/plan-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* search_objects tool — filter and browse the celestial object catalog.
|
|
3
|
+
*/
|
|
4
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
+
export declare function registerSearchObjects(server: McpServer): void;
|
|
6
|
+
//# sourceMappingURL=search-objects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-objects.d.ts","sourceRoot":"","sources":["../../src/tools/search-objects.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0I7D"}
|