@cyanheads/pubmed-mcp-server 2.10.4 → 2.10.6
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 +4 -4
- package/CLAUDE.md +4 -4
- package/README.md +4 -2
- package/dist/config/server-config.d.ts +4 -4
- package/dist/mcp-server/tools/definitions/_text.d.ts +27 -2
- package/dist/mcp-server/tools/definitions/_text.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_text.js +78 -2
- package/dist/mcp-server/tools/definitions/_text.js.map +1 -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 +4 -1
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js +5 -3
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.d.ts +19 -11
- package/dist/mcp-server/tools/definitions/find-related.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.js +152 -52
- package/dist/mcp-server/tools/definitions/find-related.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.js +31 -12
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.js +28 -10
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-articles.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-articles.tool.js +4 -1
- package/dist/mcp-server/tools/definitions/search-articles.tool.js.map +1 -1
- package/dist/services/europe-pmc/api-client.js +1 -1
- package/dist/services/europe-pmc/europe-pmc-service.d.ts +9 -5
- package/dist/services/europe-pmc/europe-pmc-service.d.ts.map +1 -1
- package/dist/services/europe-pmc/europe-pmc-service.js +36 -8
- package/dist/services/europe-pmc/europe-pmc-service.js.map +1 -1
- package/dist/services/europe-pmc/types.d.ts +15 -0
- package/dist/services/europe-pmc/types.d.ts.map +1 -1
- package/dist/services/ncbi/api-client.d.ts +2 -3
- package/dist/services/ncbi/api-client.d.ts.map +1 -1
- package/dist/services/ncbi/api-client.js +10 -10
- 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 +7 -2
- package/dist/services/ncbi/ncbi-service.js.map +1 -1
- package/dist/services/ncbi/request-queue.js +1 -1
- package/dist/services/ncbi/response-handler.d.ts +11 -0
- package/dist/services/ncbi/response-handler.d.ts.map +1 -1
- package/dist/services/ncbi/response-handler.js +24 -5
- package/dist/services/ncbi/response-handler.js.map +1 -1
- package/dist/services/ncbi/types.d.ts +17 -1
- package/dist/services/ncbi/types.d.ts.map +1 -1
- package/dist/services/openalex/api-client.js +1 -1
- package/dist/services/openalex/openalex-service.d.ts.map +1 -1
- package/dist/services/openalex/openalex-service.js +3 -2
- package/dist/services/openalex/openalex-service.js.map +1 -1
- package/dist/services/retry-policy.d.ts +18 -0
- package/dist/services/retry-policy.d.ts.map +1 -0
- package/dist/services/retry-policy.js +21 -0
- package/dist/services/retry-policy.js.map +1 -0
- package/dist/services/unpaywall/unpaywall-service.d.ts +17 -0
- package/dist/services/unpaywall/unpaywall-service.d.ts.map +1 -1
- package/dist/services/unpaywall/unpaywall-service.js +51 -8
- package/dist/services/unpaywall/unpaywall-service.js.map +1 -1
- package/package.json +11 -11
- package/server.json +3 -3
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* @fileoverview PubMed related articles tool — finds articles related to a
|
|
3
3
|
* source article via a provider chain: NCBI ELink (primary) → Europe PMC →
|
|
4
4
|
* OpenAlex. First success wins; results are never merged across sources.
|
|
5
|
-
* Supports offset pagination on the returned window.
|
|
5
|
+
* Supports offset pagination on the returned window. A served empty answer is a
|
|
6
|
+
* success; only a chain where every eligible provider failed is an error.
|
|
6
7
|
* @module src/mcp-server/tools/definitions/find-related.tool
|
|
7
8
|
*/
|
|
8
9
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
9
|
-
import { McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
10
|
+
import { configurationError, JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
10
11
|
import { EUROPEPMC_SERVICE_ERRORS, NCBI_SERVICE_ERRORS, OPENALEX_SERVICE_ERRORS, } from '../../../services/error-contracts.js';
|
|
11
12
|
import { getEuropePmcService } from '../../../services/europe-pmc/europe-pmc-service.js';
|
|
12
13
|
import { getNcbiService } from '../../../services/ncbi/ncbi-service.js';
|
|
@@ -15,6 +16,7 @@ import { ensureArray } from '../../../services/ncbi/parsing/xml-helpers.js';
|
|
|
15
16
|
import { getOpenAlexServiceOptional } from '../../../services/openalex/openalex-service.js';
|
|
16
17
|
import { conceptMeta, EDAM_DATA_RETRIEVAL, SCHEMA_SCHOLARLY_ARTICLE } from './_concepts.js';
|
|
17
18
|
import { pmidStringSchema } from './_schemas.js';
|
|
19
|
+
import { escapeMarkdownInline } from './_text.js';
|
|
18
20
|
function extractValue(field) {
|
|
19
21
|
if (field === undefined || field === null)
|
|
20
22
|
return '';
|
|
@@ -22,6 +24,16 @@ function extractValue(field) {
|
|
|
22
24
|
return field['#text'] !== undefined ? String(field['#text']) : '';
|
|
23
25
|
return String(field);
|
|
24
26
|
}
|
|
27
|
+
/** Human-facing provider names for notices and recovery hints. */
|
|
28
|
+
const PROVIDER_LABELS = {
|
|
29
|
+
ncbi: 'NCBI',
|
|
30
|
+
europepmc: 'Europe PMC',
|
|
31
|
+
openalex: 'OpenAlex',
|
|
32
|
+
};
|
|
33
|
+
/** A provider the server never reached because configuration turned it off. */
|
|
34
|
+
const PROVIDER_DISABLED = 'provider_disabled';
|
|
35
|
+
/** A provider failure that carried no declared service-contract reason. */
|
|
36
|
+
const UNCLASSIFIED_ERROR = 'unclassified_error';
|
|
25
37
|
// ─── NCBI provider ────────────────────────────────────────────────────────────
|
|
26
38
|
async function ncbiProvider(pmid, relationship, signal) {
|
|
27
39
|
const ncbi = getNcbiService();
|
|
@@ -61,31 +73,64 @@ async function ncbiProvider(pmid, relationship, signal) {
|
|
|
61
73
|
function epmcSupports(relationship) {
|
|
62
74
|
return relationship === 'cited_by' || relationship === 'references';
|
|
63
75
|
}
|
|
76
|
+
/** Europe PMC's per-request row ceiling — 1001 is rejected with an `errMsg`. */
|
|
77
|
+
const EPMC_MAX_PAGE_SIZE = 1000;
|
|
78
|
+
/** Upper bound on Europe PMC pages pulled for one request. */
|
|
79
|
+
const EPMC_MAX_PAGES = 10;
|
|
64
80
|
/**
|
|
65
|
-
* Fetch enough pages to cover [offset, offset+maxResults)
|
|
66
|
-
*
|
|
67
|
-
*
|
|
81
|
+
* Fetch enough Europe PMC pages to cover [offset, offset+maxResults) in
|
|
82
|
+
* PMID-addressable rows. Europe PMC pages count every upstream record, but
|
|
83
|
+
* non-MED rows carry no PubMed PMID and are dropped, so a single page sized on
|
|
84
|
+
* the raw window can under-fill it. Pages share one size (the endpoint pages by
|
|
85
|
+
* number, so the size must stay constant) and are pulled until the filtered
|
|
86
|
+
* array reaches the window, upstream runs out, or `EPMC_MAX_PAGES` is hit.
|
|
68
87
|
*/
|
|
69
88
|
async function epmcProvider(pmid, relationship, offset, maxResults, signal) {
|
|
70
89
|
const epmc = getEuropePmcService();
|
|
71
|
-
if (!epmc)
|
|
72
|
-
throw
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
90
|
+
if (!epmc) {
|
|
91
|
+
throw configurationError('Europe PMC is turned off by server configuration.', {
|
|
92
|
+
reason: PROVIDER_DISABLED,
|
|
93
|
+
provider: 'europepmc',
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
const needed = offset + maxResults;
|
|
97
|
+
const pageSize = Math.min(needed, EPMC_MAX_PAGE_SIZE);
|
|
98
|
+
const allPmids = [];
|
|
99
|
+
let droppedNoPmid = 0;
|
|
100
|
+
let hitCount = 0;
|
|
101
|
+
let exhausted = false;
|
|
102
|
+
for (let page = 1; page <= EPMC_MAX_PAGES && allPmids.length < needed; page++) {
|
|
103
|
+
const result = relationship === 'cited_by'
|
|
104
|
+
? await epmc.citations(pmid, pageSize, page, signal)
|
|
105
|
+
: await epmc.references(pmid, pageSize, page, signal);
|
|
106
|
+
allPmids.push(...result.pmids);
|
|
107
|
+
droppedNoPmid += result.droppedNoPmid;
|
|
108
|
+
hitCount = result.hitCount;
|
|
109
|
+
const served = result.pmids.length + result.droppedNoPmid;
|
|
110
|
+
if (served < pageSize || page * pageSize >= hitCount) {
|
|
111
|
+
exhausted = true;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
allPmids,
|
|
117
|
+
// Exhausting upstream makes the addressable count exact; otherwise only
|
|
118
|
+
// Europe PMC's own total is known.
|
|
119
|
+
totalCount: exhausted ? allPmids.length : hitCount,
|
|
120
|
+
source: 'europepmc',
|
|
121
|
+
droppedNoPmid,
|
|
122
|
+
reachCapped: !exhausted && allPmids.length < needed,
|
|
123
|
+
};
|
|
83
124
|
}
|
|
84
125
|
// ─── OpenAlex provider ────────────────────────────────────────────────────────
|
|
85
126
|
async function openAlexProvider(pmid, relationship, maxNeeded, signal) {
|
|
86
127
|
const oa = getOpenAlexServiceOptional();
|
|
87
|
-
if (!oa)
|
|
88
|
-
throw
|
|
128
|
+
if (!oa) {
|
|
129
|
+
throw configurationError('OpenAlex is not configured on this server.', {
|
|
130
|
+
reason: PROVIDER_DISABLED,
|
|
131
|
+
provider: 'openalex',
|
|
132
|
+
});
|
|
133
|
+
}
|
|
89
134
|
let result;
|
|
90
135
|
switch (relationship) {
|
|
91
136
|
case 'similar':
|
|
@@ -104,6 +149,33 @@ async function openAlexProvider(pmid, relationship, maxNeeded, signal) {
|
|
|
104
149
|
function describeError(err) {
|
|
105
150
|
return err instanceof Error ? err.message : String(err);
|
|
106
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Record a provider failure with the declared service-contract reason it
|
|
154
|
+
* carries, so the aggregate error names each origin's own failure mode instead
|
|
155
|
+
* of collapsing the chain into one opaque message.
|
|
156
|
+
*/
|
|
157
|
+
function attemptFrom(provider, err) {
|
|
158
|
+
const reason = err instanceof McpError
|
|
159
|
+
? (err.data?.reason ?? UNCLASSIFIED_ERROR)
|
|
160
|
+
: UNCLASSIFIED_ERROR;
|
|
161
|
+
return { provider, reason, message: describeError(err) };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Recovery hint for a fully failed chain. Names only the providers actually
|
|
165
|
+
* attempted and their observed outcomes — never another origin's health — and
|
|
166
|
+
* separates a configuration-disabled provider, which no retry brings back, from
|
|
167
|
+
* the transient failures worth retrying.
|
|
168
|
+
*/
|
|
169
|
+
function allProvidersFailedHint(attempts) {
|
|
170
|
+
const summary = attempts.map((a) => `${PROVIDER_LABELS[a.provider]} (${a.reason})`).join(', ');
|
|
171
|
+
const disabled = attempts
|
|
172
|
+
.filter((a) => a.reason === PROVIDER_DISABLED)
|
|
173
|
+
.map((a) => PROVIDER_LABELS[a.provider]);
|
|
174
|
+
const disabledClause = disabled.length
|
|
175
|
+
? ` ${disabled.join(' and ')} ${disabled.length > 1 ? 'are' : 'is'} turned off by server configuration and will not recover on retry.`
|
|
176
|
+
: '';
|
|
177
|
+
return `Providers attempted: ${summary}. Retry the transient failures after a brief delay.${disabledClause}`;
|
|
178
|
+
}
|
|
107
179
|
// ─── Tool Definition ─────────────────────────────────────────────────────────
|
|
108
180
|
export const findRelatedTool = tool('pubmed_find_related', {
|
|
109
181
|
description: 'Find articles related to a source article — similar content (similar), articles citing this one (cited_by), or articles this one cites (references). Uses NCBI ELink as the primary source; falls back to Europe PMC then OpenAlex when NCBI is unavailable.',
|
|
@@ -114,6 +186,13 @@ export const findRelatedTool = tool('pubmed_find_related', {
|
|
|
114
186
|
...NCBI_SERVICE_ERRORS,
|
|
115
187
|
...EUROPEPMC_SERVICE_ERRORS,
|
|
116
188
|
...OPENALEX_SERVICE_ERRORS,
|
|
189
|
+
{
|
|
190
|
+
reason: 'all_providers_failed',
|
|
191
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
192
|
+
when: 'Every provider eligible for the requested relationship failed; none answered.',
|
|
193
|
+
recovery: 'Read data.attempted for each provider outcome, then retry the transient failures after a brief delay; an entry marked provider_disabled is turned off by server configuration and will not recover.',
|
|
194
|
+
retryable: true,
|
|
195
|
+
},
|
|
117
196
|
],
|
|
118
197
|
input: z.object({
|
|
119
198
|
pmid: pmidStringSchema.describe('Source PubMed ID'),
|
|
@@ -149,14 +228,16 @@ export const findRelatedTool = tool('pubmed_find_related', {
|
|
|
149
228
|
// the answering provider, and recovery guidance. Surfaced via ctx.enrich(...)
|
|
150
229
|
// to structuredContent and content[]; kept out of the domain return.
|
|
151
230
|
enrichment: {
|
|
152
|
-
totalCount: z
|
|
231
|
+
totalCount: z
|
|
232
|
+
.number()
|
|
233
|
+
.describe('Total related articles found before windowing. A Europe PMC total may shrink to the PubMed-addressable count once a request window covers the whole upstream set, since rows without a PubMed PMID cannot be returned.'),
|
|
153
234
|
source: z
|
|
154
235
|
.enum(['ncbi', 'europepmc', 'openalex'])
|
|
155
236
|
.describe('Provider that answered this request'),
|
|
156
237
|
notice: z
|
|
157
238
|
.string()
|
|
158
239
|
.optional()
|
|
159
|
-
.describe('Guidance when results are empty, a fallback provider answered, or
|
|
240
|
+
.describe('Guidance when results are empty, a fallback provider answered, offset overshot, or Europe PMC rows were excluded for carrying no PubMed PMID. Absent on a clean NCBI result page.'),
|
|
160
241
|
},
|
|
161
242
|
enrichmentTrailer: {
|
|
162
243
|
totalCount: { label: 'Total Found' },
|
|
@@ -174,7 +255,13 @@ export const findRelatedTool = tool('pubmed_find_related', {
|
|
|
174
255
|
// success wins, never merged). A non-PMC `references` source returns an empty
|
|
175
256
|
// NCBI set rather than throwing — that structural fallback is handled below.
|
|
176
257
|
let providerResult = null;
|
|
177
|
-
|
|
258
|
+
// Europe PMC's served-but-empty answer, held so a later OpenAlex failure
|
|
259
|
+
// falls back to it: an answer of zero is still an answer, not an outage.
|
|
260
|
+
let epmcEmpty = null;
|
|
261
|
+
// Every provider the chain actually reached, with its outcome. Structurally
|
|
262
|
+
// ineligible providers (Europe PMC for `similar`) and unconfigured ones are
|
|
263
|
+
// never attempted, so they never appear here.
|
|
264
|
+
const attempts = [];
|
|
178
265
|
// Records WHY a non-primary provider answered, so the provenance notice can
|
|
179
266
|
// distinguish an NCBI outage from references coverage for a non-PMC source.
|
|
180
267
|
let fallbackKind;
|
|
@@ -187,7 +274,7 @@ export const findRelatedTool = tool('pubmed_find_related', {
|
|
|
187
274
|
pmid: input.pmid,
|
|
188
275
|
err: describeError(err),
|
|
189
276
|
});
|
|
190
|
-
|
|
277
|
+
attempts.push(attemptFrom('ncbi', err));
|
|
191
278
|
}
|
|
192
279
|
// 2. Europe PMC (fallback for cited_by / references only). An empty EPMC
|
|
193
280
|
// result is not "served" — fall through to OpenAlex rather than return 0.
|
|
@@ -198,45 +285,48 @@ export const findRelatedTool = tool('pubmed_find_related', {
|
|
|
198
285
|
providerResult = epmcResult;
|
|
199
286
|
fallbackKind = 'outage';
|
|
200
287
|
}
|
|
201
|
-
|
|
288
|
+
else {
|
|
289
|
+
epmcEmpty = epmcResult;
|
|
290
|
+
}
|
|
202
291
|
}
|
|
203
292
|
catch (err) {
|
|
204
293
|
ctx.log.warning('Europe PMC fallback failed, trying OpenAlex', {
|
|
205
294
|
pmid: input.pmid,
|
|
206
295
|
err: describeError(err),
|
|
207
296
|
});
|
|
208
|
-
|
|
297
|
+
attempts.push(attemptFrom('europepmc', err));
|
|
209
298
|
}
|
|
210
299
|
}
|
|
211
300
|
// 3. OpenAlex (last resort for all relationships)
|
|
212
301
|
if (providerResult === null) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
err: describeError(err),
|
|
224
|
-
});
|
|
225
|
-
providerError = err;
|
|
226
|
-
}
|
|
302
|
+
try {
|
|
303
|
+
providerResult = await openAlexProvider(input.pmid, input.relationship, input.offset + input.maxResults, ctx.signal);
|
|
304
|
+
fallbackKind = 'outage';
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
ctx.log.warning('OpenAlex fallback failed', {
|
|
308
|
+
pmid: input.pmid,
|
|
309
|
+
err: describeError(err),
|
|
310
|
+
});
|
|
311
|
+
attempts.push(attemptFrom('openalex', err));
|
|
227
312
|
}
|
|
228
313
|
}
|
|
229
|
-
|
|
314
|
+
if (providerResult === null && epmcEmpty) {
|
|
315
|
+
providerResult = epmcEmpty;
|
|
316
|
+
fallbackKind = 'outage';
|
|
317
|
+
}
|
|
318
|
+
// ── Every eligible provider failed ────────────────────────────────────────
|
|
319
|
+
// A request no source answered is a failure, not an empty result set: a
|
|
320
|
+
// success-shaped payload here would invent a provenance and a count for an
|
|
321
|
+
// answer nobody gave. A provider that genuinely answered with zero records
|
|
322
|
+
// set `providerResult` above and never reaches this branch.
|
|
230
323
|
if (providerResult === null) {
|
|
231
|
-
ctx.
|
|
232
|
-
ctx.enrich.total(0);
|
|
233
|
-
ctx.enrich.notice(`All providers failed to retrieve related articles (NCBI, Europe PMC, OpenAlex). Last error: ${describeError(providerError ?? 'unknown')}. Retry after a brief delay.`);
|
|
234
|
-
return {
|
|
324
|
+
throw ctx.fail('all_providers_failed', `No provider could return ${input.relationship} for PMID ${input.pmid}.`, {
|
|
235
325
|
sourcePmid: input.pmid,
|
|
236
326
|
relationship: input.relationship,
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
};
|
|
327
|
+
attempted: attempts,
|
|
328
|
+
recovery: { hint: allProvidersFailedHint(attempts) },
|
|
329
|
+
});
|
|
240
330
|
}
|
|
241
331
|
// ── NCBI returned an empty set ──────────────────────────────────────────────
|
|
242
332
|
// ELink returns an empty LinkSet for both invalid source PMIDs and valid PMIDs
|
|
@@ -328,11 +418,11 @@ export const findRelatedTool = tool('pubmed_find_related', {
|
|
|
328
418
|
}
|
|
329
419
|
}
|
|
330
420
|
// ── Window the result set + enrich ──────────────────────────────────────────
|
|
331
|
-
const { allPmids, totalCount, source } = providerResult;
|
|
421
|
+
const { allPmids, totalCount, source, droppedNoPmid = 0, reachCapped = false } = providerResult;
|
|
332
422
|
ctx.enrich({ source });
|
|
333
423
|
ctx.enrich.total(totalCount);
|
|
334
424
|
// For NCBI the full neighbor set is in memory; for EPMC/OpenAlex the provider
|
|
335
|
-
// pre-fetched enough to cover the window.
|
|
425
|
+
// pre-fetched enough PMID-addressable rows to cover the window.
|
|
336
426
|
const window = allPmids.slice(input.offset, input.offset + input.maxResults);
|
|
337
427
|
// Only the LAST ctx.enrich.notice survives, so collect the applicable
|
|
338
428
|
// fragments (overshoot, provenance, enrichment-degraded) and emit them once.
|
|
@@ -341,7 +431,7 @@ export const findRelatedTool = tool('pubmed_find_related', {
|
|
|
341
431
|
notices.push(`Offset ${input.offset} exceeds totalCount (${totalCount}). Reset offset to 0 or reduce it below ${totalCount} to page through results.`);
|
|
342
432
|
}
|
|
343
433
|
if (source !== 'ncbi') {
|
|
344
|
-
const providerName = source
|
|
434
|
+
const providerName = PROVIDER_LABELS[source];
|
|
345
435
|
const detail = source === 'openalex'
|
|
346
436
|
? input.relationship === 'similar'
|
|
347
437
|
? 'related_works — OpenAlex similarity, not PubMed’s neighbor algorithm'
|
|
@@ -353,6 +443,16 @@ export const findRelatedTool = tool('pubmed_find_related', {
|
|
|
353
443
|
? `NCBI has no PMC-indexed reference list for PMID ${input.pmid} — references served by ${providerName} (${detail}).`
|
|
354
444
|
: `NCBI eLink unavailable — related articles served by ${providerName} (${detail}).`);
|
|
355
445
|
}
|
|
446
|
+
// Europe PMC counts every upstream record, but only MED-source rows carry a
|
|
447
|
+
// PubMed PMID. Disclose the gap so an empty or short window reads as an
|
|
448
|
+
// excluded-rows effect rather than an exhausted result set.
|
|
449
|
+
if (droppedNoPmid > 0) {
|
|
450
|
+
notices.push(`Europe PMC served ${allPmids.length + droppedNoPmid} upstream rows for this request, ${droppedNoPmid} with no PubMed PMID (non-MED sources such as preprints); those rows cannot be returned here.`);
|
|
451
|
+
}
|
|
452
|
+
// The page cap bounds how far into Europe PMC's set one request can reach.
|
|
453
|
+
if (reachCapped) {
|
|
454
|
+
notices.push(`Europe PMC paging stopped after ${EPMC_MAX_PAGES} pages (${allPmids.length} PubMed-addressable rows) without reaching offset ${input.offset}; lower the offset.`);
|
|
455
|
+
}
|
|
356
456
|
if (window.length === 0) {
|
|
357
457
|
if (notices.length > 0)
|
|
358
458
|
ctx.enrich.notice(notices.join(' '));
|
|
@@ -419,9 +519,9 @@ export const findRelatedTool = tool('pubmed_find_related', {
|
|
|
419
519
|
for (const a of result.articles) {
|
|
420
520
|
lines.push(`- **[PMID ${a.pmid}](https://pubmed.ncbi.nlm.nih.gov/${a.pmid}/)**`);
|
|
421
521
|
if (a.title)
|
|
422
|
-
lines.push(` ${a.title}`);
|
|
522
|
+
lines.push(` ${escapeMarkdownInline(a.title)}`);
|
|
423
523
|
if (a.authors)
|
|
424
|
-
lines.push(` *${a.authors}*`);
|
|
524
|
+
lines.push(` *${escapeMarkdownInline(a.authors)}*`);
|
|
425
525
|
const meta = [a.source, a.pubDate].filter(Boolean).join(', ');
|
|
426
526
|
if (meta)
|
|
427
527
|
lines.push(` ${meta}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-related.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/find-related.tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"find-related.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/find-related.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubmed-europepmc-fetch.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"pubmed-europepmc-fetch.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAkGjE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAWvB,oBAAoB;;mBAEtB,6DAA6D;uBACzD,mFAAmF;;;EA+JjG,CAAC"}
|
|
@@ -18,6 +18,7 @@ import { getEuropePmcService } from '../../../services/europe-pmc/europe-pmc-ser
|
|
|
18
18
|
import { EUROPEPMC_ALL_SOURCES } from '../../../services/europe-pmc/types.js';
|
|
19
19
|
import { toDisplayText } from '../../../services/ncbi/parsing/text-helpers.js';
|
|
20
20
|
import { conceptMeta, EDAM_ACCESSION, EDAM_DATA_RETRIEVAL, SCHEMA_SCHOLARLY_ARTICLE, } from './_concepts.js';
|
|
21
|
+
import { escapeMarkdownInline } from './_text.js';
|
|
21
22
|
const SourceEnum = z.enum(EUROPEPMC_ALL_SOURCES);
|
|
22
23
|
/**
|
|
23
24
|
* Europe PMC ids are identifier tokens (`PPR1283828`, `KR20120031038`,
|
|
@@ -41,9 +42,18 @@ const FetchedRecordSchema = z
|
|
|
41
42
|
.object({
|
|
42
43
|
source: SourceEnum.describe('Europe PMC source the record was resolved from'),
|
|
43
44
|
epmcId: z.string().describe("Europe PMC's internal record id"),
|
|
44
|
-
title: z
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
title: z
|
|
46
|
+
.string()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe('Record title as display-ready plain text — JATS/HTML markup stripped and HTML entities decoded.'),
|
|
49
|
+
authors: z
|
|
50
|
+
.string()
|
|
51
|
+
.optional()
|
|
52
|
+
.describe('Formatted author string as display-ready plain text — JATS/HTML markup stripped and HTML entities decoded.'),
|
|
53
|
+
journal: z
|
|
54
|
+
.string()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe('Journal title as display-ready plain text — JATS/HTML markup stripped and HTML entities decoded.'),
|
|
47
57
|
pubYear: z.string().optional().describe('Publication year'),
|
|
48
58
|
firstPublicationDate: z.string().optional().describe('First publication date (ISO YYYY-MM-DD)'),
|
|
49
59
|
pmid: z.string().optional().describe('PMID when present in PubMed'),
|
|
@@ -115,16 +125,23 @@ export const pubmedEuropepmcFetchTool = tool('pubmed_europepmc_fetch', {
|
|
|
115
125
|
}
|
|
116
126
|
const hits = await epmc.fetchRecords(input.records, ctx.signal);
|
|
117
127
|
const records = hits.map((h) => {
|
|
118
|
-
// EPMC returns
|
|
119
|
-
// un-decoded entities, and soft hyphens (no XML parser runs on
|
|
120
|
-
//
|
|
128
|
+
// EPMC returns these as raw JSON strings carrying JATS/HTML markup,
|
|
129
|
+
// un-decoded entities, and soft hyphens (no XML parser runs on them).
|
|
130
|
+
// Title is the confirmed live vector — preprints carry italicized species
|
|
131
|
+
// and gene names — but authors and journal are free-text upstream fields
|
|
132
|
+
// on the same footing, so all three take the single-pass normalization
|
|
133
|
+
// the abstract already gets. (#102) The cleanup mirrors
|
|
134
|
+
// pubmed_europepmc_search; only the truncation is dropped.
|
|
121
135
|
const abstract = h.abstractText ? toDisplayText(h.abstractText) : '';
|
|
136
|
+
const title = h.title ? toDisplayText(h.title) : '';
|
|
137
|
+
const authors = h.authorString ? toDisplayText(h.authorString) : '';
|
|
138
|
+
const journal = h.journalTitle ? toDisplayText(h.journalTitle) : '';
|
|
122
139
|
return {
|
|
123
140
|
source: h.source,
|
|
124
141
|
epmcId: h.id,
|
|
125
|
-
...(
|
|
126
|
-
...(
|
|
127
|
-
...(
|
|
142
|
+
...(title && { title }),
|
|
143
|
+
...(authors && { authors }),
|
|
144
|
+
...(journal && { journal }),
|
|
128
145
|
...(h.pubYear && { pubYear: h.pubYear }),
|
|
129
146
|
...(h.firstPublicationDate && { firstPublicationDate: h.firstPublicationDate }),
|
|
130
147
|
...(h.pmid && { pmid: h.pmid }),
|
|
@@ -180,12 +197,14 @@ export const pubmedEuropepmcFetchTool = tool('pubmed_europepmc_fetch', {
|
|
|
180
197
|
lines.push(`**Not found:** ${result.notFound.map((r) => `${r.source}/${r.epmcId}`).join(', ')}`);
|
|
181
198
|
}
|
|
182
199
|
for (const r of result.records) {
|
|
183
|
-
|
|
200
|
+
// Escaping is render-time only — the structuredContent values above stay
|
|
201
|
+
// plain text; only these interpolations are neutralized. (#102)
|
|
202
|
+
lines.push(`\n### ${escapeMarkdownInline(r.title ?? r.epmcId)}`);
|
|
184
203
|
lines.push(`**Source:** ${r.source} | **EPMC ID:** ${r.epmcId}`);
|
|
185
204
|
if (r.authors)
|
|
186
|
-
lines.push(`**Authors:** ${r.authors}`);
|
|
205
|
+
lines.push(`**Authors:** ${escapeMarkdownInline(r.authors)}`);
|
|
187
206
|
if (r.journal)
|
|
188
|
-
lines.push(`**Journal:** ${r.journal}`);
|
|
207
|
+
lines.push(`**Journal:** ${escapeMarkdownInline(r.journal)}`);
|
|
189
208
|
if (r.firstPublicationDate)
|
|
190
209
|
lines.push(`**Published:** ${r.firstPublicationDate}`);
|
|
191
210
|
if (r.pubYear)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubmed-europepmc-fetch.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EACL,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"pubmed-europepmc-fetch.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubmed-europepmc-search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pubmed-europepmc-search.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA8BjE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAWxB,oBAAoB;;mBAEtB,6DAA6D;uBACzD,mFAAmF;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"pubmed-europepmc-search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pubmed-europepmc-search.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA8BjE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAWxB,oBAAoB;;mBAEtB,6DAA6D;uBACzD,mFAAmF;;;;;;;;;;;;EAiSjG,CAAC"}
|
|
@@ -18,7 +18,7 @@ import { getEuropePmcService } from '../../../services/europe-pmc/europe-pmc-ser
|
|
|
18
18
|
import { EUROPEPMC_ALL_SOURCES, EUROPEPMC_DEFAULT_SOURCES, } from '../../../services/europe-pmc/types.js';
|
|
19
19
|
import { toDisplayText } from '../../../services/ncbi/parsing/text-helpers.js';
|
|
20
20
|
import { conceptMeta, EDAM_DATABASE_SEARCH, EDAM_PUBMED_ID, SCHEMA_SEARCH_ACTION, } from './_concepts.js';
|
|
21
|
-
import { sliceCodeUnits } from './_text.js';
|
|
21
|
+
import { escapeMarkdownInline, sliceCodeUnits } from './_text.js';
|
|
22
22
|
const SourceEnum = z.enum(['MED', 'PMC', 'PPR', 'PAT', 'AGR']);
|
|
23
23
|
/**
|
|
24
24
|
* Character budget for `abstractSnippet`. Keeps a search page bounded no matter
|
|
@@ -81,9 +81,18 @@ export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
|
81
81
|
epmcId: z
|
|
82
82
|
.string()
|
|
83
83
|
.describe("Europe PMC's internal record id. Pass it with this hit's `source` to `pubmed_europepmc_fetch` for the complete record. Europe PMC's `fullTextXML` is keyed on `pmcId`, not on this id, so records without a PMC counterpart have no full text to fetch."),
|
|
84
|
-
title: z
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
title: z
|
|
85
|
+
.string()
|
|
86
|
+
.optional()
|
|
87
|
+
.describe('Article title as display-ready plain text — JATS/HTML markup stripped and HTML entities decoded.'),
|
|
88
|
+
authors: z
|
|
89
|
+
.string()
|
|
90
|
+
.optional()
|
|
91
|
+
.describe('Formatted author string as display-ready plain text — JATS/HTML markup stripped and HTML entities decoded.'),
|
|
92
|
+
journal: z
|
|
93
|
+
.string()
|
|
94
|
+
.optional()
|
|
95
|
+
.describe('Journal title as display-ready plain text — JATS/HTML markup stripped and HTML entities decoded.'),
|
|
87
96
|
pubYear: z.string().optional().describe('Publication year'),
|
|
88
97
|
firstPublicationDate: z
|
|
89
98
|
.string()
|
|
@@ -169,12 +178,19 @@ export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
|
169
178
|
// spent on text and soft hyphens don't corrupt downstream token matching. (#74)
|
|
170
179
|
const abstract = h.abstractText ? toDisplayText(h.abstractText) : '';
|
|
171
180
|
const truncated = abstract.length > ABSTRACT_SNIPPET_LIMIT;
|
|
181
|
+
// Title, authors, and journal arrive on the same footing as the abstract —
|
|
182
|
+
// raw JSON strings no XML parser has touched — so they take the same
|
|
183
|
+
// single-pass normalization. Title is the confirmed live vector:
|
|
184
|
+
// preprints carry italicized species and gene names. (#102)
|
|
185
|
+
const title = h.title ? toDisplayText(h.title) : '';
|
|
186
|
+
const authors = h.authorString ? toDisplayText(h.authorString) : '';
|
|
187
|
+
const journal = h.journalTitle ? toDisplayText(h.journalTitle) : '';
|
|
172
188
|
return {
|
|
173
189
|
source: h.source,
|
|
174
190
|
epmcId: h.id,
|
|
175
|
-
...(
|
|
176
|
-
...(
|
|
177
|
-
...(
|
|
191
|
+
...(title && { title }),
|
|
192
|
+
...(authors && { authors }),
|
|
193
|
+
...(journal && { journal }),
|
|
178
194
|
...(h.pubYear && { pubYear: h.pubYear }),
|
|
179
195
|
...(h.firstPublicationDate && { firstPublicationDate: h.firstPublicationDate }),
|
|
180
196
|
...(h.pmid && { pmid: h.pmid }),
|
|
@@ -237,12 +253,14 @@ export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
|
237
253
|
if (result.hits.length > 0) {
|
|
238
254
|
lines.push('\n### Hits');
|
|
239
255
|
for (const h of result.hits) {
|
|
240
|
-
|
|
256
|
+
// Escaping is render-time only — the structuredContent values above stay
|
|
257
|
+
// plain text; only these interpolations are neutralized. (#102)
|
|
258
|
+
lines.push(`\n#### ${escapeMarkdownInline(h.title ?? h.epmcId)}`);
|
|
241
259
|
lines.push(`**Source:** ${h.source} | **EPMC ID:** ${h.epmcId}`);
|
|
242
260
|
if (h.authors)
|
|
243
|
-
lines.push(`**Authors:** ${h.authors}`);
|
|
261
|
+
lines.push(`**Authors:** ${escapeMarkdownInline(h.authors)}`);
|
|
244
262
|
if (h.journal)
|
|
245
|
-
lines.push(`**Journal:** ${h.journal}`);
|
|
263
|
+
lines.push(`**Journal:** ${escapeMarkdownInline(h.journal)}`);
|
|
246
264
|
if (h.firstPublicationDate)
|
|
247
265
|
lines.push(`**Published:** ${h.firstPublicationDate}`);
|
|
248
266
|
if (h.pubYear)
|