@cyanheads/pubmed-mcp-server 2.10.21 → 2.10.22
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 +2 -2
- package/CLAUDE.md +2 -2
- package/Dockerfile +3 -3
- package/README.md +8 -6
- package/changelog/2.10.x/2.10.22.md +44 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/_budget.d.ts +35 -6
- package/dist/mcp-server/tools/definitions/_budget.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_budget.js +26 -3
- package/dist/mcp-server/tools/definitions/_budget.js.map +1 -1
- package/dist/mcp-server/tools/definitions/_notices.d.ts +33 -0
- package/dist/mcp-server/tools/definitions/_notices.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/_notices.js +35 -0
- package/dist/mcp-server/tools/definitions/_notices.js.map +1 -0
- package/dist/mcp-server/tools/definitions/_schemas.d.ts +14 -0
- package/dist/mcp-server/tools/definitions/_schemas.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_schemas.js +9 -0
- package/dist/mcp-server/tools/definitions/_schemas.js.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts +3 -0
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.js +28 -15
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js +107 -48
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/format-citations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/format-citations.tool.js +3 -16
- package/dist/mcp-server/tools/definitions/format-citations.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js +66 -76
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.d.ts +6 -5
- 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 +11 -17
- 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 +4 -4
- 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 +9 -8
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts +4 -4
- package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/spell-check.tool.js +12 -8
- package/dist/mcp-server/tools/definitions/spell-check.tool.js.map +1 -1
- package/dist/services/error-contracts.d.ts +1 -1
- package/dist/services/error-contracts.d.ts.map +1 -1
- package/dist/services/error-contracts.js +1 -1
- package/dist/services/error-contracts.js.map +1 -1
- package/dist/services/europe-pmc/europe-pmc-service.d.ts +31 -11
- package/dist/services/europe-pmc/europe-pmc-service.d.ts.map +1 -1
- package/dist/services/europe-pmc/europe-pmc-service.js +122 -47
- package/dist/services/europe-pmc/europe-pmc-service.js.map +1 -1
- package/dist/services/europe-pmc/types.d.ts +5 -1
- package/dist/services/europe-pmc/types.d.ts.map +1 -1
- package/dist/services/ncbi/formatting/citation-formatter.d.ts.map +1 -1
- package/dist/services/ncbi/formatting/citation-formatter.js +204 -110
- package/dist/services/ncbi/formatting/citation-formatter.js.map +1 -1
- package/dist/services/ncbi/ncbi-service.d.ts +22 -0
- package/dist/services/ncbi/ncbi-service.d.ts.map +1 -1
- package/dist/services/ncbi/ncbi-service.js +113 -17
- package/dist/services/ncbi/ncbi-service.js.map +1 -1
- package/dist/services/ncbi/parsing/article-parser.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/article-parser.js +11 -4
- package/dist/services/ncbi/parsing/article-parser.js.map +1 -1
- package/dist/services/ncbi/parsing/pmc-article-parser.d.ts +5 -1
- package/dist/services/ncbi/parsing/pmc-article-parser.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/pmc-article-parser.js +85 -31
- package/dist/services/ncbi/parsing/pmc-article-parser.js.map +1 -1
- package/dist/services/ncbi/parsing/pmc-xml-helpers.d.ts +13 -0
- package/dist/services/ncbi/parsing/pmc-xml-helpers.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/pmc-xml-helpers.js +108 -10
- package/dist/services/ncbi/parsing/pmc-xml-helpers.js.map +1 -1
- package/dist/services/ncbi/parsing/text-helpers.d.ts +10 -0
- package/dist/services/ncbi/parsing/text-helpers.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/text-helpers.js +19 -0
- package/dist/services/ncbi/parsing/text-helpers.js.map +1 -1
- package/dist/services/ncbi/response-handler.d.ts +0 -11
- package/dist/services/ncbi/response-handler.d.ts.map +1 -1
- package/dist/services/ncbi/response-handler.js +21 -33
- package/dist/services/ncbi/response-handler.js.map +1 -1
- package/dist/services/ncbi/types.d.ts +30 -30
- package/dist/services/ncbi/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/server.json +3 -3
|
@@ -8,88 +8,62 @@
|
|
|
8
8
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
9
9
|
import { NCBI_SERVICE_ERRORS, QUERY_INPUT_ERRORS } from '../../../services/error-contracts.js';
|
|
10
10
|
import { getNcbiService } from '../../../services/ncbi/ncbi-service.js';
|
|
11
|
-
import { ensureArray, getText } from '../../../services/ncbi/parsing/xml-helpers.js';
|
|
11
|
+
import { ensureArray, getOptionalText, getText } from '../../../services/ncbi/parsing/xml-helpers.js';
|
|
12
12
|
import { conceptMeta, EDAM_DATA_RETRIEVAL, EDAM_ONTOLOGY_TERMINOLOGY, SCHEMA_DEFINED_TERM, SCHEMA_DEFINED_TERM_SET, } from './_concepts.js';
|
|
13
13
|
import { hasVisibleText } from './_visible-text.js';
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* plain sequential UIDs that don't encode a UI (e.g. `2025952`); those aren't decodable, so
|
|
19
|
-
* the raw Entrez UID is returned unchanged.
|
|
15
|
+
* Records the exact-heading (`[MH]`) search reads to choose its pin. A heading
|
|
16
|
+
* matches one record, or two for a drug class (its pharmacological-action record
|
|
17
|
+
* and its descriptor); the rest is headroom.
|
|
20
18
|
*/
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
function getItemText(item) {
|
|
34
|
-
if (!item)
|
|
35
|
-
return '';
|
|
36
|
-
const direct = getText(item, '');
|
|
37
|
-
if (direct)
|
|
38
|
-
return direct;
|
|
39
|
-
const subItems = ensureArray(item.Item);
|
|
40
|
-
return subItems.length > 0 ? getText(subItems[0]) : '';
|
|
41
|
-
}
|
|
42
|
-
function getItemTexts(item) {
|
|
43
|
-
if (!item)
|
|
44
|
-
return [];
|
|
45
|
-
const subItems = ensureArray(item.Item);
|
|
46
|
-
return subItems.map((si) => getText(si)).filter((s) => s.length > 0);
|
|
47
|
-
}
|
|
48
|
-
function extractTreeNumbers(items) {
|
|
49
|
-
const idxLinks = findItem(items, 'DS_IdxLinks');
|
|
50
|
-
if (!idxLinks)
|
|
51
|
-
return [];
|
|
52
|
-
const linkStructures = ensureArray(idxLinks.Item);
|
|
53
|
-
const treeNums = [];
|
|
54
|
-
for (const struct of linkStructures) {
|
|
55
|
-
const structItems = ensureArray(struct.Item);
|
|
56
|
-
const treeItem = findItem(structItems, 'TreeNum');
|
|
57
|
-
const val = treeItem ? getText(treeItem) : '';
|
|
58
|
-
// Supplementary Concept Records (SCRs) surface a non-navigable mapped-heading
|
|
59
|
-
// pointer (e.g. "@218176") in the same TreeNum field. Drop it so treeNumbers
|
|
60
|
-
// holds only real, navigable MeSH tree numbers. (#76)
|
|
61
|
-
if (val && !val.startsWith('@'))
|
|
62
|
-
treeNums.push(val);
|
|
63
|
-
}
|
|
64
|
-
return treeNums;
|
|
19
|
+
const EXACT_MATCH_CANDIDATES = 5;
|
|
20
|
+
/**
|
|
21
|
+
* The record's tree numbers. Two `TreeNum` values are not tree positions: a
|
|
22
|
+
* supplementary concept record's mapped-heading pointer (`@218176`, #76), and the
|
|
23
|
+
* record's own UI, which is the only `TreeNum` a pharmacological-action record
|
|
24
|
+
* carries (#247).
|
|
25
|
+
*/
|
|
26
|
+
function extractTreeNumbers(doc, meshId) {
|
|
27
|
+
const idxLinks = doc.DS_IdxLinks;
|
|
28
|
+
return ensureArray(idxLinks?.LinksType)
|
|
29
|
+
.map((link) => getText(link.TreeNum))
|
|
30
|
+
.filter((treeNum) => treeNum && !treeNum.startsWith('@') && treeNum !== meshId);
|
|
65
31
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
const
|
|
32
|
+
/**
|
|
33
|
+
* Index a `version=2.0` MeSH eSummary by Entrez UID. The canonical UI is read from
|
|
34
|
+
* `DS_MeSHUI`, which every record type carries; the Entrez UID encodes no UI for
|
|
35
|
+
* records added in recent MeSH years or for pharmacological-action records. A
|
|
36
|
+
* `<DocumentSummary>` holding only an `<error>` (a UID with no record) yields no
|
|
37
|
+
* `meshId`. (#238)
|
|
38
|
+
*/
|
|
39
|
+
function parseSummaryRecords(data, includeDetails) {
|
|
40
|
+
const docs = ensureArray(data?.DocumentSummarySet?.DocumentSummary);
|
|
41
|
+
const summaries = new Map();
|
|
42
|
+
for (const doc of docs) {
|
|
43
|
+
const entrezUid = getText(doc['@_uid']);
|
|
44
|
+
const meshId = getOptionalText(doc.DS_MeSHUI);
|
|
45
|
+
const terms = doc.DS_MeshTerms;
|
|
46
|
+
const entryTerms = ensureArray(terms?.string)
|
|
47
|
+
.map((term) => getText(term))
|
|
48
|
+
.filter(Boolean);
|
|
49
|
+
const record = {
|
|
50
|
+
entrezUid,
|
|
51
|
+
...(meshId !== undefined && { meshId }),
|
|
52
|
+
name: entryTerms[0] ?? entrezUid,
|
|
53
|
+
};
|
|
80
54
|
if (includeDetails) {
|
|
81
|
-
const scopeNote =
|
|
55
|
+
const scopeNote = getOptionalText(doc.DS_ScopeNote);
|
|
82
56
|
if (scopeNote)
|
|
83
57
|
record.scopeNote = scopeNote;
|
|
84
|
-
const entryTerms = getItemTexts(findItem(items, 'DS_MeshTerms'));
|
|
85
58
|
if (entryTerms.length > 0)
|
|
86
59
|
record.entryTerms = entryTerms;
|
|
87
|
-
const treeNumbers = extractTreeNumbers(
|
|
60
|
+
const treeNumbers = extractTreeNumbers(doc, meshId);
|
|
88
61
|
if (treeNumbers.length > 0)
|
|
89
62
|
record.treeNumbers = treeNumbers;
|
|
90
63
|
}
|
|
91
|
-
|
|
92
|
-
}
|
|
64
|
+
summaries.set(entrezUid, { record, recordType: getOptionalText(doc.DS_RecordType) });
|
|
65
|
+
}
|
|
66
|
+
return summaries;
|
|
93
67
|
}
|
|
94
68
|
// ─── Tool Definition ─────────────────────────────────────────────────────────
|
|
95
69
|
export const lookupMeshTool = tool('pubmed_lookup_mesh', {
|
|
@@ -141,7 +115,8 @@ export const lookupMeshTool = tool('pubmed_lookup_mesh', {
|
|
|
141
115
|
.object({
|
|
142
116
|
meshId: z
|
|
143
117
|
.string()
|
|
144
|
-
.
|
|
118
|
+
.optional()
|
|
119
|
+
.describe('Canonical MeSH unique identifier (e.g. "D003924", "C000626284", "Q000009") — resolves at the MeSH Browser and NLM linked data. A pharmacological-action record carries its descriptor\'s UI. Omitted only when eSummary returned no record for this UID.'),
|
|
145
120
|
entrezUid: z
|
|
146
121
|
.string()
|
|
147
122
|
.describe('NCBI Entrez UID for this record — the join key for E-utilities (eSummary/eFetch db=mesh).'),
|
|
@@ -149,7 +124,7 @@ export const lookupMeshTool = tool('pubmed_lookup_mesh', {
|
|
|
149
124
|
treeNumbers: z
|
|
150
125
|
.array(z.string())
|
|
151
126
|
.optional()
|
|
152
|
-
.describe('Navigable MeSH tree numbers (e.g. "D02.078.370.141.450"). Omitted for supplementary concept records (SCRs), which map to a heading rather than occupying a tree position.'),
|
|
127
|
+
.describe('Navigable MeSH tree numbers (e.g. "D02.078.370.141.450"). Omitted for supplementary concept records (SCRs), which map to a heading rather than occupying a tree position, and for pharmacological-action records, whose descriptor carries the tree positions.'),
|
|
153
128
|
scopeNote: z.string().optional().describe('Scope note'),
|
|
154
129
|
entryTerms: z.array(z.string()).optional().describe('Synonyms / entry terms'),
|
|
155
130
|
})
|
|
@@ -187,10 +162,24 @@ export const lookupMeshTool = tool('pubmed_lookup_mesh', {
|
|
|
187
162
|
// hold back. The first page leads with it; later pages skip it where it ranks.
|
|
188
163
|
const exactSearch = hasFieldTag
|
|
189
164
|
? undefined
|
|
190
|
-
: ncbi.eSearch({ db: 'mesh', term: `${query}[MH]`, retmax:
|
|
165
|
+
: ncbi.eSearch({ db: 'mesh', term: `${query}[MH]`, retmax: EXACT_MATCH_CANDIDATES }, callOpts);
|
|
191
166
|
const [broadResult, exactResult] = await Promise.all([broadSearch, exactSearch]);
|
|
192
167
|
const totalCount = broadResult.count;
|
|
193
|
-
const
|
|
168
|
+
const exactIds = exactResult?.idList ?? [];
|
|
169
|
+
const fetchSummaries = (uids) => ncbi
|
|
170
|
+
.eSummary({ db: 'mesh', id: uids.join(','), version: '2.0' }, callOpts)
|
|
171
|
+
.then((data) => parseSummaryRecords(data, includeDetails));
|
|
172
|
+
// A drug-class heading matches its pharmacological-action record ahead of its
|
|
173
|
+
// descriptor. When the heading matches more than one record and this page
|
|
174
|
+
// leads with the pin or holds a candidate at its rank, read the record types
|
|
175
|
+
// first — the page's own summaries ride the same request — and pin the first
|
|
176
|
+
// that is not a pharmacological-action record. (#247)
|
|
177
|
+
const pinShapesPage = offset === 0 || exactIds.some((id) => broadResult.idList.includes(id));
|
|
178
|
+
const prefetched = exactIds.length > 1 && pinShapesPage
|
|
179
|
+
? await fetchSummaries([...new Set([...exactIds, ...broadResult.idList])])
|
|
180
|
+
: undefined;
|
|
181
|
+
const pinnedUid = exactIds.find((id) => prefetched?.get(id)?.recordType !== 'pharmacological-action') ??
|
|
182
|
+
exactIds[0];
|
|
194
183
|
const ids = [];
|
|
195
184
|
if (pinnedUid !== undefined && offset === 0)
|
|
196
185
|
ids.push(pinnedUid);
|
|
@@ -228,8 +217,8 @@ export const lookupMeshTool = tool('pubmed_lookup_mesh', {
|
|
|
228
217
|
ctx.enrich.notice(notice);
|
|
229
218
|
return { query, offset, ...(hasMore && { nextOffset }), results: [] };
|
|
230
219
|
}
|
|
231
|
-
const
|
|
232
|
-
const results =
|
|
220
|
+
const summaries = prefetched ?? (await fetchSummaries(ids));
|
|
221
|
+
const results = ids.map((id) => summaries.get(id)?.record ?? { entrezUid: id, name: id });
|
|
233
222
|
const queryLower = query.toLowerCase();
|
|
234
223
|
results.sort((a, b) => {
|
|
235
224
|
const aExact = a.name.toLowerCase() === queryLower ? 0 : 1;
|
|
@@ -255,7 +244,8 @@ export const lookupMeshTool = tool('pubmed_lookup_mesh', {
|
|
|
255
244
|
}
|
|
256
245
|
for (const r of result.results) {
|
|
257
246
|
lines.push(`\n## ${r.name}`);
|
|
258
|
-
|
|
247
|
+
if (r.meshId)
|
|
248
|
+
lines.push(`- **MeSH ID:** ${r.meshId}`);
|
|
259
249
|
lines.push(`- **Entrez UID:** ${r.entrezUid}`);
|
|
260
250
|
if (r.treeNumbers?.length)
|
|
261
251
|
lines.push(`- **Tree Numbers:** ${r.treeNumbers.join(', ')}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup-mesh.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/lookup-mesh.tool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"lookup-mesh.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/lookup-mesh.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* and returns each one's complete, untruncated abstract. That pair is the only
|
|
5
5
|
* identifier many PPR, PAT, and AGR records carry, so `pubmed_fetch_articles`
|
|
6
6
|
* (PMIDs) and `pubmed_fetch_fulltext` (PMCIDs / PMIDs / DOIs) cannot reach them.
|
|
7
|
+
* A lower-case `source` is read as its upper-case code.
|
|
7
8
|
*
|
|
8
9
|
* Only registered when `EUROPEPMC_ENABLED=true` (the default). The handler
|
|
9
10
|
* fails fast with a configuration error if the service is unset, since the
|
|
@@ -15,13 +16,13 @@ import { z } from '@cyanheads/mcp-ts-core';
|
|
|
15
16
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
16
17
|
export declare const pubmedEuropepmcFetchTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
17
18
|
records: z.ZodArray<z.ZodObject<{
|
|
18
|
-
source: z.ZodEnum<{
|
|
19
|
+
source: z.ZodPreprocess<z.ZodEnum<{
|
|
19
20
|
AGR: "AGR";
|
|
20
21
|
MED: "MED";
|
|
21
22
|
PAT: "PAT";
|
|
22
23
|
PMC: "PMC";
|
|
23
24
|
PPR: "PPR";
|
|
24
|
-
}>;
|
|
25
|
+
}>, unknown>;
|
|
25
26
|
epmcId: z.ZodString;
|
|
26
27
|
}, z.core.$strip>>;
|
|
27
28
|
maxResponseCharacters: z.ZodOptional<z.ZodNumber>;
|
|
@@ -50,13 +51,13 @@ export declare const pubmedEuropepmcFetchTool: import("@cyanheads/mcp-ts-core").
|
|
|
50
51
|
epmcUrl: z.ZodString;
|
|
51
52
|
}, z.core.$strip>>;
|
|
52
53
|
notFound: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
53
|
-
source: z.ZodEnum<{
|
|
54
|
+
source: z.ZodPreprocess<z.ZodEnum<{
|
|
54
55
|
AGR: "AGR";
|
|
55
56
|
MED: "MED";
|
|
56
57
|
PAT: "PAT";
|
|
57
58
|
PMC: "PMC";
|
|
58
59
|
PPR: "PPR";
|
|
59
|
-
}>;
|
|
60
|
+
}>, unknown>;
|
|
60
61
|
epmcId: z.ZodString;
|
|
61
62
|
}, z.core.$strip>>>;
|
|
62
63
|
deferred: z.ZodOptional<z.ZodObject<{
|
|
@@ -92,7 +93,7 @@ export declare const pubmedEuropepmcFetchTool: import("@cyanheads/mcp-ts-core").
|
|
|
92
93
|
}, {
|
|
93
94
|
readonly reason: 'europepmc_invalid_input';
|
|
94
95
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
95
|
-
readonly when: 'Europe PMC rejected the request input — an error message in place of results, an empty response to a sort with an undocumented field or
|
|
96
|
+
readonly when: 'Europe PMC rejected the request input — an error message in place of results; a sort it cannot use (one whose keys are not each a field plus asc/desc, rejected before any request; an empty response to a sort with an undocumented field; or a second HTTP 503 to a sorted search when the same query without the sort is served); or a pagination cursor it cannot read (an empty response on the last attempt the retry budget allows, or a second HTTP 503 when the first page of the same query is served).';
|
|
96
97
|
readonly recovery: "Fix the rejected input before retrying — the query, the sort, or the cursorMark (pass the previous response's `nextCursorMark` verbatim, or `*` to restart); the same input will most likely be rejected again.";
|
|
97
98
|
readonly retryable: false;
|
|
98
99
|
readonly thrownBy: 'service';
|
|
@@ -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
|
|
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;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAkIjE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAWvB,oBAAoB;;mBAEtB,6DAA6D;uBACzD,mFAAmF;;;;EA8NjG,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* and returns each one's complete, untruncated abstract. That pair is the only
|
|
5
5
|
* identifier many PPR, PAT, and AGR records carry, so `pubmed_fetch_articles`
|
|
6
6
|
* (PMIDs) and `pubmed_fetch_fulltext` (PMCIDs / PMIDs / DOIs) cannot reach them.
|
|
7
|
+
* A lower-case `source` is read as its upper-case code.
|
|
7
8
|
*
|
|
8
9
|
* Only registered when `EUROPEPMC_ENABLED=true` (the default). The handler
|
|
9
10
|
* fails fast with a configuration error if the service is unset, since the
|
|
@@ -17,8 +18,9 @@ import { EUROPEPMC_SERVICE_ERRORS } from '../../../services/error-contracts.js';
|
|
|
17
18
|
import { getEuropePmcService } from '../../../services/europe-pmc/europe-pmc-service.js';
|
|
18
19
|
import { EUROPEPMC_ALL_SOURCES } from '../../../services/europe-pmc/types.js';
|
|
19
20
|
import { toDisplayText } from '../../../services/ncbi/parsing/text-helpers.js';
|
|
20
|
-
import { fitWholeItems } from './_budget.js';
|
|
21
|
+
import { buildDeferralNotice, fitWholeItems } from './_budget.js';
|
|
21
22
|
import { conceptMeta, EDAM_ACCESSION, EDAM_DATA_RETRIEVAL, SCHEMA_SCHOLARLY_ARTICLE, } from './_concepts.js';
|
|
23
|
+
import { europePmcSourceInputSchema } from './_schemas.js';
|
|
22
24
|
import { escapeMarkdownInline } from './_text.js';
|
|
23
25
|
const SourceEnum = z.enum(EUROPEPMC_ALL_SOURCES);
|
|
24
26
|
/**
|
|
@@ -35,7 +37,7 @@ const epmcIdSchema = z
|
|
|
35
37
|
const PMCID_SHAPED_RE = /^PMC\d+$/i;
|
|
36
38
|
const RecordRefSchema = z
|
|
37
39
|
.object({
|
|
38
|
-
source:
|
|
40
|
+
source: europePmcSourceInputSchema.describe("Europe PMC source corpus — `MED` (PubMed), `PMC` (PubMed Central), `PPR` (preprint), `PAT` (patent), `AGR` (Agricola). Copy it from the search hit's `source`. `PMC` paired with a PMCID resolves whether or not the article is also indexed in PubMed, and a PubMed-indexed one comes back as its canonical `MED` record carrying that PMCID in `pmcId`."),
|
|
39
41
|
epmcId: epmcIdSchema.describe("Europe PMC's own record id within that source. Copy it from the search hit's `epmcId` — for `MED` records this is the PMID; for the other sources it is an EPMC-native accession."),
|
|
40
42
|
})
|
|
41
43
|
.describe('One record address: the Europe PMC source corpus plus its id within that corpus');
|
|
@@ -95,12 +97,12 @@ const DeferredSchema = z
|
|
|
95
97
|
.describe("The deferred records, in response order, each as the resolved record's own `source` + `epmcId` — a `PMC` request answered by its `MED` record is listed as that `MED` pair. Pass them back as `records` to retrieve them. Never contains a pair from `notFound`."),
|
|
96
98
|
nextDeferredCharacters: z
|
|
97
99
|
.number()
|
|
98
|
-
.describe('Serialized size of the next deferred record — the first entry in `records`, where the response stopped
|
|
100
|
+
.describe('Serialized size of the next deferred record — the first entry in `records`, where the response stopped — and the continuation ceiling: re-calling with the deferred pairs needs `maxResponseCharacters` ≥ this to return anything, and a smaller record further down `records` cannot be reached until this one fits. Repeating this same call needs `maxResponseCharacters` ≥ `returnedCharacters` + this to return this record as well.'),
|
|
99
101
|
})
|
|
100
102
|
.describe('Continuation state for records the whole-response budget withheld. Present only when `maxResponseCharacters` deferred at least one record.');
|
|
101
103
|
// ─── Tool Definition ─────────────────────────────────────────────────────────
|
|
102
104
|
export const pubmedEuropepmcFetchTool = tool('pubmed_europepmc_fetch', {
|
|
103
|
-
description: "Fetch complete Europe PMC records — including the full, untruncated abstract —
|
|
105
|
+
description: "Fetch complete Europe PMC records — including the full, untruncated abstract — addressed as `records: [{ source, epmcId }]`, an array even for one record. Pairs with `pubmed_europepmc_search`, which returns bounded `abstractSnippet` values and flags cut ones with `abstractTruncated: true`; copy each hit's `source` and `epmcId` into `records` here to read the whole abstract. This is the retrieval path for preprint (`PPR`), patent (`PAT`), and Agricola (`AGR`) records, which frequently carry no PMID and no DOI, so `pubmed_fetch_articles` and `pubmed_fetch_fulltext` cannot address them. Up to 25 records per call. Set `maxResponseCharacters` to bound the whole response: records past the ceiling are deferred whole and listed in `deferred.records` for a follow-up call.",
|
|
104
106
|
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
105
107
|
_meta: conceptMeta([SCHEMA_SCHOLARLY_ARTICLE, EDAM_DATA_RETRIEVAL, EDAM_ACCESSION]),
|
|
106
108
|
sourceUrl: 'https://github.com/cyanheads/pubmed-mcp-server/blob/main/src/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.ts',
|
|
@@ -244,7 +246,11 @@ export const pubmedEuropepmcFetchTool = tool('pubmed_europepmc_fetch', {
|
|
|
244
246
|
}
|
|
245
247
|
if (deferred) {
|
|
246
248
|
ctx.enrich({ truncated: true });
|
|
247
|
-
notices.push(buildDeferralNotice(deferred
|
|
249
|
+
notices.push(buildDeferralNotice(deferred, {
|
|
250
|
+
noun: 'record',
|
|
251
|
+
ids: deferred.records.map(formatPair).join(', '),
|
|
252
|
+
recall: 'pubmed_europepmc_fetch with those pairs as `records: [{ source, epmcId }]`',
|
|
253
|
+
}));
|
|
248
254
|
}
|
|
249
255
|
if (notices.length > 0)
|
|
250
256
|
ctx.enrich.notice(notices.join(' '));
|
|
@@ -301,16 +307,4 @@ export const pubmedEuropepmcFetchTool = tool('pubmed_europepmc_fetch', {
|
|
|
301
307
|
function formatPair(pair) {
|
|
302
308
|
return `${pair.source}/${pair.epmcId}`;
|
|
303
309
|
}
|
|
304
|
-
/**
|
|
305
|
-
* Compose the recovery notice for a response the whole-response budget bounded.
|
|
306
|
-
* Names what was spent, which pairs are still retrievable, and the ceiling the
|
|
307
|
-
* next call has to clear — so a caller reading only `content[]` can resume
|
|
308
|
-
* without inspecting `deferred`. (#188)
|
|
309
|
-
*/
|
|
310
|
-
function buildDeferralNotice(deferred) {
|
|
311
|
-
const spent = deferred.returnedCharacters === 0
|
|
312
|
-
? `The first record alone exceeds the requested maxResponseCharacters of ${deferred.maxResponseCharacters}, so none were returned.`
|
|
313
|
-
: `Response character budget reached: ${deferred.returnedCharacters} of ${deferred.maxResponseCharacters} characters returned.`;
|
|
314
|
-
return `${spent} ${deferred.deferredCount} resolved record(s) were deferred whole: ${deferred.records.map(formatPair).join(', ')}. Re-call pubmed_europepmc_fetch with those pairs as \`records\` to retrieve them, or raise maxResponseCharacters to at least ${deferred.nextDeferredCharacters} — the size of the next deferred record.`;
|
|
315
|
-
}
|
|
316
310
|
//# sourceMappingURL=pubmed-europepmc-fetch.tool.js.map
|
|
@@ -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":"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"}
|
|
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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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* because EPMC's search API doesn't support offset. `max_results`, `limit`, and
|
|
7
7
|
* `maxResults` are accepted as aliases for `pageSize`. A `query` with no search
|
|
8
8
|
* term (`()`, `<b></b>`) or a blank `cursorMark` is rejected before Europe PMC
|
|
9
|
-
* is called.
|
|
9
|
+
* is called. A lower-case `sources` code is read as its upper-case form.
|
|
10
10
|
* The total hit count rides in `output` so `format()` can state it in the
|
|
11
11
|
* header, and `searchUrl` opens the source-filtered query Europe PMC actually
|
|
12
12
|
* ran.
|
|
@@ -23,13 +23,13 @@ export declare const pubmedEuropepmcSearchTool: import("@cyanheads/mcp-ts-core")
|
|
|
23
23
|
query: z.ZodString;
|
|
24
24
|
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
25
25
|
cursorMark: z.ZodDefault<z.ZodString>;
|
|
26
|
-
sources: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
26
|
+
sources: z.ZodOptional<z.ZodArray<z.ZodPreprocess<z.ZodEnum<{
|
|
27
27
|
AGR: "AGR";
|
|
28
28
|
MED: "MED";
|
|
29
29
|
PAT: "PAT";
|
|
30
30
|
PMC: "PMC";
|
|
31
31
|
PPR: "PPR";
|
|
32
|
-
}>>>;
|
|
32
|
+
}>, unknown>>>;
|
|
33
33
|
resultType: z.ZodDefault<z.ZodEnum<{
|
|
34
34
|
core: "core";
|
|
35
35
|
lite: "lite";
|
|
@@ -81,7 +81,7 @@ export declare const pubmedEuropepmcSearchTool: import("@cyanheads/mcp-ts-core")
|
|
|
81
81
|
}, {
|
|
82
82
|
readonly reason: 'europepmc_invalid_input';
|
|
83
83
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
84
|
-
readonly when: 'Europe PMC rejected the request input — an error message in place of results, an empty response to a sort with an undocumented field or
|
|
84
|
+
readonly when: 'Europe PMC rejected the request input — an error message in place of results; a sort it cannot use (one whose keys are not each a field plus asc/desc, rejected before any request; an empty response to a sort with an undocumented field; or a second HTTP 503 to a sorted search when the same query without the sort is served); or a pagination cursor it cannot read (an empty response on the last attempt the retry budget allows, or a second HTTP 503 when the first page of the same query is served).';
|
|
85
85
|
readonly recovery: "Fix the rejected input before retrying — the query, the sort, or the cursorMark (pass the previous response's `nextCursorMark` verbatim, or `*` to restart); the same input will most likely be rejected again.";
|
|
86
86
|
readonly retryable: false;
|
|
87
87
|
readonly thrownBy: 'service';
|
|
@@ -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;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
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;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAiCjE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAYxB,cAAc;;mBAEhB,gLAAgL;uBAEpL,gIAAgI;;;qBAI1H,oBAAoB;;mBAEtB,6DAA6D;uBACzD,mFAAmF;;;;;;;;;;;EAgUjG,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* because EPMC's search API doesn't support offset. `max_results`, `limit`, and
|
|
7
7
|
* `maxResults` are accepted as aliases for `pageSize`. A `query` with no search
|
|
8
8
|
* term (`()`, `<b></b>`) or a blank `cursorMark` is rejected before Europe PMC
|
|
9
|
-
* is called.
|
|
9
|
+
* is called. A lower-case `sources` code is read as its upper-case form.
|
|
10
10
|
* The total hit count rides in `output` so `format()` can state it in the
|
|
11
11
|
* header, and `searchUrl` opens the source-filtered query Europe PMC actually
|
|
12
12
|
* ran.
|
|
@@ -25,6 +25,7 @@ import { getEuropePmcService } from '../../../services/europe-pmc/europe-pmc-ser
|
|
|
25
25
|
import { EUROPEPMC_ALL_SOURCES, EUROPEPMC_DEFAULT_SOURCES, } from '../../../services/europe-pmc/types.js';
|
|
26
26
|
import { toDisplayText } from '../../../services/ncbi/parsing/text-helpers.js';
|
|
27
27
|
import { conceptMeta, EDAM_DATABASE_SEARCH, EDAM_PUBMED_ID, SCHEMA_SEARCH_ACTION, } from './_concepts.js';
|
|
28
|
+
import { europePmcSourceInputSchema } from './_schemas.js';
|
|
28
29
|
import { escapeMarkdownInline, sliceCodeUnits } from './_text.js';
|
|
29
30
|
import { hasVisibleText } from './_visible-text.js';
|
|
30
31
|
const SourceEnum = z.enum(['MED', 'PMC', 'PPR', 'PAT', 'AGR']);
|
|
@@ -38,7 +39,7 @@ const SourceEnum = z.enum(['MED', 'PMC', 'PPR', 'PAT', 'AGR']);
|
|
|
38
39
|
const ABSTRACT_SNIPPET_LIMIT = 400;
|
|
39
40
|
// ─── Tool Definition ─────────────────────────────────────────────────────────
|
|
40
41
|
export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
41
|
-
description: 'Search Europe PMC, a broad open-access biomedical corpus. Surfaces preprints (`source: PPR`), patents (`source: PAT`), Agricola (`source: AGR`), plus everything in PubMed (`MED`) and PMC. Use when additional coverage is needed — preprints and EPMC-only OA records are the typical recovery. Paginate via `cursorMark`. Defaults to `MED`, `PMC`, and `PPR`; pass `sources` to include `PAT` / `AGR`. Abstracts arrive as a bounded `abstractSnippet` with `abstractTruncated` marking the cut ones — pass a hit
|
|
42
|
+
description: 'Search Europe PMC, a broad open-access biomedical corpus. Surfaces preprints (`source: PPR`), patents (`source: PAT`), Agricola (`source: AGR`), plus everything in PubMed (`MED`) and PMC. Use when additional coverage is needed — preprints and EPMC-only OA records are the typical recovery. Paginate via `cursorMark`. Defaults to `MED`, `PMC`, and `PPR`; pass `sources` to include `PAT` / `AGR`. Abstracts arrive as a bounded `abstractSnippet` with `abstractTruncated` marking the cut ones — pass a hit to `pubmed_europepmc_fetch` as `records: [{ source, epmcId }]` for the complete abstract.',
|
|
42
43
|
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
43
44
|
_meta: conceptMeta([SCHEMA_SEARCH_ACTION, EDAM_DATABASE_SEARCH, EDAM_PUBMED_ID]),
|
|
44
45
|
sourceUrl: 'https://github.com/cyanheads/pubmed-mcp-server/blob/main/src/mcp-server/tools/definitions/pubmed-europepmc-search.tool.ts',
|
|
@@ -80,7 +81,7 @@ export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
|
80
81
|
.default('*')
|
|
81
82
|
.describe("Pagination cursor. Use `*` (default) for the first page; pass the previous response's `nextCursorMark` verbatim for subsequent pages. A whitespace-only cursor, invisible characters included, is rejected before the request, and a cursor Europe PMC cannot read fails with `europepmc_invalid_input` once a retry of it fails again while the first page of the same query is served."),
|
|
82
83
|
sources: z
|
|
83
|
-
.array(
|
|
84
|
+
.array(europePmcSourceInputSchema)
|
|
84
85
|
.min(1)
|
|
85
86
|
.optional()
|
|
86
87
|
.describe(`Filter to specific EPMC sources. Defaults to ${EUROPEPMC_DEFAULT_SOURCES.join(', ')} when omitted. Pass an explicit array including PAT or AGR to broaden coverage. Allowed values: ${EUROPEPMC_ALL_SOURCES.join(', ')}.`),
|
|
@@ -91,7 +92,7 @@ export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
|
91
92
|
sort: z
|
|
92
93
|
.string()
|
|
93
94
|
.optional()
|
|
94
|
-
.describe('Optional EPMC sort: `<field> asc|desc`, or several comma-separated keys applied in order (`PUB_YEAR desc, CITED desc`). Documented sortable fields: `P_PDATE_D` (publication date), `CITED` (citation count), `AUTH_FIRST` (first author surname), `PUB_YEAR` (publication year). Examples: `P_PDATE_D desc` (newest first), `CITED desc` (most cited). Omit for relevance ranking. Field and direction match case-insensitively. A field outside the documented set may be honored, silently ignored, or
|
|
95
|
+
.describe('Optional EPMC sort: `<field> asc|desc`, or several comma-separated keys applied in order (`PUB_YEAR desc, CITED desc`). Documented sortable fields: `P_PDATE_D` (publication date), `CITED` (citation count), `AUTH_FIRST` (first author surname), `PUB_YEAR` (publication year), `FIRST_IDATE_D` (date first indexed in Europe PMC). Examples: `P_PDATE_D desc` (newest first), `CITED desc` (most cited). Omit for relevance ranking; `relevance` or `relevance desc` is sent as no sort. Field and direction match case-insensitively. Each key must be one field plus `asc` or `desc`: a key without a direction, an empty key, or an extra word fails with `europepmc_invalid_input` before the request. A field outside the documented set may be honored, silently ignored, or refused — a sort Europe PMC refuses fails with `europepmc_invalid_input` naming it, and an empty Europe PMC response to a sort with an undocumented field fails the same way, even when Europe PMC honors the field. Note: `P_PDATE_D` is ignored for preprint-only (`sources: ["PPR"]`) result sets — preprints have no populated publication date, so use `PUB_YEAR desc` to order preprints by date.'),
|
|
95
96
|
}),
|
|
96
97
|
output: z.object({
|
|
97
98
|
hits: z
|
|
@@ -100,7 +101,7 @@ export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
|
100
101
|
source: SourceEnum.describe('Europe PMC source — `MED` (PubMed), `PMC` (PubMed Central), `PPR` (preprint), `PAT` (patent), `AGR` (Agricola)'),
|
|
101
102
|
epmcId: z
|
|
102
103
|
.string()
|
|
103
|
-
.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."),
|
|
104
|
+
.describe("Europe PMC's internal record id. Pass it with this hit's `source` to `pubmed_europepmc_fetch` as `records: [{ source, epmcId }]` 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."),
|
|
104
105
|
title: z
|
|
105
106
|
.string()
|
|
106
107
|
.optional()
|
|
@@ -139,7 +140,7 @@ export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
|
139
140
|
abstractTruncated: z
|
|
140
141
|
.boolean()
|
|
141
142
|
.optional()
|
|
142
|
-
.describe('Whether `abstractSnippet` was cut short of the full abstract. Retrieve the complete text
|
|
143
|
+
.describe('Whether `abstractSnippet` was cut short of the full abstract. Retrieve the complete text by passing this record to `pubmed_europepmc_fetch` as `records: [{ source, epmcId }]`. Present whenever `abstractSnippet` is; omitted when Europe PMC carries no abstract.'),
|
|
143
144
|
citedByCount: z.number().optional().describe('Citation count reported by Europe PMC'),
|
|
144
145
|
epmcUrl: z.string().describe('Europe PMC article URL'),
|
|
145
146
|
})
|
|
@@ -261,7 +262,7 @@ export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
|
261
262
|
}
|
|
262
263
|
else if (sortField === 'P_PDATE_D' && isPprOnly) {
|
|
263
264
|
notice =
|
|
264
|
-
'Europe PMC ignores `P_PDATE_D` sort for preprint-only (PPR) results — preprints have no populated publication date, so records are returned in relevance order, not by date. To order preprints by date, sort by `PUB_YEAR`, or re-rank the returned page by each record’s `firstPublicationDate`.';
|
|
265
|
+
'Europe PMC ignores `P_PDATE_D` sort for preprint-only (PPR) results — preprints have no populated publication date, so records are returned in relevance order, not by date. To order preprints by date, sort by `PUB_YEAR desc`, or re-rank the returned page by each record’s `firstPublicationDate`.';
|
|
265
266
|
}
|
|
266
267
|
ctx.log.info('pubmed_europepmc_search completed', {
|
|
267
268
|
hitCount: result.hitCount,
|
|
@@ -323,7 +324,7 @@ export const pubmedEuropepmcSearchTool = tool('pubmed_europepmc_search', {
|
|
|
323
324
|
if (h.abstractSnippet) {
|
|
324
325
|
lines.push(`\n${h.abstractSnippet}`);
|
|
325
326
|
if (h.abstractTruncated) {
|
|
326
|
-
lines.push(`_Abstract truncated at ${ABSTRACT_SNIPPET_LIMIT} characters —
|
|
327
|
+
lines.push(`_Abstract truncated at ${ABSTRACT_SNIPPET_LIMIT} characters — pass this hit to \`pubmed_europepmc_fetch\` as \`records: [{ source, epmcId }]\` for the complete text._`);
|
|
327
328
|
}
|
|
328
329
|
}
|
|
329
330
|
}
|