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.
Files changed (105) hide show
  1. package/dist/index.d.ts +0 -0
  2. package/dist/index.d.ts.map +0 -0
  3. package/dist/index.js +19 -32
  4. package/dist/index.js.map +1 -1
  5. package/dist/tools/ads.d.ts +0 -2
  6. package/dist/tools/ads.d.ts.map +1 -1
  7. package/dist/tools/ads.js +38 -25
  8. package/dist/tools/ads.js.map +1 -1
  9. package/dist/tools/alma.d.ts +0 -2
  10. package/dist/tools/alma.d.ts.map +1 -1
  11. package/dist/tools/alma.js +24 -34
  12. package/dist/tools/alma.js.map +1 -1
  13. package/dist/tools/esasky.d.ts +2 -0
  14. package/dist/tools/esasky.d.ts.map +1 -0
  15. package/dist/tools/esasky.js +25 -0
  16. package/dist/tools/esasky.js.map +1 -0
  17. package/dist/tools/eso.d.ts +2 -0
  18. package/dist/tools/eso.d.ts.map +1 -0
  19. package/dist/tools/eso.js +34 -0
  20. package/dist/tools/eso.js.map +1 -0
  21. package/dist/tools/exoplanet.d.ts +2 -0
  22. package/dist/tools/exoplanet.d.ts.map +1 -0
  23. package/dist/tools/exoplanet.js +25 -0
  24. package/dist/tools/exoplanet.js.map +1 -0
  25. package/dist/tools/gaia.d.ts +0 -2
  26. package/dist/tools/gaia.d.ts.map +1 -1
  27. package/dist/tools/gaia.js +23 -26
  28. package/dist/tools/gaia.js.map +1 -1
  29. package/dist/tools/heasarc.d.ts +2 -0
  30. package/dist/tools/heasarc.d.ts.map +1 -0
  31. package/dist/tools/heasarc.js +31 -0
  32. package/dist/tools/heasarc.js.map +1 -0
  33. package/dist/tools/index.d.ts +1 -1
  34. package/dist/tools/index.d.ts.map +1 -1
  35. package/dist/tools/index.js +33 -70
  36. package/dist/tools/index.js.map +1 -1
  37. package/dist/tools/irsa.d.ts +2 -0
  38. package/dist/tools/irsa.d.ts.map +1 -0
  39. package/dist/tools/irsa.js +29 -0
  40. package/dist/tools/irsa.js.map +1 -0
  41. package/dist/tools/jpl.d.ts +2 -0
  42. package/dist/tools/jpl.d.ts.map +1 -0
  43. package/dist/tools/jpl.js +106 -0
  44. package/dist/tools/jpl.js.map +1 -0
  45. package/dist/tools/mast.d.ts +2 -0
  46. package/dist/tools/mast.d.ts.map +1 -0
  47. package/dist/tools/mast.js +100 -0
  48. package/dist/tools/mast.js.map +1 -0
  49. package/dist/tools/ned.d.ts +2 -0
  50. package/dist/tools/ned.d.ts.map +1 -0
  51. package/dist/tools/ned.js +58 -0
  52. package/dist/tools/ned.js.map +1 -0
  53. package/dist/tools/nist.d.ts +2 -0
  54. package/dist/tools/nist.d.ts.map +1 -0
  55. package/dist/tools/nist.js +151 -0
  56. package/dist/tools/nist.js.map +1 -0
  57. package/dist/tools/sdss.d.ts +2 -0
  58. package/dist/tools/sdss.d.ts.map +1 -0
  59. package/dist/tools/sdss.js +74 -0
  60. package/dist/tools/sdss.js.map +1 -0
  61. package/dist/tools/simbad.d.ts +0 -2
  62. package/dist/tools/simbad.d.ts.map +1 -1
  63. package/dist/tools/simbad.js +23 -24
  64. package/dist/tools/simbad.js.map +1 -1
  65. package/dist/tools/splatalogue.d.ts +2 -0
  66. package/dist/tools/splatalogue.d.ts.map +1 -0
  67. package/dist/tools/splatalogue.js +116 -0
  68. package/dist/tools/splatalogue.js.map +1 -0
  69. package/dist/tools/vizier.d.ts +0 -2
  70. package/dist/tools/vizier.d.ts.map +1 -1
  71. package/dist/tools/vizier.js +24 -32
  72. package/dist/tools/vizier.js.map +1 -1
  73. package/dist/utils/http.d.ts +34 -0
  74. package/dist/utils/http.d.ts.map +1 -0
  75. package/dist/utils/http.js +153 -0
  76. package/dist/utils/http.js.map +1 -0
  77. package/package.json +3 -4
  78. package/src/index.ts +31 -46
  79. package/src/tools/ads.ts +46 -31
  80. package/src/tools/alma.ts +27 -35
  81. package/src/tools/esasky.ts +34 -0
  82. package/src/tools/eso.ts +44 -0
  83. package/src/tools/exoplanet.ts +34 -0
  84. package/src/tools/gaia.ts +28 -29
  85. package/src/tools/heasarc.ts +37 -0
  86. package/src/tools/index.ts +34 -93
  87. package/src/tools/irsa.ts +42 -0
  88. package/src/tools/jpl.ts +129 -0
  89. package/src/tools/mast.ts +120 -0
  90. package/src/tools/ned.ts +64 -0
  91. package/src/tools/nist.ts +175 -0
  92. package/src/tools/sdss.ts +97 -0
  93. package/src/tools/simbad.ts +24 -29
  94. package/src/tools/splatalogue.ts +145 -0
  95. package/src/tools/vizier.ts +27 -35
  96. package/src/utils/http.ts +191 -0
  97. package/dist/tools/call.d.ts +0 -15
  98. package/dist/tools/call.d.ts.map +0 -1
  99. package/dist/tools/call.js +0 -31
  100. package/dist/tools/call.js.map +0 -1
  101. package/dist/utils/executor.d.ts +0 -12
  102. package/dist/utils/executor.d.ts.map +0 -1
  103. package/dist/utils/executor.js +0 -48
  104. package/dist/utils/executor.js.map +0 -1
  105. package/src/utils/executor.ts +0 -59
@@ -1,72 +1,35 @@
1
- import { executeAqc } from '../utils/executor.js';
2
- export async function listTools(mcpServer) {
3
- // SIMBAD - simbad object NAME
4
- mcpServer.registerTool('simbad_query', {
5
- description: 'Query the SIMBAD astronomical database for an object',
6
- }, async ({ object_name, lang }) => {
7
- const args = ['simbad', 'object', object_name];
8
- if (lang)
9
- args.push('--lang', lang);
10
- const result = await executeAqc(args);
11
- if (!result.success)
12
- throw new Error(result.error);
13
- return { content: [{ type: 'text', text: result.output || '' }] };
14
- });
15
- // VizieR - vizier object TARGET RADIUS
16
- mcpServer.registerTool('vizier_query', {
17
- description: 'Query the VizieR catalog database for an object or coordinates',
18
- }, async ({ target, radius, catalog, lang }) => {
19
- const args = ['vizier', 'object', target, radius];
20
- if (catalog)
21
- args.push('--catalog', catalog);
22
- if (lang)
23
- args.push('--lang', lang);
24
- const result = await executeAqc(args);
25
- if (!result.success)
26
- throw new Error(result.error);
27
- return { content: [{ type: 'text', text: result.output || '' }] };
28
- });
29
- // ALMA - alma object OBJECT_NAME
30
- mcpServer.registerTool('alma_query', {
31
- description: 'Query the ALMA archive for observations of an object',
32
- }, async ({ object_name, lang }) => {
33
- const args = ['alma', 'object', object_name];
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
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,2 @@
1
+ export declare function registerIrsaTools(server: any): void;
2
+ //# sourceMappingURL=irsa.d.ts.map
@@ -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,2 @@
1
+ export declare function registerJplTools(server: any): void;
2
+ //# sourceMappingURL=jpl.d.ts.map
@@ -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,2 @@
1
+ export declare function registerMastTools(server: any): void;
2
+ //# sourceMappingURL=mast.d.ts.map
@@ -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,2 @@
1
+ export declare function registerNedTools(server: any): void;
2
+ //# sourceMappingURL=ned.d.ts.map
@@ -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,2 @@
1
+ export declare function registerNistTools(server: any): void;
2
+ //# sourceMappingURL=nist.d.ts.map
@@ -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"}