@cyanheads/pubmed-mcp-server 2.6.4 → 2.6.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/CLAUDE.md +32 -12
- package/README.md +1 -1
- package/dist/mcp-server/prompts/definitions/research-plan.prompt.d.ts.map +1 -1
- package/dist/mcp-server/prompts/definitions/research-plan.prompt.js +1 -1
- package/dist/mcp-server/prompts/definitions/research-plan.prompt.js.map +1 -1
- package/dist/mcp-server/resources/definitions/database-info.resource.d.ts +1 -1
- package/dist/mcp-server/resources/definitions/database-info.resource.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_error-contracts.d.ts +38 -0
- package/dist/mcp-server/tools/definitions/_error-contracts.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/_error-contracts.js +42 -0
- package/dist/mcp-server/tools/definitions/_error-contracts.js.map +1 -0
- package/dist/mcp-server/tools/definitions/convert-ids.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/convert-ids.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts +21 -1
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.js +11 -1
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts +21 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js +11 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.d.ts +21 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.js +18 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/format-citations.tool.d.ts +8 -3
- package/dist/mcp-server/tools/definitions/format-citations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/format-citations.tool.js +9 -7
- package/dist/mcp-server/tools/definitions/format-citations.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-citation.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/lookup-citation.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts +4 -3
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js +26 -15
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-articles.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/search-articles.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts.map +1 -1
- package/dist/services/ncbi/api-client.d.ts.map +1 -1
- package/dist/services/ncbi/api-client.js +14 -36
- package/dist/services/ncbi/api-client.js.map +1 -1
- package/dist/services/ncbi/ncbi-service.d.ts.map +1 -1
- package/dist/services/ncbi/ncbi-service.js +24 -19
- package/dist/services/ncbi/ncbi-service.js.map +1 -1
- package/dist/services/ncbi/request-queue.d.ts.map +1 -1
- package/dist/services/ncbi/request-queue.js +9 -9
- package/dist/services/ncbi/request-queue.js.map +1 -1
- package/dist/services/ncbi/response-handler.d.ts +2 -2
- package/dist/services/ncbi/response-handler.d.ts.map +1 -1
- package/dist/services/ncbi/response-handler.js +50 -29
- package/dist/services/ncbi/response-handler.js.map +1 -1
- package/dist/services/unpaywall/unpaywall-service.d.ts.map +1 -1
- package/dist/services/unpaywall/unpaywall-service.js +22 -18
- package/dist/services/unpaywall/unpaywall-service.js.map +1 -1
- package/package.json +4 -3
- package/server.json +3 -3
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* typed methods for each E-utility endpoint. Uses init/accessor pattern.
|
|
5
5
|
* @module src/services/ncbi/ncbi-service
|
|
6
6
|
*/
|
|
7
|
-
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
8
|
-
import { logger } from '@cyanheads/mcp-ts-core/utils';
|
|
7
|
+
import { internalError, JsonRpcErrorCode, McpError, serializationError, timeout, } from '@cyanheads/mcp-ts-core/errors';
|
|
8
|
+
import { logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
|
|
9
9
|
import { getServerConfig } from '../../config/server-config.js';
|
|
10
10
|
import { NcbiApiClient } from './api-client.js';
|
|
11
11
|
import { NcbiRequestQueue } from './request-queue.js';
|
|
@@ -100,11 +100,12 @@ export class NcbiService {
|
|
|
100
100
|
const spellResult = response.eSpellResult;
|
|
101
101
|
const original = spellResult.Query ?? params.term ?? '';
|
|
102
102
|
const corrected = spellResult.CorrectedQuery ?? '';
|
|
103
|
-
logger.debug('ESpell result parsed.', {
|
|
103
|
+
logger.debug('ESpell result parsed.', requestContextService.createRequestContext({
|
|
104
|
+
operation: 'NcbiESpell',
|
|
104
105
|
original,
|
|
105
106
|
corrected,
|
|
106
107
|
hasSuggestion: corrected.length > 0 && corrected !== original,
|
|
107
|
-
});
|
|
108
|
+
}));
|
|
108
109
|
return {
|
|
109
110
|
original,
|
|
110
111
|
corrected: corrected || original,
|
|
@@ -177,8 +178,8 @@ export class NcbiService {
|
|
|
177
178
|
try {
|
|
178
179
|
parsed = JSON.parse(text);
|
|
179
180
|
}
|
|
180
|
-
catch {
|
|
181
|
-
throw
|
|
181
|
+
catch (error) {
|
|
182
|
+
throw serializationError('Failed to parse ID Converter JSON response.', { responseSnippet: text.substring(0, 200) }, { cause: error });
|
|
182
183
|
}
|
|
183
184
|
return parsed.records ?? [];
|
|
184
185
|
}
|
|
@@ -207,9 +208,7 @@ export class NcbiService {
|
|
|
207
208
|
}
|
|
208
209
|
catch (error) {
|
|
209
210
|
if (error instanceof NcbiDeadlineExceeded) {
|
|
210
|
-
throw
|
|
211
|
-
deadlineMs: this.totalDeadlineMs,
|
|
212
|
-
});
|
|
211
|
+
throw timeout(error.message, { reason: 'ncbi_deadline_exceeded', deadlineMs: this.totalDeadlineMs }, { cause: error });
|
|
213
212
|
}
|
|
214
213
|
throw error;
|
|
215
214
|
}
|
|
@@ -243,21 +242,26 @@ export class NcbiService {
|
|
|
243
242
|
const baseDelay = Math.min(1000 * 2 ** attempt, NcbiService.MAX_BACKOFF_MS);
|
|
244
243
|
const jitter = baseDelay * (0.75 + 0.5 * Math.random()); // ±25%
|
|
245
244
|
const retryDelay = Math.round(jitter);
|
|
246
|
-
logger.warning(`NCBI request to ${label} failed. Retrying (${attempt + 1}/${this.maxRetries}) in ${retryDelay}ms.`, {
|
|
245
|
+
logger.warning(`NCBI request to ${label} failed. Retrying (${attempt + 1}/${this.maxRetries}) in ${retryDelay}ms.`, requestContextService.createRequestContext({
|
|
246
|
+
operation: 'NcbiRetry',
|
|
247
|
+
endpoint: label,
|
|
248
|
+
attempt: attempt + 1,
|
|
249
|
+
retryDelay,
|
|
250
|
+
}));
|
|
247
251
|
await abortableSleep(retryDelay, signal);
|
|
248
252
|
continue;
|
|
249
253
|
}
|
|
250
254
|
const attempts = this.maxRetries + 1;
|
|
251
255
|
const msg = error instanceof Error ? error.message : String(error);
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
+
// Tag transient ServiceUnavailable retries-exhausted with `ncbi_unreachable` so
|
|
257
|
+
// tool callers can switch on a stable reason. Other retryable codes (Timeout,
|
|
258
|
+
// RateLimited) keep their original code with no reason — `ncbi_deadline_exceeded`
|
|
259
|
+
// and `queue_full` are stamped at their own throw sites.
|
|
260
|
+
const reason = error.code === JsonRpcErrorCode.ServiceUnavailable ? 'ncbi_unreachable' : undefined;
|
|
261
|
+
throw new McpError(error.code, `${msg} (failed after ${attempts} attempts)`, { ...(reason && { reason }), endpoint: label, attempts }, { cause: error });
|
|
256
262
|
}
|
|
257
263
|
}
|
|
258
|
-
throw
|
|
259
|
-
endpoint: label,
|
|
260
|
-
});
|
|
264
|
+
throw internalError('Request failed after all retries.', { endpoint: label });
|
|
261
265
|
}
|
|
262
266
|
/**
|
|
263
267
|
* Enqueues a request with a service-level deadline and retry logic that covers
|
|
@@ -293,12 +297,13 @@ export function initNcbiService() {
|
|
|
293
297
|
const queue = new NcbiRequestQueue(config.requestDelayMs);
|
|
294
298
|
const responseHandler = new NcbiResponseHandler();
|
|
295
299
|
_service = new NcbiService(apiClient, queue, responseHandler, config.maxRetries, config.totalDeadlineMs);
|
|
296
|
-
logger.info('NCBI service initialized.', {
|
|
300
|
+
logger.info('NCBI service initialized.', requestContextService.createRequestContext({
|
|
301
|
+
operation: 'NcbiInit',
|
|
297
302
|
toolIdentifier: config.toolIdentifier,
|
|
298
303
|
hasApiKey: !!config.apiKey,
|
|
299
304
|
requestDelayMs: config.requestDelayMs,
|
|
300
305
|
totalDeadlineMs: config.totalDeadlineMs,
|
|
301
|
-
});
|
|
306
|
+
}));
|
|
302
307
|
}
|
|
303
308
|
/** Get the initialized NCBI service. Throws if not initialized. */
|
|
304
309
|
export function getNcbiService() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ncbi-service.js","sourceRoot":"","sources":["../../../src/services/ncbi/ncbi-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ncbi-service.js","sourceRoot":"","sources":["../../../src/services/ncbi/ncbi-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-queue.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/request-queue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAYpD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAK;gBAEhB,OAAO,EAAE,MAAM,EAAE,YAAY,SAAyB;IAKlE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;YA0B7E,YAAY;
|
|
1
|
+
{"version":3,"file":"request-queue.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/request-queue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAYpD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAK;gBAEhB,OAAO,EAAE,MAAM,EAAE,YAAY,SAAyB;IAKlE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;YA0B7E,YAAY;CAqD3B"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @module src/services/ncbi/request-queue
|
|
5
5
|
*/
|
|
6
6
|
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
-
import { logger } from '@cyanheads/mcp-ts-core/utils';
|
|
7
|
+
import { logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
|
|
8
8
|
const DEFAULT_MAX_QUEUE_SIZE = 100;
|
|
9
9
|
/**
|
|
10
10
|
* Processes NCBI API requests through a FIFO queue, inserting a configurable
|
|
@@ -22,7 +22,7 @@ export class NcbiRequestQueue {
|
|
|
22
22
|
}
|
|
23
23
|
enqueue(task, endpoint, params) {
|
|
24
24
|
if (this.queue.length >= this.maxQueueSize) {
|
|
25
|
-
return Promise.reject(new McpError(JsonRpcErrorCode.RateLimited, `NCBI request queue is full (max ${this.maxQueueSize}).`, { endpoint, queueSize: this.queue.length }));
|
|
25
|
+
return Promise.reject(new McpError(JsonRpcErrorCode.RateLimited, `NCBI request queue is full (max ${this.maxQueueSize}).`, { reason: 'queue_full', endpoint, queueSize: this.queue.length }));
|
|
26
26
|
}
|
|
27
27
|
return new Promise((resolve, reject) => {
|
|
28
28
|
this.queue.push({
|
|
@@ -52,24 +52,24 @@ export class NcbiRequestQueue {
|
|
|
52
52
|
const elapsed = now - this.lastRequestTime;
|
|
53
53
|
const wait = this.delayMs - elapsed;
|
|
54
54
|
if (wait > 0) {
|
|
55
|
-
logger.debug(`Delaying NCBI request by ${wait}ms to respect rate limit.`, {
|
|
55
|
+
logger.debug(`Delaying NCBI request by ${wait}ms to respect rate limit.`, requestContextService.createRequestContext({
|
|
56
|
+
operation: 'NcbiQueueWait',
|
|
56
57
|
endpoint,
|
|
57
58
|
delayMs: wait,
|
|
58
|
-
});
|
|
59
|
+
}));
|
|
59
60
|
await new Promise((r) => setTimeout(r, wait));
|
|
60
61
|
}
|
|
61
62
|
this.lastRequestTime = Date.now();
|
|
62
|
-
logger.info(`Executing NCBI request via queue: ${endpoint}`, {
|
|
63
|
-
endpoint,
|
|
64
|
-
});
|
|
63
|
+
logger.info(`Executing NCBI request via queue: ${endpoint}`, requestContextService.createRequestContext({ operation: 'NcbiQueueDispatch', endpoint }));
|
|
65
64
|
const result = await task();
|
|
66
65
|
resolve(result);
|
|
67
66
|
}
|
|
68
67
|
catch (error) {
|
|
69
|
-
logger.error('Error processing NCBI request from queue.', {
|
|
68
|
+
logger.error('Error processing NCBI request from queue.', requestContextService.createRequestContext({
|
|
69
|
+
operation: 'NcbiQueueProcess',
|
|
70
70
|
endpoint,
|
|
71
71
|
errorMessage: error instanceof Error ? error.message : String(error),
|
|
72
|
-
});
|
|
72
|
+
}));
|
|
73
73
|
reject(error);
|
|
74
74
|
}
|
|
75
75
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../../src/services/ncbi/request-queue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../../src/services/ncbi/request-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,8 +38,8 @@ export declare class NcbiResponseHandler {
|
|
|
38
38
|
private readonly orderedXmlParser;
|
|
39
39
|
constructor();
|
|
40
40
|
/**
|
|
41
|
-
* Extract a structured error from a parsed NCBI XML body and throw it
|
|
42
|
-
* `
|
|
41
|
+
* Extract a structured error from a parsed NCBI XML body and throw it via
|
|
42
|
+
* `serviceUnavailable()`. Never returns.
|
|
43
43
|
*/
|
|
44
44
|
private throwNcbiError;
|
|
45
45
|
extractNcbiErrorMessages(parsedXml: Record<string, unknown>): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/response-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAsLrD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;;IAsBjD;;;OAGG;IACH,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/response-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAsLrD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;;IAsBjD;;;OAGG;IACH,OAAO,CAAC,cAAc;IAgBtB,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE;IAsBtE,sBAAsB,CAAC,CAAC,EACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC;CA8KL"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* NCBI's inconsistent XML structures where single-element lists are collapsed to scalars.
|
|
5
5
|
* @module src/services/ncbi/response-handler
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import { logger } from '@cyanheads/mcp-ts-core/utils';
|
|
7
|
+
import { serializationError, serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
|
|
8
|
+
import { logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
|
|
9
9
|
import { XMLParser as FastXmlParser, XMLValidator } from 'fast-xml-parser';
|
|
10
10
|
/**
|
|
11
11
|
* jpaths that NCBI may return as either a single value or an array.
|
|
@@ -232,16 +232,20 @@ export class NcbiResponseHandler {
|
|
|
232
232
|
});
|
|
233
233
|
}
|
|
234
234
|
/**
|
|
235
|
-
* Extract a structured error from a parsed NCBI XML body and throw it
|
|
236
|
-
* `
|
|
235
|
+
* Extract a structured error from a parsed NCBI XML body and throw it via
|
|
236
|
+
* `serviceUnavailable()`. Never returns.
|
|
237
237
|
*/
|
|
238
238
|
throwNcbiError(parsedXml, endpoint) {
|
|
239
239
|
const errorMessages = this.extractNcbiErrorMessages(parsedXml);
|
|
240
|
-
logger.error('NCBI API returned an error in XML response.', {
|
|
240
|
+
logger.error('NCBI API returned an error in XML response.', requestContextService.createRequestContext({
|
|
241
|
+
operation: 'NcbiXmlError',
|
|
241
242
|
endpoint,
|
|
242
243
|
errors: errorMessages,
|
|
244
|
+
}));
|
|
245
|
+
throw serviceUnavailable(`NCBI API Error: ${errorMessages.join('; ')}`, {
|
|
246
|
+
endpoint,
|
|
247
|
+
ncbiErrors: errorMessages,
|
|
243
248
|
});
|
|
244
|
-
throw new McpError(JsonRpcErrorCode.ServiceUnavailable, `NCBI API Error: ${errorMessages.join('; ')}`, { endpoint, ncbiErrors: errorMessages });
|
|
245
249
|
}
|
|
246
250
|
extractNcbiErrorMessages(parsedXml) {
|
|
247
251
|
const messages = [];
|
|
@@ -264,26 +268,36 @@ export class NcbiResponseHandler {
|
|
|
264
268
|
parseAndHandleResponse(responseText, endpoint, options) {
|
|
265
269
|
const retmode = options?.retmode ?? 'xml';
|
|
266
270
|
if (retmode === 'text') {
|
|
267
|
-
logger.debug('Received text response from NCBI.', {
|
|
271
|
+
logger.debug('Received text response from NCBI.', requestContextService.createRequestContext({
|
|
272
|
+
operation: 'NcbiParseText',
|
|
273
|
+
endpoint,
|
|
274
|
+
retmode,
|
|
275
|
+
}));
|
|
268
276
|
return responseText;
|
|
269
277
|
}
|
|
270
278
|
if (retmode === 'xml') {
|
|
271
|
-
logger.debug('Parsing XML response from NCBI.', {
|
|
279
|
+
logger.debug('Parsing XML response from NCBI.', requestContextService.createRequestContext({
|
|
280
|
+
operation: 'NcbiParseXml',
|
|
281
|
+
endpoint,
|
|
282
|
+
retmode,
|
|
283
|
+
}));
|
|
272
284
|
const xmlForValidation = responseText.replace(/<!DOCTYPE[^>]*>/gi, '');
|
|
273
285
|
const validationResult = XMLValidator.validate(xmlForValidation);
|
|
274
286
|
if (validationResult !== true) {
|
|
275
287
|
const isHtml = /^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(responseText);
|
|
276
288
|
if (isHtml) {
|
|
277
|
-
logger.warning('NCBI returned HTML instead of XML (likely rate-limited).', {
|
|
289
|
+
logger.warning('NCBI returned HTML instead of XML (likely rate-limited).', requestContextService.createRequestContext({
|
|
290
|
+
operation: 'NcbiHtmlResponse',
|
|
278
291
|
endpoint,
|
|
279
|
-
});
|
|
280
|
-
throw
|
|
292
|
+
}));
|
|
293
|
+
throw serviceUnavailable('NCBI API returned an HTML response instead of XML — likely rate-limited.', { endpoint });
|
|
281
294
|
}
|
|
282
|
-
logger.error('Invalid XML response from NCBI.', {
|
|
295
|
+
logger.error('Invalid XML response from NCBI.', requestContextService.createRequestContext({
|
|
296
|
+
operation: 'NcbiInvalidXml',
|
|
283
297
|
endpoint,
|
|
284
298
|
responseSnippet: responseText.substring(0, 500),
|
|
285
|
-
});
|
|
286
|
-
throw
|
|
299
|
+
}));
|
|
300
|
+
throw serializationError('Received invalid XML from NCBI.', {
|
|
287
301
|
endpoint,
|
|
288
302
|
responseSnippet: responseText.substring(0, 200),
|
|
289
303
|
});
|
|
@@ -307,16 +321,17 @@ export class NcbiResponseHandler {
|
|
|
307
321
|
}
|
|
308
322
|
catch (error) {
|
|
309
323
|
const parserError = error instanceof Error ? error.message : String(error);
|
|
310
|
-
logger.error('Failed to parse validated XML response from NCBI.', {
|
|
324
|
+
logger.error('Failed to parse validated XML response from NCBI.', requestContextService.createRequestContext({
|
|
325
|
+
operation: 'NcbiXmlParseError',
|
|
311
326
|
endpoint,
|
|
312
327
|
parserError,
|
|
313
328
|
responseSnippet: responseText.substring(0, 500),
|
|
314
|
-
});
|
|
315
|
-
throw
|
|
329
|
+
}));
|
|
330
|
+
throw serializationError(`Failed to parse XML response from NCBI: ${parserError}`, {
|
|
316
331
|
endpoint,
|
|
317
332
|
parserError,
|
|
318
333
|
responseSnippet: responseText.substring(0, 200),
|
|
319
|
-
});
|
|
334
|
+
}, { cause: error });
|
|
320
335
|
}
|
|
321
336
|
if (!useOrdered) {
|
|
322
337
|
const parsedObj = parsedXml;
|
|
@@ -326,39 +341,45 @@ export class NcbiResponseHandler {
|
|
|
326
341
|
}
|
|
327
342
|
}
|
|
328
343
|
if (options?.returnRawXml) {
|
|
329
|
-
logger.debug('Returning raw XML string after validation.', { endpoint });
|
|
344
|
+
logger.debug('Returning raw XML string after validation.', requestContextService.createRequestContext({ operation: 'NcbiRawXml', endpoint }));
|
|
330
345
|
return responseText;
|
|
331
346
|
}
|
|
332
|
-
logger.debug('Successfully parsed XML response.', { endpoint });
|
|
347
|
+
logger.debug('Successfully parsed XML response.', requestContextService.createRequestContext({ operation: 'NcbiParseXmlOk', endpoint }));
|
|
333
348
|
return parsedXml;
|
|
334
349
|
}
|
|
335
350
|
if (retmode === 'json') {
|
|
336
|
-
logger.debug('Parsing JSON response from NCBI.', {
|
|
351
|
+
logger.debug('Parsing JSON response from NCBI.', requestContextService.createRequestContext({
|
|
352
|
+
operation: 'NcbiParseJson',
|
|
353
|
+
endpoint,
|
|
354
|
+
retmode,
|
|
355
|
+
}));
|
|
337
356
|
let parsed;
|
|
338
357
|
try {
|
|
339
358
|
parsed = JSON.parse(responseText);
|
|
340
359
|
}
|
|
341
|
-
catch {
|
|
342
|
-
throw
|
|
360
|
+
catch (error) {
|
|
361
|
+
throw serializationError('Failed to parse NCBI JSON response.', { endpoint, responseSnippet: responseText.substring(0, 200) }, { cause: error });
|
|
343
362
|
}
|
|
344
363
|
if (parsed && typeof parsed === 'object' && 'error' in parsed) {
|
|
345
364
|
const errorMessage = String(parsed.error);
|
|
346
|
-
logger.error('NCBI API returned an error in JSON response.', {
|
|
365
|
+
logger.error('NCBI API returned an error in JSON response.', requestContextService.createRequestContext({
|
|
366
|
+
operation: 'NcbiJsonError',
|
|
347
367
|
endpoint,
|
|
348
368
|
error: errorMessage,
|
|
349
|
-
});
|
|
350
|
-
throw
|
|
369
|
+
}));
|
|
370
|
+
throw serviceUnavailable(`NCBI API Error: ${errorMessage}`, {
|
|
351
371
|
endpoint,
|
|
352
372
|
ncbiError: errorMessage,
|
|
353
373
|
});
|
|
354
374
|
}
|
|
355
|
-
logger.debug('Successfully parsed JSON response.', { endpoint });
|
|
375
|
+
logger.debug('Successfully parsed JSON response.', requestContextService.createRequestContext({ operation: 'NcbiParseJsonOk', endpoint }));
|
|
356
376
|
return parsed;
|
|
357
377
|
}
|
|
358
|
-
logger.warning(`Unhandled retmode "${retmode}". Returning raw response text.`, {
|
|
378
|
+
logger.warning(`Unhandled retmode "${retmode}". Returning raw response text.`, requestContextService.createRequestContext({
|
|
379
|
+
operation: 'NcbiUnknownRetmode',
|
|
359
380
|
endpoint,
|
|
360
381
|
retmode,
|
|
361
|
-
});
|
|
382
|
+
}));
|
|
362
383
|
return responseText;
|
|
363
384
|
}
|
|
364
385
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../../src/services/ncbi/response-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../../src/services/ncbi/response-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unpaywall-service.d.ts","sourceRoot":"","sources":["../../../src/services/unpaywall/unpaywall-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"unpaywall-service.d.ts","sourceRoot":"","sources":["../../../src/services/unpaywall/unpaywall-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAEzB,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM;IAGpC;;;;OAIG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAsD9E;;;;;OAKG;IACG,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAsBlF,OAAO;CA8CtB;AAiBD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAc3C;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,SAAS,CAElE"}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* resolution; only genuine service failures (5xx, network, timeout) throw.
|
|
8
8
|
* @module src/services/unpaywall/unpaywall-service
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
11
|
-
import { fetchWithTimeout, logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
|
|
10
|
+
import { serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
|
|
11
|
+
import { fetchWithTimeout, httpErrorFromResponse, logger, requestContextService, } from '@cyanheads/mcp-ts-core/utils';
|
|
12
12
|
import { getServerConfig } from '../../config/server-config.js';
|
|
13
13
|
import { UNPAYWALL_API_BASE, } from './types.js';
|
|
14
14
|
const USER_AGENT = 'pubmed-mcp-server (+https://github.com/cyanheads/pubmed-mcp-server)';
|
|
@@ -43,9 +43,7 @@ export class UnpaywallService {
|
|
|
43
43
|
}
|
|
44
44
|
catch (error) {
|
|
45
45
|
const msg = error instanceof Error ? error.message : String(error);
|
|
46
|
-
throw
|
|
47
|
-
doi: normalized,
|
|
48
|
-
});
|
|
46
|
+
throw serviceUnavailable(`Unpaywall request failed: ${msg}`, { doi: normalized }, { cause: error });
|
|
49
47
|
}
|
|
50
48
|
if (response.status === 404)
|
|
51
49
|
return { kind: 'no-oa', reason: 'DOI unknown to Unpaywall' };
|
|
@@ -53,9 +51,11 @@ export class UnpaywallService {
|
|
|
53
51
|
return { kind: 'no-oa', reason: 'Invalid DOI format' };
|
|
54
52
|
if (!response.ok) {
|
|
55
53
|
const body = await response.text().catch(() => '');
|
|
56
|
-
throw
|
|
57
|
-
|
|
58
|
-
:
|
|
54
|
+
throw await httpErrorFromResponse(response, {
|
|
55
|
+
service: 'Unpaywall',
|
|
56
|
+
captureBody: false,
|
|
57
|
+
data: { doi: normalized, body: body.substring(0, 300) },
|
|
58
|
+
});
|
|
59
59
|
}
|
|
60
60
|
const data = (await response.json());
|
|
61
61
|
if (!data.is_oa)
|
|
@@ -63,12 +63,13 @@ export class UnpaywallService {
|
|
|
63
63
|
const location = data.best_oa_location ?? data.oa_locations?.[0];
|
|
64
64
|
if (!location?.url)
|
|
65
65
|
return { kind: 'no-oa', reason: 'OA flagged but no usable location URL' };
|
|
66
|
-
logger.debug('Unpaywall resolved DOI', {
|
|
66
|
+
logger.debug('Unpaywall resolved DOI', requestContextService.createRequestContext({
|
|
67
|
+
operation: 'UnpaywallResolved',
|
|
67
68
|
doi: normalized,
|
|
68
69
|
hostType: location.host_type ?? null,
|
|
69
70
|
license: location.license ?? null,
|
|
70
71
|
version: location.version ?? null,
|
|
71
|
-
});
|
|
72
|
+
}));
|
|
72
73
|
return { kind: 'found', location };
|
|
73
74
|
}
|
|
74
75
|
/**
|
|
@@ -85,10 +86,11 @@ export class UnpaywallService {
|
|
|
85
86
|
return await this.fetchAs(pdfUrl, 'pdf', signal);
|
|
86
87
|
}
|
|
87
88
|
catch (pdfErr) {
|
|
88
|
-
logger.debug('Unpaywall PDF fetch failed; falling back to HTML URL', {
|
|
89
|
+
logger.debug('Unpaywall PDF fetch failed; falling back to HTML URL', requestContextService.createRequestContext({
|
|
90
|
+
operation: 'UnpaywallPdfFallback',
|
|
89
91
|
url: pdfUrl,
|
|
90
92
|
error: pdfErr instanceof Error ? pdfErr.message : String(pdfErr),
|
|
91
|
-
});
|
|
93
|
+
}));
|
|
92
94
|
}
|
|
93
95
|
}
|
|
94
96
|
return this.fetchAs(htmlUrl, 'auto', signal);
|
|
@@ -112,12 +114,13 @@ export class UnpaywallService {
|
|
|
112
114
|
}
|
|
113
115
|
catch (error) {
|
|
114
116
|
const msg = error instanceof Error ? error.message : String(error);
|
|
115
|
-
throw
|
|
117
|
+
throw serviceUnavailable(`Unpaywall content fetch failed: ${msg}`, { url }, { cause: error });
|
|
116
118
|
}
|
|
117
119
|
if (!response.ok) {
|
|
118
|
-
throw
|
|
119
|
-
|
|
120
|
-
:
|
|
120
|
+
throw await httpErrorFromResponse(response, {
|
|
121
|
+
service: 'Unpaywall content fetch',
|
|
122
|
+
data: { url },
|
|
123
|
+
});
|
|
121
124
|
}
|
|
122
125
|
const contentType = response.headers.get('content-type')?.toLowerCase() ?? '';
|
|
123
126
|
const fetchedUrl = response.url || url;
|
|
@@ -154,9 +157,10 @@ export function initUnpaywallService() {
|
|
|
154
157
|
return;
|
|
155
158
|
}
|
|
156
159
|
_service = new UnpaywallService(config.unpaywallEmail, config.unpaywallTimeoutMs);
|
|
157
|
-
logger.info('Unpaywall service initialized.', {
|
|
160
|
+
logger.info('Unpaywall service initialized.', requestContextService.createRequestContext({
|
|
161
|
+
operation: 'UnpaywallInit',
|
|
158
162
|
timeoutMs: config.unpaywallTimeoutMs,
|
|
159
|
-
});
|
|
163
|
+
}));
|
|
160
164
|
}
|
|
161
165
|
/** Returns the initialized service, or `undefined` when the fallback is disabled. */
|
|
162
166
|
export function getUnpaywallService() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unpaywall-service.js","sourceRoot":"","sources":["../../../src/services/unpaywall/unpaywall-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"unpaywall-service.js","sourceRoot":"","sources":["../../../src/services/unpaywall/unpaywall-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/pubmed-mcp-server",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.5",
|
|
4
4
|
"mcpName": "io.github.cyanheads/pubmed-mcp-server",
|
|
5
5
|
"description": "MCP server for PubMed/NCBI E-utilities integration. Search articles, fetch metadata and open-access full text (PMC + Unpaywall), generate citations, explore MeSH terms, and discover related research.",
|
|
6
6
|
"type": "module",
|
|
@@ -73,13 +73,13 @@
|
|
|
73
73
|
"access": "public"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@cyanheads/mcp-ts-core": "^0.
|
|
76
|
+
"@cyanheads/mcp-ts-core": "^0.8.2",
|
|
77
77
|
"defuddle": "^0.18.1",
|
|
78
78
|
"fast-xml-parser": "^5.7.2",
|
|
79
79
|
"linkedom": "^0.18.12",
|
|
80
80
|
"pino-pretty": "^13.1.3",
|
|
81
81
|
"sanitize-html": "^2.17.3",
|
|
82
|
-
"unpdf": "^1.6.
|
|
82
|
+
"unpdf": "^1.6.1"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"@biomejs/biome": "^2.4.13",
|
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"@types/sanitize-html": "^2.16.1",
|
|
88
88
|
"@vitest/coverage-istanbul": "^4.1.5",
|
|
89
89
|
"depcheck": "^1.4.7",
|
|
90
|
+
"fast-check": "^4.7.0",
|
|
90
91
|
"ignore": "^7.0.5",
|
|
91
92
|
"tsc-alias": "^1.8.16",
|
|
92
93
|
"typescript": "^6.0.3",
|