aqc-mcp 1.2.4 → 2.0.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/index.d.ts +0 -0
- package/dist/index.d.ts.map +0 -0
- package/dist/index.js +19 -32
- package/dist/index.js.map +1 -1
- package/dist/tools/ads.d.ts +0 -2
- package/dist/tools/ads.d.ts.map +1 -1
- package/dist/tools/ads.js +38 -25
- package/dist/tools/ads.js.map +1 -1
- package/dist/tools/alma.d.ts +0 -2
- package/dist/tools/alma.d.ts.map +1 -1
- package/dist/tools/alma.js +24 -34
- package/dist/tools/alma.js.map +1 -1
- package/dist/tools/esasky.d.ts +2 -0
- package/dist/tools/esasky.d.ts.map +1 -0
- package/dist/tools/esasky.js +25 -0
- package/dist/tools/esasky.js.map +1 -0
- package/dist/tools/eso.d.ts +2 -0
- package/dist/tools/eso.d.ts.map +1 -0
- package/dist/tools/eso.js +34 -0
- package/dist/tools/eso.js.map +1 -0
- package/dist/tools/exoplanet.d.ts +2 -0
- package/dist/tools/exoplanet.d.ts.map +1 -0
- package/dist/tools/exoplanet.js +25 -0
- package/dist/tools/exoplanet.js.map +1 -0
- package/dist/tools/gaia.d.ts +0 -2
- package/dist/tools/gaia.d.ts.map +1 -1
- package/dist/tools/gaia.js +23 -26
- package/dist/tools/gaia.js.map +1 -1
- package/dist/tools/heasarc.d.ts +2 -0
- package/dist/tools/heasarc.d.ts.map +1 -0
- package/dist/tools/heasarc.js +31 -0
- package/dist/tools/heasarc.js.map +1 -0
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +33 -70
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/irsa.d.ts +2 -0
- package/dist/tools/irsa.d.ts.map +1 -0
- package/dist/tools/irsa.js +29 -0
- package/dist/tools/irsa.js.map +1 -0
- package/dist/tools/jpl.d.ts +2 -0
- package/dist/tools/jpl.d.ts.map +1 -0
- package/dist/tools/jpl.js +106 -0
- package/dist/tools/jpl.js.map +1 -0
- package/dist/tools/mast.d.ts +2 -0
- package/dist/tools/mast.d.ts.map +1 -0
- package/dist/tools/mast.js +100 -0
- package/dist/tools/mast.js.map +1 -0
- package/dist/tools/ned.d.ts +2 -0
- package/dist/tools/ned.d.ts.map +1 -0
- package/dist/tools/ned.js +58 -0
- package/dist/tools/ned.js.map +1 -0
- package/dist/tools/nist.d.ts +2 -0
- package/dist/tools/nist.d.ts.map +1 -0
- package/dist/tools/nist.js +151 -0
- package/dist/tools/nist.js.map +1 -0
- package/dist/tools/sdss.d.ts +2 -0
- package/dist/tools/sdss.d.ts.map +1 -0
- package/dist/tools/sdss.js +74 -0
- package/dist/tools/sdss.js.map +1 -0
- package/dist/tools/simbad.d.ts +0 -2
- package/dist/tools/simbad.d.ts.map +1 -1
- package/dist/tools/simbad.js +23 -24
- package/dist/tools/simbad.js.map +1 -1
- package/dist/tools/splatalogue.d.ts +2 -0
- package/dist/tools/splatalogue.d.ts.map +1 -0
- package/dist/tools/splatalogue.js +116 -0
- package/dist/tools/splatalogue.js.map +1 -0
- package/dist/tools/vizier.d.ts +0 -2
- package/dist/tools/vizier.d.ts.map +1 -1
- package/dist/tools/vizier.js +24 -32
- package/dist/tools/vizier.js.map +1 -1
- package/dist/utils/http.d.ts +34 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +153 -0
- package/dist/utils/http.js.map +1 -0
- package/package.json +3 -4
- package/src/index.ts +31 -46
- package/src/tools/ads.ts +46 -31
- package/src/tools/alma.ts +27 -35
- package/src/tools/esasky.ts +34 -0
- package/src/tools/eso.ts +44 -0
- package/src/tools/exoplanet.ts +34 -0
- package/src/tools/gaia.ts +28 -29
- package/src/tools/heasarc.ts +37 -0
- package/src/tools/index.ts +34 -93
- package/src/tools/irsa.ts +42 -0
- package/src/tools/jpl.ts +129 -0
- package/src/tools/mast.ts +120 -0
- package/src/tools/ned.ts +64 -0
- package/src/tools/nist.ts +175 -0
- package/src/tools/sdss.ts +97 -0
- package/src/tools/simbad.ts +24 -29
- package/src/tools/splatalogue.ts +145 -0
- package/src/tools/vizier.ts +27 -35
- package/src/utils/http.ts +191 -0
- package/dist/tools/call.d.ts +0 -15
- package/dist/tools/call.d.ts.map +0 -1
- package/dist/tools/call.js +0 -31
- package/dist/tools/call.js.map +0 -1
- package/dist/utils/executor.d.ts +0 -12
- package/dist/utils/executor.d.ts.map +0 -1
- package/dist/utils/executor.js +0 -48
- package/dist/utils/executor.js.map +0 -1
- package/src/utils/executor.ts +0 -59
package/dist/tools/index.js
CHANGED
|
@@ -1,72 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (lang)
|
|
35
|
-
args.push('--lang', lang);
|
|
36
|
-
const result = await executeAqc(args);
|
|
37
|
-
if (!result.success)
|
|
38
|
-
throw new Error(result.error);
|
|
39
|
-
return { content: [{ type: 'text', text: result.output || '' }] };
|
|
40
|
-
});
|
|
41
|
-
// ADS - ads query [QUERY_STRING]
|
|
42
|
-
mcpServer.registerTool('ads_query', {
|
|
43
|
-
description: 'Query NASA Astrophysics Data System for papers and bibliographic information',
|
|
44
|
-
}, async ({ query, latest, review, lang }) => {
|
|
45
|
-
const args = ['ads', 'query'];
|
|
46
|
-
if (latest)
|
|
47
|
-
args.push('--latest');
|
|
48
|
-
if (review)
|
|
49
|
-
args.push('--review');
|
|
50
|
-
if (query)
|
|
51
|
-
args.push(query);
|
|
52
|
-
if (lang)
|
|
53
|
-
args.push('--lang', lang);
|
|
54
|
-
const result = await executeAqc(args);
|
|
55
|
-
if (!result.success)
|
|
56
|
-
throw new Error(result.error);
|
|
57
|
-
return { content: [{ type: 'text', text: result.output || '' }] };
|
|
58
|
-
});
|
|
59
|
-
// Gaia - gaia cone-search TARGET --radius RADIUS
|
|
60
|
-
mcpServer.registerTool('gaia_cone_search', {
|
|
61
|
-
description: 'Query Gaia archive via cone search around an object or coordinates',
|
|
62
|
-
}, async ({ target, radius, lang }) => {
|
|
63
|
-
const args = ['gaia', 'cone-search', target, '--radius', radius || '10arcsec'];
|
|
64
|
-
if (lang)
|
|
65
|
-
args.push('--lang', lang);
|
|
66
|
-
const result = await executeAqc(args);
|
|
67
|
-
if (!result.success)
|
|
68
|
-
throw new Error(result.error);
|
|
69
|
-
return { content: [{ type: 'text', text: result.output || '' }] };
|
|
70
|
-
});
|
|
1
|
+
import { registerSimbadTools } from './simbad.js';
|
|
2
|
+
import { registerVizierTools } from './vizier.js';
|
|
3
|
+
import { registerAlmaTools } from './alma.js';
|
|
4
|
+
import { registerGaiaTools } from './gaia.js';
|
|
5
|
+
import { registerAdsTools } from './ads.js';
|
|
6
|
+
import { registerEsaskyTools } from './esasky.js';
|
|
7
|
+
import { registerEsoTools } from './eso.js';
|
|
8
|
+
import { registerExoplanetTools } from './exoplanet.js';
|
|
9
|
+
import { registerHeasarcTools } from './heasarc.js';
|
|
10
|
+
import { registerIrsaTools } from './irsa.js';
|
|
11
|
+
import { registerJplTools } from './jpl.js';
|
|
12
|
+
import { registerMastTools } from './mast.js';
|
|
13
|
+
import { registerNedTools } from './ned.js';
|
|
14
|
+
import { registerNistTools } from './nist.js';
|
|
15
|
+
import { registerSdssTools } from './sdss.js';
|
|
16
|
+
import { registerSplatalogueTools } from './splatalogue.js';
|
|
17
|
+
export function registerAllTools(server) {
|
|
18
|
+
registerSimbadTools(server);
|
|
19
|
+
registerVizierTools(server);
|
|
20
|
+
registerAlmaTools(server);
|
|
21
|
+
registerGaiaTools(server);
|
|
22
|
+
registerAdsTools(server);
|
|
23
|
+
registerEsaskyTools(server);
|
|
24
|
+
registerEsoTools(server);
|
|
25
|
+
registerExoplanetTools(server);
|
|
26
|
+
registerHeasarcTools(server);
|
|
27
|
+
registerIrsaTools(server);
|
|
28
|
+
registerJplTools(server);
|
|
29
|
+
registerMastTools(server);
|
|
30
|
+
registerNedTools(server);
|
|
31
|
+
registerNistTools(server);
|
|
32
|
+
registerSdssTools(server);
|
|
33
|
+
registerSplatalogueTools(server);
|
|
71
34
|
}
|
|
72
35
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"irsa.d.ts","sourceRoot":"","sources":["../../src/tools/irsa.ts"],"names":[],"mappings":"AAKA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,QAoC5C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { tapQuery, formatTapResult } from '../utils/http.js';
|
|
3
|
+
const IRSA_TAP = 'https://irsa.ipac.caltech.edu/TAP/sync';
|
|
4
|
+
export function registerIrsaTools(server) {
|
|
5
|
+
server.tool('irsa_query', 'Query NASA/IPAC Infrared Science Archive (IRSA) by coordinates and catalog', {
|
|
6
|
+
ra: z.number().describe('Right Ascension in degrees'),
|
|
7
|
+
dec: z.number().describe('Declination in degrees'),
|
|
8
|
+
catalog: z.string().default('allwise_p3as_psd').describe('IRSA catalog table name (e.g. "allwise_p3as_psd", "fp_psc" for 2MASS)'),
|
|
9
|
+
radius: z.number().default(10).describe('Search radius in arcseconds'),
|
|
10
|
+
max_results: z.number().default(50).describe('Maximum number of results'),
|
|
11
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
12
|
+
}, async ({ ra, dec, catalog, radius, max_results, lang }) => {
|
|
13
|
+
const radiusDeg = radius / 3600;
|
|
14
|
+
const adql = `SELECT TOP ${max_results} * FROM ${catalog} WHERE CONTAINS(POINT('ICRS', ra, dec), CIRCLE('ICRS', ${ra}, ${dec}, ${radiusDeg})) = 1`;
|
|
15
|
+
const result = await tapQuery({ endpoint: IRSA_TAP, adql, maxrec: max_results });
|
|
16
|
+
const title = lang === 'zh' ? `IRSA 查询结果 (${catalog})` : `IRSA Query Result (${catalog})`;
|
|
17
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
18
|
+
});
|
|
19
|
+
server.tool('irsa_tap', 'Execute raw ADQL query against IRSA TAP service', {
|
|
20
|
+
adql: z.string().describe('ADQL query string'),
|
|
21
|
+
max_results: z.number().default(100).describe('Maximum number of results'),
|
|
22
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
23
|
+
}, async ({ adql, max_results, lang }) => {
|
|
24
|
+
const result = await tapQuery({ endpoint: IRSA_TAP, adql, maxrec: max_results });
|
|
25
|
+
const title = lang === 'zh' ? 'IRSA TAP 查询结果' : 'IRSA TAP Query Result';
|
|
26
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=irsa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"irsa.js","sourceRoot":"","sources":["../../src/tools/irsa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,QAAQ,GAAG,wCAAwC,CAAC;AAE1D,MAAM,UAAU,iBAAiB,CAAC,MAAW;IAC3C,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,4EAA4E,EAC5E;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACrD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,uEAAuE,CAAC;QACjI,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACtE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACzE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KACrE,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAmG,EAAE,EAAE;QACzJ,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,cAAc,WAAW,WAAW,OAAO,0DAA0D,EAAE,KAAK,GAAG,KAAK,SAAS,QAAQ,CAAC;QAEnJ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,OAAO,GAAG,CAAC,CAAC,CAAC,sBAAsB,OAAO,GAAG,CAAC;QAC1F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,UAAU,EACV,iDAAiD,EACjD;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC1E,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KACrE,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAuD,EAAE,EAAE;QACzF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC;QACxE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jpl.d.ts","sourceRoot":"","sources":["../../src/tools/jpl.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,QA0H3C"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { restGet } from '../utils/http.js';
|
|
3
|
+
const HORIZONS_API = 'https://ssd.jpl.nasa.gov/api/horizons.api';
|
|
4
|
+
const SBDB_API = 'https://ssd-api.jpl.nasa.gov/sbdb.api';
|
|
5
|
+
export function registerJplTools(server) {
|
|
6
|
+
server.tool('jpl_horizons', 'Query JPL Horizons for solar system body ephemerides, orbital elements, or state vectors', {
|
|
7
|
+
target: z.string().describe('Target body (e.g. "Mars", "499", "Ceres", "1P/Halley")'),
|
|
8
|
+
location: z.string().default('500').describe('Observer location code (default "500" = geocentric, "500@10" = heliocentric)'),
|
|
9
|
+
ephemeris_type: z.enum(['ephemerides', 'elements', 'vectors']).default('ephemerides').describe('Type of ephemeris data'),
|
|
10
|
+
start_time: z.string().optional().describe('Start time (e.g. "2024-01-01"). Defaults to today.'),
|
|
11
|
+
stop_time: z.string().optional().describe('Stop time (e.g. "2024-01-02"). Defaults to start + 1 day.'),
|
|
12
|
+
step_size: z.string().default('1d').describe('Step size (e.g. "1d", "1h", "30m")'),
|
|
13
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
14
|
+
}, async ({ target, location, ephemeris_type, start_time, stop_time, step_size, lang }) => {
|
|
15
|
+
const now = new Date();
|
|
16
|
+
const tomorrow = new Date(now);
|
|
17
|
+
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
18
|
+
const defaultStart = now.toISOString().split('T')[0];
|
|
19
|
+
const defaultStop = tomorrow.toISOString().split('T')[0];
|
|
20
|
+
const commandMap = {
|
|
21
|
+
ephemerides: 'OBSERVER',
|
|
22
|
+
elements: 'ELEMENTS',
|
|
23
|
+
vectors: 'VECTORS',
|
|
24
|
+
};
|
|
25
|
+
const params = new URLSearchParams({
|
|
26
|
+
format: 'text',
|
|
27
|
+
COMMAND: `'${target}'`,
|
|
28
|
+
OBJ_DATA: 'YES',
|
|
29
|
+
MAKE_EPHEM: 'YES',
|
|
30
|
+
EPHEM_TYPE: commandMap[ephemeris_type] || 'OBSERVER',
|
|
31
|
+
CENTER: `'${location}'`,
|
|
32
|
+
START_TIME: `'${start_time || defaultStart}'`,
|
|
33
|
+
STOP_TIME: `'${stop_time || defaultStop}'`,
|
|
34
|
+
STEP_SIZE: `'${step_size}'`,
|
|
35
|
+
CSV_FORMAT: 'NO',
|
|
36
|
+
});
|
|
37
|
+
const url = `${HORIZONS_API}?${params.toString()}`;
|
|
38
|
+
const data = await restGet(url);
|
|
39
|
+
if (data.error) {
|
|
40
|
+
const errMsg = lang === 'zh' ? `JPL Horizons 错误: ${data.error}` : `JPL Horizons error: ${data.error}`;
|
|
41
|
+
return { content: [{ type: 'text', text: errMsg }] };
|
|
42
|
+
}
|
|
43
|
+
const result = data.result || JSON.stringify(data, null, 2);
|
|
44
|
+
const title = lang === 'zh'
|
|
45
|
+
? `## JPL Horizons: ${target} (${ephemeris_type})\n`
|
|
46
|
+
: `## JPL Horizons: ${target} (${ephemeris_type})\n`;
|
|
47
|
+
return { content: [{ type: 'text', text: title + result }] };
|
|
48
|
+
});
|
|
49
|
+
server.tool('jpl_sbdb', 'Query JPL Small-Body Database for asteroid/comet orbital and physical data', {
|
|
50
|
+
target: z.string().describe('Target small body name or designation (e.g. "Ceres", "433", "1P/Halley")'),
|
|
51
|
+
phys: z.boolean().default(true).describe('Include physical parameters'),
|
|
52
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
53
|
+
}, async ({ target, phys, lang }) => {
|
|
54
|
+
const params = new URLSearchParams({
|
|
55
|
+
sstr: target,
|
|
56
|
+
phys_par: phys ? '1' : '0',
|
|
57
|
+
});
|
|
58
|
+
const url = `${SBDB_API}?${params.toString()}`;
|
|
59
|
+
const data = await restGet(url);
|
|
60
|
+
const lines = [];
|
|
61
|
+
const title = lang === 'zh' ? `JPL 小天体数据库: ${target}` : `JPL SBDB: ${target}`;
|
|
62
|
+
lines.push(`## ${title}\n`);
|
|
63
|
+
// Object info
|
|
64
|
+
const obj = data.object;
|
|
65
|
+
if (obj) {
|
|
66
|
+
lines.push(lang === 'zh' ? '### 基本信息' : '### Object Info');
|
|
67
|
+
if (obj.fullname)
|
|
68
|
+
lines.push(` Name: ${obj.fullname}`);
|
|
69
|
+
if (obj.kind)
|
|
70
|
+
lines.push(` Type: ${obj.kind}`);
|
|
71
|
+
if (obj.des)
|
|
72
|
+
lines.push(` Designation: ${obj.des}`);
|
|
73
|
+
if (obj.prefix)
|
|
74
|
+
lines.push(` Prefix: ${obj.prefix}`);
|
|
75
|
+
lines.push('');
|
|
76
|
+
}
|
|
77
|
+
// Orbital elements
|
|
78
|
+
const orbit = data.orbit;
|
|
79
|
+
if (orbit) {
|
|
80
|
+
const elements = orbit.elements;
|
|
81
|
+
if (elements) {
|
|
82
|
+
lines.push(lang === 'zh' ? '### 轨道要素' : '### Orbital Elements');
|
|
83
|
+
for (const el of elements) {
|
|
84
|
+
const unit = el.units ? ` ${el.units}` : '';
|
|
85
|
+
lines.push(` ${el.title || el.name}: ${el.value}${unit}`);
|
|
86
|
+
}
|
|
87
|
+
lines.push('');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Physical parameters
|
|
91
|
+
const physPar = data.phys_par;
|
|
92
|
+
if (physPar && physPar.length > 0) {
|
|
93
|
+
lines.push(lang === 'zh' ? '### 物理参数' : '### Physical Parameters');
|
|
94
|
+
for (const p of physPar) {
|
|
95
|
+
const unit = p.units ? ` ${p.units}` : '';
|
|
96
|
+
lines.push(` ${p.title || p.name}: ${p.value}${unit}`);
|
|
97
|
+
}
|
|
98
|
+
lines.push('');
|
|
99
|
+
}
|
|
100
|
+
if (lines.length <= 2) {
|
|
101
|
+
lines.push(lang === 'zh' ? '未找到该天体的信息。' : 'No information found for this target.');
|
|
102
|
+
}
|
|
103
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=jpl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jpl.js","sourceRoot":"","sources":["../../src/tools/jpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mast.d.ts","sourceRoot":"","sources":["../../src/tools/mast.ts"],"names":[],"mappings":"AAwEA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,QA+C5C"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const MAST_API = 'https://mast.stsci.edu/api/v0/invoke';
|
|
3
|
+
async function mastQuery(service, params, timeout = 60000) {
|
|
4
|
+
const body = JSON.stringify({ service, params, format: 'json', timeout: Math.floor(timeout / 1000) });
|
|
5
|
+
const controller = new AbortController();
|
|
6
|
+
const timer = setTimeout(() => controller.abort(), timeout);
|
|
7
|
+
try {
|
|
8
|
+
const response = await fetch(MAST_API, {
|
|
9
|
+
method: 'POST',
|
|
10
|
+
headers: { 'Content-Type': 'application/json' },
|
|
11
|
+
body,
|
|
12
|
+
signal: controller.signal,
|
|
13
|
+
});
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
const text = await response.text().catch(() => '');
|
|
16
|
+
throw new Error(`MAST API error (${response.status}): ${text.slice(0, 500)}`);
|
|
17
|
+
}
|
|
18
|
+
return await response.json();
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
clearTimeout(timer);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function formatMastResults(data, title) {
|
|
25
|
+
const lines = [`## ${title}\n`];
|
|
26
|
+
const rows = data?.data || data?.Data || [];
|
|
27
|
+
if (!Array.isArray(rows) || rows.length === 0) {
|
|
28
|
+
lines.push('No results found.');
|
|
29
|
+
return lines.join('\n');
|
|
30
|
+
}
|
|
31
|
+
lines.push(`Found ${rows.length} result(s).\n`);
|
|
32
|
+
const displayCols = ['intentType', 'obs_collection', 'instrument_name', 'filters', 'target_name', 'obsid', 's_ra', 's_dec', 't_min', 'dataproduct_type'];
|
|
33
|
+
if (rows.length <= 5) {
|
|
34
|
+
for (let i = 0; i < rows.length; i++) {
|
|
35
|
+
if (rows.length > 1)
|
|
36
|
+
lines.push(`--- Result ${i + 1} ---`);
|
|
37
|
+
const row = rows[i];
|
|
38
|
+
for (const [key, value] of Object.entries(row)) {
|
|
39
|
+
if (value !== null && value !== undefined && value !== '') {
|
|
40
|
+
lines.push(` ${key}: ${value}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
lines.push('');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const cols = displayCols.filter(c => rows[0][c] !== undefined);
|
|
48
|
+
if (cols.length === 0) {
|
|
49
|
+
const allCols = Object.keys(rows[0]).slice(0, 8);
|
|
50
|
+
cols.push(...allCols);
|
|
51
|
+
}
|
|
52
|
+
lines.push(cols.join(' | '));
|
|
53
|
+
lines.push(cols.map(() => '---').join(' | '));
|
|
54
|
+
for (const row of rows.slice(0, 20)) {
|
|
55
|
+
lines.push(cols.map(c => String(row[c] ?? '')).join(' | '));
|
|
56
|
+
}
|
|
57
|
+
if (rows.length > 20) {
|
|
58
|
+
lines.push(`\n... and ${rows.length - 20} more rows.`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return lines.join('\n');
|
|
62
|
+
}
|
|
63
|
+
export function registerMastTools(server) {
|
|
64
|
+
server.tool('mast_query', 'Search MAST (Mikulski Archive for Space Telescopes) for observations by object name or coordinates', {
|
|
65
|
+
object_name: z.string().optional().describe('Object name (e.g. "M31", "NGC 1068"). Use this OR ra/dec.'),
|
|
66
|
+
ra: z.number().optional().describe('Right Ascension in degrees (use with dec)'),
|
|
67
|
+
dec: z.number().optional().describe('Declination in degrees (use with ra)'),
|
|
68
|
+
radius: z.number().default(3).describe('Search radius in arcminutes'),
|
|
69
|
+
max_results: z.number().default(50).describe('Maximum number of results'),
|
|
70
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
71
|
+
}, async ({ object_name, ra, dec, radius, max_results, lang }) => {
|
|
72
|
+
if (!object_name && (ra === undefined || dec === undefined)) {
|
|
73
|
+
const msg = lang === 'zh'
|
|
74
|
+
? '请提供 object_name 或 ra/dec 坐标。'
|
|
75
|
+
: 'Please provide object_name or ra/dec coordinates.';
|
|
76
|
+
return { content: [{ type: 'text', text: msg }] };
|
|
77
|
+
}
|
|
78
|
+
let service;
|
|
79
|
+
let params;
|
|
80
|
+
if (object_name && (ra === undefined || dec === undefined)) {
|
|
81
|
+
service = 'Mast.Name.Lookup';
|
|
82
|
+
const resolveData = await mastQuery(service, { input: object_name });
|
|
83
|
+
const resolved = resolveData?.resolvedCoordinate;
|
|
84
|
+
if (!resolved || resolved.length === 0) {
|
|
85
|
+
const msg = lang === 'zh' ? `无法解析天体名称: ${object_name}` : `Could not resolve object name: ${object_name}`;
|
|
86
|
+
return { content: [{ type: 'text', text: msg }] };
|
|
87
|
+
}
|
|
88
|
+
ra = resolved[0].ra;
|
|
89
|
+
dec = resolved[0].decl;
|
|
90
|
+
}
|
|
91
|
+
service = 'Mast.Caom.Cone';
|
|
92
|
+
params = { ra: ra, dec: dec, radius: radius / 60, pagesize: max_results, page: 1 };
|
|
93
|
+
const data = await mastQuery(service, params);
|
|
94
|
+
const title = lang === 'zh'
|
|
95
|
+
? `MAST 查询结果${object_name ? ': ' + object_name : ''}`
|
|
96
|
+
: `MAST Query Result${object_name ? ': ' + object_name : ''}`;
|
|
97
|
+
return { content: [{ type: 'text', text: formatMastResults(data, title) }] };
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=mast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mast.js","sourceRoot":"","sources":["../../src/tools/mast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ned.d.ts","sourceRoot":"","sources":["../../src/tools/ned.ts"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,QA0D3C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { restGet } from '../utils/http.js';
|
|
3
|
+
const NED_API = 'https://ned.ipac.caltech.edu/srs/ObjectLookup';
|
|
4
|
+
export function registerNedTools(server) {
|
|
5
|
+
server.tool('ned_query', 'Query NASA/IPAC Extragalactic Database (NED) for object information by name', {
|
|
6
|
+
object_name: z.string().describe('Object name (e.g. "M31", "NGC 1068", "Arp 220")'),
|
|
7
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
8
|
+
}, async ({ object_name, lang }) => {
|
|
9
|
+
const url = `${NED_API}?name=${encodeURIComponent(object_name)}&of=json`;
|
|
10
|
+
const data = await restGet(url);
|
|
11
|
+
const lines = [];
|
|
12
|
+
const title = lang === 'zh' ? `NED 查询结果: ${object_name}` : `NED Query Result: ${object_name}`;
|
|
13
|
+
lines.push(`## ${title}\n`);
|
|
14
|
+
// NED returns different structures depending on the result
|
|
15
|
+
const resultCode = data.ResultCode;
|
|
16
|
+
if (resultCode !== undefined && resultCode !== 3 && resultCode !== 0) {
|
|
17
|
+
// ResultCode 3 = success for some endpoints, 0 = success for others
|
|
18
|
+
const msg = lang === 'zh' ? `未找到天体: ${object_name}` : `Object not found: ${object_name}`;
|
|
19
|
+
lines.push(msg);
|
|
20
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
21
|
+
}
|
|
22
|
+
const preferred = data.Preferred;
|
|
23
|
+
if (preferred) {
|
|
24
|
+
lines.push(lang === 'zh' ? '### 基本信息' : '### Basic Information');
|
|
25
|
+
if (preferred.Name)
|
|
26
|
+
lines.push(` Name: ${preferred.Name}`);
|
|
27
|
+
if (preferred.Type)
|
|
28
|
+
lines.push(` Type: ${preferred.Type}`);
|
|
29
|
+
const pos = preferred.Position;
|
|
30
|
+
if (pos) {
|
|
31
|
+
const ra = pos.RA;
|
|
32
|
+
const dec = pos.Dec;
|
|
33
|
+
if (ra !== undefined)
|
|
34
|
+
lines.push(` RA: ${ra}`);
|
|
35
|
+
if (dec !== undefined)
|
|
36
|
+
lines.push(` Dec: ${dec}`);
|
|
37
|
+
}
|
|
38
|
+
if (preferred.Redshift !== undefined && preferred.Redshift !== null)
|
|
39
|
+
lines.push(` Redshift: ${preferred.Redshift}`);
|
|
40
|
+
if (preferred.Velocity !== undefined && preferred.Velocity !== null)
|
|
41
|
+
lines.push(` Velocity: ${preferred.Velocity} km/s`);
|
|
42
|
+
lines.push('');
|
|
43
|
+
}
|
|
44
|
+
// If the response is a flat object with known fields
|
|
45
|
+
if (!preferred) {
|
|
46
|
+
for (const [key, value] of Object.entries(data)) {
|
|
47
|
+
if (value !== null && value !== undefined && typeof value !== 'object') {
|
|
48
|
+
lines.push(` ${key}: ${value}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (lines.length <= 2) {
|
|
53
|
+
lines.push(lang === 'zh' ? '未找到该天体的信息。' : 'No information found for this object.');
|
|
54
|
+
}
|
|
55
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=ned.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ned.js","sourceRoot":"","sources":["../../src/tools/ned.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nist.d.ts","sourceRoot":"","sources":["../../src/tools/nist.ts"],"names":[],"mappings":"AA4GA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,QAkE5C"}
|