@cyanheads/ensembl-mcp-server 0.4.4 → 0.5.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/AGENTS.md +15 -12
- package/CLAUDE.md +15 -12
- package/Dockerfile +110 -33
- package/README.md +25 -37
- package/changelog/0.5.x/0.5.0.md +25 -0
- package/changelog/0.5.x/0.5.1.md +28 -0
- package/dist/mcp-server/prompts/definitions/gene-dossier.prompt.d.ts.map +1 -1
- package/dist/mcp-server/prompts/definitions/gene-dossier.prompt.js +12 -5
- package/dist/mcp-server/prompts/definitions/gene-dossier.prompt.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-homology.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-homology.tool.js +6 -8
- package/dist/mcp-server/tools/definitions/get-homology.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-sequence.tool.d.ts +14 -2
- package/dist/mcp-server/tools/definitions/get-sequence.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-sequence.tool.js +162 -53
- package/dist/mcp-server/tools/definitions/get-sequence.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-xrefs.tool.js +3 -3
- package/dist/mcp-server/tools/definitions/get-xrefs.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-gene.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-gene.tool.js +15 -15
- package/dist/mcp-server/tools/definitions/lookup-gene.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/predict-variant.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/predict-variant.tool.js +10 -14
- package/dist/mcp-server/tools/definitions/predict-variant.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/query-region.tool.d.ts +6 -1
- package/dist/mcp-server/tools/definitions/query-region.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/query-region.tool.js +121 -30
- package/dist/mcp-server/tools/definitions/query-region.tool.js.map +1 -1
- package/dist/services/ensembl/ensembl-service.d.ts +11 -0
- package/dist/services/ensembl/ensembl-service.d.ts.map +1 -1
- package/dist/services/ensembl/ensembl-service.js +26 -0
- package/dist/services/ensembl/ensembl-service.js.map +1 -1
- package/dist/services/ensembl/types.d.ts +11 -0
- package/dist/services/ensembl/types.d.ts.map +1 -1
- package/package.json +11 -10
- package/server.json +10 -24
|
@@ -30,12 +30,18 @@ export const ensemblGeneDossierPrompt = prompt('ensembl_gene_dossier', {
|
|
|
30
30
|
`Record the stable ID (ENSG…), genomic coordinates (chr:start-end:strand:assembly), ` +
|
|
31
31
|
`biotype, and the canonical transcript ID (ENST…).\n\n` +
|
|
32
32
|
`2. **Fetch the protein sequence** — call \`ensembl_get_sequence\` with the canonical ` +
|
|
33
|
-
`transcript ID from step 1 and type="protein". Record the amino acid sequence and its length
|
|
33
|
+
`transcript ID from step 1 and type="protein". Record the amino acid sequence and its length. ` +
|
|
34
|
+
`A protein longer than 10,000 residues comes back as a first window (truncated=true); length ` +
|
|
35
|
+
`is still the full length, and the window already holds the leading residues step 7 needs.\n\n` +
|
|
34
36
|
`3. **Find variants in the locus** — call \`ensembl_query_region\` with ` +
|
|
35
37
|
`species="${args.species}", the gene's chromosomal region (chr:start-end from step 1), ` +
|
|
36
|
-
`and feature=["variation"].
|
|
37
|
-
`
|
|
38
|
-
`
|
|
38
|
+
`and feature=["variation"]. A gene locus can hold tens of thousands of variants, so the ` +
|
|
39
|
+
`response returns the first 100 (max_results) while totalCount reports the full count — ` +
|
|
40
|
+
`record totalCount as the locus variant count. To see other variants, query a narrower ` +
|
|
41
|
+
`window (e.g. one exon's coordinates) or raise max_results. Record the variant IDs (rsIDs), ` +
|
|
42
|
+
`positions, consequence type, and any clinical significance of the returned variants. ` +
|
|
43
|
+
`Functional impact (HIGH/MODERATE/LOW) is not reported by this step — it comes from VEP ` +
|
|
44
|
+
`in step 4.\n\n` +
|
|
39
45
|
`4. **Predict variant consequences** — for up to 3 variants from step 3, ` +
|
|
40
46
|
`call \`ensembl_predict_variant\` with each variant's rsID (e.g. rs334), HGVS notation, ` +
|
|
41
47
|
`or region+allele. This step returns the functional impact. ` +
|
|
@@ -50,7 +56,8 @@ export const ensemblGeneDossierPrompt = prompt('ensembl_gene_dossier', {
|
|
|
50
56
|
`7. **Synthesize the dossier** — compile your findings into a structured report with sections:\n` +
|
|
51
57
|
` - Gene overview (ID, location, biotype, description)\n` +
|
|
52
58
|
` - Protein sequence summary (length, first 50 aa, key domains if known)\n` +
|
|
53
|
-
` - Variant landscape (count, highest-impact findings,
|
|
59
|
+
` - Variant landscape (count from step 3's totalCount, highest-impact findings, ` +
|
|
60
|
+
`clinical significance)\n` +
|
|
54
61
|
` - Conservation across species (ortholog table with perc_id)\n` +
|
|
55
62
|
` - External IDs for follow-up (UniProt → pubchem for structure, ` +
|
|
56
63
|
`HGNC/EntrezGene → pubmed for literature, OMIM for disease associations)\n\n` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gene-dossier.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/gene-dossier.prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,sBAAsB,EAAE;IACrE,WAAW,EACT,gGAAgG;QAChG,8FAA8F;QAC9F,0EAA0E;IAC5E,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,CACP,oDAAoD;YAClD,4DAA4D,CAC/D;QACH,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,OAAO,CAAC,cAAc,CAAC;aACvB,QAAQ,CACP,wEAAwE;YACtE,6EAA6E,CAChF;KACJ,CAAC;IACF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EACF,0CAA0C,IAAI,CAAC,WAAW,WAAW,IAAI,CAAC,OAAO,KAAK;oBACtF,+DAA+D;oBAC/D,uEAAuE,IAAI,CAAC,WAAW,IAAI;oBAC3F,gBAAgB,IAAI,CAAC,OAAO,sCAAsC;oBAClE,qFAAqF;oBACrF,uDAAuD;oBACvD,uFAAuF;oBACvF,
|
|
1
|
+
{"version":3,"file":"gene-dossier.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/gene-dossier.prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,sBAAsB,EAAE;IACrE,WAAW,EACT,gGAAgG;QAChG,8FAA8F;QAC9F,0EAA0E;IAC5E,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,CACP,oDAAoD;YAClD,4DAA4D,CAC/D;QACH,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,OAAO,CAAC,cAAc,CAAC;aACvB,QAAQ,CACP,wEAAwE;YACtE,6EAA6E,CAChF;KACJ,CAAC;IACF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EACF,0CAA0C,IAAI,CAAC,WAAW,WAAW,IAAI,CAAC,OAAO,KAAK;oBACtF,+DAA+D;oBAC/D,uEAAuE,IAAI,CAAC,WAAW,IAAI;oBAC3F,gBAAgB,IAAI,CAAC,OAAO,sCAAsC;oBAClE,qFAAqF;oBACrF,uDAAuD;oBACvD,uFAAuF;oBACvF,+FAA+F;oBAC/F,8FAA8F;oBAC9F,+FAA+F;oBAC/F,yEAAyE;oBACzE,YAAY,IAAI,CAAC,OAAO,gEAAgE;oBACxF,yFAAyF;oBACzF,yFAAyF;oBACzF,wFAAwF;oBACxF,6FAA6F;oBAC7F,uFAAuF;oBACvF,yFAAyF;oBACzF,gBAAgB;oBAChB,0EAA0E;oBAC1E,yFAAyF;oBACzF,6DAA6D;oBAC7D,wEAAwE;oBACxE,2EAA2E;oBAC3E,WAAW,IAAI,CAAC,WAAW,eAAe,IAAI,CAAC,OAAO,6BAA6B;oBACnF,yFAAyF;oBACzF,wFAAwF;oBACxF,qDAAqD;oBACrD,gEAAgE;oBAChE,iFAAiF;oBACjF,iGAAiG;oBACjG,2DAA2D;oBAC3D,6EAA6E;oBAC7E,mFAAmF;oBACnF,0BAA0B;oBAC1B,kEAAkE;oBAClE,oEAAoE;oBACpE,6EAA6E;oBAC7E,4EAA4E;oBAC5E,uDAAuD;aAC1D;SACF;KACF;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-homology.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-homology.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA0CjE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"get-homology.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-homology.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA0CjE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8O7B,CAAC"}
|
|
@@ -57,6 +57,8 @@ export const ensemblGetHomology = tool('ensembl_get_homology', {
|
|
|
57
57
|
'Cannot be combined with symbol.'),
|
|
58
58
|
species: z
|
|
59
59
|
.string()
|
|
60
|
+
.trim()
|
|
61
|
+
.min(1)
|
|
60
62
|
.default('homo_sapiens')
|
|
61
63
|
.describe('Source species (the species the query gene belongs to) in Ensembl internal format. ' +
|
|
62
64
|
'Default is homo_sapiens. Use ensembl_list_species to discover valid values.'),
|
|
@@ -139,12 +141,10 @@ export const ensemblGetHomology = tool('ensembl_get_homology', {
|
|
|
139
141
|
});
|
|
140
142
|
const service = getEnsemblService();
|
|
141
143
|
if (!input.symbol?.trim() && !input.id?.trim()) {
|
|
142
|
-
throw ctx.fail('no_input', 'Provide either symbol (with species) or a stable gene ID.'
|
|
143
|
-
...ctx.recoveryFor('no_input'),
|
|
144
|
-
});
|
|
144
|
+
throw ctx.fail('no_input', 'Provide either symbol (with species) or a stable gene ID.');
|
|
145
145
|
}
|
|
146
146
|
if (input.id?.trim() && input.symbol?.trim()) {
|
|
147
|
-
throw ctx.fail('conflicting_input', 'Provide either symbol or id, not both — they may resolve to different genes.'
|
|
147
|
+
throw ctx.fail('conflicting_input', 'Provide either symbol or id, not both — they may resolve to different genes.');
|
|
148
148
|
}
|
|
149
149
|
const idTrimmed = input.id?.trim();
|
|
150
150
|
const symbolTrimmed = input.symbol?.trim();
|
|
@@ -156,9 +156,7 @@ export const ensemblGetHomology = tool('ensembl_get_homology', {
|
|
|
156
156
|
.catch((err) => {
|
|
157
157
|
const msg = err instanceof Error ? err.message : String(err);
|
|
158
158
|
if (/not found|no valid lookup|page not found/i.test(msg)) {
|
|
159
|
-
throw ctx.fail('not_found', `Gene ID "${idTrimmed}" not found in Ensembl
|
|
160
|
-
...ctx.recoveryFor('not_found'),
|
|
161
|
-
});
|
|
159
|
+
throw ctx.fail('not_found', `Gene ID "${idTrimmed}" not found in Ensembl.`);
|
|
162
160
|
}
|
|
163
161
|
throw err;
|
|
164
162
|
});
|
|
@@ -174,7 +172,7 @@ export const ensemblGetHomology = tool('ensembl_get_homology', {
|
|
|
174
172
|
const msg = err instanceof Error ? err.message : String(err);
|
|
175
173
|
// Ensembl returns {"error":"<species_name>"} for invalid gene symbols in homology endpoint
|
|
176
174
|
if (/not found|no valid lookup/i.test(msg) || msg === input.species) {
|
|
177
|
-
throw ctx.fail('not_found', `Gene symbol "${submittedSymbol}" not found in ${input.species}
|
|
175
|
+
throw ctx.fail('not_found', `Gene symbol "${submittedSymbol}" not found in ${input.species}.`);
|
|
178
176
|
}
|
|
179
177
|
throw err;
|
|
180
178
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-homology.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-homology.tool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"get-homology.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-homology.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,11 +15,16 @@ export declare const ensemblGetSequence: import("@cyanheads/mcp-ts-core").ToolDe
|
|
|
15
15
|
species: z.ZodOptional<z.ZodString>;
|
|
16
16
|
expand_5prime: z.ZodDefault<z.ZodNumber>;
|
|
17
17
|
expand_3prime: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
max_length: z.ZodDefault<z.ZodNumber>;
|
|
18
20
|
}, z.core.$strip>, z.ZodObject<{
|
|
19
21
|
id: z.ZodString;
|
|
20
22
|
type: z.ZodString;
|
|
21
23
|
seq: z.ZodString;
|
|
22
24
|
length: z.ZodNumber;
|
|
25
|
+
offset: z.ZodNumber;
|
|
26
|
+
truncated: z.ZodBoolean;
|
|
27
|
+
nextOffset: z.ZodOptional<z.ZodNumber>;
|
|
23
28
|
description: z.ZodOptional<z.ZodString>;
|
|
24
29
|
}, z.core.$strip>, readonly [{
|
|
25
30
|
readonly reason: "not_found";
|
|
@@ -29,12 +34,19 @@ export declare const ensemblGetSequence: import("@cyanheads/mcp-ts-core").ToolDe
|
|
|
29
34
|
}, {
|
|
30
35
|
readonly reason: "type_mismatch";
|
|
31
36
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
32
|
-
readonly when: "
|
|
37
|
+
readonly when: "A non-genomic type (cdna, cds, or protein) was requested for a region id or a gene ID.";
|
|
33
38
|
readonly recovery: string;
|
|
34
39
|
}, {
|
|
35
40
|
readonly reason: "missing_species";
|
|
36
41
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
37
42
|
readonly when: "A bare chr:start-end region was given without a species.";
|
|
38
43
|
readonly recovery: string;
|
|
39
|
-
}
|
|
44
|
+
}, {
|
|
45
|
+
readonly reason: "invalid_region";
|
|
46
|
+
readonly code: JsonRpcErrorCode.ValidationError;
|
|
47
|
+
readonly when: string;
|
|
48
|
+
readonly recovery: string;
|
|
49
|
+
}], {
|
|
50
|
+
readonly notice: z.ZodOptional<z.ZodString>;
|
|
51
|
+
}>;
|
|
40
52
|
//# sourceMappingURL=get-sequence.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-sequence.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-sequence.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-sequence.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-sequence.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAqBjE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsT7B,CAAC"}
|
|
@@ -6,24 +6,44 @@ import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { getEnsemblService } from '../../../services/ensembl/ensembl-service.js';
|
|
8
8
|
const SEQUENCE_TYPES = ['genomic', 'cdna', 'cds', 'protein'];
|
|
9
|
+
/**
|
|
10
|
+
* Linear-time `/first.*second/i`: `first`, then `second` later on the same line.
|
|
11
|
+
* Ensembl echoes the caller's ID into its error text, and the backtracking regex
|
|
12
|
+
* is quadratic in that echo.
|
|
13
|
+
*/
|
|
14
|
+
function mentionsInOrder(msg, first, second) {
|
|
15
|
+
return msg
|
|
16
|
+
.toLowerCase()
|
|
17
|
+
.split(/[\n\r\u2028\u2029]/)
|
|
18
|
+
.some((line) => {
|
|
19
|
+
const at = line.indexOf(first);
|
|
20
|
+
return at !== -1 && line.includes(second, at + first.length);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
9
23
|
export const ensemblGetSequence = tool('ensembl_get_sequence', {
|
|
10
24
|
title: 'Get Sequence',
|
|
11
25
|
description: 'Fetch the DNA, cDNA, CDS, or protein sequence for a gene, transcript, protein, or genomic region. ' +
|
|
12
|
-
'Returns the sequence
|
|
13
|
-
'
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
'
|
|
18
|
-
'
|
|
19
|
-
'
|
|
26
|
+
'Returns a window of the sequence — the first 10,000 characters by default — with its stable ID, ' +
|
|
27
|
+
'molecule type, and full length. When more follows the window, truncated is true and nextOffset is the ' +
|
|
28
|
+
'offset to request next; walking nextOffset reconstructs the whole sequence, and max_length 0 returns ' +
|
|
29
|
+
'everything from offset to the end. The type parameter selects which sequence is fetched: genomic ' +
|
|
30
|
+
'(default, includes introns), cdna (spliced transcript), cds (coding sequence only), protein. ' +
|
|
31
|
+
'For region mode, set id to a region — either species:chr:start-end ' +
|
|
32
|
+
'(e.g. homo_sapiens:13:32315086-32400268) or a bare chr:start-end with species set ' +
|
|
33
|
+
'(e.g. id 13:32315086-32400268, species homo_sapiens), spanning at most 10,000,000 bases; ' +
|
|
34
|
+
'regions return genomic DNA only. Protein sequences require a transcript or protein stable ID ' +
|
|
35
|
+
'(ENST…/ENSP…), not a gene ID — use ' +
|
|
36
|
+
'ensembl_lookup_gene with expand_transcripts=true to get the canonical transcript ID first.',
|
|
20
37
|
annotations: { readOnlyHint: true, openWorldHint: true, idempotentHint: true },
|
|
21
38
|
input: z.object({
|
|
22
39
|
id: z
|
|
23
40
|
.string()
|
|
41
|
+
.trim()
|
|
42
|
+
.min(1)
|
|
24
43
|
.describe('Ensembl stable ID (ENSG…, ENST…, ENSP…) or a genomic region for region mode. ' +
|
|
25
44
|
'Region accepts species:chr:start-end (e.g. homo_sapiens:13:32315086-32400268) or a bare ' +
|
|
26
|
-
'chr:start-end (e.g. 13:32315086-32400268) when the species field is set.'
|
|
45
|
+
'chr:start-end (e.g. 13:32315086-32400268) when the species field is set. A region needs ' +
|
|
46
|
+
'start at or below end, within the sequence region, and spans at most 10,000,000 bases.'),
|
|
27
47
|
type: z
|
|
28
48
|
.enum(SEQUENCE_TYPES)
|
|
29
49
|
.default('genomic')
|
|
@@ -31,7 +51,8 @@ export const ensemblGetSequence = tool('ensembl_get_sequence', {
|
|
|
31
51
|
'genomic: full genomic DNA including introns (default). ' +
|
|
32
52
|
'cdna: spliced transcript sequence (requires ENST… ID). ' +
|
|
33
53
|
'cds: coding sequence only, no UTRs (requires ENST… ID with coding transcript). ' +
|
|
34
|
-
'protein: amino acid sequence (requires ENST… or ENSP… ID).'
|
|
54
|
+
'protein: amino acid sequence (requires ENST… or ENSP… ID). ' +
|
|
55
|
+
'Region ids are genomic-only — request cdna, cds, or protein from a transcript or protein stable ID.'),
|
|
35
56
|
species: z
|
|
36
57
|
.string()
|
|
37
58
|
.optional()
|
|
@@ -53,21 +74,52 @@ export const ensemblGetSequence = tool('ensembl_get_sequence', {
|
|
|
53
74
|
.default(0)
|
|
54
75
|
.describe("Number of base pairs to extend downstream (3' direction) of the requested feature. " +
|
|
55
76
|
'Default 0. Only applies to genomic sequences and region queries.'),
|
|
77
|
+
offset: z
|
|
78
|
+
.number()
|
|
79
|
+
.int()
|
|
80
|
+
.min(0)
|
|
81
|
+
.default(0)
|
|
82
|
+
.describe('0-based character offset where the returned window starts, counted in the resolved sequence ' +
|
|
83
|
+
'(including any expand_5prime/expand_3prime flank). Default 0. Pass nextOffset from a truncated ' +
|
|
84
|
+
'response to fetch the following window; an offset at or past the end returns an empty window.'),
|
|
85
|
+
max_length: z
|
|
86
|
+
.number()
|
|
87
|
+
.int()
|
|
88
|
+
.min(0)
|
|
89
|
+
.default(10_000)
|
|
90
|
+
.describe('Maximum number of characters in the returned window. Default 10000. ' +
|
|
91
|
+
'Set to 0 to return everything from offset to the end, uncapped.'),
|
|
56
92
|
}),
|
|
57
93
|
output: z.object({
|
|
58
94
|
id: z.string().describe('The stable ID or region used for the lookup.'),
|
|
59
95
|
type: z.string().describe('Sequence type returned (genomic, cdna, cds, or protein).'),
|
|
60
96
|
seq: z
|
|
61
97
|
.string()
|
|
62
|
-
.describe('The
|
|
63
|
-
'
|
|
64
|
-
'
|
|
98
|
+
.describe('The requested window of the sequence: at most max_length characters starting at offset. ' +
|
|
99
|
+
'DNA sequences use IUPAC nucleotide codes (ACGT + ambiguity codes); protein sequences use ' +
|
|
100
|
+
'single-letter amino acid codes. Empty when offset is at or past the end.'),
|
|
65
101
|
length: z
|
|
66
102
|
.number()
|
|
67
|
-
.describe('
|
|
68
|
-
'
|
|
103
|
+
.describe('Full sequence length in characters, not the window size — nucleotides for genomic/cdna/cds, ' +
|
|
104
|
+
'amino-acid residues for protein. Includes any expand_5prime/expand_3prime flank.'),
|
|
105
|
+
offset: z.number().describe('0-based character offset where this window starts.'),
|
|
106
|
+
truncated: z
|
|
107
|
+
.boolean()
|
|
108
|
+
.describe('True when more sequence follows this window; request nextOffset to continue.'),
|
|
109
|
+
nextOffset: z
|
|
110
|
+
.number()
|
|
111
|
+
.optional()
|
|
112
|
+
.describe('Offset of the first character after this window — pass it as offset to fetch the next ' +
|
|
113
|
+
'window. Present only when truncated.'),
|
|
69
114
|
description: z.string().optional().describe('Sequence description from Ensembl, if provided.'),
|
|
70
115
|
}),
|
|
116
|
+
enrichment: {
|
|
117
|
+
notice: z
|
|
118
|
+
.string()
|
|
119
|
+
.optional()
|
|
120
|
+
.describe('Guidance about the window: how to continue when truncated, or why it is empty when the ' +
|
|
121
|
+
'offset is past the end.'),
|
|
122
|
+
},
|
|
71
123
|
errors: [
|
|
72
124
|
{
|
|
73
125
|
reason: 'not_found',
|
|
@@ -79,10 +131,11 @@ export const ensemblGetSequence = tool('ensembl_get_sequence', {
|
|
|
79
131
|
{
|
|
80
132
|
reason: 'type_mismatch',
|
|
81
133
|
code: JsonRpcErrorCode.ValidationError,
|
|
82
|
-
when: '
|
|
83
|
-
recovery: '
|
|
134
|
+
when: 'A non-genomic type (cdna, cds, or protein) was requested for a region id or a gene ID.',
|
|
135
|
+
recovery: 'Region ids are genomic-only, and a gene ID serves only its genomic sequence. Request cdna or ' +
|
|
136
|
+
'cds from a transcript ID (ENST…) and protein from a transcript or protein ID (ENST…/ENSP…). ' +
|
|
84
137
|
'Use ensembl_lookup_gene with expand_transcripts=true to find the canonical transcript ID, ' +
|
|
85
|
-
'then request the
|
|
138
|
+
'then request the sequence from that transcript ID.',
|
|
86
139
|
},
|
|
87
140
|
{
|
|
88
141
|
reason: 'missing_species',
|
|
@@ -91,9 +144,24 @@ export const ensemblGetSequence = tool('ensembl_get_sequence', {
|
|
|
91
144
|
recovery: 'Set species (e.g. homo_sapiens) alongside the chr:start-end region, ' +
|
|
92
145
|
'or use the combined species:chr:start-end id form.',
|
|
93
146
|
},
|
|
147
|
+
{
|
|
148
|
+
reason: 'invalid_region',
|
|
149
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
150
|
+
when: 'A region id has its start after its end, starts past the end of its sequence region, ' +
|
|
151
|
+
'spans more than the 10,000,000-base maximum, or names a sequence region the species lacks.',
|
|
152
|
+
recovery: 'Give start at or below end, within the sequence region length for the target assembly, ' +
|
|
153
|
+
'spanning at most 10,000,000 bases; split a longer region into windows of at most ' +
|
|
154
|
+
'10,000,000 bases. Name the chromosome as Ensembl does (13, X, MT; chr13 is also ' +
|
|
155
|
+
'accepted) — ensembl_lookup_gene reports valid coordinates for any gene.',
|
|
156
|
+
},
|
|
94
157
|
],
|
|
95
158
|
async handler(input, ctx) {
|
|
96
|
-
ctx.log.info('Fetching sequence', {
|
|
159
|
+
ctx.log.info('Fetching sequence', {
|
|
160
|
+
id: input.id,
|
|
161
|
+
type: input.type,
|
|
162
|
+
offset: input.offset,
|
|
163
|
+
maxLength: input.max_length,
|
|
164
|
+
});
|
|
97
165
|
const service = getEnsemblService();
|
|
98
166
|
// Region mode accepts two id shapes:
|
|
99
167
|
// species:chr:start-end embedded species (e.g. homo_sapiens:13:32315086-32400268)
|
|
@@ -104,7 +172,13 @@ export const ensemblGetSequence = tool('ensembl_get_sequence', {
|
|
|
104
172
|
// colon) matches neither, routing to stable-ID mode below.
|
|
105
173
|
const isPrefixedRegion = /^[a-z_]+:[\w.]+:\d+-\d+$/i.test(input.id);
|
|
106
174
|
const isBareRegion = /^[\w.]+:\d+-\d+$/.test(input.id);
|
|
175
|
+
let resolved;
|
|
107
176
|
if (isPrefixedRegion || isBareRegion) {
|
|
177
|
+
// Ensembl's region endpoint serves genomic DNA only and ignores a type parameter,
|
|
178
|
+
// so a cdna/cds/protein request would come back as genomic — reject it up front.
|
|
179
|
+
if (input.type !== 'genomic') {
|
|
180
|
+
throw ctx.fail('type_mismatch', `Region ids are genomic-only — type "${input.type}" is not available for region ${input.id}.`);
|
|
181
|
+
}
|
|
108
182
|
// For the prefixed form the species is the segment before the first colon and
|
|
109
183
|
// the region is everything after it; the bare form takes its species from the
|
|
110
184
|
// species field and uses the whole id as the region.
|
|
@@ -112,40 +186,76 @@ export const ensemblGetSequence = tool('ensembl_get_sequence', {
|
|
|
112
186
|
const species = input.species?.trim() || (isPrefixedRegion ? input.id.slice(0, firstColon) : undefined);
|
|
113
187
|
const region = isPrefixedRegion ? input.id.slice(firstColon + 1) : input.id;
|
|
114
188
|
if (!species) {
|
|
115
|
-
throw ctx.fail('missing_species', `Region ${input.id} needs a species — set species (e.g. homo_sapiens) or use the species:chr:start-end id form
|
|
189
|
+
throw ctx.fail('missing_species', `Region ${input.id} needs a species — set species (e.g. homo_sapiens) or use the species:chr:start-end id form.`);
|
|
190
|
+
}
|
|
191
|
+
// Both region shapes end in start-end after the last colon. Comparing the digit
|
|
192
|
+
// strings (length, then lexically) stays exact past double precision and linear
|
|
193
|
+
// in the caller's input, where BigInt parsing is not.
|
|
194
|
+
const [start = '', end = ''] = region
|
|
195
|
+
.slice(region.lastIndexOf(':') + 1)
|
|
196
|
+
.split('-')
|
|
197
|
+
.map((digits) => digits.replace(/^0+(?=\d)/, ''));
|
|
198
|
+
if (start.length > end.length || (start.length === end.length && start > end)) {
|
|
199
|
+
throw ctx.fail('invalid_region', `Region ${input.id} is reversed: start ${start} is greater than its end ${end}.`);
|
|
116
200
|
}
|
|
117
|
-
|
|
201
|
+
resolved = await service
|
|
118
202
|
.getSequenceByRegion(species, region, input.expand_5prime, input.expand_3prime, ctx)
|
|
119
203
|
.catch((err) => {
|
|
120
204
|
const msg = err instanceof Error ? err.message : String(err);
|
|
205
|
+
if (/cannot request a slice|maximum allowed length|no slice found/i.test(msg)) {
|
|
206
|
+
throw ctx.fail('invalid_region', `Invalid region ${input.id}: ${msg}`);
|
|
207
|
+
}
|
|
121
208
|
if (/not found|invalid|no stable id/i.test(msg)) {
|
|
122
|
-
throw ctx.fail('not_found', `Region ${input.id} not found: ${msg}
|
|
123
|
-
...ctx.recoveryFor('not_found'),
|
|
124
|
-
});
|
|
209
|
+
throw ctx.fail('not_found', `Region ${input.id} not found: ${msg}`);
|
|
125
210
|
}
|
|
126
211
|
throw err;
|
|
127
212
|
});
|
|
128
|
-
return seq;
|
|
129
213
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
/
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
214
|
+
else {
|
|
215
|
+
resolved = await service
|
|
216
|
+
.getSequenceById(input.id, input.type, input.expand_5prime, input.expand_3prime, ctx)
|
|
217
|
+
.catch((err) => {
|
|
218
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
219
|
+
// Ensembl echoes the requested ID into "ID '<id>' not found", and the echo can
|
|
220
|
+
// contain any word — so the looser type heuristics never override a not-found.
|
|
221
|
+
const notFound = /not found|no stable id/i.test(msg);
|
|
222
|
+
if (/requesting a gene and type not equal|multiple sequences detected/i.test(msg) ||
|
|
223
|
+
(!notFound &&
|
|
224
|
+
(mentionsInOrder(msg, 'protein', 'gene') ||
|
|
225
|
+
mentionsInOrder(msg, 'cds', 'gene') ||
|
|
226
|
+
mentionsInOrder(msg, 'type', 'mismatch') ||
|
|
227
|
+
/incompatible/i.test(msg)))) {
|
|
228
|
+
throw ctx.fail('type_mismatch', `Cannot request type "${input.type}" from a gene ID — use a transcript or protein stable ID instead. ` +
|
|
229
|
+
`Call ensembl_lookup_gene with expand_transcripts=true to get transcript IDs.`);
|
|
230
|
+
}
|
|
231
|
+
if (notFound) {
|
|
232
|
+
throw ctx.fail('not_found', `ID ${input.id} not found in Ensembl.`);
|
|
233
|
+
}
|
|
234
|
+
throw err;
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
// The window is a post-fetch slice of the resolved sequence, so it indexes past any
|
|
238
|
+
// expansion flank and `length` stays the full length. Ensembl's own start/end trim
|
|
239
|
+
// would hide the full length and cannot be combined with expansion.
|
|
240
|
+
const { length } = resolved;
|
|
241
|
+
const end = input.max_length > 0 ? Math.min(input.offset + input.max_length, length) : length;
|
|
242
|
+
const truncated = end < length;
|
|
243
|
+
if (input.offset >= length) {
|
|
244
|
+
ctx.enrich.notice(`No characters returned: offset ${input.offset} is at or past the end of the sequence, ` +
|
|
245
|
+
`which is ${length.toLocaleString()} characters long. Request an offset below the length.`);
|
|
246
|
+
}
|
|
247
|
+
else if (truncated) {
|
|
248
|
+
ctx.enrich.notice(`Showing ${(end - input.offset).toLocaleString()} of ${length.toLocaleString()} characters ` +
|
|
249
|
+
`from offset ${input.offset}. Call again with offset ${end} for the next window, or set ` +
|
|
250
|
+
'max_length to 0 for everything from offset to the end.');
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
...resolved,
|
|
254
|
+
seq: resolved.seq.slice(input.offset, end),
|
|
255
|
+
offset: input.offset,
|
|
256
|
+
truncated,
|
|
257
|
+
...(truncated && { nextOffset: end }),
|
|
258
|
+
};
|
|
149
259
|
},
|
|
150
260
|
format: (result) => {
|
|
151
261
|
const lines = [];
|
|
@@ -154,18 +264,17 @@ export const ensemblGetSequence = tool('ensembl_get_sequence', {
|
|
|
154
264
|
lines.push(`**Type:** ${result.type} | **Length:** ${result.length.toLocaleString()} ${unit}`);
|
|
155
265
|
if (result.description)
|
|
156
266
|
lines.push(`**Description:** ${result.description}`);
|
|
267
|
+
const extent = result.truncated
|
|
268
|
+
? `truncated; next offset ${result.nextOffset}`
|
|
269
|
+
: 'not truncated (nothing follows this window)';
|
|
270
|
+
lines.push(`**Window:** ${result.seq.length.toLocaleString()} characters from offset ${result.offset} ` +
|
|
271
|
+
`of ${result.length.toLocaleString()} — ${extent}`);
|
|
157
272
|
lines.push('');
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
lines.push('```');
|
|
161
|
-
lines.push(result.seq.slice(0, 200));
|
|
162
|
-
lines.push(`… (${result.length.toLocaleString()} total characters)`);
|
|
163
|
-
lines.push('```');
|
|
273
|
+
if (result.seq) {
|
|
274
|
+
lines.push('```', result.seq, '```');
|
|
164
275
|
}
|
|
165
276
|
else {
|
|
166
|
-
lines.push('
|
|
167
|
-
lines.push(result.seq);
|
|
168
|
-
lines.push('```');
|
|
277
|
+
lines.push('_No sequence characters at this offset._');
|
|
169
278
|
}
|
|
170
279
|
return [{ type: 'text', text: lines.join('\n') }];
|
|
171
280
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-sequence.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-sequence.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"get-sequence.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-sequence.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,8 @@ export const ensemblGetXrefs = tool('ensembl_get_xrefs', {
|
|
|
36
36
|
input: z.object({
|
|
37
37
|
id: z
|
|
38
38
|
.string()
|
|
39
|
+
.trim()
|
|
40
|
+
.min(1)
|
|
39
41
|
.describe('Ensembl stable gene ID (ENSG…) or transcript ID (ENST…). ' +
|
|
40
42
|
'Use ensembl_lookup_gene to get the stable ID from a gene symbol. ' +
|
|
41
43
|
'xrefs/id returns the full cross-reference set (56+ entries for well-annotated genes like BRCA2).'),
|
|
@@ -75,9 +77,7 @@ export const ensemblGetXrefs = tool('ensembl_get_xrefs', {
|
|
|
75
77
|
.catch((err) => {
|
|
76
78
|
const msg = err instanceof Error ? err.message : String(err);
|
|
77
79
|
if (/not found/i.test(msg)) {
|
|
78
|
-
throw ctx.fail('not_found', `ID "${input.id}" not found in Ensembl
|
|
79
|
-
...ctx.recoveryFor('not_found'),
|
|
80
|
-
});
|
|
80
|
+
throw ctx.fail('not_found', `ID "${input.id}" not found in Ensembl.`);
|
|
81
81
|
}
|
|
82
82
|
throw err;
|
|
83
83
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-xrefs.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-xrefs.tool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"get-xrefs.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-xrefs.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup-gene.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/lookup-gene.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAmEjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"lookup-gene.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/lookup-gene.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAmEjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgQ5B,CAAC"}
|