@cyanheads/interpro-mcp-server 0.0.0-stage → 0.1.2
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 +376 -0
- package/CLAUDE.md +376 -0
- package/Dockerfile +186 -0
- package/LICENSE +201 -0
- package/README.md +289 -2
- package/changelog/0.1.x/0.1.1.md +20 -0
- package/changelog/0.1.x/0.1.2.md +27 -0
- package/changelog/template.md +151 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-find-proteins-by-domain.tool.d.ts +180 -0
- package/dist/mcp-server/tools/definitions/interpro-find-proteins-by-domain.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-find-proteins-by-domain.tool.js +212 -0
- package/dist/mcp-server/tools/definitions/interpro-find-proteins-by-domain.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-get-clan.tool.d.ts +160 -0
- package/dist/mcp-server/tools/definitions/interpro-get-clan.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-get-clan.tool.js +259 -0
- package/dist/mcp-server/tools/definitions/interpro-get-clan.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-get-entry.tool.d.ts +131 -0
- package/dist/mcp-server/tools/definitions/interpro-get-entry.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-get-entry.tool.js +105 -0
- package/dist/mcp-server/tools/definitions/interpro-get-entry.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-get-protein-domains.tool.d.ts +172 -0
- package/dist/mcp-server/tools/definitions/interpro-get-protein-domains.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-get-protein-domains.tool.js +374 -0
- package/dist/mcp-server/tools/definitions/interpro-get-protein-domains.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-list-reference.tool.d.ts +89 -0
- package/dist/mcp-server/tools/definitions/interpro-list-reference.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-list-reference.tool.js +99 -0
- package/dist/mcp-server/tools/definitions/interpro-list-reference.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-search-entries.tool.d.ts +190 -0
- package/dist/mcp-server/tools/definitions/interpro-search-entries.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/interpro-search-entries.tool.js +165 -0
- package/dist/mcp-server/tools/definitions/interpro-search-entries.tool.js.map +1 -0
- package/dist/services/interpro/budget.d.ts +26 -0
- package/dist/services/interpro/budget.d.ts.map +1 -0
- package/dist/services/interpro/budget.js +41 -0
- package/dist/services/interpro/budget.js.map +1 -0
- package/dist/services/interpro/cursors.d.ts +25 -0
- package/dist/services/interpro/cursors.d.ts.map +1 -0
- package/dist/services/interpro/cursors.js +99 -0
- package/dist/services/interpro/cursors.js.map +1 -0
- package/dist/services/interpro/description-text.d.ts +3 -0
- package/dist/services/interpro/description-text.d.ts.map +1 -0
- package/dist/services/interpro/description-text.js +179 -0
- package/dist/services/interpro/description-text.js.map +1 -0
- package/dist/services/interpro/format.d.ts +17 -0
- package/dist/services/interpro/format.d.ts.map +1 -0
- package/dist/services/interpro/format.js +130 -0
- package/dist/services/interpro/format.js.map +1 -0
- package/dist/services/interpro/http-adapter.d.ts +11 -0
- package/dist/services/interpro/http-adapter.d.ts.map +1 -0
- package/dist/services/interpro/http-adapter.js +134 -0
- package/dist/services/interpro/http-adapter.js.map +1 -0
- package/dist/services/interpro/interpro-service.d.ts +57 -0
- package/dist/services/interpro/interpro-service.d.ts.map +1 -0
- package/dist/services/interpro/interpro-service.js +284 -0
- package/dist/services/interpro/interpro-service.js.map +1 -0
- package/dist/services/interpro/reference.d.ts +31 -0
- package/dist/services/interpro/reference.d.ts.map +1 -0
- package/dist/services/interpro/reference.js +122 -0
- package/dist/services/interpro/reference.js.map +1 -0
- package/dist/services/interpro/relationships.d.ts +38 -0
- package/dist/services/interpro/relationships.d.ts.map +1 -0
- package/dist/services/interpro/relationships.js +70 -0
- package/dist/services/interpro/relationships.js.map +1 -0
- package/dist/services/interpro/routing.d.ts +24 -0
- package/dist/services/interpro/routing.d.ts.map +1 -0
- package/dist/services/interpro/routing.js +106 -0
- package/dist/services/interpro/routing.js.map +1 -0
- package/dist/services/interpro/schemas.d.ts +192 -0
- package/dist/services/interpro/schemas.d.ts.map +1 -0
- package/dist/services/interpro/schemas.js +226 -0
- package/dist/services/interpro/schemas.js.map +1 -0
- package/dist/services/interpro/upstream-errors.d.ts +43 -0
- package/dist/services/interpro/upstream-errors.d.ts.map +1 -0
- package/dist/services/interpro/upstream-errors.js +49 -0
- package/dist/services/interpro/upstream-errors.js.map +1 -0
- package/package.json +104 -4
- package/server.json +91 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Lossless InterPro wire schemas and shared input vocabulary.
|
|
3
|
+
* @module services/interpro/schemas
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
/** JSON values retained verbatim from upstream records. */
|
|
7
|
+
export const JsonValueSchema = z.json().describe('An unmodified JSON value.');
|
|
8
|
+
/** An upstream object with every additional JSON field retained. */
|
|
9
|
+
export const JsonObjectSchema = z
|
|
10
|
+
.record(z.string(), JsonValueSchema)
|
|
11
|
+
.describe('Complete upstream JSON object.');
|
|
12
|
+
/** Supported entry API routes, including separate PROSITE pattern and profile routes. */
|
|
13
|
+
export const SourceDatabaseSchema = z
|
|
14
|
+
.enum([
|
|
15
|
+
'interpro',
|
|
16
|
+
'pfam',
|
|
17
|
+
'prosite',
|
|
18
|
+
'profile',
|
|
19
|
+
'smart',
|
|
20
|
+
'cdd',
|
|
21
|
+
'panther',
|
|
22
|
+
'cathgene3d',
|
|
23
|
+
'ssf',
|
|
24
|
+
'ncbifam',
|
|
25
|
+
'hamap',
|
|
26
|
+
'prints',
|
|
27
|
+
'pirsf',
|
|
28
|
+
'sfld',
|
|
29
|
+
'antifam',
|
|
30
|
+
])
|
|
31
|
+
.describe('InterPro entry API database slug.');
|
|
32
|
+
/** Entry annotation categories. */
|
|
33
|
+
export const EntryTypeSchema = z
|
|
34
|
+
.enum([
|
|
35
|
+
'domain',
|
|
36
|
+
'family',
|
|
37
|
+
'repeat',
|
|
38
|
+
'homologous_superfamily',
|
|
39
|
+
'active_site',
|
|
40
|
+
'binding_site',
|
|
41
|
+
'conserved_site',
|
|
42
|
+
'ptm',
|
|
43
|
+
'region',
|
|
44
|
+
'coiled_coil',
|
|
45
|
+
'disordered',
|
|
46
|
+
])
|
|
47
|
+
.describe('Entry annotation type.');
|
|
48
|
+
/** A blank or whitespace-only string from a form client reads as omitted. */
|
|
49
|
+
const omitBlank = (value) => typeof value === 'string' && value.trim() === '' ? undefined : value;
|
|
50
|
+
/** Form clients may submit blank optional strings. */
|
|
51
|
+
export const optionalString = (schema) => z.preprocess(omitBlank, schema.optional());
|
|
52
|
+
/** A blank string takes the `.default()` that `schema` declares, as an omitted one does. */
|
|
53
|
+
export const defaultedString = (schema) => z.preprocess(omitBlank, schema);
|
|
54
|
+
/** Safe identifiers are encoded as a single path segment after validation. */
|
|
55
|
+
export const AccessionSchema = z
|
|
56
|
+
.string()
|
|
57
|
+
.trim()
|
|
58
|
+
.min(1)
|
|
59
|
+
.max(100)
|
|
60
|
+
.regex(/^[A-Za-z0-9_.:-]+$/)
|
|
61
|
+
.refine((value) => value !== '.' && value !== '..', 'Dot segments are not accessions.')
|
|
62
|
+
.describe('Identifier encoded as one path segment; no URL syntax.');
|
|
63
|
+
/**
|
|
64
|
+
* Whether an upstream value is exactly an accession, the only form server-written text may name
|
|
65
|
+
* it in. The schema trims, so a value padded with blank lines must not pass as one.
|
|
66
|
+
*/
|
|
67
|
+
export const isAccession = (value) => typeof value === 'string' && AccessionSchema.safeParse(value).data === value;
|
|
68
|
+
/** Canonical UniProt accessions exclude isoform suffixes. */
|
|
69
|
+
export const ProteinAccessionSchema = z
|
|
70
|
+
.string()
|
|
71
|
+
.trim()
|
|
72
|
+
.regex(/^(?:[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})$/i)
|
|
73
|
+
.describe('Canonical six- or ten-character UniProt accession, without an isoform suffix.');
|
|
74
|
+
/** GO annotation returned by InterPro. */
|
|
75
|
+
export const GoTermSchema = z
|
|
76
|
+
.object({
|
|
77
|
+
identifier: z.string().describe('GO identifier.'),
|
|
78
|
+
name: z.string().describe('GO term name.'),
|
|
79
|
+
category: z
|
|
80
|
+
.object({
|
|
81
|
+
code: z.string().describe('GO category code.'),
|
|
82
|
+
name: z.string().describe('GO category name.'),
|
|
83
|
+
})
|
|
84
|
+
.catchall(JsonValueSchema)
|
|
85
|
+
.describe('GO category.'),
|
|
86
|
+
})
|
|
87
|
+
.catchall(JsonValueSchema)
|
|
88
|
+
.describe('GO annotation.');
|
|
89
|
+
/** Sparse list metadata; only routing fields are required. */
|
|
90
|
+
export const EntrySummarySchema = z
|
|
91
|
+
.object({
|
|
92
|
+
accession: z.string().describe('Entry accession.'),
|
|
93
|
+
source_database: z.string().describe('Upstream source database.'),
|
|
94
|
+
name: z.string().nullable().optional().describe('Entry name when supplied.'),
|
|
95
|
+
type: z.string().nullable().optional().describe('Entry type when supplied.'),
|
|
96
|
+
integrated: z.string().nullable().optional().describe('Integrated InterPro accession.'),
|
|
97
|
+
member_databases: z
|
|
98
|
+
.record(z.string(), z.record(z.string(), z.string()))
|
|
99
|
+
.nullable()
|
|
100
|
+
.optional()
|
|
101
|
+
.describe('Member signatures grouped by database.'),
|
|
102
|
+
go_terms: z.array(GoTermSchema).nullable().optional().describe('GO annotations when supplied.'),
|
|
103
|
+
})
|
|
104
|
+
.catchall(JsonValueSchema);
|
|
105
|
+
/** Detail metadata differs from summary metadata: names are objects. */
|
|
106
|
+
export const EntryMetadataSchema = z
|
|
107
|
+
.object({
|
|
108
|
+
accession: z.string().describe('Entry accession.'),
|
|
109
|
+
source_database: z.string().describe('Upstream database.'),
|
|
110
|
+
name: z
|
|
111
|
+
.object({
|
|
112
|
+
name: z.string().nullable().optional().describe('Full name.'),
|
|
113
|
+
short: z.string().nullable().optional().describe('Short name.'),
|
|
114
|
+
})
|
|
115
|
+
.catchall(JsonValueSchema)
|
|
116
|
+
.nullable()
|
|
117
|
+
.optional()
|
|
118
|
+
.describe('Detail name object.'),
|
|
119
|
+
})
|
|
120
|
+
.catchall(JsonValueSchema);
|
|
121
|
+
/** Detail-only output adds readable text without changing upstream description fields. */
|
|
122
|
+
export const EntryDetailMetadataSchema = EntryMetadataSchema.extend({
|
|
123
|
+
descriptionText: z
|
|
124
|
+
.string()
|
|
125
|
+
.optional()
|
|
126
|
+
.describe('Readable description text decoded from source HTML fragments; absent without textual content.'),
|
|
127
|
+
});
|
|
128
|
+
/** Complete location fragments retain discontinuity and arbitrary annotations. */
|
|
129
|
+
export const LocationSchema = z
|
|
130
|
+
.object({
|
|
131
|
+
fragments: z
|
|
132
|
+
.array(z
|
|
133
|
+
.object({
|
|
134
|
+
start: z.number().int().positive().describe('Inclusive 1-based start residue.'),
|
|
135
|
+
end: z.number().int().positive().describe('Inclusive 1-based end residue.'),
|
|
136
|
+
'dc-status': z.string().optional().describe('Discontinuity status.'),
|
|
137
|
+
})
|
|
138
|
+
.catchall(JsonValueSchema)
|
|
139
|
+
.refine((fragment) => fragment.start <= fragment.end, 'Fragment start exceeds end.')
|
|
140
|
+
.describe('Complete continuous or discontinuous sequence fragment.'))
|
|
141
|
+
.min(1)
|
|
142
|
+
.describe('Nonempty sequence fragments.'),
|
|
143
|
+
representative: z.boolean().nullable().optional().describe('Representative match flag.'),
|
|
144
|
+
model: z.string().nullable().optional().describe('Source model.'),
|
|
145
|
+
score: z.number().nullable().optional().describe('Upstream match score.'),
|
|
146
|
+
})
|
|
147
|
+
.catchall(JsonValueSchema)
|
|
148
|
+
.describe('Complete upstream match location.');
|
|
149
|
+
/** Protein metadata preserves omitted annotations and additional source fields. */
|
|
150
|
+
export const ProteinMetadataSchema = z
|
|
151
|
+
.object({
|
|
152
|
+
accession: z.string().describe('Protein accession.'),
|
|
153
|
+
length: z.number().int().positive().describe('Sequence length in residues.'),
|
|
154
|
+
source_database: z.string().describe('Protein source database.'),
|
|
155
|
+
name: z.string().nullable().optional().describe('Protein name.'),
|
|
156
|
+
gene: z.string().nullable().optional().describe('Gene name.'),
|
|
157
|
+
source_organism: z
|
|
158
|
+
.object({
|
|
159
|
+
taxId: z
|
|
160
|
+
.union([
|
|
161
|
+
z.string().describe('Taxonomy identifier as supplied text.'),
|
|
162
|
+
z.number().int().describe('Taxonomy identifier as supplied integer.'),
|
|
163
|
+
])
|
|
164
|
+
.describe('Taxonomy identifier.'),
|
|
165
|
+
scientificName: z.string().describe('Scientific organism name.'),
|
|
166
|
+
fullName: z.string().nullable().optional().describe('Full organism name.'),
|
|
167
|
+
})
|
|
168
|
+
.catchall(JsonValueSchema)
|
|
169
|
+
.optional()
|
|
170
|
+
.describe('Source organism.'),
|
|
171
|
+
})
|
|
172
|
+
.catchall(JsonValueSchema);
|
|
173
|
+
/** Protein match rows retain complete nested source records. */
|
|
174
|
+
export const MatchSchema = z
|
|
175
|
+
.object({
|
|
176
|
+
metadata: EntrySummarySchema.describe('Entry metadata.'),
|
|
177
|
+
proteins: z
|
|
178
|
+
.array(z
|
|
179
|
+
.object({
|
|
180
|
+
accession: z.string().describe('Matched protein accession.'),
|
|
181
|
+
entry_protein_locations: z
|
|
182
|
+
.array(LocationSchema)
|
|
183
|
+
.min(1)
|
|
184
|
+
.describe('Complete match locations.'),
|
|
185
|
+
})
|
|
186
|
+
.catchall(JsonValueSchema)
|
|
187
|
+
.describe('Complete protein match object.'))
|
|
188
|
+
.min(1)
|
|
189
|
+
.describe('Protein match objects.'),
|
|
190
|
+
})
|
|
191
|
+
.catchall(JsonValueSchema);
|
|
192
|
+
/** Feature-keyed extra annotations, not a protein detail envelope. */
|
|
193
|
+
export const ExtraFeaturesSchema = z.record(z.string(), z
|
|
194
|
+
.object({
|
|
195
|
+
accession: z.string().describe('Feature accession.'),
|
|
196
|
+
source_database: z.string().describe('Feature source.'),
|
|
197
|
+
locations: z.array(LocationSchema).describe('Feature locations.'),
|
|
198
|
+
})
|
|
199
|
+
.catchall(JsonValueSchema));
|
|
200
|
+
/** Standard list envelope; callers select the operation-specific row schema. */
|
|
201
|
+
export const listSchema = (row) => z
|
|
202
|
+
.object({
|
|
203
|
+
count: z.number().int().nonnegative().describe('Total matching records.'),
|
|
204
|
+
next: z.string().nullable().describe('Upstream continuation URL.'),
|
|
205
|
+
previous: z.string().nullable().describe('Upstream previous URL.'),
|
|
206
|
+
results: z.array(row).describe('Current page records.'),
|
|
207
|
+
})
|
|
208
|
+
.catchall(JsonValueSchema);
|
|
209
|
+
/** Detail response envelope. */
|
|
210
|
+
export const detailSchema = (metadata) => z.object({ metadata: metadata.describe('Complete detail metadata.') }).catchall(JsonValueSchema);
|
|
211
|
+
/** Server-owned page metadata. */
|
|
212
|
+
export const PageSchema = z.object({
|
|
213
|
+
total: z.number().int().nonnegative().describe('Upstream total records.'),
|
|
214
|
+
returned: z.number().int().nonnegative().describe('Records returned in this page.'),
|
|
215
|
+
limit: z
|
|
216
|
+
.number()
|
|
217
|
+
.int()
|
|
218
|
+
.positive()
|
|
219
|
+
.describe('Effective page size after clamping to the tool maximum.'),
|
|
220
|
+
hasMore: z.boolean().describe('Whether upstream advertises continuation.'),
|
|
221
|
+
nextCursor: z
|
|
222
|
+
.string()
|
|
223
|
+
.optional()
|
|
224
|
+
.describe('Opaque continuation with unchanged target and filters.'),
|
|
225
|
+
});
|
|
226
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/services/interpro/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Error contracts for upstream failures the service raises identically for every tool.
|
|
3
|
+
* @module services/interpro/upstream-errors
|
|
4
|
+
*/
|
|
5
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
6
|
+
/** Declared upstream failures every tool shares; spread after `upstream_shape_invalid`. */
|
|
7
|
+
export declare const UPSTREAM_ERRORS: readonly [{
|
|
8
|
+
readonly reason: 'upstream_response_too_large';
|
|
9
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
10
|
+
readonly when: 'An upstream response exceeds 4 MiB.';
|
|
11
|
+
readonly retryable: false;
|
|
12
|
+
readonly recovery: 'Retry list tools with a smaller limit, or retrieve individual members with interpro_get_entry instead of a large clan.';
|
|
13
|
+
readonly thrownBy: 'service';
|
|
14
|
+
}, {
|
|
15
|
+
readonly reason: 'upstream_rejected';
|
|
16
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
17
|
+
readonly when: 'InterPro returns an unhandled redirect or client rejection.';
|
|
18
|
+
readonly retryable: false;
|
|
19
|
+
readonly recovery: 'Retry the same tool later; call interpro_list_reference with topic release to check upstream availability.';
|
|
20
|
+
readonly thrownBy: 'service';
|
|
21
|
+
}, {
|
|
22
|
+
readonly reason: 'upstream_unavailable';
|
|
23
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
24
|
+
readonly when: 'InterPro has a network or server failure; HTTP 501 is not retryable.';
|
|
25
|
+
readonly retryable: true;
|
|
26
|
+
readonly recovery: 'Retry the same tool later; call interpro_list_reference with topic release to check upstream availability.';
|
|
27
|
+
readonly thrownBy: 'service';
|
|
28
|
+
}, {
|
|
29
|
+
readonly reason: 'upstream_timeout';
|
|
30
|
+
readonly code: JsonRpcErrorCode.Timeout;
|
|
31
|
+
readonly when: 'InterPro returns HTTP 408/504 or an attempt exceeds its deadline.';
|
|
32
|
+
readonly retryable: true;
|
|
33
|
+
readonly recovery: 'Retry with a smaller limit where available, then repeat the same tool after waiting.';
|
|
34
|
+
readonly thrownBy: 'service';
|
|
35
|
+
}, {
|
|
36
|
+
readonly reason: 'upstream_rate_limited';
|
|
37
|
+
readonly code: JsonRpcErrorCode.RateLimited;
|
|
38
|
+
readonly when: 'InterPro returns HTTP 429.';
|
|
39
|
+
readonly retryable: true;
|
|
40
|
+
readonly recovery: 'Wait for retryAfter when supplied, then repeat the same tool with fewer concurrent calls.';
|
|
41
|
+
readonly thrownBy: 'service';
|
|
42
|
+
}];
|
|
43
|
+
//# sourceMappingURL=upstream-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream-errors.d.ts","sourceRoot":"","sources":["../../../src/services/interpro/upstream-errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,2FAA2F;AAC3F,eAAO,MAAM,eAAe;aAExB,MAAM,EAAE,6BAA6B;aACrC,IAAI;aACJ,IAAI,EAAE,qCAAqC;aAC3C,SAAS;aACT,QAAQ,EACN,wHAAwH;aAC1H,QAAQ,EAAE,SAAS;;aAGnB,MAAM,EAAE,mBAAmB;aAC3B,IAAI;aACJ,IAAI,EAAE,6DAA6D;aACnE,SAAS;aACT,QAAQ,EACN,4GAA4G;aAC9G,QAAQ,EAAE,SAAS;;aAGnB,MAAM,EAAE,sBAAsB;aAC9B,IAAI;aACJ,IAAI,EAAE,sEAAsE;aAC5E,SAAS;aACT,QAAQ,EACN,4GAA4G;aAC9G,QAAQ,EAAE,SAAS;;aAGnB,MAAM,EAAE,kBAAkB;aAC1B,IAAI;aACJ,IAAI,EAAE,mEAAmE;aACzE,SAAS;aACT,QAAQ,EACN,sFAAsF;aACxF,QAAQ,EAAE,SAAS;;aAGnB,MAAM,EAAE,uBAAuB;aAC/B,IAAI;aACJ,IAAI,EAAE,4BAA4B;aAClC,SAAS;aACT,QAAQ,EACN,2FAA2F;aAC7F,QAAQ,EAAE,SAAS;EAEb,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Error contracts for upstream failures the service raises identically for every tool.
|
|
3
|
+
* @module services/interpro/upstream-errors
|
|
4
|
+
*/
|
|
5
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
6
|
+
/** Declared upstream failures every tool shares; spread after `upstream_shape_invalid`. */
|
|
7
|
+
export const UPSTREAM_ERRORS = [
|
|
8
|
+
{
|
|
9
|
+
reason: 'upstream_response_too_large',
|
|
10
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
11
|
+
when: 'An upstream response exceeds 4 MiB.',
|
|
12
|
+
retryable: false,
|
|
13
|
+
recovery: 'Retry list tools with a smaller limit, or retrieve individual members with interpro_get_entry instead of a large clan.',
|
|
14
|
+
thrownBy: 'service',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
reason: 'upstream_rejected',
|
|
18
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
19
|
+
when: 'InterPro returns an unhandled redirect or client rejection.',
|
|
20
|
+
retryable: false,
|
|
21
|
+
recovery: 'Retry the same tool later; call interpro_list_reference with topic release to check upstream availability.',
|
|
22
|
+
thrownBy: 'service',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
reason: 'upstream_unavailable',
|
|
26
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
27
|
+
when: 'InterPro has a network or server failure; HTTP 501 is not retryable.',
|
|
28
|
+
retryable: true,
|
|
29
|
+
recovery: 'Retry the same tool later; call interpro_list_reference with topic release to check upstream availability.',
|
|
30
|
+
thrownBy: 'service',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
reason: 'upstream_timeout',
|
|
34
|
+
code: JsonRpcErrorCode.Timeout,
|
|
35
|
+
when: 'InterPro returns HTTP 408/504 or an attempt exceeds its deadline.',
|
|
36
|
+
retryable: true,
|
|
37
|
+
recovery: 'Retry with a smaller limit where available, then repeat the same tool after waiting.',
|
|
38
|
+
thrownBy: 'service',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
reason: 'upstream_rate_limited',
|
|
42
|
+
code: JsonRpcErrorCode.RateLimited,
|
|
43
|
+
when: 'InterPro returns HTTP 429.',
|
|
44
|
+
retryable: true,
|
|
45
|
+
recovery: 'Wait for retryAfter when supplied, then repeat the same tool with fewer concurrent calls.',
|
|
46
|
+
thrownBy: 'service',
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
//# sourceMappingURL=upstream-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream-errors.js","sourceRoot":"","sources":["../../../src/services/interpro/upstream-errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,2FAA2F;AAC3F,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;QACE,MAAM,EAAE,6BAA6B;QACrC,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;QACzC,IAAI,EAAE,qCAAqC;QAC3C,SAAS,EAAE,KAAK;QAChB,QAAQ,EACN,wHAAwH;QAC1H,QAAQ,EAAE,SAAS;KACpB;IACD;QACE,MAAM,EAAE,mBAAmB;QAC3B,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;QACzC,IAAI,EAAE,6DAA6D;QACnE,SAAS,EAAE,KAAK;QAChB,QAAQ,EACN,4GAA4G;QAC9G,QAAQ,EAAE,SAAS;KACpB;IACD;QACE,MAAM,EAAE,sBAAsB;QAC9B,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;QACzC,IAAI,EAAE,sEAAsE;QAC5E,SAAS,EAAE,IAAI;QACf,QAAQ,EACN,4GAA4G;QAC9G,QAAQ,EAAE,SAAS;KACpB;IACD;QACE,MAAM,EAAE,kBAAkB;QAC1B,IAAI,EAAE,gBAAgB,CAAC,OAAO;QAC9B,IAAI,EAAE,mEAAmE;QACzE,SAAS,EAAE,IAAI;QACf,QAAQ,EACN,sFAAsF;QACxF,QAAQ,EAAE,SAAS;KACpB;IACD;QACE,MAAM,EAAE,uBAAuB;QAC/B,IAAI,EAAE,gBAAgB,CAAC,WAAW;QAClC,IAAI,EAAE,4BAA4B;QAClC,SAAS,EAAE,IAAI;QACf,QAAQ,EACN,2FAA2F;QAC7F,QAAQ,EAAE,SAAS;KACpB;CACO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,106 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/interpro-mcp-server",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"description": "
|
|
6
|
-
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"mcpName": "io.github.cyanheads/interpro-mcp-server",
|
|
5
|
+
"description": "Search InterPro entries, map protein domains and functional sites, and find proteins by domain via MCP. STDIO or Streamable HTTP.",
|
|
6
|
+
"author": "Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)",
|
|
7
|
+
"homepage": "https://github.com/cyanheads/interpro-mcp-server#readme",
|
|
8
|
+
"bugs": {
|
|
9
|
+
"url": "https://github.com/cyanheads/interpro-mcp-server/issues"
|
|
10
|
+
},
|
|
11
|
+
"funding": [
|
|
12
|
+
{
|
|
13
|
+
"type": "github",
|
|
14
|
+
"url": "https://github.com/sponsors/cyanheads"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "buy_me_a_coffee",
|
|
18
|
+
"url": "https://www.buymeacoffee.com/cyanheads"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "dist/index.js",
|
|
23
|
+
"types": "dist/index.d.ts",
|
|
24
|
+
"bin": {
|
|
25
|
+
"interpro-mcp-server": "dist/index.js"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"changelog/",
|
|
29
|
+
"dist/",
|
|
30
|
+
"!dist/*.mcpb",
|
|
31
|
+
"README.md",
|
|
32
|
+
"LICENSE",
|
|
33
|
+
"CLAUDE.md",
|
|
34
|
+
"AGENTS.md",
|
|
35
|
+
"Dockerfile",
|
|
36
|
+
"server.json"
|
|
37
|
+
],
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "bun run scripts/build.ts",
|
|
40
|
+
"rebuild": "bun run scripts/clean.ts && bun run scripts/build.ts",
|
|
41
|
+
"clean": "bun run scripts/clean.ts",
|
|
42
|
+
"devcheck": "bun run scripts/devcheck.ts",
|
|
43
|
+
"audit:fix": "bun audit fix",
|
|
44
|
+
"audit:refresh": "rm -f bun.lock && bun install && bun audit",
|
|
45
|
+
"tree": "bun run scripts/tree.ts",
|
|
46
|
+
"list-skills": "bun run scripts/list-skills.ts",
|
|
47
|
+
"format": "biome check --write .",
|
|
48
|
+
"format:unsafe": "biome check --write --unsafe .",
|
|
49
|
+
"lint:mcp": "bun run scripts/lint-mcp.ts",
|
|
50
|
+
"lint:packaging": "bun run scripts/lint-packaging.ts",
|
|
51
|
+
"bundle": "bun run build && npx -y @anthropic-ai/mcpb pack . dist/interpro-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/interpro-mcp-server.mcpb",
|
|
52
|
+
"changelog:build": "bun run scripts/build-changelog.ts",
|
|
53
|
+
"changelog:check": "bun run scripts/build-changelog.ts --check",
|
|
54
|
+
"release:github": "bun run scripts/release-github.ts",
|
|
55
|
+
"publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish",
|
|
56
|
+
"test": "vitest run",
|
|
57
|
+
"test:coverage": "vitest run --coverage",
|
|
58
|
+
"start": "node dist/index.js",
|
|
59
|
+
"start:stdio": "MCP_TRANSPORT_TYPE=stdio node dist/index.js",
|
|
60
|
+
"start:http": "MCP_TRANSPORT_TYPE=http node dist/index.js"
|
|
61
|
+
},
|
|
62
|
+
"keywords": [
|
|
63
|
+
"mcp",
|
|
64
|
+
"mcp-server",
|
|
65
|
+
"model-context-protocol",
|
|
66
|
+
"ai-agents",
|
|
67
|
+
"ai-tools",
|
|
68
|
+
"typescript",
|
|
69
|
+
"cyanheads",
|
|
70
|
+
"interpro",
|
|
71
|
+
"pfam",
|
|
72
|
+
"protein-domains",
|
|
73
|
+
"bioinformatics"
|
|
74
|
+
],
|
|
75
|
+
"repository": {
|
|
76
|
+
"type": "git",
|
|
77
|
+
"url": "git+https://github.com/cyanheads/interpro-mcp-server.git"
|
|
78
|
+
},
|
|
79
|
+
"license": "Apache-2.0",
|
|
80
|
+
"packageManager": "bun@1.4.4",
|
|
81
|
+
"engines": {
|
|
82
|
+
"bun": ">=1.4.0",
|
|
83
|
+
"node": ">=24.0.0"
|
|
84
|
+
},
|
|
85
|
+
"publishConfig": {
|
|
86
|
+
"access": "public"
|
|
87
|
+
},
|
|
88
|
+
"dependencies": {
|
|
89
|
+
"@cyanheads/mcp-ts-core": "^0.13.15",
|
|
90
|
+
"htmlparser2": "^12.0.0",
|
|
91
|
+
"pino-pretty": "^13.2.0",
|
|
92
|
+
"zod": "^4.6.7"
|
|
93
|
+
},
|
|
94
|
+
"devDependencies": {
|
|
95
|
+
"@biomejs/biome": "2.5.15",
|
|
96
|
+
"@socketsecurity/bun-security-scanner": "^1.1.3",
|
|
97
|
+
"@types/node": "26.6.5",
|
|
98
|
+
"@vitest/coverage-istanbul": "5.0.5",
|
|
99
|
+
"depcheck": "^1.4.7",
|
|
100
|
+
"fast-check": "^4.10.2",
|
|
101
|
+
"ignore": "^7.0.13",
|
|
102
|
+
"tsc-alias": "^1.9.8",
|
|
103
|
+
"typescript": "^7.0.2",
|
|
104
|
+
"vitest": "^5.0.5"
|
|
105
|
+
}
|
|
106
|
+
}
|
package/server.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.cyanheads/interpro-mcp-server",
|
|
4
|
+
"description": "Search InterPro entries, map protein domains and functional sites, and find proteins by domain.",
|
|
5
|
+
"repository": {
|
|
6
|
+
"url": "https://github.com/cyanheads/interpro-mcp-server",
|
|
7
|
+
"source": "github"
|
|
8
|
+
},
|
|
9
|
+
"version": "0.1.2",
|
|
10
|
+
"remotes": [
|
|
11
|
+
{
|
|
12
|
+
"type": "streamable-http",
|
|
13
|
+
"url": "https://interpro.caseyjhand.com/mcp"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"packages": [
|
|
17
|
+
{
|
|
18
|
+
"registryType": "npm",
|
|
19
|
+
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
|
+
"identifier": "@cyanheads/interpro-mcp-server",
|
|
21
|
+
"runtimeHint": "npx",
|
|
22
|
+
"version": "0.1.2",
|
|
23
|
+
"environmentVariables": [
|
|
24
|
+
{
|
|
25
|
+
"name": "MCP_LOG_LEVEL",
|
|
26
|
+
"description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
|
|
27
|
+
"format": "string",
|
|
28
|
+
"isRequired": false,
|
|
29
|
+
"default": "info"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"transport": {
|
|
33
|
+
"type": "stdio"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"registryType": "npm",
|
|
38
|
+
"registryBaseUrl": "https://registry.npmjs.org",
|
|
39
|
+
"identifier": "@cyanheads/interpro-mcp-server",
|
|
40
|
+
"runtimeHint": "npx",
|
|
41
|
+
"version": "0.1.2",
|
|
42
|
+
"environmentVariables": [
|
|
43
|
+
{
|
|
44
|
+
"name": "MCP_TRANSPORT_TYPE",
|
|
45
|
+
"description": "Selects the HTTP transport.",
|
|
46
|
+
"format": "string",
|
|
47
|
+
"value": "http"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "MCP_HTTP_HOST",
|
|
51
|
+
"description": "The hostname for the HTTP server.",
|
|
52
|
+
"format": "string",
|
|
53
|
+
"isRequired": false,
|
|
54
|
+
"default": "127.0.0.1"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "MCP_HTTP_PORT",
|
|
58
|
+
"description": "The port to run the HTTP server on.",
|
|
59
|
+
"format": "string",
|
|
60
|
+
"isRequired": false,
|
|
61
|
+
"default": "3010"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "MCP_HTTP_ENDPOINT_PATH",
|
|
65
|
+
"description": "The endpoint path for the MCP server.",
|
|
66
|
+
"format": "string",
|
|
67
|
+
"isRequired": false,
|
|
68
|
+
"default": "/mcp"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "MCP_AUTH_MODE",
|
|
72
|
+
"description": "Authentication mode to use: 'none', 'jwt', or 'oauth'.",
|
|
73
|
+
"format": "string",
|
|
74
|
+
"isRequired": false,
|
|
75
|
+
"default": "none"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"name": "MCP_LOG_LEVEL",
|
|
79
|
+
"description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
|
|
80
|
+
"format": "string",
|
|
81
|
+
"isRequired": false,
|
|
82
|
+
"default": "info"
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"transport": {
|
|
86
|
+
"type": "streamable-http",
|
|
87
|
+
"url": "http://localhost:3010/mcp"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|