@cyanheads/interpro-mcp-server 0.1.2 → 0.2.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/AGENTS.md +39 -14
- package/CLAUDE.md +39 -14
- package/Dockerfile +9 -1
- package/README.md +92 -107
- package/changelog/0.1.x/0.1.3.md +24 -0
- package/changelog/0.2.x/0.2.0.md +31 -0
- package/dist/config/server-config.d.ts +13 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +19 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/interpro-find-proteins-by-domain.tool.d.ts +89 -2
- package/dist/mcp-server/tools/definitions/interpro-find-proteins-by-domain.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/interpro-find-proteins-by-domain.tool.js +80 -5
- package/dist/mcp-server/tools/definitions/interpro-find-proteins-by-domain.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/interpro-get-entry.tool.d.ts +59 -0
- package/dist/mcp-server/tools/definitions/interpro-get-entry.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/interpro-get-entry.tool.js +139 -5
- package/dist/mcp-server/tools/definitions/interpro-get-entry.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/interpro-get-protein-domains.tool.d.ts +21 -2
- package/dist/mcp-server/tools/definitions/interpro-get-protein-domains.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/interpro-get-protein-domains.tool.js +99 -23
- package/dist/mcp-server/tools/definitions/interpro-get-protein-domains.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/interpro-get-scan-result.tool.d.ts +133 -0
- package/dist/mcp-server/tools/definitions/interpro-get-scan-result.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-get-scan-result.tool.js +128 -0
- package/dist/mcp-server/tools/definitions/interpro-get-scan-result.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-get-structure-domains.tool.d.ts +171 -0
- package/dist/mcp-server/tools/definitions/interpro-get-structure-domains.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-get-structure-domains.tool.js +290 -0
- package/dist/mcp-server/tools/definitions/interpro-get-structure-domains.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-list-reference.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/interpro-list-reference.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/interpro-scan-sequence.tool.d.ts +168 -0
- package/dist/mcp-server/tools/definitions/interpro-scan-sequence.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-scan-sequence.tool.js +187 -0
- package/dist/mcp-server/tools/definitions/interpro-scan-sequence.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-search-entries.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/interpro-search-entries.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/interpro-search-entries.tool.js +11 -2
- package/dist/mcp-server/tools/definitions/interpro-search-entries.tool.js.map +1 -1
- package/dist/services/interpro/format.d.ts.map +1 -1
- package/dist/services/interpro/format.js +8 -17
- package/dist/services/interpro/format.js.map +1 -1
- package/dist/services/interpro/http-adapter.d.ts +11 -2
- package/dist/services/interpro/http-adapter.d.ts.map +1 -1
- package/dist/services/interpro/http-adapter.js +67 -9
- package/dist/services/interpro/http-adapter.js.map +1 -1
- package/dist/services/interpro/interpro-service.d.ts +1 -1
- package/dist/services/interpro/interpro-service.d.ts.map +1 -1
- package/dist/services/interpro/interpro-service.js +6 -24
- package/dist/services/interpro/interpro-service.js.map +1 -1
- package/dist/services/interpro/reference.d.ts.map +1 -1
- package/dist/services/interpro/reference.js +23 -2
- package/dist/services/interpro/reference.js.map +1 -1
- package/dist/services/interpro/schemas.d.ts +16 -0
- package/dist/services/interpro/schemas.d.ts.map +1 -1
- package/dist/services/interpro/schemas.js +13 -0
- package/dist/services/interpro/schemas.js.map +1 -1
- package/dist/services/interpro/structure-schemas.d.ts +116 -0
- package/dist/services/interpro/structure-schemas.d.ts.map +1 -0
- package/dist/services/interpro/structure-schemas.js +74 -0
- package/dist/services/interpro/structure-schemas.js.map +1 -0
- package/dist/services/sequence-scan/scan-output.d.ts +94 -0
- package/dist/services/sequence-scan/scan-output.d.ts.map +1 -0
- package/dist/services/sequence-scan/scan-output.js +174 -0
- package/dist/services/sequence-scan/scan-output.js.map +1 -0
- package/dist/services/sequence-scan/scan-schemas.d.ts +112 -0
- package/dist/services/sequence-scan/scan-schemas.d.ts.map +1 -0
- package/dist/services/sequence-scan/scan-schemas.js +97 -0
- package/dist/services/sequence-scan/scan-schemas.js.map +1 -0
- package/dist/services/sequence-scan/sequence-scan-service.d.ts +119 -0
- package/dist/services/sequence-scan/sequence-scan-service.d.ts.map +1 -0
- package/dist/services/sequence-scan/sequence-scan-service.js +453 -0
- package/dist/services/sequence-scan/sequence-scan-service.js.map +1 -0
- package/dist/services/sequence-scan/sequence.d.ts +32 -0
- package/dist/services/sequence-scan/sequence.d.ts.map +1 -0
- package/dist/services/sequence-scan/sequence.js +63 -0
- package/dist/services/sequence-scan/sequence.js.map +1 -0
- package/package.json +10 -7
- package/server.json +18 -4
- package/skills/interpro-guide/SKILL.md +72 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview PDB structure domain maps in budget-bounded segments of whole matches.
|
|
3
|
+
* @module mcp-server/tools/definitions/interpro-get-structure-domains.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
/** Map signatures onto one PDB entry's chains in budget-bounded segments of whole matches. */
|
|
8
|
+
export declare const interproGetStructureDomains: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
9
|
+
pdbId: z.ZodString;
|
|
10
|
+
chain: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
11
|
+
cursor: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
12
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
13
|
+
pdbId: z.ZodString;
|
|
14
|
+
chain: z.ZodOptional<z.ZodString>;
|
|
15
|
+
structure: z.ZodOptional<z.ZodObject<{
|
|
16
|
+
accession: z.ZodString;
|
|
17
|
+
source_database: z.ZodString;
|
|
18
|
+
chains: z.ZodArray<z.ZodString>;
|
|
19
|
+
}, z.core.$catchall<z.ZodJSONSchema>>>;
|
|
20
|
+
matches: z.ZodArray<z.ZodObject<{
|
|
21
|
+
metadata: z.ZodObject<{
|
|
22
|
+
accession: z.ZodString;
|
|
23
|
+
source_database: z.ZodString;
|
|
24
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
25
|
+
type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
26
|
+
integrated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
27
|
+
member_databases: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>>>;
|
|
28
|
+
go_terms: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
29
|
+
identifier: z.ZodString;
|
|
30
|
+
name: z.ZodString;
|
|
31
|
+
category: z.ZodObject<{
|
|
32
|
+
code: z.ZodString;
|
|
33
|
+
name: z.ZodString;
|
|
34
|
+
}, z.core.$catchall<z.ZodJSONSchema>>;
|
|
35
|
+
}, z.core.$catchall<z.ZodJSONSchema>>>>>;
|
|
36
|
+
}, z.core.$catchall<z.ZodJSONSchema>>;
|
|
37
|
+
chainRecordCount: z.ZodNumber;
|
|
38
|
+
chainRecordLimitReached: z.ZodBoolean;
|
|
39
|
+
}, z.core.$catchall<z.ZodJSONSchema>>>;
|
|
40
|
+
structures: z.ZodArray<z.ZodObject<{
|
|
41
|
+
entry: z.ZodString;
|
|
42
|
+
record: z.ZodObject<{
|
|
43
|
+
accession: z.ZodString;
|
|
44
|
+
chain: z.ZodString;
|
|
45
|
+
protein: z.ZodNullable<z.ZodString>;
|
|
46
|
+
entry_structure_locations: z.ZodArray<z.ZodObject<{
|
|
47
|
+
fragments: z.ZodArray<z.ZodObject<{
|
|
48
|
+
start: z.ZodNumber;
|
|
49
|
+
end: z.ZodNumber;
|
|
50
|
+
'dc-status': z.ZodOptional<z.ZodString>;
|
|
51
|
+
}, z.core.$catchall<z.ZodJSONSchema>>>;
|
|
52
|
+
representative: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
53
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
54
|
+
score: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
55
|
+
}, z.core.$catchall<z.ZodJSONSchema>>>;
|
|
56
|
+
entry_protein_locations: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
57
|
+
fragments: z.ZodArray<z.ZodObject<{
|
|
58
|
+
start: z.ZodNumber;
|
|
59
|
+
end: z.ZodNumber;
|
|
60
|
+
'dc-status': z.ZodOptional<z.ZodString>;
|
|
61
|
+
}, z.core.$catchall<z.ZodJSONSchema>>>;
|
|
62
|
+
representative: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
63
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
64
|
+
score: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
65
|
+
}, z.core.$catchall<z.ZodJSONSchema>>>>>;
|
|
66
|
+
structure_protein_locations: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
67
|
+
fragments: z.ZodArray<z.ZodObject<{
|
|
68
|
+
start: z.ZodNumber;
|
|
69
|
+
end: z.ZodNumber;
|
|
70
|
+
'dc-status': z.ZodOptional<z.ZodString>;
|
|
71
|
+
}, z.core.$catchall<z.ZodJSONSchema>>>;
|
|
72
|
+
representative: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
73
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
74
|
+
score: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
75
|
+
}, z.core.$catchall<z.ZodJSONSchema>>>>>;
|
|
76
|
+
}, z.core.$catchall<z.ZodJSONSchema>>;
|
|
77
|
+
}, z.core.$strip>>;
|
|
78
|
+
coverage: z.ZodObject<{
|
|
79
|
+
totalMatches: z.ZodNumber;
|
|
80
|
+
returnedMatches: z.ZodNumber;
|
|
81
|
+
complete: z.ZodBoolean;
|
|
82
|
+
hasMore: z.ZodBoolean;
|
|
83
|
+
nextCursor: z.ZodOptional<z.ZodString>;
|
|
84
|
+
}, z.core.$strip>;
|
|
85
|
+
url: z.ZodString;
|
|
86
|
+
sourceUrls: z.ZodArray<z.ZodString>;
|
|
87
|
+
}, z.core.$strip>, readonly [{
|
|
88
|
+
readonly reason: "structure_not_found";
|
|
89
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
90
|
+
readonly when: "InterPro has no current structure for the PDB ID: unassigned, obsolete, or not yet loaded.";
|
|
91
|
+
readonly retryable: false;
|
|
92
|
+
readonly recovery: "Check the PDB ID at rcsb.org; for a superseded entry retry interpro_get_structure_domains with its replacement ID.";
|
|
93
|
+
readonly thrownBy: "service";
|
|
94
|
+
}, {
|
|
95
|
+
readonly reason: "entry_withdrawn";
|
|
96
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
97
|
+
readonly when: "InterPro reports the structure or its match list withdrawn with HTTP 410.";
|
|
98
|
+
readonly retryable: false;
|
|
99
|
+
readonly recovery: "Check the PDB ID at rcsb.org, then retry interpro_get_structure_domains with the ID that replaced it.";
|
|
100
|
+
readonly thrownBy: "service";
|
|
101
|
+
}, {
|
|
102
|
+
readonly reason: "chain_not_found";
|
|
103
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
104
|
+
readonly when: "The chain is not one of the structure’s protein chains; IDs are case-sensitive and nucleic-acid chains are not listed.";
|
|
105
|
+
readonly retryable: false;
|
|
106
|
+
readonly recovery: "Retry interpro_get_structure_domains with a chain from availableChains, matching its case exactly, or omit chain.";
|
|
107
|
+
}, {
|
|
108
|
+
readonly reason: "retry_deadline_exceeded";
|
|
109
|
+
readonly code: JsonRpcErrorCode.Timeout;
|
|
110
|
+
readonly when: "The shared fifty-second budget expires across the structure metadata and match pages.";
|
|
111
|
+
readonly retryable: true;
|
|
112
|
+
readonly recovery: "Retry interpro_get_structure_domains after waiting; set chain to read a smaller map.";
|
|
113
|
+
readonly thrownBy: "service";
|
|
114
|
+
}, {
|
|
115
|
+
readonly reason: "invalid_cursor";
|
|
116
|
+
readonly code: JsonRpcErrorCode.ValidationError;
|
|
117
|
+
readonly when: "Cursor decoding or scope fails, the page it resumes inside changed, or upstream rejects continuation.";
|
|
118
|
+
readonly retryable: false;
|
|
119
|
+
readonly recovery: "Repeat the same tool without cursor to restart pagination, keeping the intended pdbId and chain.";
|
|
120
|
+
readonly thrownBy: "service";
|
|
121
|
+
}, {
|
|
122
|
+
readonly reason: "upstream_shape_invalid";
|
|
123
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
124
|
+
readonly when: "Upstream JSON, structure, or continuation is incompatible.";
|
|
125
|
+
readonly retryable: false;
|
|
126
|
+
readonly recovery: "Retry the same tool later; call interpro_list_reference with topic release to check upstream availability.";
|
|
127
|
+
readonly thrownBy: "service";
|
|
128
|
+
}, {
|
|
129
|
+
readonly reason: 'upstream_response_too_large';
|
|
130
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
131
|
+
readonly when: 'An upstream response exceeds 4 MiB.';
|
|
132
|
+
readonly retryable: false;
|
|
133
|
+
readonly recovery: 'Retry list tools with a smaller limit, or retrieve individual members with interpro_get_entry instead of a large clan.';
|
|
134
|
+
readonly thrownBy: 'service';
|
|
135
|
+
}, {
|
|
136
|
+
readonly reason: 'upstream_rejected';
|
|
137
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
138
|
+
readonly when: 'InterPro returns an unhandled redirect or client rejection.';
|
|
139
|
+
readonly retryable: false;
|
|
140
|
+
readonly recovery: 'Retry the same tool later; call interpro_list_reference with topic release to check upstream availability.';
|
|
141
|
+
readonly thrownBy: 'service';
|
|
142
|
+
}, {
|
|
143
|
+
readonly reason: 'upstream_unavailable';
|
|
144
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
145
|
+
readonly when: 'InterPro has a network or server failure; HTTP 501 is not retryable.';
|
|
146
|
+
readonly retryable: true;
|
|
147
|
+
readonly recovery: 'Retry the same tool later; call interpro_list_reference with topic release to check upstream availability.';
|
|
148
|
+
readonly thrownBy: 'service';
|
|
149
|
+
}, {
|
|
150
|
+
readonly reason: 'upstream_timeout';
|
|
151
|
+
readonly code: JsonRpcErrorCode.Timeout;
|
|
152
|
+
readonly when: 'InterPro returns HTTP 408/504 or an attempt exceeds its deadline.';
|
|
153
|
+
readonly retryable: true;
|
|
154
|
+
readonly recovery: 'Retry with a smaller limit where available, then repeat the same tool after waiting.';
|
|
155
|
+
readonly thrownBy: 'service';
|
|
156
|
+
}, {
|
|
157
|
+
readonly reason: 'upstream_rate_limited';
|
|
158
|
+
readonly code: JsonRpcErrorCode.RateLimited;
|
|
159
|
+
readonly when: 'InterPro returns HTTP 429.';
|
|
160
|
+
readonly retryable: true;
|
|
161
|
+
readonly recovery: 'Wait for retryAfter when supplied, then repeat the same tool with fewer concurrent calls.';
|
|
162
|
+
readonly thrownBy: 'service';
|
|
163
|
+
}], {
|
|
164
|
+
readonly notice: z.ZodOptional<z.ZodString>;
|
|
165
|
+
readonly totalCount: z.ZodOptional<z.ZodNumber>;
|
|
166
|
+
readonly truncated: z.ZodOptional<z.ZodBoolean>;
|
|
167
|
+
readonly shown: z.ZodOptional<z.ZodNumber>;
|
|
168
|
+
readonly cap: z.ZodOptional<z.ZodNumber>;
|
|
169
|
+
readonly effectiveQuery: z.ZodOptional<z.ZodString>;
|
|
170
|
+
}>;
|
|
171
|
+
//# sourceMappingURL=interpro-get-structure-domains.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpro-get-structure-domains.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/interpro-get-structure-domains.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAiFjE,8FAA8F;AAC9F,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4RtC,CAAC"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview PDB structure domain maps in budget-bounded segments of whole matches.
|
|
3
|
+
* @module mcp-server/tools/definitions/interpro-get-structure-domains.tool
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { BUDGET_LABEL, fitWithinBudget, jsonByteLength, RESPONSE_BYTE_BUDGET, } from '../../../services/interpro/budget.js';
|
|
8
|
+
import { continuation, decodePositionCursor, encodePositionCursor, } from '../../../services/interpro/cursors.js';
|
|
9
|
+
import { formatInterpro } from '../../../services/interpro/format.js';
|
|
10
|
+
import { getInterproService } from '../../../services/interpro/interpro-service.js';
|
|
11
|
+
import { detailSchema, EntrySummarySchema, isAccession, JsonValueSchema, listSchema, optionalString, } from '../../../services/interpro/schemas.js';
|
|
12
|
+
import { ChainSchema, isChain, PdbIdSchema, StructureMatchSchema, StructureMetadataSchema, StructureRecordSchema, } from '../../../services/interpro/structure-schemas.js';
|
|
13
|
+
import { UPSTREAM_ERRORS } from '../../../services/interpro/upstream-errors.js';
|
|
14
|
+
const OPERATION = 'interpro_get_structure_domains';
|
|
15
|
+
/** Uncached 200-row structure pages can outlast an attempt, so pages stay at InterPro's default. */
|
|
16
|
+
const PAGE_SIZE = 20;
|
|
17
|
+
const MAX_PAGES = 3;
|
|
18
|
+
/** InterPro nests at most this many chain records in one match, whatever the page size. */
|
|
19
|
+
const NESTED_CHAIN_LIMIT = 20;
|
|
20
|
+
/**
|
|
21
|
+
* Where a continuation resumes: `skip` records into the upstream page whose cursor is `page`
|
|
22
|
+
* (absent for the first page). `after` names the match before it, so a changed page is rejected.
|
|
23
|
+
*/
|
|
24
|
+
const PositionSchema = z
|
|
25
|
+
.object({
|
|
26
|
+
page: z.string().min(1).optional(),
|
|
27
|
+
skip: z.number().int().nonnegative(),
|
|
28
|
+
after: z.string().min(1).optional(),
|
|
29
|
+
})
|
|
30
|
+
.strict()
|
|
31
|
+
.refine((point) => point.skip > 0 === (point.after !== undefined) &&
|
|
32
|
+
(point.page !== undefined || point.skip > 0));
|
|
33
|
+
const CoverageSchema = z.object({
|
|
34
|
+
totalMatches: z
|
|
35
|
+
.number()
|
|
36
|
+
.int()
|
|
37
|
+
.nonnegative()
|
|
38
|
+
.describe('Upstream total match count for the structure, or for the chain when one is set.'),
|
|
39
|
+
returnedMatches: z
|
|
40
|
+
.number()
|
|
41
|
+
.int()
|
|
42
|
+
.nonnegative()
|
|
43
|
+
.describe("Whole matches in this segment; totalMatches is upstream's reported count, and a complete walk can return a different number."),
|
|
44
|
+
complete: z
|
|
45
|
+
.boolean()
|
|
46
|
+
.describe('True only when this call starts without a cursor and returns every match.'),
|
|
47
|
+
hasMore: z.boolean().describe('Whether another segment remains.'),
|
|
48
|
+
nextCursor: z
|
|
49
|
+
.string()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe('Opaque cursor resuming at the next whole match for the same pdbId and chain.'),
|
|
52
|
+
});
|
|
53
|
+
/** Map signatures onto one PDB entry's chains in budget-bounded segments of whole matches. */
|
|
54
|
+
export const interproGetStructureDomains = tool('interpro_get_structure_domains', {
|
|
55
|
+
title: 'Map structure domains',
|
|
56
|
+
description: "Retrieve InterPro and member-signature matches on one PDB entry's protein chains. Each chain record keeps match locations in chain numbering (1-based start/end beside author auth_start/auth_end, which can be null), in UniProt numbering, and the chain-to-UniProt residue map, with discontinuous fragments preserved; the UniProt protein is null for unmapped chains. InterPro nests at most 20 chain records per match; set chain to read one chain completely. Budgeted segments hold whole matches; the first carries structure metadata listing the protein chains. Continue coverage.nextCursor until hasMore is false.",
|
|
57
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
58
|
+
auth: ['tool:interpro_get_structure_domains:read'],
|
|
59
|
+
input: z.object({
|
|
60
|
+
pdbId: PdbIdSchema,
|
|
61
|
+
chain: optionalString(ChainSchema).describe('Protein chain to map, case-sensitive and one of structure.chains, such as A; omit for every chain.'),
|
|
62
|
+
cursor: optionalString(z.string().trim().max(4096)).describe('Opaque coverage.nextCursor with unchanged pdbId and chain.'),
|
|
63
|
+
}),
|
|
64
|
+
inputAliases: { accession: 'pdbId' },
|
|
65
|
+
output: z.object({
|
|
66
|
+
pdbId: z.string().describe('Lowercase PDB ID.'),
|
|
67
|
+
chain: z.string().optional().describe('Chain the map is restricted to, when one was set.'),
|
|
68
|
+
structure: StructureMetadataSchema.optional().describe('Complete upstream structure metadata on the first segment, the call without cursor; continuation segments omit it.'),
|
|
69
|
+
matches: z
|
|
70
|
+
.array(z
|
|
71
|
+
.object({
|
|
72
|
+
metadata: EntrySummarySchema.describe('Entry metadata.'),
|
|
73
|
+
chainRecordCount: z
|
|
74
|
+
.number()
|
|
75
|
+
.int()
|
|
76
|
+
.nonnegative()
|
|
77
|
+
.describe('Chain records InterPro nested in this match, all returned in structures.'),
|
|
78
|
+
chainRecordLimitReached: z
|
|
79
|
+
.boolean()
|
|
80
|
+
.describe('True when the match carries InterPro’s 20-record nesting limit, so it may match chains not returned; set chain to read one chain.'),
|
|
81
|
+
})
|
|
82
|
+
.catchall(JsonValueSchema)
|
|
83
|
+
.describe('Whole entry match; its chain records are in structures under its accession.'))
|
|
84
|
+
.describe('Whole matches in this segment, in upstream order; never split across segments.'),
|
|
85
|
+
structures: z
|
|
86
|
+
.array(z
|
|
87
|
+
.object({
|
|
88
|
+
entry: z.string().describe('Accession of the match in matches this record belongs to.'),
|
|
89
|
+
record: StructureRecordSchema,
|
|
90
|
+
})
|
|
91
|
+
.describe('One upstream chain record of a match, unchanged.'))
|
|
92
|
+
.describe('Every chain record of this segment’s matches, grouped by match in matches order.'),
|
|
93
|
+
coverage: CoverageSchema.describe('Where this segment sits in the structure map.'),
|
|
94
|
+
url: z.string().describe('Canonical structure website URL.'),
|
|
95
|
+
sourceUrls: z.array(z.string()).describe('Official API URLs this call read.'),
|
|
96
|
+
}),
|
|
97
|
+
enrichment: {
|
|
98
|
+
notice: z.string().optional().describe('Interpretation, continuation, or recovery guidance.'),
|
|
99
|
+
totalCount: z.number().optional().describe('Upstream total matching records.'),
|
|
100
|
+
truncated: z.boolean().optional().describe('More segments remain.'),
|
|
101
|
+
shown: z.number().int().optional().describe('Whole matches in this segment.'),
|
|
102
|
+
cap: z
|
|
103
|
+
.number()
|
|
104
|
+
.int()
|
|
105
|
+
.optional()
|
|
106
|
+
.describe('Most matches one call reads; a segment can stop sooner at the response byte budget.'),
|
|
107
|
+
effectiveQuery: z.string().optional().describe('Applied pdbId and chain as JSON.'),
|
|
108
|
+
},
|
|
109
|
+
errors: [
|
|
110
|
+
{
|
|
111
|
+
reason: 'structure_not_found',
|
|
112
|
+
code: JsonRpcErrorCode.NotFound,
|
|
113
|
+
when: 'InterPro has no current structure for the PDB ID: unassigned, obsolete, or not yet loaded.',
|
|
114
|
+
retryable: false,
|
|
115
|
+
recovery: 'Check the PDB ID at rcsb.org; for a superseded entry retry interpro_get_structure_domains with its replacement ID.',
|
|
116
|
+
thrownBy: 'service',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
reason: 'entry_withdrawn',
|
|
120
|
+
code: JsonRpcErrorCode.NotFound,
|
|
121
|
+
when: 'InterPro reports the structure or its match list withdrawn with HTTP 410.',
|
|
122
|
+
retryable: false,
|
|
123
|
+
recovery: 'Check the PDB ID at rcsb.org, then retry interpro_get_structure_domains with the ID that replaced it.',
|
|
124
|
+
thrownBy: 'service',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
reason: 'chain_not_found',
|
|
128
|
+
code: JsonRpcErrorCode.NotFound,
|
|
129
|
+
when: 'The chain is not one of the structure’s protein chains; IDs are case-sensitive and nucleic-acid chains are not listed.',
|
|
130
|
+
retryable: false,
|
|
131
|
+
recovery: 'Retry interpro_get_structure_domains with a chain from availableChains, matching its case exactly, or omit chain.',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
reason: 'retry_deadline_exceeded',
|
|
135
|
+
code: JsonRpcErrorCode.Timeout,
|
|
136
|
+
when: 'The shared fifty-second budget expires across the structure metadata and match pages.',
|
|
137
|
+
retryable: true,
|
|
138
|
+
recovery: 'Retry interpro_get_structure_domains after waiting; set chain to read a smaller map.',
|
|
139
|
+
thrownBy: 'service',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
reason: 'invalid_cursor',
|
|
143
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
144
|
+
when: 'Cursor decoding or scope fails, the page it resumes inside changed, or upstream rejects continuation.',
|
|
145
|
+
retryable: false,
|
|
146
|
+
recovery: 'Repeat the same tool without cursor to restart pagination, keeping the intended pdbId and chain.',
|
|
147
|
+
thrownBy: 'service',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
reason: 'upstream_shape_invalid',
|
|
151
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
152
|
+
when: 'Upstream JSON, structure, or continuation is incompatible.',
|
|
153
|
+
retryable: false,
|
|
154
|
+
recovery: 'Retry the same tool later; call interpro_list_reference with topic release to check upstream availability.',
|
|
155
|
+
thrownBy: 'service',
|
|
156
|
+
},
|
|
157
|
+
...UPSTREAM_ERRORS,
|
|
158
|
+
],
|
|
159
|
+
async handler(input, ctx) {
|
|
160
|
+
const pdbId = input.pdbId.toLowerCase();
|
|
161
|
+
const { chain } = input;
|
|
162
|
+
const scope = { pdbId, ...(chain !== undefined ? { chain } : {}) };
|
|
163
|
+
const start = decodePositionCursor(input.cursor, OPERATION, scope, PositionSchema);
|
|
164
|
+
const stale = () => ctx.fail('invalid_cursor', 'Cursor no longer matches the InterPro page it resumes inside.');
|
|
165
|
+
const service = getInterproService();
|
|
166
|
+
const call = service.begin(ctx);
|
|
167
|
+
const missing = {
|
|
168
|
+
reason: 'structure_not_found',
|
|
169
|
+
accession: pdbId,
|
|
170
|
+
sourceDatabase: 'pdb',
|
|
171
|
+
};
|
|
172
|
+
const sourceUrls = [];
|
|
173
|
+
let structure;
|
|
174
|
+
if (!start) {
|
|
175
|
+
// A list 204 means no matches, so only the detail tells an unknown ID or chain apart.
|
|
176
|
+
const detail = await service.request(call, ['structure', 'pdb', pdbId], {}, detailSchema(StructureMetadataSchema), { missing });
|
|
177
|
+
if (!detail.data)
|
|
178
|
+
throw ctx.fail('upstream_shape_invalid', 'Structure metadata response is missing.');
|
|
179
|
+
structure = detail.data.metadata;
|
|
180
|
+
sourceUrls.push(detail.sourceUrl);
|
|
181
|
+
if (chain !== undefined && !structure.chains.includes(chain)) {
|
|
182
|
+
const named = structure.chains.filter(isChain);
|
|
183
|
+
throw ctx.fail('chain_not_found', named.length
|
|
184
|
+
? `Chain ${chain} is not a protein chain of ${pdbId}; chain IDs are case-sensitive. Available chains: ${named.join(', ')}.`
|
|
185
|
+
: `${pdbId} has no protein chains, so InterPro maps no domains onto chain ${chain}.`, { pdbId, chain, availableChains: structure.chains });
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const segments = ['entry', 'all', 'structure', 'pdb', pdbId, ...(chain ? [chain] : [])];
|
|
189
|
+
const items = [];
|
|
190
|
+
let totalMatches = 0;
|
|
191
|
+
/** Where the walk resumes after the last gathered match; undefined once the walk ends. */
|
|
192
|
+
let end;
|
|
193
|
+
const segment = (count) => {
|
|
194
|
+
const resume = items[count]?.at ?? end;
|
|
195
|
+
const matches = items.slice(0, count).map((item) => item.match);
|
|
196
|
+
return {
|
|
197
|
+
pdbId,
|
|
198
|
+
...(chain !== undefined ? { chain } : {}),
|
|
199
|
+
...(structure ? { structure } : {}),
|
|
200
|
+
matches: matches.map(({ metadata, structures, ...rest }) => ({
|
|
201
|
+
...rest,
|
|
202
|
+
metadata,
|
|
203
|
+
chainRecordCount: structures.length,
|
|
204
|
+
chainRecordLimitReached: structures.length >= NESTED_CHAIN_LIMIT,
|
|
205
|
+
})),
|
|
206
|
+
structures: matches.flatMap(({ metadata, structures }) => structures.map((record) => ({ entry: metadata.accession, record }))),
|
|
207
|
+
coverage: {
|
|
208
|
+
totalMatches,
|
|
209
|
+
returnedMatches: matches.length,
|
|
210
|
+
complete: !start && resume === undefined,
|
|
211
|
+
hasMore: resume !== undefined,
|
|
212
|
+
...(resume ? { nextCursor: encodePositionCursor(OPERATION, scope, resume) } : {}),
|
|
213
|
+
},
|
|
214
|
+
url: `https://www.ebi.ac.uk/interpro/structure/PDB/${pdbId}/`,
|
|
215
|
+
sourceUrls,
|
|
216
|
+
};
|
|
217
|
+
};
|
|
218
|
+
let page = start?.page;
|
|
219
|
+
let skip = start?.skip ?? 0;
|
|
220
|
+
const seen = new Set(page ? [page] : []);
|
|
221
|
+
for (let read = 1;; read++) {
|
|
222
|
+
const response = await service.request(call, segments, { page_size: PAGE_SIZE, cursor: page }, listSchema(StructureMatchSchema), page ? { continuation: true } : { missing: { ...missing, list: true } });
|
|
223
|
+
sourceUrls.push(response.sourceUrl);
|
|
224
|
+
// A continuation page cannot be empty: the structure or its matches changed underneath it.
|
|
225
|
+
if (page && !response.data)
|
|
226
|
+
throw stale();
|
|
227
|
+
if (read === 1)
|
|
228
|
+
totalMatches = response.data?.count ?? 0;
|
|
229
|
+
const records = response.data?.results ?? [];
|
|
230
|
+
if (skip > 0 &&
|
|
231
|
+
(skip >= records.length || records[skip - 1]?.metadata.accession !== start?.after))
|
|
232
|
+
throw stale();
|
|
233
|
+
for (let index = skip; index < records.length; index++)
|
|
234
|
+
items.push({
|
|
235
|
+
match: records[index],
|
|
236
|
+
at: {
|
|
237
|
+
...(page ? { page } : {}),
|
|
238
|
+
skip: index,
|
|
239
|
+
...(index ? { after: records[index - 1].metadata.accession } : {}),
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
const next = continuation(response.data?.next ?? null, seen);
|
|
243
|
+
end = next ? { page: next, skip: 0 } : undefined;
|
|
244
|
+
if (!next)
|
|
245
|
+
break;
|
|
246
|
+
seen.add(next);
|
|
247
|
+
page = next;
|
|
248
|
+
skip = 0;
|
|
249
|
+
if (read === MAX_PAGES || jsonByteLength(segment(items.length)) > RESPONSE_BYTE_BUDGET)
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
const { count, output, oversized } = fitWithinBudget(items.length, segment);
|
|
253
|
+
const { coverage } = output;
|
|
254
|
+
const notices = [];
|
|
255
|
+
if (oversized) {
|
|
256
|
+
const id = items[0]?.match.metadata.accession;
|
|
257
|
+
notices.push(`${isAccession(id) ? `Match ${id}` : 'This match'} cannot be split, so this segment holds it alone and exceeds the ${BUDGET_LABEL}.`);
|
|
258
|
+
}
|
|
259
|
+
const limited = output.matches.filter((match) => match.chainRecordLimitReached);
|
|
260
|
+
if (limited.length) {
|
|
261
|
+
const named = limited.map((match) => match.metadata.accession).filter(isAccession);
|
|
262
|
+
notices.push(`InterPro nests at most ${NESTED_CHAIN_LIMIT} chain records in one match, and ${limited.length === 1 ? 'one match carries' : `${limited.length} matches carry`} that many${named.length ? ` (${named.join(', ')})` : ''}, so ${limited.length === 1 ? 'it' : 'they'} may match chains not returned. Repeat interpro_get_structure_domains with chain set to one of structure.chains to read that chain's matches completely.`);
|
|
263
|
+
}
|
|
264
|
+
if (coverage.nextCursor) {
|
|
265
|
+
const reason = items[count]
|
|
266
|
+
? ` and stopped at the ${BUDGET_LABEL} before the next whole match`
|
|
267
|
+
: ` and reached the ${MAX_PAGES}-page read limit`;
|
|
268
|
+
notices.push(`This segment covers part of the structure map${oversized ? '' : reason}. Continue with interpro_get_structure_domains ${JSON.stringify({ ...scope, cursor: coverage.nextCursor })} before concluding that a chain has no annotation.`);
|
|
269
|
+
}
|
|
270
|
+
else if (start)
|
|
271
|
+
notices.push('This is the final resumed segment. Only the combined segments cover the traversal; upstream pagination is not a snapshot.');
|
|
272
|
+
else if (!coverage.returnedMatches)
|
|
273
|
+
notices.push(structure && !structure.chains.length
|
|
274
|
+
? `${pdbId} has no protein chains, so InterPro maps no domains onto it.`
|
|
275
|
+
: chain !== undefined
|
|
276
|
+
? `InterPro reports no match on chain ${chain} of ${pdbId}.`
|
|
277
|
+
: `InterPro reports no match on the protein chains of ${pdbId}.`);
|
|
278
|
+
if (start)
|
|
279
|
+
notices.push('Continuation segments omit the structure metadata the first segment returned.');
|
|
280
|
+
ctx.enrich.total(totalMatches);
|
|
281
|
+
ctx.enrich.echo(JSON.stringify(scope));
|
|
282
|
+
if (coverage.nextCursor)
|
|
283
|
+
ctx.enrich.truncated({ shown: coverage.returnedMatches, cap: MAX_PAGES * PAGE_SIZE });
|
|
284
|
+
if (notices.length)
|
|
285
|
+
ctx.enrich.notice(notices.join(' '));
|
|
286
|
+
return output;
|
|
287
|
+
},
|
|
288
|
+
format: formatInterpro,
|
|
289
|
+
});
|
|
290
|
+
//# sourceMappingURL=interpro-get-structure-domains.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpro-get-structure-domains.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/interpro-get-structure-domains.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,eAAe,EACf,cAAc,EACd,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,UAAU,EACV,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,WAAW,EACX,OAAO,EACP,WAAW,EACX,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAEzE,MAAM,SAAS,GAAG,gCAAgC,CAAC;AACnD,oGAAoG;AACpG,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,2FAA2F;AAC3F,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC;KACrB,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACpC,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;IAC9C,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAC/C,CAAC;AAIJ,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,CAAC,iFAAiF,CAAC;IAC9F,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,CACP,8HAA8H,CAC/H;IACH,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,CAAC,2EAA2E,CAAC;IACxF,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACjE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8EAA8E,CAAC;CAC5F,CAAC,CAAC;AAEH,8FAA8F;AAC9F,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC,gCAAgC,EAAE;IAChF,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EACT,omBAAomB;IACtmB,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAC9E,IAAI,EAAE,CAAC,0CAA0C,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,QAAQ,CACzC,oGAAoG,CACrG;QACD,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAC1D,4DAA4D,CAC7D;KACF,CAAC;IACF,YAAY,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC/C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC1F,SAAS,EAAE,uBAAuB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACpD,oHAAoH,CACrH;QACD,OAAO,EAAE,CAAC;aACP,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACxD,gBAAgB,EAAE,CAAC;iBAChB,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,WAAW,EAAE;iBACb,QAAQ,CAAC,0EAA0E,CAAC;YACvF,uBAAuB,EAAE,CAAC;iBACvB,OAAO,EAAE;iBACT,QAAQ,CACP,mIAAmI,CACpI;SACJ,CAAC;aACD,QAAQ,CAAC,eAAe,CAAC;aACzB,QAAQ,CAAC,6EAA6E,CAAC,CAC3F;aACA,QAAQ,CAAC,gFAAgF,CAAC;QAC7F,UAAU,EAAE,CAAC;aACV,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;YACvF,MAAM,EAAE,qBAAqB;SAC9B,CAAC;aACD,QAAQ,CAAC,kDAAkD,CAAC,CAChE;aACA,QAAQ,CAAC,kFAAkF,CAAC;QAC/F,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAClF,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC5D,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KAC9E,CAAC;IACF,UAAU,EAAE;QACV,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QAC7F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC9E,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC7E,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,QAAQ,CACP,qFAAqF,CACtF;QACH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KACnF;IACD,MAAM,EAAE;QACN;YACE,MAAM,EAAE,qBAAqB;YAC7B,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,4FAA4F;YAClG,SAAS,EAAE,KAAK;YAChB,QAAQ,EACN,oHAAoH;YACtH,QAAQ,EAAE,SAAS;SACpB;QACD;YACE,MAAM,EAAE,iBAAiB;YACzB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,2EAA2E;YACjF,SAAS,EAAE,KAAK;YAChB,QAAQ,EACN,uGAAuG;YACzG,QAAQ,EAAE,SAAS;SACpB;QACD;YACE,MAAM,EAAE,iBAAiB;YACzB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,wHAAwH;YAC9H,SAAS,EAAE,KAAK;YAChB,QAAQ,EACN,mHAAmH;SACtH;QACD;YACE,MAAM,EAAE,yBAAyB;YACjC,IAAI,EAAE,gBAAgB,CAAC,OAAO;YAC9B,IAAI,EAAE,uFAAuF;YAC7F,SAAS,EAAE,IAAI;YACf,QAAQ,EACN,sFAAsF;YACxF,QAAQ,EAAE,SAAS;SACpB;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,uGAAuG;YAC7G,SAAS,EAAE,KAAK;YAChB,QAAQ,EACN,kGAAkG;YACpG,QAAQ,EAAE,SAAS;SACpB;QACD;YACE,MAAM,EAAE,wBAAwB;YAChC,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,4DAA4D;YAClE,SAAS,EAAE,KAAK;YAChB,QAAQ,EACN,4GAA4G;YAC9G,QAAQ,EAAE,SAAS;SACpB;QACD,GAAG,eAAe;KACnB;IACD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,GAAG,EAAE,CACjB,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,+DAA+D,CAAC,CAAC;QAC9F,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,qBAAqB;YAC7B,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,KAAK;SACb,CAAC;QACX,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,SAA8D,CAAC;QACnE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,sFAAsF;YACtF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAClC,IAAI,EACJ,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,EAC3B,EAAE,EACF,YAAY,CAAC,uBAAuB,CAAC,EACrC,EAAE,OAAO,EAAE,CACZ,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI;gBACd,MAAM,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,yCAAyC,CAAC,CAAC;YACtF,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/C,MAAM,GAAG,CAAC,IAAI,CACZ,iBAAiB,EACjB,KAAK,CAAC,MAAM;oBACV,CAAC,CAAC,SAAS,KAAK,8BAA8B,KAAK,qDAAqD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBAC3H,CAAC,CAAC,GAAG,KAAK,kEAAkE,KAAK,GAAG,EACtF,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,CAAC,MAAM,EAAE,CACpD,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAExF,MAAM,KAAK,GAAqC,EAAE,CAAC;QACnD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,0FAA0F;QAC1F,IAAI,GAAyB,CAAC;QAC9B,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,OAAO;gBACL,KAAK;gBACL,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,GAAG,IAAI;oBACP,QAAQ;oBACR,gBAAgB,EAAE,UAAU,CAAC,MAAM;oBACnC,uBAAuB,EAAE,UAAU,CAAC,MAAM,IAAI,kBAAkB;iBACjE,CAAC,CAAC;gBACH,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CACvD,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CACpE;gBACD,QAAQ,EAAE;oBACR,YAAY;oBACZ,eAAe,EAAE,OAAO,CAAC,MAAM;oBAC/B,QAAQ,EAAE,CAAC,KAAK,IAAI,MAAM,KAAK,SAAS;oBACxC,OAAO,EAAE,MAAM,KAAK,SAAS;oBAC7B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClF;gBACD,GAAG,EAAE,gDAAgD,KAAK,GAAG;gBAC7D,UAAU;aACX,CAAC;QACJ,CAAC,CAAC;QAEF,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC;QACvB,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,KAAK,IAAI,IAAI,GAAG,CAAC,GAAI,IAAI,EAAE,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CACpC,IAAI,EACJ,QAAQ,EACR,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EACtC,UAAU,CAAC,oBAAoB,CAAC,EAChC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CACxE,CAAC;YACF,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpC,2FAA2F;YAC3F,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAAE,MAAM,KAAK,EAAE,CAAC;YAC1C,IAAI,IAAI,KAAK,CAAC;gBAAE,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;YAC7C,IACE,IAAI,GAAG,CAAC;gBACR,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,KAAK,KAAK,EAAE,KAAK,CAAC;gBAElF,MAAM,KAAK,EAAE,CAAC;YAChB,KAAK,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;gBACpD,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,OAAO,CAAC,KAAK,CAAU;oBAC9B,EAAE,EAAE;wBACF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzB,IAAI,EAAE,KAAK;wBACX,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC9E;iBACF,CAAC,CAAC;YACL,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7D,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACjD,IAAI,CAAC,IAAI;gBAAE,MAAM;YACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,GAAG,IAAI,CAAC;YACZ,IAAI,GAAG,CAAC,CAAC;YACT,IAAI,IAAI,KAAK,SAAS,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,oBAAoB;gBAAE,MAAM;QAChG,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC9C,OAAO,CAAC,IAAI,CACV,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,oEAAoE,YAAY,GAAG,CACrI,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAChF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CACV,0BAA0B,kBAAkB,oCAAoC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,gBAAgB,aAAa,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,0JAA0J,CAC9Z,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;gBACzB,CAAC,CAAC,uBAAuB,YAAY,8BAA8B;gBACnE,CAAC,CAAC,oBAAoB,SAAS,kBAAkB,CAAC;YACpD,OAAO,CAAC,IAAI,CACV,gDAAgD,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,kDAAkD,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,oDAAoD,CACvO,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK;YACd,OAAO,CAAC,IAAI,CACV,2HAA2H,CAC5H,CAAC;aACC,IAAI,CAAC,QAAQ,CAAC,eAAe;YAChC,OAAO,CAAC,IAAI,CACV,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;gBACnC,CAAC,CAAC,GAAG,KAAK,8DAA8D;gBACxE,CAAC,CAAC,KAAK,KAAK,SAAS;oBACnB,CAAC,CAAC,sCAAsC,KAAK,OAAO,KAAK,GAAG;oBAC5D,CAAC,CAAC,sDAAsD,KAAK,GAAG,CACrE,CAAC;QACJ,IAAI,KAAK;YACP,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;QAChG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,IAAI,QAAQ,CAAC,UAAU;YACrB,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC;QACxF,IAAI,OAAO,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,EAAE,cAAc;CACvB,CAAC,CAAC"}
|
|
@@ -11,7 +11,7 @@ import { JsonObjectSchema } from '../../../services/interpro/schemas.js';
|
|
|
11
11
|
/** Decode supported vocabulary or retrieve coherent current release counts. */
|
|
12
12
|
export const interproListReference = tool('interpro_list_reference', {
|
|
13
13
|
title: 'InterPro reference vocabulary',
|
|
14
|
-
description: 'List supported InterPro database slugs, entry types, accession
|
|
14
|
+
description: 'List supported InterPro database slugs, entry types, accession and PDB identifier patterns, common taxon IDs, or current release information.',
|
|
15
15
|
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
16
16
|
auth: ['tool:interpro_list_reference:read'],
|
|
17
17
|
input: z.object({ topic: ReferenceTopicSchema }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpro-list-reference.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/interpro-list-reference.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,EAAE;IACnE,KAAK,EAAE,+BAA+B;IACtC,WAAW,EACT
|
|
1
|
+
{"version":3,"file":"interpro-list-reference.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/interpro-list-reference.tool.ts"],"names":[],"mappings":"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"}
|