@cyanheads/protein-mcp-server 0.8.3 → 0.8.5
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 +1 -1
- package/CLAUDE.md +1 -1
- package/README.md +7 -3
- package/changelog/0.8.x/0.8.4.md +13 -0
- package/changelog/0.8.x/0.8.5.md +16 -0
- package/dist/mcp-server/tools/definitions/find-similar.tool.d.ts +14 -4
- package/dist/mcp-server/tools/definitions/find-similar.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/find-similar.tool.js +66 -15
- package/dist/mcp-server/tools/definitions/find-similar.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/track-ligands.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/track-ligands.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/track-ligands.tool.js +75 -22
- package/dist/mcp-server/tools/definitions/track-ligands.tool.js.map +1 -1
- package/dist/services/foldseek/foldseek-service.d.ts +28 -9
- package/dist/services/foldseek/foldseek-service.d.ts.map +1 -1
- package/dist/services/foldseek/foldseek-service.js +83 -36
- package/dist/services/foldseek/foldseek-service.js.map +1 -1
- package/dist/services/rcsb/rcsb-service.d.ts +13 -3
- package/dist/services/rcsb/rcsb-service.d.ts.map +1 -1
- package/dist/services/rcsb/rcsb-service.js +50 -12
- package/dist/services/rcsb/rcsb-service.js.map +1 -1
- package/dist/services/rcsb/types.d.ts +22 -4
- package/dist/services/rcsb/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/server.json +3 -3
|
@@ -27,22 +27,42 @@ const chemCompSchema = z
|
|
|
27
27
|
const bindingSiteSchema = z
|
|
28
28
|
.object({
|
|
29
29
|
ligandCompId: z.string().describe('Bound ligand chemical component ID.'),
|
|
30
|
-
ligandAsymId: z
|
|
30
|
+
ligandAsymId: z
|
|
31
|
+
.string()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('Author chain ID (auth_asym_id) of the ligand instance — the author namespace, unlike residues[].asymId.'),
|
|
34
|
+
ligandAuthSeqId: z
|
|
35
|
+
.number()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe('Author residue number (auth_seq_id) of the ligand instance.'),
|
|
31
38
|
residues: z
|
|
32
39
|
.array(z
|
|
33
40
|
.object({
|
|
34
41
|
residueCompId: z.string().describe('Interacting residue type (e.g. ASP).'),
|
|
35
|
-
asymId: z
|
|
36
|
-
|
|
42
|
+
asymId: z
|
|
43
|
+
.string()
|
|
44
|
+
.describe("mmCIF label_asym_id of the residue's chain (label namespace, paired with seqId). Can differ from authAsymId."),
|
|
45
|
+
seqId: z
|
|
46
|
+
.number()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe('mmCIF label_seq_id: position in the entity sequence (label namespace). Not the deposited residue number; see authSeqId.'),
|
|
49
|
+
authAsymId: z
|
|
50
|
+
.string()
|
|
51
|
+
.optional()
|
|
52
|
+
.describe("Author chain ID (auth_asym_id) of the residue's chain, as deposited and as most structure viewers label it."),
|
|
53
|
+
authSeqId: z
|
|
54
|
+
.number()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe('Author residue number (auth_seq_id), as deposited and as most literature and viewers number it. Related to seqId by no fixed offset; insertion codes are not reported.'),
|
|
37
57
|
distance: z.number().optional().describe('Contact distance to the ligand in Å.'),
|
|
38
58
|
})
|
|
39
|
-
.describe('A pocket residue in contact with the ligand.'))
|
|
59
|
+
.describe('A pocket residue in contact with the ligand, in both numbering namespaces.'))
|
|
40
60
|
.describe('Protein residues lining the pocket, nearest first.'),
|
|
41
61
|
})
|
|
42
62
|
.describe('A ligand instance and the protein residues lining its pocket.');
|
|
43
63
|
export const trackLigands = tool('protein_track_ligands', {
|
|
44
64
|
title: 'protein-mcp-server: track ligands',
|
|
45
|
-
description: `Ligand discovery and binding-site analysis across the PDB. mode "find_ligand" resolves a name or formula to chemical component IDs with metadata (formula, weight, SMILES), ranked by deposition frequency — most-deposited component first, so the top hit is the most common match for the name, not necessarily an exact name-string match. mode "structures_with_ligand" returns PDB entries containing a ligand (by exact component ID — get the ID from find_ligand first), highest-resolution first, each with its resolution in Å. mode "binding_site" returns the protein residues lining a ligand's pocket in a given structure, with contact distances. Binding sites are experimental-only (computed from deposited coordinates; predicted models carry no bound ligands).`,
|
|
65
|
+
description: `Ligand discovery and binding-site analysis across the PDB. mode "find_ligand" resolves a name or formula to chemical component IDs with metadata (formula, weight, SMILES), ranked by deposition frequency — most-deposited component first, so the top hit is the most common match for the name, not necessarily an exact name-string match. The ranking covers a bounded candidate pool; totalCount and candidatesConsidered report how many components matched and how many were ranked. mode "structures_with_ligand" returns PDB entries containing a ligand (by exact component ID — get the ID from find_ligand first), highest-resolution first, each with its resolution in Å. mode "binding_site" returns the protein residues lining a ligand's pocket in a given structure, with contact distances, each numbered in both the mmCIF label namespace (asymId, seqId) and the author namespace (authAsymId, authSeqId) used by deposited coordinates and most literature. Binding sites are experimental-only (computed from deposited coordinates; predicted models carry no bound ligands).`,
|
|
46
66
|
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
47
67
|
errors: [
|
|
48
68
|
{
|
|
@@ -80,7 +100,7 @@ export const trackLigands = tool('protein_track_ligands', {
|
|
|
80
100
|
.int()
|
|
81
101
|
.min(0)
|
|
82
102
|
.default(0)
|
|
83
|
-
.describe('Zero-based result offset (
|
|
103
|
+
.describe('Zero-based result offset (modes structures_with_ligand and binding_site; binding_site pages ligand instances).'),
|
|
84
104
|
}),
|
|
85
105
|
output: z.object({
|
|
86
106
|
mode: z
|
|
@@ -111,20 +131,24 @@ export const trackLigands = tool('protein_track_ligands', {
|
|
|
111
131
|
totalCount: z
|
|
112
132
|
.number()
|
|
113
133
|
.optional()
|
|
114
|
-
.describe('Total upstream matches before
|
|
134
|
+
.describe('Total upstream matches before any local narrowing: PDB entries containing the component (structures_with_ligand), chemical components matching the query (find_ligand), or ligand instances with pocket contacts (binding_site).'),
|
|
135
|
+
candidatesConsidered: z
|
|
136
|
+
.number()
|
|
137
|
+
.optional()
|
|
138
|
+
.describe('Chemical components pulled into the deposition-frequency ranking (find_ligand). Below totalCount when the candidate pool was truncated; the ranking then covers only these candidates.'),
|
|
115
139
|
start: z
|
|
116
140
|
.number()
|
|
117
141
|
.optional()
|
|
118
|
-
.describe('Zero-based offset of the structures_with_ligand result page.'),
|
|
142
|
+
.describe('Zero-based offset of the structures_with_ligand or binding_site result page.'),
|
|
119
143
|
nextStart: z
|
|
120
144
|
.number()
|
|
121
145
|
.optional()
|
|
122
|
-
.describe('Offset for the next structures_with_ligand page; absent on the final or past-end page.'),
|
|
146
|
+
.describe('Offset for the next structures_with_ligand or binding_site page; absent on the final or past-end page.'),
|
|
123
147
|
resolvedCompId: z.string().optional().describe('The chemical component ID used to query.'),
|
|
124
148
|
notice: z
|
|
125
149
|
.string()
|
|
126
150
|
.optional()
|
|
127
|
-
.describe('Advisory note: a structures_with_ligand page that is empty because no entry contains the component or because start is past the end, or
|
|
151
|
+
.describe('Advisory note: a find_ligand candidate pool smaller than the upstream match count, a structures_with_ligand page that is empty because no entry contains the component or because start is past the end, or a binding_site page that leaves instances for a later start or starts past the last instance.'),
|
|
128
152
|
},
|
|
129
153
|
async handler(input, ctx) {
|
|
130
154
|
const rcsb = getRcsbService();
|
|
@@ -138,10 +162,18 @@ export const trackLigands = tool('protein_track_ligands', {
|
|
|
138
162
|
// deposition frequency and slice to the limit. The canonical component (e.g.
|
|
139
163
|
// HEM for "heme") is the most-deposited but RCSB name-ranks it low, so a small
|
|
140
164
|
// `limit` would never fetch it — the count re-rank can only reorder what it
|
|
141
|
-
// pulls. Re-rank, never filter.
|
|
142
|
-
//
|
|
165
|
+
// pulls. Re-rank, never filter. Specific names match a handful of components
|
|
166
|
+
// ("ATP": 7), which a pool of ~25 covers cheaply; broad words match far more
|
|
167
|
+
// ("iron": 119), so the pool can truncate.
|
|
143
168
|
const candidatePool = Math.max(input.limit, 25);
|
|
144
|
-
const ids = await rcsb.findChemComps(input.query, candidatePool, ctx);
|
|
169
|
+
const { ids, total } = await rcsb.findChemComps(input.query, candidatePool, ctx);
|
|
170
|
+
// A name with more matches than the pool holds ranks only the pool, so a
|
|
171
|
+
// more-deposited match beyond it can be missing — disclose that.
|
|
172
|
+
ctx.enrich.total(total);
|
|
173
|
+
ctx.enrich({ candidatesConsidered: ids.length });
|
|
174
|
+
if (ids.length < total) {
|
|
175
|
+
ctx.enrich.notice(`${ids.length} of ${total} components matching "${input.query}" were ranked by deposition frequency; the ranking covers only those ${ids.length}, so a more-deposited match can be missing. Narrow the query (a more specific name, a synonym, or a formula) to rank the full match set.`);
|
|
176
|
+
}
|
|
145
177
|
const resolved = await mapWithConcurrency(ids, cfg.fanoutConcurrency, async (id) => {
|
|
146
178
|
const [chem, depositionCount] = await Promise.all([
|
|
147
179
|
rcsb.getChemComp(id, ctx),
|
|
@@ -216,14 +248,24 @@ export const trackLigands = tool('protein_track_ligands', {
|
|
|
216
248
|
},
|
|
217
249
|
});
|
|
218
250
|
}
|
|
219
|
-
//
|
|
220
|
-
//
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
251
|
+
// Page binding-site INSTANCES with the shared start/limit. An entry can hold
|
|
252
|
+
// more instances of one ligand than the limit ceiling (6QNR: 994 MG), so start
|
|
253
|
+
// is the only way to reach the tail.
|
|
254
|
+
const bindingSites = sites.slice(input.start, input.start + input.limit);
|
|
255
|
+
const nextStart = input.start + bindingSites.length;
|
|
256
|
+
const where = `${input.pdb_id.toUpperCase()}${compId ? ` for ${compId}` : ''}`;
|
|
257
|
+
ctx.enrich.total(sites.length);
|
|
258
|
+
ctx.enrich({
|
|
259
|
+
start: input.start,
|
|
260
|
+
...(nextStart < sites.length ? { nextStart } : {}),
|
|
261
|
+
...(compId ? { resolvedCompId: compId } : {}),
|
|
262
|
+
});
|
|
263
|
+
if (bindingSites.length === 0) {
|
|
264
|
+
ctx.enrich.notice(`start ${input.start} is past the end of the ${sites.length} binding-site instances in ${where}. Re-call with a lower start to read a populated page.`);
|
|
265
|
+
}
|
|
266
|
+
else if (nextStart < sites.length) {
|
|
267
|
+
ctx.enrich.notice(`Showing ${bindingSites.length} of ${sites.length} binding-site instances in ${where}; re-call with start ${nextStart} for the next page.`);
|
|
224
268
|
}
|
|
225
|
-
if (compId)
|
|
226
|
-
ctx.enrich({ resolvedCompId: compId });
|
|
227
269
|
return { mode: input.mode, bindingSites };
|
|
228
270
|
},
|
|
229
271
|
format: (result) => {
|
|
@@ -251,12 +293,23 @@ export const trackLigands = tool('protein_track_ligands', {
|
|
|
251
293
|
lines.push(`- ${s.id} — ${s.resolution.toFixed(2)} Å`);
|
|
252
294
|
}
|
|
253
295
|
}
|
|
296
|
+
if (result.bindingSites?.length) {
|
|
297
|
+
lines.push('\nResidues are numbered as label_seq_id (chain = label_asym_id); the author numbering follows as auth_seq_id (chain = auth_asym_id) where reported.');
|
|
298
|
+
}
|
|
254
299
|
for (const site of result.bindingSites ?? []) {
|
|
255
|
-
|
|
300
|
+
const ligandIds = [
|
|
301
|
+
site.ligandAsymId ? `author chain ${site.ligandAsymId}` : null,
|
|
302
|
+
site.ligandAuthSeqId != null ? `residue ${site.ligandAuthSeqId}` : null,
|
|
303
|
+
].filter(Boolean);
|
|
304
|
+
lines.push(`\n### Ligand ${site.ligandCompId}${ligandIds.length > 0 ? ` (${ligandIds.join(', ')})` : ''}`);
|
|
256
305
|
for (const r of site.residues) {
|
|
257
306
|
const pos = r.seqId != null ? `${r.residueCompId}${r.seqId}` : r.residueCompId;
|
|
307
|
+
const author = [
|
|
308
|
+
r.authSeqId != null ? `author ${r.residueCompId}${r.authSeqId}` : null,
|
|
309
|
+
r.authAsymId ? `${r.authSeqId != null ? '' : 'author '}chain ${r.authAsymId}` : null,
|
|
310
|
+
].filter(Boolean);
|
|
258
311
|
const dist = r.distance != null ? ` — ${r.distance.toFixed(2)} Å` : '';
|
|
259
|
-
lines.push(`- ${pos} (chain ${r.asymId})${dist}`);
|
|
312
|
+
lines.push(`- ${pos} (chain ${r.asymId}${author.length > 0 ? `; ${author.join(', ')}` : ''})${dist}`);
|
|
260
313
|
}
|
|
261
314
|
}
|
|
262
315
|
return [{ type: 'text', text: lines.join('\n') }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-ligands.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/track-ligands.tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"track-ligands.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/track-ligands.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Foldseek service — wraps the public Foldseek structural-search
|
|
3
|
-
* ticket API (`/api/ticket` → poll `/api/ticket/{id}` → `/api/result/{id}
|
|
4
|
-
* Submits a query coordinate file against
|
|
5
|
-
*
|
|
6
|
-
* completed ticket
|
|
7
|
-
*
|
|
3
|
+
* ticket API (`/api/ticket` → poll `/api/ticket/{id}` → `/api/result/queries/{id}/…`
|
|
4
|
+
* + `/api/result/{id}/{query}`). Submits a query coordinate file against
|
|
5
|
+
* experimental + predicted databases; Foldseek splits a multichain file into one
|
|
6
|
+
* query per chain, so a completed ticket is read one query at a time. Returns a
|
|
7
|
+
* page of that query's fold-similarity hits, ranked by score across databases,
|
|
8
|
+
* alongside the full hit count and the ticket's query count, so a completed
|
|
9
|
+
* ticket can be re-paged or re-read at another query instead of resubmitted.
|
|
10
|
+
* Backs `protein_find_similar` (`by: structure`).
|
|
8
11
|
* Async: the ticket status field drives completion, not the HTTP code.
|
|
9
12
|
* @module services/foldseek/foldseek-service
|
|
10
13
|
*/
|
|
@@ -41,8 +44,17 @@ export interface FoldseekHit {
|
|
|
41
44
|
export type FoldseekOutcome = {
|
|
42
45
|
status: 'complete';
|
|
43
46
|
ticketId: string;
|
|
47
|
+
/** Zero-based query index the hits belong to. */
|
|
48
|
+
query: number;
|
|
49
|
+
/** Number of queries (one per chain of the submitted file) the ticket holds. */
|
|
50
|
+
queryCount: number;
|
|
44
51
|
hits: FoldseekHit[];
|
|
45
52
|
total: number;
|
|
53
|
+
} | {
|
|
54
|
+
status: 'query_out_of_range';
|
|
55
|
+
ticketId: string;
|
|
56
|
+
query: number;
|
|
57
|
+
queryCount: number;
|
|
46
58
|
} | {
|
|
47
59
|
status: 'computing';
|
|
48
60
|
ticketId: string;
|
|
@@ -66,6 +78,8 @@ export declare class FoldseekService {
|
|
|
66
78
|
databases: string[];
|
|
67
79
|
mode: string;
|
|
68
80
|
limit: number;
|
|
81
|
+
/** Zero-based query index to read; defaults to 0. */
|
|
82
|
+
query?: number;
|
|
69
83
|
start: number;
|
|
70
84
|
timeoutMs: number;
|
|
71
85
|
}, ctx: Context): Promise<FoldseekOutcome>;
|
|
@@ -78,16 +92,21 @@ export declare class FoldseekService {
|
|
|
78
92
|
resume(params: {
|
|
79
93
|
ticketId: string;
|
|
80
94
|
limit: number;
|
|
95
|
+
query?: number;
|
|
81
96
|
start: number;
|
|
82
97
|
timeoutMs: number;
|
|
83
98
|
}, ctx: Context): Promise<FoldseekOutcome>;
|
|
84
99
|
private submit;
|
|
100
|
+
/** Bounded-poll a ticket and map the read to an outcome. Throws on poll failure. */
|
|
101
|
+
private pollToOutcome;
|
|
85
102
|
private pollTicket;
|
|
86
103
|
/**
|
|
87
|
-
* Read a completed ticket
|
|
88
|
-
* The
|
|
89
|
-
*
|
|
90
|
-
*
|
|
104
|
+
* Read one query of a completed ticket and return the requested page of its
|
|
105
|
+
* hits. The query index is range-checked against the ticket's query list first:
|
|
106
|
+
* Foldseek answers an out-of-range index with HTTP 200 and empty blocks, which
|
|
107
|
+
* would read as a search with no matches. The whole hit list is parsed and
|
|
108
|
+
* ranked before slicing, so the caller learns the real hit count and pages walk
|
|
109
|
+
* one stable ordering.
|
|
91
110
|
*/
|
|
92
111
|
private fetchResults;
|
|
93
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foldseek-service.d.ts","sourceRoot":"","sources":["../../../src/services/foldseek/foldseek-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"foldseek-service.d.ts","sourceRoot":"","sources":["../../../src/services/foldseek/foldseek-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Foldseek service — wraps the public Foldseek structural-search
|
|
3
|
-
* ticket API (`/api/ticket` → poll `/api/ticket/{id}` → `/api/result/{id}
|
|
4
|
-
* Submits a query coordinate file against
|
|
5
|
-
*
|
|
6
|
-
* completed ticket
|
|
7
|
-
*
|
|
3
|
+
* ticket API (`/api/ticket` → poll `/api/ticket/{id}` → `/api/result/queries/{id}/…`
|
|
4
|
+
* + `/api/result/{id}/{query}`). Submits a query coordinate file against
|
|
5
|
+
* experimental + predicted databases; Foldseek splits a multichain file into one
|
|
6
|
+
* query per chain, so a completed ticket is read one query at a time. Returns a
|
|
7
|
+
* page of that query's fold-similarity hits, ranked by score across databases,
|
|
8
|
+
* alongside the full hit count and the ticket's query count, so a completed
|
|
9
|
+
* ticket can be re-paged or re-read at another query instead of resubmitted.
|
|
10
|
+
* Backs `protein_find_similar` (`by: structure`).
|
|
8
11
|
* Async: the ticket status field drives completion, not the HTTP code.
|
|
9
12
|
* @module services/foldseek/foldseek-service
|
|
10
13
|
*/
|
|
11
14
|
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
12
15
|
import { withAsyncPoll } from '../shared/async.js';
|
|
13
16
|
import { fetchJson } from '../shared/http.js';
|
|
17
|
+
/**
|
|
18
|
+
* Page size for the query-list request. The endpoint's `limit`/`offset` paging
|
|
19
|
+
* is off by one upstream (a limit of N returns at most N−1 entries, and
|
|
20
|
+
* `hasNext` can read false while entries remain), so the whole list is read in
|
|
21
|
+
* a single oversized request rather than walked.
|
|
22
|
+
*/
|
|
23
|
+
const QUERY_LIST_LIMIT = 10_000;
|
|
14
24
|
export class FoldseekService {
|
|
15
25
|
baseUrl;
|
|
16
26
|
constructor(_config, _storage, serverConfig) {
|
|
@@ -29,16 +39,7 @@ export class FoldseekService {
|
|
|
29
39
|
return { status: 'failed', error: err instanceof Error ? err.message : String(err) };
|
|
30
40
|
}
|
|
31
41
|
try {
|
|
32
|
-
|
|
33
|
-
step: () => this.pollTicket(ticketId, params.start, params.limit, ctx),
|
|
34
|
-
timeoutMs: params.timeoutMs,
|
|
35
|
-
ctx,
|
|
36
|
-
intervalMs: 1500,
|
|
37
|
-
maxIntervalMs: 2500,
|
|
38
|
-
});
|
|
39
|
-
return outcome.status === 'complete'
|
|
40
|
-
? { status: 'complete', ticketId, ...outcome.value }
|
|
41
|
-
: { status: 'computing', ticketId };
|
|
42
|
+
return await this.pollToOutcome(ticketId, params, ctx);
|
|
42
43
|
}
|
|
43
44
|
catch (err) {
|
|
44
45
|
return { status: 'failed', error: err instanceof Error ? err.message : String(err) };
|
|
@@ -52,16 +53,7 @@ export class FoldseekService {
|
|
|
52
53
|
*/
|
|
53
54
|
async resume(params, ctx) {
|
|
54
55
|
try {
|
|
55
|
-
|
|
56
|
-
step: () => this.pollTicket(params.ticketId, params.start, params.limit, ctx),
|
|
57
|
-
timeoutMs: params.timeoutMs,
|
|
58
|
-
ctx,
|
|
59
|
-
intervalMs: 1500,
|
|
60
|
-
maxIntervalMs: 2500,
|
|
61
|
-
});
|
|
62
|
-
return outcome.status === 'complete'
|
|
63
|
-
? { status: 'complete', ticketId: params.ticketId, ...outcome.value }
|
|
64
|
-
: { status: 'computing', ticketId: params.ticketId };
|
|
56
|
+
return await this.pollToOutcome(params.ticketId, params, ctx);
|
|
65
57
|
}
|
|
66
58
|
catch (err) {
|
|
67
59
|
// A 400 from the ticket/result endpoint is Foldseek's "invalid ID" — the
|
|
@@ -92,7 +84,31 @@ export class FoldseekService {
|
|
|
92
84
|
throw new Error('Foldseek did not return a ticket ID');
|
|
93
85
|
return raw.id;
|
|
94
86
|
}
|
|
95
|
-
|
|
87
|
+
/** Bounded-poll a ticket and map the read to an outcome. Throws on poll failure. */
|
|
88
|
+
async pollToOutcome(ticketId, page, ctx) {
|
|
89
|
+
const query = page.query ?? 0;
|
|
90
|
+
const outcome = await withAsyncPoll({
|
|
91
|
+
step: () => this.pollTicket(ticketId, query, page.start, page.limit, ctx),
|
|
92
|
+
timeoutMs: page.timeoutMs,
|
|
93
|
+
ctx,
|
|
94
|
+
intervalMs: 1500,
|
|
95
|
+
maxIntervalMs: 2500,
|
|
96
|
+
});
|
|
97
|
+
if (outcome.status !== 'complete')
|
|
98
|
+
return { status: 'computing', ticketId };
|
|
99
|
+
const read = outcome.value;
|
|
100
|
+
return read.kind === 'query_out_of_range'
|
|
101
|
+
? { status: 'query_out_of_range', ticketId, query, queryCount: read.queryCount }
|
|
102
|
+
: {
|
|
103
|
+
status: 'complete',
|
|
104
|
+
ticketId,
|
|
105
|
+
query,
|
|
106
|
+
queryCount: read.queryCount,
|
|
107
|
+
hits: read.hits,
|
|
108
|
+
total: read.total,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async pollTicket(ticketId, query, start, limit, ctx) {
|
|
96
112
|
const ticket = await fetchJson(`${this.baseUrl}/api/ticket/${encodeURIComponent(ticketId)}`, ctx, {
|
|
97
113
|
operation: 'FoldseekService.pollTicket',
|
|
98
114
|
label: 'Foldseek',
|
|
@@ -104,16 +120,23 @@ export class FoldseekService {
|
|
|
104
120
|
throw new Error('Foldseek reported an error processing the structure');
|
|
105
121
|
if (status !== 'COMPLETE')
|
|
106
122
|
return { ready: false };
|
|
107
|
-
return { ready: true, value: await this.fetchResults(ticketId, start, limit, ctx) };
|
|
123
|
+
return { ready: true, value: await this.fetchResults(ticketId, query, start, limit, ctx) };
|
|
108
124
|
}
|
|
109
125
|
/**
|
|
110
|
-
* Read a completed ticket
|
|
111
|
-
* The
|
|
112
|
-
*
|
|
113
|
-
*
|
|
126
|
+
* Read one query of a completed ticket and return the requested page of its
|
|
127
|
+
* hits. The query index is range-checked against the ticket's query list first:
|
|
128
|
+
* Foldseek answers an out-of-range index with HTTP 200 and empty blocks, which
|
|
129
|
+
* would read as a search with no matches. The whole hit list is parsed and
|
|
130
|
+
* ranked before slicing, so the caller learns the real hit count and pages walk
|
|
131
|
+
* one stable ordering.
|
|
114
132
|
*/
|
|
115
|
-
async fetchResults(ticketId, start, limit, ctx) {
|
|
116
|
-
const
|
|
133
|
+
async fetchResults(ticketId, query, start, limit, ctx) {
|
|
134
|
+
const ticket = encodeURIComponent(ticketId);
|
|
135
|
+
const list = await fetchJson(`${this.baseUrl}/api/result/queries/${ticket}/${QUERY_LIST_LIMIT}/0`, ctx, { operation: 'FoldseekService.fetchQueries', label: 'Foldseek', baseDelayMs: 400 });
|
|
136
|
+
const queryCount = list.lookup?.length ?? 0;
|
|
137
|
+
if (query >= queryCount)
|
|
138
|
+
return { kind: 'query_out_of_range', queryCount };
|
|
139
|
+
const raw = await fetchJson(`${this.baseUrl}/api/result/${ticket}/${query}`, ctx, { operation: 'FoldseekService.fetchResults', label: 'Foldseek', baseDelayMs: 400 });
|
|
117
140
|
const hits = [];
|
|
118
141
|
for (const dbResult of raw.results ?? []) {
|
|
119
142
|
const db = dbResult.db ?? 'unknown';
|
|
@@ -125,9 +148,29 @@ export class FoldseekService {
|
|
|
125
148
|
}
|
|
126
149
|
}
|
|
127
150
|
}
|
|
128
|
-
|
|
151
|
+
hits.sort(compareHits);
|
|
152
|
+
return { kind: 'page', queryCount, total: hits.length, hits: hits.slice(start, start + limit) };
|
|
129
153
|
}
|
|
130
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Best-first order across databases: `score` descending, a hit with no score
|
|
157
|
+
* last, ties broken by database then target so every page of a ticket walks the
|
|
158
|
+
* same sequence. Each database block already arrives score-sorted upstream;
|
|
159
|
+
* `score` is the one field comparable across them.
|
|
160
|
+
*/
|
|
161
|
+
function compareHits(a, b) {
|
|
162
|
+
if (a.score !== b.score) {
|
|
163
|
+
if (a.score === undefined)
|
|
164
|
+
return 1;
|
|
165
|
+
if (b.score === undefined)
|
|
166
|
+
return -1;
|
|
167
|
+
return b.score - a.score;
|
|
168
|
+
}
|
|
169
|
+
return compareText(a.database, b.database) || compareText(a.target, b.target);
|
|
170
|
+
}
|
|
171
|
+
function compareText(a, b) {
|
|
172
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
173
|
+
}
|
|
131
174
|
// ─── Normalizers ──────────────────────────────────────────────────────────────
|
|
132
175
|
function normalizeHit(aln, database) {
|
|
133
176
|
const target = aln.target;
|
|
@@ -148,12 +191,16 @@ function normalizeHit(aln, database) {
|
|
|
148
191
|
hit.score = aln.score;
|
|
149
192
|
return hit;
|
|
150
193
|
}
|
|
151
|
-
/**
|
|
194
|
+
/**
|
|
195
|
+
* Resolve a Foldseek target header to an addressable identifier. PDB targets
|
|
196
|
+
* arrive either bare (`1abc_A`) or as assembly files (`1abc-assembly1.cif.gz_A`);
|
|
197
|
+
* the chain is the segment after the underscore in both.
|
|
198
|
+
*/
|
|
152
199
|
function parseTarget(target) {
|
|
153
200
|
const af = /^AF-([A-Za-z0-9]+)-F\d+/.exec(target);
|
|
154
201
|
if (af)
|
|
155
202
|
return { targetType: 'alphafold', uniprotAccession: af[1] };
|
|
156
|
-
const pdb = /^(\d[A-Za-z0-9]{3})[_-]([A-Za-z0-9]+)/.exec(target);
|
|
203
|
+
const pdb = /^(\d[A-Za-z0-9]{3})(?:-assembly\d+\.cif(?:\.gz)?)?[_-]([A-Za-z0-9]+)/.exec(target);
|
|
157
204
|
if (pdb)
|
|
158
205
|
return { targetType: 'pdb', pdbId: pdb[1].toUpperCase(), chain: pdb[2] };
|
|
159
206
|
return { targetType: 'other' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foldseek-service.js","sourceRoot":"","sources":["../../../src/services/foldseek/foldseek-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"foldseek-service.js","sourceRoot":"","sources":["../../../src/services/foldseek/foldseek-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import type { Context } from '@cyanheads/mcp-ts-core';
|
|
|
11
11
|
import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
|
|
12
12
|
import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
|
|
13
13
|
import type { ServerConfig } from '../../config/server-config.js';
|
|
14
|
-
import type { BindingSite, ChemComp, ContentType, CoordinateUrls, EntryMeta, FacetDimension, SearchResult, StructureSearchParams, UniProtXref } from './types.js';
|
|
14
|
+
import type { BindingSite, ChemComp, ChemCompMatches, ContentType, CoordinateUrls, EntryMeta, FacetDimension, SearchResult, StructureSearchParams, UniProtXref } from './types.js';
|
|
15
15
|
/** RCSB return types relevant to this server. */
|
|
16
16
|
export type ReturnType = 'entry' | 'polymer_entity' | 'mol_definition';
|
|
17
17
|
/** A facet dimension request: friendly name + how RCSB should aggregate it. */
|
|
@@ -75,8 +75,12 @@ export declare class RcsbService {
|
|
|
75
75
|
* match therefore falls through to the name/synonym search rather than ending
|
|
76
76
|
* the resolution, which keeps those IDs reaching the path that can resolve
|
|
77
77
|
* them. The extra call happens only when the formula terminal matched nothing.
|
|
78
|
+
*
|
|
79
|
+
* Returns the first `limit` candidate IDs in RCSB's order alongside the
|
|
80
|
+
* upstream `total` for the search that produced them, so a caller can tell a
|
|
81
|
+
* complete match set from a truncated one.
|
|
78
82
|
*/
|
|
79
|
-
findChemComps(query: string, limit: number, ctx: Context): Promise<
|
|
83
|
+
findChemComps(query: string, limit: number, ctx: Context): Promise<ChemCompMatches>;
|
|
80
84
|
/** Facet-only aggregation over an optional scoping query (no row pull). */
|
|
81
85
|
analyzeFacets(params: StructureSearchParams, facets: FacetSpec[], ctx: Context): Promise<{
|
|
82
86
|
total: number;
|
|
@@ -97,7 +101,13 @@ export declare class RcsbService {
|
|
|
97
101
|
entityId: string;
|
|
98
102
|
sequence: string;
|
|
99
103
|
} | null>;
|
|
100
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Ligand binding-site residues for an entry, optionally filtered to one ligand.
|
|
106
|
+
* Each pocket residue carries both numbering namespaces: `rcsb_target_neighbors`
|
|
107
|
+
* reports the mmCIF label chain and position plus the author residue number,
|
|
108
|
+
* and the author chain comes from the entry's own per-instance
|
|
109
|
+
* `asym_id`/`auth_asym_id` pairs.
|
|
110
|
+
*/
|
|
101
111
|
getBindingSites(pdbId: string, compId: string | undefined, ctx: Context): Promise<BindingSite[]>;
|
|
102
112
|
/** Chemical-component metadata (formula, weight, SMILES, InChIKey). */
|
|
103
113
|
getChemComp(compId: string, ctx: Context): Promise<ChemComp | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rcsb-service.d.ts","sourceRoot":"","sources":["../../../src/services/rcsb/rcsb-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAEV,WAAW,EACX,QAAQ,EACR,WAAW,EACX,cAAc,EACd,SAAS,EAET,cAAc,EAId,YAAY,EACZ,qBAAqB,EACrB,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,iDAAiD;AACjD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEvE,+EAA+E;AAC/E,MAAM,WAAW,SAAS;IACxB,wBAAwB;IACxB,WAAW,EAAE,OAAO,GAAG,WAAW,GAAG,gBAAgB,CAAC;IACtD,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AA6BD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAMnF;IAID,gFAAgF;IAC1E,MAAM,CACV,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,OAAO,EACZ,MAAM,CAAC,EAAE,SAAS,EAAE,GACnB,OAAO,CAAC,YAAY,CAAC,CAmBvB;IAED,uEAAuE;IACjE,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QACJ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;KAC7B,EACD,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,YAAY,CAAC,CAqBvB;IAED;;;;;;OAMG;IACG,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAA;KAAE,EACrE,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,YAAY,CAAC,CAOvB;IAED;;;;OAIG;IACG,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAO1E;IAED
|
|
1
|
+
{"version":3,"file":"rcsb-service.d.ts","sourceRoot":"","sources":["../../../src/services/rcsb/rcsb-service.ts"],"names":[],"mappings":"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"}
|