nds-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +186 -0
- package/bin/nds-mcp.js +33 -0
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +13 -0
- package/dist/constants.js.map +1 -0
- package/dist/db/chargeRadii.d.ts +22 -0
- package/dist/db/chargeRadii.d.ts.map +1 -0
- package/dist/db/chargeRadii.js +75 -0
- package/dist/db/chargeRadii.js.map +1 -0
- package/dist/db/decayFeedings.d.ts +31 -0
- package/dist/db/decayFeedings.d.ts.map +1 -0
- package/dist/db/decayFeedings.js +41 -0
- package/dist/db/decayFeedings.js.map +1 -0
- package/dist/db/ensureDb.d.ts +20 -0
- package/dist/db/ensureDb.d.ts.map +1 -0
- package/dist/db/ensureDb.js +148 -0
- package/dist/db/ensureDb.js.map +1 -0
- package/dist/db/gammas.d.ts +39 -0
- package/dist/db/gammas.d.ts.map +1 -0
- package/dist/db/gammas.js +53 -0
- package/dist/db/gammas.js.map +1 -0
- package/dist/db/levels.d.ts +68 -0
- package/dist/db/levels.d.ts.map +1 -0
- package/dist/db/levels.js +121 -0
- package/dist/db/levels.js.map +1 -0
- package/dist/db/masses.d.ts +16 -0
- package/dist/db/masses.d.ts.map +1 -0
- package/dist/db/masses.js +22 -0
- package/dist/db/masses.js.map +1 -0
- package/dist/db/ndsDb.d.ts +10 -0
- package/dist/db/ndsDb.d.ts.map +1 -0
- package/dist/db/ndsDb.js +61 -0
- package/dist/db/ndsDb.js.map +1 -0
- package/dist/db/nubase.d.ts +21 -0
- package/dist/db/nubase.d.ts.map +1 -0
- package/dist/db/nubase.js +61 -0
- package/dist/db/nubase.js.map +1 -0
- package/dist/db/reactions.d.ts +11 -0
- package/dist/db/reactions.d.ts.map +1 -0
- package/dist/db/reactions.js +54 -0
- package/dist/db/reactions.js.map +1 -0
- package/dist/db/references.d.ts +11 -0
- package/dist/db/references.d.ts.map +1 -0
- package/dist/db/references.js +24 -0
- package/dist/db/references.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/buildDb.d.ts +36 -0
- package/dist/ingest/buildDb.d.ts.map +1 -0
- package/dist/ingest/buildDb.js +933 -0
- package/dist/ingest/buildDb.js.map +1 -0
- package/dist/ingest/parseAme.d.ts +79 -0
- package/dist/ingest/parseAme.d.ts.map +1 -0
- package/dist/ingest/parseAme.js +186 -0
- package/dist/ingest/parseAme.js.map +1 -0
- package/dist/ingest/parseEnsdf.d.ts +210 -0
- package/dist/ingest/parseEnsdf.d.ts.map +1 -0
- package/dist/ingest/parseEnsdf.js +469 -0
- package/dist/ingest/parseEnsdf.js.map +1 -0
- package/dist/ingest/parseLaserRadii.d.ts +33 -0
- package/dist/ingest/parseLaserRadii.d.ts.map +1 -0
- package/dist/ingest/parseLaserRadii.js +210 -0
- package/dist/ingest/parseLaserRadii.js.map +1 -0
- package/dist/ingest/parseNubase.d.ts +40 -0
- package/dist/ingest/parseNubase.d.ts.map +1 -0
- package/dist/ingest/parseNubase.js +146 -0
- package/dist/ingest/parseNubase.js.map +1 -0
- package/dist/ingest/parseRadii.d.ts +17 -0
- package/dist/ingest/parseRadii.d.ts.map +1 -0
- package/dist/ingest/parseRadii.js +42 -0
- package/dist/ingest/parseRadii.js.map +1 -0
- package/dist/ingest/parseTunl.d.ts +48 -0
- package/dist/ingest/parseTunl.d.ts.map +1 -0
- package/dist/ingest/parseTunl.js +773 -0
- package/dist/ingest/parseTunl.js.map +1 -0
- package/dist/shared/errors.d.ts +20 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +45 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/index.d.ts +4 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +3 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/sqlite3Cli.d.ts +3 -0
- package/dist/shared/sqlite3Cli.d.ts.map +1 -0
- package/dist/shared/sqlite3Cli.js +106 -0
- package/dist/shared/sqlite3Cli.js.map +1 -0
- package/dist/tooling.d.ts +2 -0
- package/dist/tooling.d.ts.map +1 -0
- package/dist/tooling.js +2 -0
- package/dist/tooling.js.map +1 -0
- package/dist/tools/dispatcher.d.ts +11 -0
- package/dist/tools/dispatcher.d.ts.map +1 -0
- package/dist/tools/dispatcher.js +64 -0
- package/dist/tools/dispatcher.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mcpSchema.d.ts +3 -0
- package/dist/tools/mcpSchema.d.ts.map +1 -0
- package/dist/tools/mcpSchema.js +21 -0
- package/dist/tools/mcpSchema.js.map +1 -0
- package/dist/tools/registry.d.ts +22 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +309 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/utils/stdioHygiene.d.ts +7 -0
- package/dist/utils/stdioHygiene.d.ts.map +1 -0
- package/dist/utils/stdioHygiene.js +16 -0
- package/dist/utils/stdioHygiene.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { zodToMcpInputSchema } from './mcpSchema.js';
|
|
3
|
+
import { requireNdsDbPathFromEnv, getFileMetadata } from '../db/ndsDb.js';
|
|
4
|
+
import { getMass } from '../db/masses.js';
|
|
5
|
+
import { getSeparationEnergy, getQValue } from '../db/reactions.js';
|
|
6
|
+
import { getDecay, findNuclidesByElement, findNuclideByZA, findNuclidesByA, searchNuclides } from '../db/nubase.js';
|
|
7
|
+
import { getChargeRadius } from '../db/chargeRadii.js';
|
|
8
|
+
import { queryAllLevels } from '../db/levels.js';
|
|
9
|
+
import { queryGammas } from '../db/gammas.js';
|
|
10
|
+
import { queryDecayFeedings } from '../db/decayFeedings.js';
|
|
11
|
+
import { lookupReference } from '../db/references.js';
|
|
12
|
+
import { invalidParams, notFound, sqlite3JsonQuery } from '../shared/index.js';
|
|
13
|
+
import { NDS_FIND_NUCLIDE, NDS_GET_MASS, NDS_GET_SEPARATION_ENERGY, NDS_GET_Q_VALUE, NDS_GET_DECAY, NDS_GET_CHARGE_RADIUS, NDS_SEARCH, NDS_INFO, NDS_QUERY_LEVELS, NDS_QUERY_GAMMAS, NDS_QUERY_DECAY_FEEDINGS, NDS_LOOKUP_REFERENCE, } from '../constants.js';
|
|
14
|
+
export function isToolExposed(spec, mode) {
|
|
15
|
+
return mode === 'full' ? true : spec.exposure === 'standard';
|
|
16
|
+
}
|
|
17
|
+
// ── Element symbol lookup (for resolving element names to Z) ──────────────
|
|
18
|
+
const ELEMENT_SYMBOLS = {
|
|
19
|
+
n: 0, H: 1, He: 2, Li: 3, Be: 4, B: 5, C: 6, N: 7, O: 8, F: 9,
|
|
20
|
+
Ne: 10, Na: 11, Mg: 12, Al: 13, Si: 14, P: 15, S: 16, Cl: 17, Ar: 18, K: 19,
|
|
21
|
+
Ca: 20, Sc: 21, Ti: 22, V: 23, Cr: 24, Mn: 25, Fe: 26, Co: 27, Ni: 28, Cu: 29,
|
|
22
|
+
Zn: 30, Ga: 31, Ge: 32, As: 33, Se: 34, Br: 35, Kr: 36, Rb: 37, Sr: 38, Y: 39,
|
|
23
|
+
Zr: 40, Nb: 41, Mo: 42, Tc: 43, Ru: 44, Rh: 45, Pd: 46, Ag: 47, Cd: 48, In: 49,
|
|
24
|
+
Sn: 50, Sb: 51, Te: 52, I: 53, Xe: 54, Cs: 55, Ba: 56, La: 57, Ce: 58, Pr: 59,
|
|
25
|
+
Nd: 60, Pm: 61, Sm: 62, Eu: 63, Gd: 64, Tb: 65, Dy: 66, Ho: 67, Er: 68, Tm: 69,
|
|
26
|
+
Yb: 70, Lu: 71, Hf: 72, Ta: 73, W: 74, Re: 75, Os: 76, Ir: 77, Pt: 78, Au: 79,
|
|
27
|
+
Hg: 80, Tl: 81, Pb: 82, Bi: 83, Po: 84, At: 85, Rn: 86, Fr: 87, Ra: 88, Ac: 89,
|
|
28
|
+
Th: 90, Pa: 91, U: 92, Np: 93, Pu: 94, Am: 95, Cm: 96, Bk: 97, Cf: 98, Es: 99,
|
|
29
|
+
Fm: 100, Md: 101, No: 102, Lr: 103, Rf: 104, Db: 105, Sg: 106, Bh: 107, Hs: 108, Mt: 109,
|
|
30
|
+
Ds: 110, Rg: 111, Cn: 112, Nh: 113, Fl: 114, Mc: 115, Lv: 116, Ts: 117, Og: 118,
|
|
31
|
+
};
|
|
32
|
+
function resolveElement(element) {
|
|
33
|
+
// Try exact match first, then case-insensitive
|
|
34
|
+
if (ELEMENT_SYMBOLS[element] !== undefined)
|
|
35
|
+
return ELEMENT_SYMBOLS[element];
|
|
36
|
+
const titleCase = element.charAt(0).toUpperCase() + element.slice(1).toLowerCase();
|
|
37
|
+
return ELEMENT_SYMBOLS[titleCase];
|
|
38
|
+
}
|
|
39
|
+
// ── Tool Schemas ──────────────────────────────────────────────────────────
|
|
40
|
+
const NdsInfoSchema = z.object({});
|
|
41
|
+
const NdsFindNuclideSchema = z.object({
|
|
42
|
+
element: z.string().min(1).optional().describe('Element symbol (e.g. "He", "U", "Pb")'),
|
|
43
|
+
Z: z.number().int().min(0).optional().describe('Atomic number'),
|
|
44
|
+
A: z.number().int().min(1).optional().describe('Mass number'),
|
|
45
|
+
}).refine(v => v.element !== undefined || v.Z !== undefined || v.A !== undefined, { message: 'At least one of element, Z, or A must be provided' });
|
|
46
|
+
const NdsGetMassSchema = z.object({
|
|
47
|
+
Z: z.number().int().min(0).describe('Atomic number'),
|
|
48
|
+
A: z.number().int().min(1).describe('Mass number'),
|
|
49
|
+
});
|
|
50
|
+
const NdsGetSeparationEnergySchema = z.object({
|
|
51
|
+
Z: z.number().int().min(0).describe('Atomic number'),
|
|
52
|
+
A: z.number().int().min(1).describe('Mass number'),
|
|
53
|
+
type: z.enum(['Sn', 'Sp', 'S2n', 'S2p']).optional().describe('Separation energy type (omit for all)'),
|
|
54
|
+
});
|
|
55
|
+
const NdsGetQValueSchema = z.object({
|
|
56
|
+
Z: z.number().int().min(0).describe('Atomic number'),
|
|
57
|
+
A: z.number().int().min(1).describe('Mass number'),
|
|
58
|
+
type: z.enum(['Qa', 'Q2bm', 'Qep', 'Qbn', 'Q4bm', 'Qda', 'Qpa', 'Qna']).optional().describe('Q-value type (omit for all)'),
|
|
59
|
+
});
|
|
60
|
+
const NdsGetDecaySchema = z.object({
|
|
61
|
+
Z: z.number().int().min(0).describe('Atomic number'),
|
|
62
|
+
A: z.number().int().min(1).describe('Mass number'),
|
|
63
|
+
});
|
|
64
|
+
const NdsGetChargeRadiusSchema = z.object({
|
|
65
|
+
Z: z.number().int().min(0).describe('Atomic number'),
|
|
66
|
+
A: z.number().int().min(1).optional().describe('Mass number (omit for all isotopes of element)'),
|
|
67
|
+
});
|
|
68
|
+
const NdsSearchSchema = z.object({
|
|
69
|
+
property: z.enum(['half_life', 'mass_excess', 'half_life_seconds', 'mass_excess_keV']).describe('Property to search by. Note: stable nuclides have null half_life_seconds and are excluded from half-life range searches.'),
|
|
70
|
+
min: z.number().finite().optional().describe('Minimum value'),
|
|
71
|
+
max: z.number().finite().optional().describe('Maximum value'),
|
|
72
|
+
Z_min: z.number().int().min(0).optional().describe('Minimum atomic number'),
|
|
73
|
+
Z_max: z.number().int().min(0).optional().describe('Maximum atomic number'),
|
|
74
|
+
limit: z.number().int().min(1).max(200).optional().default(50).describe('Maximum results'),
|
|
75
|
+
}).refine(v => v.min !== undefined || v.max !== undefined, { message: 'At least one of min or max must be provided' }).refine(v => (v.min === undefined || v.max === undefined || v.min <= v.max), { message: 'min must be <= max when both are provided' }).refine(v => (v.Z_min === undefined || v.Z_max === undefined || v.Z_min <= v.Z_max), { message: 'Z_min must be <= Z_max when both are provided' });
|
|
76
|
+
const NdsQueryLevelsSchema = z.object({
|
|
77
|
+
Z: z.number().int().min(0).describe('Atomic number'),
|
|
78
|
+
A: z.number().int().min(1).describe('Mass number'),
|
|
79
|
+
energy_min: z.number().optional().describe('Minimum level energy (keV)'),
|
|
80
|
+
energy_max: z.number().optional().describe('Maximum level energy (keV)'),
|
|
81
|
+
include_decay_datasets: z.boolean().optional().default(false)
|
|
82
|
+
.describe('Include levels from decay datasets (default: ADOPTED only)'),
|
|
83
|
+
include_tunl: z.boolean().optional()
|
|
84
|
+
.describe('Include TUNL resonance data (default: true for A ≤ 20, false otherwise)'),
|
|
85
|
+
limit: z.number().int().min(1).max(500).optional().default(100),
|
|
86
|
+
});
|
|
87
|
+
const NdsQueryGammasSchema = z.object({
|
|
88
|
+
Z: z.number().int().min(0).describe('Atomic number'),
|
|
89
|
+
A: z.number().int().min(1).describe('Mass number'),
|
|
90
|
+
level_energy: z.number().optional().describe('Filter gammas from specific level (keV)'),
|
|
91
|
+
gamma_energy_min: z.number().optional().describe('Minimum gamma energy (keV)'),
|
|
92
|
+
gamma_energy_max: z.number().optional().describe('Maximum gamma energy (keV)'),
|
|
93
|
+
limit: z.number().int().min(1).max(500).optional().default(100),
|
|
94
|
+
});
|
|
95
|
+
const NdsQueryDecayFeedingsSchema = z.object({
|
|
96
|
+
Z: z.number().int().min(0).describe('Parent atomic number'),
|
|
97
|
+
A: z.number().int().min(1).describe('Parent mass number'),
|
|
98
|
+
decay_mode: z.enum(['B-', 'EC', 'EC+B+', 'IT']).optional().describe('Filter by decay mode'),
|
|
99
|
+
});
|
|
100
|
+
const NdsLookupReferenceSchema = z.object({
|
|
101
|
+
keynumber: z.string().optional().describe('NSR keynumber (e.g. "2012WA38")'),
|
|
102
|
+
A: z.number().int().min(1).optional().describe('Mass number (list all references for this A)'),
|
|
103
|
+
}).refine(v => v.keynumber !== undefined || v.A !== undefined, { message: 'At least one of keynumber or A must be provided' });
|
|
104
|
+
// ── Tool Specs ────────────────────────────────────────────────────────────
|
|
105
|
+
export const TOOL_SPECS = [
|
|
106
|
+
{
|
|
107
|
+
name: NDS_INFO,
|
|
108
|
+
description: 'Return NDS database metadata: data versions, nuclide counts, DB file hash.',
|
|
109
|
+
exposure: 'standard',
|
|
110
|
+
zodSchema: NdsInfoSchema,
|
|
111
|
+
handler: async () => {
|
|
112
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
113
|
+
const meta = await sqlite3JsonQuery(dbPath, 'SELECT key, value FROM nds_meta');
|
|
114
|
+
const metaMap = {};
|
|
115
|
+
for (const row of meta) {
|
|
116
|
+
const r = row;
|
|
117
|
+
metaMap[r.key] = r.value;
|
|
118
|
+
}
|
|
119
|
+
const fileMeta = await getFileMetadata(dbPath);
|
|
120
|
+
return { ...metaMap, db_path: dbPath, ...fileMeta };
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: NDS_FIND_NUCLIDE,
|
|
125
|
+
description: 'Find nuclides by element symbol, Z (atomic number), and/or A (mass number). Returns basic properties from NUBASE2020.',
|
|
126
|
+
exposure: 'standard',
|
|
127
|
+
zodSchema: NdsFindNuclideSchema,
|
|
128
|
+
handler: async (params) => {
|
|
129
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
130
|
+
const { element, Z, A } = params;
|
|
131
|
+
// Resolve element to Z if provided
|
|
132
|
+
let resolvedZ;
|
|
133
|
+
if (element !== undefined) {
|
|
134
|
+
resolvedZ = resolveElement(element);
|
|
135
|
+
if (resolvedZ === undefined) {
|
|
136
|
+
throw invalidParams(`Unknown element symbol: ${element}`);
|
|
137
|
+
}
|
|
138
|
+
// Check for conflicting Z
|
|
139
|
+
if (Z !== undefined && Z !== resolvedZ) {
|
|
140
|
+
throw invalidParams(`Conflicting parameters: element ${element} is Z=${resolvedZ}, but Z=${Z} was provided.`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const effectiveZ = resolvedZ ?? Z;
|
|
144
|
+
if (effectiveZ !== undefined && A !== undefined) {
|
|
145
|
+
return findNuclideByZA(dbPath, effectiveZ, A);
|
|
146
|
+
}
|
|
147
|
+
if (effectiveZ !== undefined) {
|
|
148
|
+
// Find element symbol from DB for querying by canonical name
|
|
149
|
+
const rows = await sqlite3JsonQuery(dbPath, `SELECT DISTINCT element FROM nubase WHERE Z=${effectiveZ} LIMIT 1`);
|
|
150
|
+
if (rows.length === 0)
|
|
151
|
+
throw notFound(`No nuclides found for Z=${effectiveZ}`);
|
|
152
|
+
const el = rows[0].element;
|
|
153
|
+
return findNuclidesByElement(dbPath, el);
|
|
154
|
+
}
|
|
155
|
+
if (A !== undefined) {
|
|
156
|
+
return findNuclidesByA(dbPath, A);
|
|
157
|
+
}
|
|
158
|
+
return [];
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
name: NDS_GET_MASS,
|
|
163
|
+
description: 'Get atomic mass data for a nuclide (Z, A) from AME2020: mass excess, binding energy/A, beta-decay energy, atomic mass.',
|
|
164
|
+
exposure: 'standard',
|
|
165
|
+
zodSchema: NdsGetMassSchema,
|
|
166
|
+
handler: async (params) => {
|
|
167
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
168
|
+
const result = await getMass(dbPath, params.Z, params.A);
|
|
169
|
+
if (!result)
|
|
170
|
+
throw notFound(`No mass data for Z=${params.Z}, A=${params.A}`);
|
|
171
|
+
return result;
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: NDS_GET_SEPARATION_ENERGY,
|
|
176
|
+
description: 'Get nucleon separation energies from AME2020: Sn, Sp, S2n, S2p.',
|
|
177
|
+
exposure: 'standard',
|
|
178
|
+
zodSchema: NdsGetSeparationEnergySchema,
|
|
179
|
+
handler: async (params) => {
|
|
180
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
181
|
+
const result = await getSeparationEnergy(dbPath, params.Z, params.A, params.type);
|
|
182
|
+
if (!result)
|
|
183
|
+
throw notFound(`No separation energy data for Z=${params.Z}, A=${params.A}`);
|
|
184
|
+
return result;
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: NDS_GET_Q_VALUE,
|
|
189
|
+
description: 'Get Q-values from AME2020: Qα, Q(2β⁻), Q(εp), Q(β⁻n), Q(4β⁻), Q(d,α), Q(p,α), Q(n,α).',
|
|
190
|
+
exposure: 'standard',
|
|
191
|
+
zodSchema: NdsGetQValueSchema,
|
|
192
|
+
handler: async (params) => {
|
|
193
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
194
|
+
const result = await getQValue(dbPath, params.Z, params.A, params.type);
|
|
195
|
+
if (!result)
|
|
196
|
+
throw notFound(`No Q-value data for Z=${params.Z}, A=${params.A}`);
|
|
197
|
+
return result;
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
name: NDS_GET_DECAY,
|
|
202
|
+
description: 'Get decay information from NUBASE2020: half-life, spin/parity, decay modes with branching ratios, isomers.',
|
|
203
|
+
exposure: 'standard',
|
|
204
|
+
zodSchema: NdsGetDecaySchema,
|
|
205
|
+
handler: async (params) => {
|
|
206
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
207
|
+
const results = await getDecay(dbPath, params.Z, params.A);
|
|
208
|
+
if (results.length === 0)
|
|
209
|
+
throw notFound(`No decay data for Z=${params.Z}, A=${params.A}`);
|
|
210
|
+
return results;
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: NDS_GET_CHARGE_RADIUS,
|
|
215
|
+
description: 'Get nuclear charge radius (rms) from IAEA data, enriched with laser spectroscopy provenance from Li et al. 2021 where available. If A is omitted, returns all isotopes of the element.',
|
|
216
|
+
exposure: 'standard',
|
|
217
|
+
zodSchema: NdsGetChargeRadiusSchema,
|
|
218
|
+
handler: async (params) => {
|
|
219
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
220
|
+
const results = await getChargeRadius(dbPath, params.Z, params.A);
|
|
221
|
+
if (results.length === 0) {
|
|
222
|
+
const msg = params.A !== undefined
|
|
223
|
+
? `No charge radius data for Z=${params.Z}, A=${params.A}`
|
|
224
|
+
: `No charge radius data for Z=${params.Z}`;
|
|
225
|
+
throw notFound(msg);
|
|
226
|
+
}
|
|
227
|
+
return results;
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
name: NDS_SEARCH,
|
|
232
|
+
description: 'Search nuclides by property range (half_life_seconds, mass_excess_keV). Returns ground-state nuclides matching criteria.',
|
|
233
|
+
exposure: 'standard',
|
|
234
|
+
zodSchema: NdsSearchSchema,
|
|
235
|
+
handler: async (params) => {
|
|
236
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
237
|
+
return searchNuclides(dbPath, params.property, params.min, params.max, params.Z_min, params.Z_max, params.limit);
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
name: NDS_QUERY_LEVELS,
|
|
242
|
+
description: 'Query nuclear energy levels from ENSDF and TUNL. Returns level energies, spin-parity, half-lives. For A ≤ 20, automatically includes TUNL resonance data (widths, isospin, decay modes, table_label for TUNL publication provenance). Each result has a "source" field ("ENSDF" or "TUNL").',
|
|
243
|
+
exposure: 'standard',
|
|
244
|
+
zodSchema: NdsQueryLevelsSchema,
|
|
245
|
+
handler: async (params) => {
|
|
246
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
247
|
+
const results = await queryAllLevels(dbPath, params);
|
|
248
|
+
if (results.length === 0)
|
|
249
|
+
throw notFound(`No levels for Z=${params.Z}, A=${params.A}`);
|
|
250
|
+
return results;
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
name: NDS_QUERY_GAMMAS,
|
|
255
|
+
description: 'Query gamma-ray transitions from ENSDF. Returns energies, intensities, multipolarities, conversion coefficients for a nuclide.',
|
|
256
|
+
exposure: 'standard',
|
|
257
|
+
zodSchema: NdsQueryGammasSchema,
|
|
258
|
+
handler: async (params) => {
|
|
259
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
260
|
+
const results = await queryGammas(dbPath, params);
|
|
261
|
+
if (results.length === 0)
|
|
262
|
+
throw notFound(`No ENSDF gammas for Z=${params.Z}, A=${params.A}`);
|
|
263
|
+
return results;
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: NDS_QUERY_DECAY_FEEDINGS,
|
|
268
|
+
description: 'Query beta/EC decay feeding patterns from ENSDF. Returns branching ratios, log(ft) values, endpoint energies for parent nuclide decays.',
|
|
269
|
+
exposure: 'standard',
|
|
270
|
+
zodSchema: NdsQueryDecayFeedingsSchema,
|
|
271
|
+
handler: async (params) => {
|
|
272
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
273
|
+
const results = await queryDecayFeedings(dbPath, params);
|
|
274
|
+
if (results.length === 0)
|
|
275
|
+
throw notFound(`No ENSDF decay feedings for Z=${params.Z}, A=${params.A}`);
|
|
276
|
+
return results;
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: NDS_LOOKUP_REFERENCE,
|
|
281
|
+
description: 'Look up ENSDF/NSR bibliographic references by keynumber or mass number.',
|
|
282
|
+
exposure: 'standard',
|
|
283
|
+
zodSchema: NdsLookupReferenceSchema,
|
|
284
|
+
handler: async (params) => {
|
|
285
|
+
const dbPath = requireNdsDbPathFromEnv();
|
|
286
|
+
const results = await lookupReference(dbPath, params);
|
|
287
|
+
if (results.length === 0) {
|
|
288
|
+
const msg = params.keynumber ? `No reference for keynumber ${params.keynumber}` : `No references for A=${params.A}`;
|
|
289
|
+
throw notFound(msg);
|
|
290
|
+
}
|
|
291
|
+
return results;
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
];
|
|
295
|
+
// ── Exports ───────────────────────────────────────────────────────────────
|
|
296
|
+
export function getToolSpec(name) {
|
|
297
|
+
return TOOL_SPECS.find(s => s.name === name);
|
|
298
|
+
}
|
|
299
|
+
export function getToolSpecs(mode = 'standard') {
|
|
300
|
+
return mode === 'full' ? TOOL_SPECS : TOOL_SPECS.filter(s => s.exposure === 'standard');
|
|
301
|
+
}
|
|
302
|
+
export function getTools(mode = 'standard') {
|
|
303
|
+
return getToolSpecs(mode).map(s => ({
|
|
304
|
+
name: s.name,
|
|
305
|
+
description: s.description,
|
|
306
|
+
inputSchema: zodToMcpInputSchema(s.zodSchema),
|
|
307
|
+
}));
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EACzB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAezB,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,IAAsB;IAClE,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC;AAC/D,CAAC;AAED,6EAA6E;AAE7E,MAAM,eAAe,GAA2B;IAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;IAC3E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;IAC7E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdioHygiene.d.ts","sourceRoot":"","sources":["../../src/utils/stdioHygiene.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stdout hygiene:
|
|
3
|
+
* MCP uses stdout for JSON-RPC. Any logs to stdout will corrupt the protocol.
|
|
4
|
+
* Route console log-like methods to stderr to keep stdout pure.
|
|
5
|
+
*/
|
|
6
|
+
function routeToStderr(...args) {
|
|
7
|
+
console.error(...args);
|
|
8
|
+
}
|
|
9
|
+
if (console.log !== routeToStderr)
|
|
10
|
+
console.log = routeToStderr;
|
|
11
|
+
if (console.debug !== routeToStderr)
|
|
12
|
+
console.debug = routeToStderr;
|
|
13
|
+
if (console.info !== routeToStderr)
|
|
14
|
+
console.info = routeToStderr;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=stdioHygiene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdioHygiene.js","sourceRoot":"","sources":["../../src/utils/stdioHygiene.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,SAAS,aAAa,CAAC,GAAG,IAAe;IACvC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,IAAI,OAAO,CAAC,GAAG,KAAK,aAAa;IAAE,OAAO,CAAC,GAAG,GAAG,aAAa,CAAC;AAC/D,IAAI,OAAO,CAAC,KAAK,KAAK,aAAa;IAAE,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC;AACnE,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa;IAAE,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nds-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Nuclear Data Services MCP server — offline SQLite-backed nuclear physics data queries",
|
|
5
|
+
"author": "Feng-Kun Guo",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"types": "./dist/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./tooling": {
|
|
16
|
+
"import": "./dist/tooling.js",
|
|
17
|
+
"types": "./dist/tooling.d.ts"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"bin": {
|
|
21
|
+
"nds-mcp": "./dist/index.js"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"bin"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"clean": "rm -rf dist",
|
|
30
|
+
"lint": "tsc --noEmit",
|
|
31
|
+
"dev": "tsx watch src/index.ts",
|
|
32
|
+
"start": "node dist/index.js",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:watch": "vitest",
|
|
35
|
+
"ingest": "tsx src/ingest/buildDb.ts"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
39
|
+
"zod": "^4.3.5"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^25.0.3",
|
|
43
|
+
"tsx": "^4.21.0",
|
|
44
|
+
"typescript": "^5.4.0",
|
|
45
|
+
"vitest": "^4.0.16"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=18"
|
|
49
|
+
},
|
|
50
|
+
"keywords": [
|
|
51
|
+
"mcp",
|
|
52
|
+
"nuclear-data",
|
|
53
|
+
"nuclear-physics",
|
|
54
|
+
"sqlite",
|
|
55
|
+
"ensdf",
|
|
56
|
+
"tunl",
|
|
57
|
+
"ame2020",
|
|
58
|
+
"nubase"
|
|
59
|
+
],
|
|
60
|
+
"repository": {
|
|
61
|
+
"type": "git",
|
|
62
|
+
"url": "https://github.com/fkguo/nds-mcp.git"
|
|
63
|
+
}
|
|
64
|
+
}
|