aqc-mcp 1.2.5 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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 +2 -3
- 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 +49 -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 +45 -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 +116 -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 +223 -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/index.d.ts
CHANGED
|
File without changes
|
package/dist/index.d.ts.map
CHANGED
|
File without changes
|
package/dist/index.js
CHANGED
|
@@ -1,44 +1,31 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { program } from 'commander';
|
|
3
2
|
import { startSseAndStreamableHttpMcpServer } from 'mcp-http-server';
|
|
4
3
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
4
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
6
|
-
import {
|
|
7
|
-
const VERSION = '
|
|
8
|
-
|
|
9
|
-
const server = new McpServer({
|
|
10
|
-
|
|
11
|
-
version: VERSION,
|
|
12
|
-
}, {
|
|
13
|
-
capabilities: {
|
|
14
|
-
tools: {},
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
await listTools(server);
|
|
5
|
+
import { registerAllTools } from './tools/index.js';
|
|
6
|
+
const VERSION = '2.0.0';
|
|
7
|
+
function createMcpServer() {
|
|
8
|
+
const server = new McpServer({ name: 'astroquery-mcp', version: VERSION }, { capabilities: { tools: {} } });
|
|
9
|
+
registerAllTools(server);
|
|
18
10
|
return server;
|
|
19
11
|
}
|
|
20
|
-
|
|
21
|
-
.
|
|
22
|
-
|
|
23
|
-
.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
.action(async (options) => {
|
|
12
|
+
async function main() {
|
|
13
|
+
const args = process.argv.slice(2);
|
|
14
|
+
const portIdx = args.indexOf('--port');
|
|
15
|
+
const hostIdx = args.indexOf('--host');
|
|
16
|
+
const port = portIdx !== -1 ? parseInt(args[portIdx + 1], 10) : undefined;
|
|
17
|
+
const host = hostIdx !== -1 ? args[hostIdx + 1] : undefined;
|
|
27
18
|
try {
|
|
28
|
-
|
|
29
|
-
if (options.port || options.host) {
|
|
30
|
-
// HTTP mode with SSE support
|
|
19
|
+
if (port || host) {
|
|
31
20
|
await startSseAndStreamableHttpMcpServer({
|
|
32
|
-
host
|
|
33
|
-
port:
|
|
34
|
-
// @ts-ignore
|
|
35
|
-
createMcpServer: async (
|
|
36
|
-
return server;
|
|
37
|
-
},
|
|
21
|
+
host,
|
|
22
|
+
port: port,
|
|
23
|
+
// @ts-ignore - createMcpServer signature mismatch
|
|
24
|
+
createMcpServer: async () => createMcpServer(),
|
|
38
25
|
});
|
|
39
26
|
}
|
|
40
27
|
else {
|
|
41
|
-
|
|
28
|
+
const server = createMcpServer();
|
|
42
29
|
const transport = new StdioServerTransport();
|
|
43
30
|
await server.connect(transport);
|
|
44
31
|
console.error('AstroQuery MCP server running on stdio');
|
|
@@ -48,6 +35,6 @@ program
|
|
|
48
35
|
console.error('Fatal error:', error);
|
|
49
36
|
process.exit(1);
|
|
50
37
|
}
|
|
51
|
-
}
|
|
52
|
-
|
|
38
|
+
}
|
|
39
|
+
main();
|
|
53
40
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kCAAkC,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;IACF,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5D,IAAI,CAAC;QACH,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,MAAM,kCAAkC,CAAC;gBACvC,IAAI;gBACJ,IAAI,EAAE,IAAK;gBACX,kDAAkD;gBAClD,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,eAAe,EAAE;aAC/C,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/tools/ads.d.ts
CHANGED
package/dist/tools/ads.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ads.d.ts","sourceRoot":"","sources":["../../src/tools/ads.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ads.d.ts","sourceRoot":"","sources":["../../src/tools/ads.ts"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,QAkD3C"}
|
package/dist/tools/ads.js
CHANGED
|
@@ -1,31 +1,44 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { restGet } from '../utils/http.js';
|
|
3
|
+
const ADS_API = 'https://api.adsabs.harvard.edu/v1/search/query';
|
|
4
4
|
export function registerAdsTools(server) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
if (!
|
|
13
|
-
|
|
5
|
+
server.tool('ads_search', 'Search NASA ADS (Astrophysics Data System) for academic papers. Requires ADS_DEV_KEY or ADS_API_KEY env var.', {
|
|
6
|
+
query: z.string().describe('Search query (e.g. "author:Einstein", "title:dark matter", "abs:exoplanet")'),
|
|
7
|
+
max_results: z.number().default(10).describe('Maximum number of results'),
|
|
8
|
+
sort: z.string().default('date desc').describe('Sort order (e.g. "date desc", "citation_count desc")'),
|
|
9
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
10
|
+
}, async ({ query, max_results, sort, lang }) => {
|
|
11
|
+
const apiKey = process.env.ADS_DEV_KEY || process.env.ADS_API_KEY;
|
|
12
|
+
if (!apiKey) {
|
|
13
|
+
return { content: [{ type: 'text', text: lang === 'zh' ? '错误: 未设置 ADS_DEV_KEY 或 ADS_API_KEY 环境变量' : 'Error: ADS_DEV_KEY or ADS_API_KEY environment variable not set' }] };
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
15
|
+
const params = new URLSearchParams({
|
|
16
|
+
q: query,
|
|
17
|
+
rows: String(max_results),
|
|
18
|
+
sort,
|
|
19
|
+
fl: 'title,author,year,bibcode,citation_count,abstract,pub,doi',
|
|
20
|
+
});
|
|
21
|
+
const data = await restGet(`${ADS_API}?${params}`, {
|
|
22
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
23
|
+
});
|
|
24
|
+
const docs = data?.response?.docs ?? [];
|
|
25
|
+
const total = data?.response?.numFound ?? 0;
|
|
26
|
+
if (docs.length === 0) {
|
|
27
|
+
return { content: [{ type: 'text', text: lang === 'zh' ? '未找到结果。' : 'No results found.' }] };
|
|
28
|
+
}
|
|
29
|
+
const lines = [];
|
|
30
|
+
lines.push(lang === 'zh' ? `## ADS 搜索结果 (共 ${total} 条,显示 ${docs.length} 条)\n` : `## ADS Search Results (${total} total, showing ${docs.length})\n`);
|
|
31
|
+
for (const doc of docs) {
|
|
32
|
+
const title = Array.isArray(doc.title) ? doc.title[0] : doc.title;
|
|
33
|
+
const authors = Array.isArray(doc.author) ? doc.author.slice(0, 3).join(', ') + (doc.author.length > 3 ? ' et al.' : '') : '';
|
|
34
|
+
lines.push(`**${title}**`);
|
|
35
|
+
lines.push(` ${authors} (${doc.year})`);
|
|
36
|
+
lines.push(` Bibcode: ${doc.bibcode} | Citations: ${doc.citation_count ?? 0}`);
|
|
37
|
+
if (doc.doi)
|
|
38
|
+
lines.push(` DOI: ${Array.isArray(doc.doi) ? doc.doi[0] : doc.doi}`);
|
|
39
|
+
lines.push('');
|
|
40
|
+
}
|
|
41
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
28
42
|
});
|
|
29
43
|
}
|
|
30
|
-
export { executeAdsQuery };
|
|
31
44
|
//# sourceMappingURL=ads.js.map
|
package/dist/tools/ads.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ads.js","sourceRoot":"","sources":["../../src/tools/ads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ads.js","sourceRoot":"","sources":["../../src/tools/ads.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/alma.d.ts
CHANGED
package/dist/tools/alma.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alma.d.ts","sourceRoot":"","sources":["../../src/tools/alma.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"alma.d.ts","sourceRoot":"","sources":["../../src/tools/alma.ts"],"names":[],"mappings":"AAKA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,QAiC5C"}
|
package/dist/tools/alma.js
CHANGED
|
@@ -1,40 +1,30 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { tapQuery, formatTapResult } from '../utils/http.js';
|
|
3
|
+
const ALMA_TAP = 'https://almascience.eso.org/tap/sync';
|
|
4
4
|
export function registerAlmaTools(server) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
if (lang)
|
|
16
|
-
args.push('--lang', lang);
|
|
17
|
-
const result = await executeAqc(args);
|
|
18
|
-
if (!result.success) {
|
|
19
|
-
throw new Error(result.error);
|
|
5
|
+
server.tool('alma_query', 'Query ALMA (Atacama Large Millimeter Array) archive by object name or coordinates', {
|
|
6
|
+
target: z.string().optional().describe('Object name (e.g. "M83", "NGC 253")'),
|
|
7
|
+
ra: z.number().optional().describe('Right Ascension in degrees (0-360)'),
|
|
8
|
+
dec: z.number().optional().describe('Declination in degrees (-90 to 90)'),
|
|
9
|
+
radius: z.number().default(5).describe('Search radius in arcminutes'),
|
|
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 ({ target, ra, dec, radius, max_results, lang }) => {
|
|
13
|
+
if (!target && (ra === undefined || dec === undefined)) {
|
|
14
|
+
return { content: [{ type: 'text', text: lang === 'zh' ? '请提供目标名称或坐标 (ra + dec)' : 'Please provide a target name or coordinates (ra + dec)' }] };
|
|
20
15
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
type: 'text',
|
|
34
|
-
text: output
|
|
35
|
-
}]
|
|
36
|
-
};
|
|
16
|
+
const radiusDeg = radius / 60;
|
|
17
|
+
let where;
|
|
18
|
+
if (ra !== undefined && dec !== undefined) {
|
|
19
|
+
where = `CONTAINS(POINT('ICRS', s_ra, s_dec), CIRCLE('ICRS', ${ra}, ${dec}, ${radiusDeg})) = 1`;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
where = `target_name = '${target.replace(/'/g, "''")}'`;
|
|
23
|
+
}
|
|
24
|
+
const adql = `SELECT TOP ${max_results} target_name, s_ra, s_dec, frequency, bandwidth, t_exptime, instrument_name, proposal_id, obs_id FROM ivoa.obscore WHERE ${where}`;
|
|
25
|
+
const result = await tapQuery({ endpoint: ALMA_TAP, adql, maxrec: max_results });
|
|
26
|
+
const title = lang === 'zh' ? `ALMA 查询结果: ${target ?? `${ra}, ${dec}`}` : `ALMA Query Result: ${target ?? `${ra}, ${dec}`}`;
|
|
27
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
37
28
|
});
|
|
38
29
|
}
|
|
39
|
-
export { executeAlmaQuery };
|
|
40
30
|
//# sourceMappingURL=alma.js.map
|
package/dist/tools/alma.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alma.js","sourceRoot":"","sources":["../../src/tools/alma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"alma.js","sourceRoot":"","sources":["../../src/tools/alma.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,sCAAsC,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAAC,MAAW;IAC3C,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,mFAAmF,EACnF;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC7E,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACxE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACzE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACrE,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,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAqG,EAAE,EAAE;QAC1J,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,wDAAwD,EAAE,CAAC,EAAE,CAAC;QAC5J,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE,CAAC;QAC9B,IAAI,KAAa,CAAC;QAElB,IAAI,EAAE,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1C,KAAK,GAAG,uDAAuD,EAAE,KAAK,GAAG,KAAK,SAAS,QAAQ,CAAC;QAClG,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,kBAAkB,MAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,WAAW,4HAA4H,KAAK,EAAE,CAAC;QAE1K,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,MAAM,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,MAAM,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,CAAC;QAC5H,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":"esasky.d.ts","sourceRoot":"","sources":["../../src/tools/esasky.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,QA4B9C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { tapQuery, formatTapResult } from '../utils/http.js';
|
|
3
|
+
const ESASKY_TAP = 'https://sky.esa.int/esasky-tap/tap/sync';
|
|
4
|
+
export function registerEsaskyTools(server) {
|
|
5
|
+
server.tool('esasky_query', 'Query ESASky archive for astronomical observations by position and radius', {
|
|
6
|
+
ra: z.number().describe('Right Ascension in degrees (0-360)'),
|
|
7
|
+
dec: z.number().describe('Declination in degrees (-90 to 90)'),
|
|
8
|
+
radius: z.number().default(10).describe('Search radius in arcminutes'),
|
|
9
|
+
mission: z.string().default('all').describe('Mission name (e.g. "XMM", "HST", "Herschel", "all")'),
|
|
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, radius, mission, max_results, lang }) => {
|
|
13
|
+
const radiusDeg = radius / 60;
|
|
14
|
+
let tableName = 'ivoa.obscore';
|
|
15
|
+
let missionFilter = '';
|
|
16
|
+
if (mission !== 'all') {
|
|
17
|
+
missionFilter = ` AND obs_collection = '${mission.replace(/'/g, "''")}'`;
|
|
18
|
+
}
|
|
19
|
+
const adql = `SELECT TOP ${max_results} obs_id, obs_collection, target_name, s_ra, s_dec, instrument_name, t_exptime, access_url FROM ${tableName} WHERE CONTAINS(POINT('ICRS', s_ra, s_dec), CIRCLE('ICRS', ${ra}, ${dec}, ${radiusDeg})) = 1${missionFilter}`;
|
|
20
|
+
const result = await tapQuery({ endpoint: ESASKY_TAP, adql, maxrec: max_results });
|
|
21
|
+
const title = lang === 'zh' ? `ESASky 查询结果: (${ra}, ${dec})` : `ESASky Query Result: (${ra}, ${dec})`;
|
|
22
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=esasky.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esasky.js","sourceRoot":"","sources":["../../src/tools/esasky.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,UAAU,GAAG,yCAAyC,CAAC;AAE7D,MAAM,UAAU,mBAAmB,CAAC,MAAW;IAC7C,MAAM,CAAC,IAAI,CACT,cAAc,EACd,2EAA2E,EAC3E;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC7D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC9D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QAClG,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,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAmG,EAAE,EAAE;QACzJ,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE,CAAC;QAC9B,IAAI,SAAS,GAAG,cAAc,CAAC;QAC/B,IAAI,aAAa,GAAG,EAAE,CAAC;QAEvB,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,aAAa,GAAG,0BAA0B,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;QAC3E,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,WAAW,kGAAkG,SAAS,8DAA8D,EAAE,KAAK,GAAG,KAAK,SAAS,SAAS,aAAa,EAAE,CAAC;QAEhQ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,yBAAyB,EAAE,KAAK,GAAG,GAAG,CAAC;QACtG,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":"eso.d.ts","sourceRoot":"","sources":["../../src/tools/eso.ts"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,QAsC3C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { tapQuery, formatTapResult } from '../utils/http.js';
|
|
3
|
+
const ESO_TAP = 'http://archive.eso.org/tap_obs/sync';
|
|
4
|
+
export function registerEsoTools(server) {
|
|
5
|
+
server.tool('eso_query', 'Query ESO (European Southern Observatory) science archive by target, instrument, or coordinates', {
|
|
6
|
+
target: z.string().optional().describe('Target object name (e.g. "NGC 1068")'),
|
|
7
|
+
instrument: z.string().optional().describe('Instrument name (e.g. "UVES", "XSHOOTER", "MUSE")'),
|
|
8
|
+
ra: z.number().optional().describe('Right Ascension in degrees'),
|
|
9
|
+
dec: z.number().optional().describe('Declination in degrees'),
|
|
10
|
+
radius: z.number().default(10).describe('Search radius in arcminutes'),
|
|
11
|
+
max_results: z.number().default(50).describe('Maximum number of results'),
|
|
12
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
13
|
+
}, async ({ target, instrument, ra, dec, radius, max_results, lang }) => {
|
|
14
|
+
const conditions = [];
|
|
15
|
+
if (target) {
|
|
16
|
+
conditions.push(`target = '${target.replace(/'/g, "''")}'`);
|
|
17
|
+
}
|
|
18
|
+
if (instrument) {
|
|
19
|
+
conditions.push(`instrument = '${instrument.replace(/'/g, "''")}'`);
|
|
20
|
+
}
|
|
21
|
+
if (ra !== undefined && dec !== undefined) {
|
|
22
|
+
const radiusDeg = radius / 60;
|
|
23
|
+
conditions.push(`CONTAINS(POINT('ICRS', ra, dec), CIRCLE('ICRS', ${ra}, ${dec}, ${radiusDeg})) = 1`);
|
|
24
|
+
}
|
|
25
|
+
if (conditions.length === 0) {
|
|
26
|
+
return { content: [{ type: 'text', text: lang === 'zh' ? '请至少提供一个查询条件 (target, instrument, 或坐标)' : 'Please provide at least one search criterion (target, instrument, or coordinates)' }] };
|
|
27
|
+
}
|
|
28
|
+
const adql = `SELECT TOP ${max_results} target, ra, dec, instrument, filter, exptime, date_obs, prog_id, dp_id FROM dbo.raw WHERE ${conditions.join(' AND ')}`;
|
|
29
|
+
const result = await tapQuery({ endpoint: ESO_TAP, adql, maxrec: max_results });
|
|
30
|
+
const title = lang === 'zh' ? `ESO 档案查询结果` : `ESO Archive Query Result`;
|
|
31
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=eso.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eso.js","sourceRoot":"","sources":["../../src/tools/eso.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,OAAO,GAAG,qCAAqC,CAAC;AAEtD,MAAM,UAAU,gBAAgB,CAAC,MAAW;IAC1C,MAAM,CAAC,IAAI,CACT,WAAW,EACX,iGAAiG,EACjG;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC9E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAChE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC7D,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,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAA0H,EAAE,EAAE;QAC3L,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,IAAI,MAAM,EAAE,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,EAAE,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,GAAG,KAAK,SAAS,QAAQ,CAAC,CAAC;QACvG,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,mFAAmF,EAAE,CAAC,EAAE,CAAC;QACvM,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,WAAW,8FAA8F,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAE/J,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChF,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,0BAA0B,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":"exoplanet.d.ts","sourceRoot":"","sources":["../../src/tools/exoplanet.ts"],"names":[],"mappings":"AAKA,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,QA4BjD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { tapQuery, formatTapResult } from '../utils/http.js';
|
|
3
|
+
const EXOPLANET_TAP = 'https://exoplanetarchive.ipac.caltech.edu/TAP/sync';
|
|
4
|
+
export function registerExoplanetTools(server) {
|
|
5
|
+
server.tool('exoplanet_query', 'Query NASA Exoplanet Archive for confirmed exoplanet data', {
|
|
6
|
+
planet_name: z.string().optional().describe('Planet name (e.g. "Kepler-22 b", "TRAPPIST-1 e")'),
|
|
7
|
+
hostname: z.string().optional().describe('Host star name (e.g. "TRAPPIST-1", "Kepler-22")'),
|
|
8
|
+
max_results: z.number().default(50).describe('Maximum number of results'),
|
|
9
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
10
|
+
}, async ({ planet_name, hostname, max_results, lang }) => {
|
|
11
|
+
const conditions = [];
|
|
12
|
+
if (planet_name) {
|
|
13
|
+
conditions.push(`pl_name = '${planet_name.replace(/'/g, "''")}'`);
|
|
14
|
+
}
|
|
15
|
+
if (hostname) {
|
|
16
|
+
conditions.push(`hostname = '${hostname.replace(/'/g, "''")}'`);
|
|
17
|
+
}
|
|
18
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
19
|
+
const adql = `SELECT TOP ${max_results} pl_name, hostname, discoverymethod, disc_year, pl_orbper, pl_rade, pl_bmasse, pl_eqt, st_teff, st_rad, st_mass, sy_dist FROM ps ${where} ORDER BY disc_year DESC`;
|
|
20
|
+
const result = await tapQuery({ endpoint: EXOPLANET_TAP, adql, maxrec: max_results });
|
|
21
|
+
const title = lang === 'zh' ? `系外行星查询结果` : `Exoplanet Query Result`;
|
|
22
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=exoplanet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exoplanet.js","sourceRoot":"","sources":["../../src/tools/exoplanet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,aAAa,GAAG,oDAAoD,CAAC;AAE3E,MAAM,UAAU,sBAAsB,CAAC,MAAW;IAChD,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,2DAA2D,EAC3D;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QAC/F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;QAC3F,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,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAkF,EAAE,EAAE;QACrI,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,IAAI,WAAW,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,cAAc,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,GAAG,cAAc,WAAW,oIAAoI,KAAK,0BAA0B,CAAC;QAE1M,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACtF,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACpE,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"}
|
package/dist/tools/gaia.d.ts
CHANGED
package/dist/tools/gaia.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaia.d.ts","sourceRoot":"","sources":["../../src/tools/gaia.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gaia.d.ts","sourceRoot":"","sources":["../../src/tools/gaia.ts"],"names":[],"mappings":"AAKA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,QAmC5C"}
|
package/dist/tools/gaia.js
CHANGED
|
@@ -1,31 +1,28 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { tapQuery, formatTapResult } from '../utils/http.js';
|
|
3
|
+
const GAIA_TAP = 'https://gea.esac.esa.int/tap-server/tap/sync';
|
|
4
4
|
export function registerGaiaTools(server) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}]
|
|
27
|
-
};
|
|
5
|
+
server.tool('gaia_cone_search', 'Cone search on Gaia DR3 catalog by coordinates and radius', {
|
|
6
|
+
ra: z.number().describe('Right Ascension in degrees (0-360)'),
|
|
7
|
+
dec: z.number().describe('Declination in degrees (-90 to 90)'),
|
|
8
|
+
radius: z.number().default(5).describe('Search radius in arcseconds'),
|
|
9
|
+
max_results: z.number().default(50).describe('Maximum number of results'),
|
|
10
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
11
|
+
}, async ({ ra, dec, radius, max_results, lang }) => {
|
|
12
|
+
const radiusDeg = radius / 3600;
|
|
13
|
+
const adql = `SELECT TOP ${max_results} source_id, ra, dec, parallax, pmra, pmdec, phot_g_mean_mag, bp_rp, radial_velocity, teff_gspphot FROM gaiadr3.gaia_source WHERE CONTAINS(POINT('ICRS', ra, dec), CIRCLE('ICRS', ${ra}, ${dec}, ${radiusDeg})) = 1 ORDER BY phot_g_mean_mag ASC`;
|
|
14
|
+
const result = await tapQuery({ endpoint: GAIA_TAP, adql, maxrec: max_results });
|
|
15
|
+
const title = lang === 'zh' ? `Gaia DR3 锥形搜索: (${ra}, ${dec})` : `Gaia DR3 Cone Search: (${ra}, ${dec})`;
|
|
16
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
17
|
+
});
|
|
18
|
+
server.tool('gaia_adql', 'Execute a raw ADQL query on the Gaia archive', {
|
|
19
|
+
adql: z.string().describe('ADQL query string'),
|
|
20
|
+
max_results: z.number().default(100).describe('Maximum number of results'),
|
|
21
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
22
|
+
}, async ({ adql, max_results, lang }) => {
|
|
23
|
+
const result = await tapQuery({ endpoint: GAIA_TAP, adql, maxrec: max_results });
|
|
24
|
+
const title = lang === 'zh' ? 'Gaia ADQL 查询结果' : 'Gaia ADQL Query Result';
|
|
25
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
28
26
|
});
|
|
29
27
|
}
|
|
30
|
-
export { executeGaiaConeSearch };
|
|
31
28
|
//# sourceMappingURL=gaia.js.map
|
package/dist/tools/gaia.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaia.js","sourceRoot":"","sources":["../../src/tools/gaia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"gaia.js","sourceRoot":"","sources":["../../src/tools/gaia.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,8CAA8C,CAAC;AAEhE,MAAM,UAAU,iBAAiB,CAAC,MAAW;IAC3C,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,2DAA2D,EAC3D;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC7D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC9D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACrE,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,MAAM,EAAE,WAAW,EAAE,IAAI,EAAkF,EAAE,EAAE;QAC/H,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,cAAc,WAAW,oLAAoL,EAAE,KAAK,GAAG,KAAK,SAAS,qCAAqC,CAAC;QAExR,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,mBAAmB,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,0BAA0B,EAAE,KAAK,GAAG,GAAG,CAAC;QACzG,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,WAAW,EACX,8CAA8C,EAC9C;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,gBAAgB,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAC1E,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":"heasarc.d.ts","sourceRoot":"","sources":["../../src/tools/heasarc.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,QA+B/C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { tapQuery, formatTapResult } from '../utils/http.js';
|
|
3
|
+
const HEASARC_TAP = 'https://heasarc.gsfc.nasa.gov/xamin/vo/tap/sync';
|
|
4
|
+
export function registerHeasarcTools(server) {
|
|
5
|
+
server.tool('heasarc_query', 'Query HEASARC (High Energy Astrophysics Science Archive) by object name and mission catalog', {
|
|
6
|
+
object_name: z.string().describe('Object name (e.g. "Crab Nebula", "Cyg X-1")'),
|
|
7
|
+
mission: z.string().default('xmmmaster').describe('Mission/catalog table (e.g. "xmmmaster", "chanmaster", "swiftmastr", "rosmaster")'),
|
|
8
|
+
radius: z.number().default(10).describe('Search radius in arcminutes'),
|
|
9
|
+
max_results: z.number().default(50).describe('Maximum number of results'),
|
|
10
|
+
lang: z.enum(['en', 'zh']).default('en').describe('Output language'),
|
|
11
|
+
}, async ({ object_name, mission, radius, max_results, lang }) => {
|
|
12
|
+
// HEASARC TAP uses name resolver internally via a special function
|
|
13
|
+
// We query the mission table with a cone search around resolved coordinates
|
|
14
|
+
// First try a simple name-based query
|
|
15
|
+
const radiusDeg = radius / 60;
|
|
16
|
+
const adql = `SELECT TOP ${max_results} * FROM ${mission} WHERE CONTAINS(POINT('ICRS', ra, dec), CIRCLE('ICRS', COORD1(SIMBAD('${object_name.replace(/'/g, "''")}')), COORD2(SIMBAD('${object_name.replace(/'/g, "''")}')), ${radiusDeg})) = 1`;
|
|
17
|
+
try {
|
|
18
|
+
const result = await tapQuery({ endpoint: HEASARC_TAP, adql, maxrec: max_results });
|
|
19
|
+
const title = lang === 'zh' ? `HEASARC 查询结果: ${object_name} (${mission})` : `HEASARC Query Result: ${object_name} (${mission})`;
|
|
20
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Fallback: some HEASARC tables use name column directly
|
|
24
|
+
const fallbackAdql = `SELECT TOP ${max_results} * FROM ${mission} WHERE name LIKE '%${object_name.replace(/'/g, "''").replace(/%/g, '')}%'`;
|
|
25
|
+
const result = await tapQuery({ endpoint: HEASARC_TAP, adql: fallbackAdql, maxrec: max_results });
|
|
26
|
+
const title = lang === 'zh' ? `HEASARC 查询结果: ${object_name} (${mission})` : `HEASARC Query Result: ${object_name} (${mission})`;
|
|
27
|
+
return { content: [{ type: 'text', text: formatTapResult(result, title) }] };
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=heasarc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heasarc.js","sourceRoot":"","sources":["../../src/tools/heasarc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,WAAW,GAAG,iDAAiD,CAAC;AAEtE,MAAM,UAAU,oBAAoB,CAAC,MAAW;IAC9C,MAAM,CAAC,IAAI,CACT,eAAe,EACf,6FAA6F,EAC7F;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAC/E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,mFAAmF,CAAC;QACtI,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,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAA+F,EAAE,EAAE;QACzJ,mEAAmE;QACnE,4EAA4E;QAC5E,sCAAsC;QACtC,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,cAAc,WAAW,WAAW,OAAO,yEAAyE,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,uBAAuB,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,SAAS,QAAQ,CAAC;QAEhP,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACpF,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,WAAW,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,yBAAyB,WAAW,KAAK,OAAO,GAAG,CAAC;YAChI,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACxF,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;YACzD,MAAM,YAAY,GAAG,cAAc,WAAW,WAAW,OAAO,sBAAsB,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;YAC5I,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YAClG,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,WAAW,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,yBAAyB,WAAW,KAAK,OAAO,GAAG,CAAC;YAChI,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACxF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAiBjD"}
|