@cyanheads/pubmed-mcp-server 2.9.4 → 2.9.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/AGENTS.md +1 -1
- package/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js +28 -5
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js.map +1 -1
- package/dist/services/ncbi/api-client.d.ts +12 -0
- package/dist/services/ncbi/api-client.d.ts.map +1 -1
- package/dist/services/ncbi/api-client.js +20 -10
- package/dist/services/ncbi/api-client.js.map +1 -1
- package/package.json +2 -2
- package/server.json +3 -3
package/AGENTS.md
CHANGED
package/CLAUDE.md
CHANGED
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/pubmed-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/pubmed-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
13
13
|
|
|
14
14
|
</div>
|
|
15
15
|
|
|
@@ -12,6 +12,7 @@ export declare const lookupMeshTool: import("@cyanheads/mcp-ts-core").ToolDefini
|
|
|
12
12
|
query: z.ZodString;
|
|
13
13
|
results: z.ZodArray<z.ZodObject<{
|
|
14
14
|
meshId: z.ZodString;
|
|
15
|
+
entrezUid: z.ZodString;
|
|
15
16
|
name: z.ZodString;
|
|
16
17
|
treeNumbers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
18
|
scopeNote: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup-mesh.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/lookup-mesh.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"lookup-mesh.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/lookup-mesh.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AA0GjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2HzB,CAAC"}
|
|
@@ -8,6 +8,22 @@ import { NCBI_SERVICE_ERRORS } from '../../../services/error-contracts.js';
|
|
|
8
8
|
import { getNcbiService } from '../../../services/ncbi/ncbi-service.js';
|
|
9
9
|
import { ensureArray, getText } from '../../../services/ncbi/parsing/xml-helpers.js';
|
|
10
10
|
import { conceptMeta, EDAM_DATA_RETRIEVAL, EDAM_ONTOLOGY_TERMINOLOGY, SCHEMA_DEFINED_TERM, SCHEMA_DEFINED_TERM_SET, } from './_concepts.js';
|
|
11
|
+
/**
|
|
12
|
+
* NCBI Entrez mesh UIDs encode the canonical MeSH DescriptorUI as the ASCII code of the
|
|
13
|
+
* UI's letter prefix followed by its 6-digit number: D=68, C=67 (supplementary concept),
|
|
14
|
+
* Q=81 (qualifier). So `68003924` → `D003924`. Modern supplementary-concept records receive
|
|
15
|
+
* plain sequential UIDs that don't encode a UI (e.g. `2025952`); those aren't decodable, so
|
|
16
|
+
* the raw Entrez UID is returned unchanged.
|
|
17
|
+
*/
|
|
18
|
+
const ENTREZ_UID_PREFIX = { '67': 'C', '68': 'D', '81': 'Q' };
|
|
19
|
+
function decodeMeshDescriptorUi(entrezUid) {
|
|
20
|
+
if (/^\d{8}$/.test(entrezUid)) {
|
|
21
|
+
const letter = ENTREZ_UID_PREFIX[entrezUid.slice(0, 2)];
|
|
22
|
+
if (letter)
|
|
23
|
+
return `${letter}${entrezUid.slice(2)}`;
|
|
24
|
+
}
|
|
25
|
+
return entrezUid;
|
|
26
|
+
}
|
|
11
27
|
function findItem(items, name) {
|
|
12
28
|
return items.find((it) => getText(it['@_Name']) === name);
|
|
13
29
|
}
|
|
@@ -43,17 +59,18 @@ function extractTreeNumbers(items) {
|
|
|
43
59
|
}
|
|
44
60
|
function parseSummaryRecords(data, ids, includeDetails) {
|
|
45
61
|
if (!data || typeof data !== 'object')
|
|
46
|
-
return ids.map((id) => ({ meshId: id, name: id }));
|
|
62
|
+
return ids.map((id) => ({ entrezUid: id, meshId: decodeMeshDescriptorUi(id), name: id }));
|
|
47
63
|
const root = data;
|
|
48
64
|
const summaryResult = root.eSummaryResult;
|
|
49
65
|
const docSums = ensureArray((summaryResult ?? root).DocSum);
|
|
50
66
|
if (docSums.length === 0)
|
|
51
|
-
return ids.map((id) => ({ meshId: id, name: id }));
|
|
67
|
+
return ids.map((id) => ({ entrezUid: id, meshId: decodeMeshDescriptorUi(id), name: id }));
|
|
52
68
|
return docSums.map((doc) => {
|
|
53
|
-
const
|
|
69
|
+
const entrezUid = getText(doc.Id);
|
|
70
|
+
const meshId = decodeMeshDescriptorUi(entrezUid);
|
|
54
71
|
const items = ensureArray(doc.Item);
|
|
55
72
|
const name = getItemText(findItem(items, 'DS_MeshTerms')) || meshId;
|
|
56
|
-
const record = { meshId, name };
|
|
73
|
+
const record = { entrezUid, meshId, name };
|
|
57
74
|
if (includeDetails) {
|
|
58
75
|
const scopeNote = getItemText(findItem(items, 'DS_ScopeNote'));
|
|
59
76
|
if (scopeNote)
|
|
@@ -93,7 +110,12 @@ export const lookupMeshTool = tool('pubmed_lookup_mesh', {
|
|
|
93
110
|
results: z
|
|
94
111
|
.array(z
|
|
95
112
|
.object({
|
|
96
|
-
meshId: z
|
|
113
|
+
meshId: z
|
|
114
|
+
.string()
|
|
115
|
+
.describe('Canonical MeSH DescriptorUI (e.g. "D003924") — resolves at the MeSH Browser and NLM linked data. Falls back to the raw Entrez UID when a record is not decodable.'),
|
|
116
|
+
entrezUid: z
|
|
117
|
+
.string()
|
|
118
|
+
.describe('NCBI Entrez UID for this record — the join key for E-utilities (eSummary/eFetch db=mesh).'),
|
|
97
119
|
name: z.string().describe('Descriptor name'),
|
|
98
120
|
treeNumbers: z.array(z.string()).optional().describe('MeSH tree numbers'),
|
|
99
121
|
scopeNote: z.string().optional().describe('Scope note'),
|
|
@@ -156,6 +178,7 @@ export const lookupMeshTool = tool('pubmed_lookup_mesh', {
|
|
|
156
178
|
for (const r of result.results) {
|
|
157
179
|
lines.push(`\n## ${r.name}`);
|
|
158
180
|
lines.push(`- **MeSH ID:** ${r.meshId}`);
|
|
181
|
+
lines.push(`- **Entrez UID:** ${r.entrezUid}`);
|
|
159
182
|
if (r.treeNumbers?.length)
|
|
160
183
|
lines.push(`- **Tree Numbers:** ${r.treeNumbers.join(', ')}`);
|
|
161
184
|
if (r.scopeNote)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup-mesh.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/lookup-mesh.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,gBAAgB,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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"}
|
|
@@ -29,7 +29,19 @@ export declare class NcbiApiClient {
|
|
|
29
29
|
makeExternalRequest(url: string, params: NcbiRequestParams, externalSignal?: AbortSignal): Promise<string>;
|
|
30
30
|
private buildParams;
|
|
31
31
|
private shouldPost;
|
|
32
|
+
/**
|
|
33
|
+
* GET an eutils endpoint. Uses plain fetch (not fetchWithTimeout) so {@link makeRequest}
|
|
34
|
+
* can inspect the response status and apply its 500→ServiceUnavailable reclassification —
|
|
35
|
+
* fetchWithTimeout throws on any non-2xx before the status can be read, which left that
|
|
36
|
+
* override unreachable.
|
|
37
|
+
*/
|
|
32
38
|
private getRequest;
|
|
39
|
+
/** POST an eutils endpoint (large payloads). Plain fetch — see {@link getRequest}. */
|
|
33
40
|
private postRequest;
|
|
41
|
+
/**
|
|
42
|
+
* Composes the per-request timeout (`AbortSignal.timeout`) with an optional caller
|
|
43
|
+
* signal — whichever aborts first wins. Shared by every fetch path in this client.
|
|
44
|
+
*/
|
|
45
|
+
private buildTimeoutSignal;
|
|
34
46
|
}
|
|
35
47
|
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKnG,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAElD,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC;IAyClB;;;;;OAKG;IACG,mBAAmB,CACvB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,iBAAiB,EACzB,cAAc,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC,MAAM,CAAC;IA2ClB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,UAAU;IAMlB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAUlB,sFAAsF;IACtF,OAAO,CAAC,WAAW;IAcnB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAI3B"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @module src/services/ncbi/api-client
|
|
6
6
|
*/
|
|
7
7
|
import { JsonRpcErrorCode, McpError, serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
|
|
8
|
-
import {
|
|
8
|
+
import { httpErrorFromResponse, logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
|
|
9
9
|
import { recoveryFor } from '../../services/error-contracts.js';
|
|
10
10
|
import { NCBI_EUTILS_BASE_URL } from './types.js';
|
|
11
11
|
/** Maximum encoded query-string length before automatically switching to POST. */
|
|
@@ -67,10 +67,7 @@ export class NcbiApiClient {
|
|
|
67
67
|
}
|
|
68
68
|
const qs = new URLSearchParams(finalParams).toString();
|
|
69
69
|
const fullUrl = qs ? `${url}?${qs}` : url;
|
|
70
|
-
const
|
|
71
|
-
const signal = externalSignal
|
|
72
|
-
? AbortSignal.any([timeoutSignal, externalSignal])
|
|
73
|
-
: timeoutSignal;
|
|
70
|
+
const signal = this.buildTimeoutSignal(externalSignal);
|
|
74
71
|
try {
|
|
75
72
|
logger.debug(`NCBI external request: GET ${fullUrl}`, requestContextService.createRequestContext({ operation: 'NcbiExternalRequest', url }));
|
|
76
73
|
const response = await fetch(fullUrl, { signal });
|
|
@@ -112,21 +109,34 @@ export class NcbiApiClient {
|
|
|
112
109
|
const queryString = new URLSearchParams(params).toString();
|
|
113
110
|
return queryString.length > POST_THRESHOLD;
|
|
114
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* GET an eutils endpoint. Uses plain fetch (not fetchWithTimeout) so {@link makeRequest}
|
|
114
|
+
* can inspect the response status and apply its 500→ServiceUnavailable reclassification —
|
|
115
|
+
* fetchWithTimeout throws on any non-2xx before the status can be read, which left that
|
|
116
|
+
* override unreachable.
|
|
117
|
+
*/
|
|
115
118
|
getRequest(url, params, signal) {
|
|
116
119
|
const qs = new URLSearchParams(params).toString();
|
|
117
120
|
const fullUrl = qs ? `${url}?${qs}` : url;
|
|
118
|
-
|
|
119
|
-
return fetchWithTimeout(fullUrl, this.config.timeoutMs, ctx, signal ? { signal } : undefined);
|
|
121
|
+
return fetch(fullUrl, { signal: this.buildTimeoutSignal(signal) });
|
|
120
122
|
}
|
|
123
|
+
/** POST an eutils endpoint (large payloads). Plain fetch — see {@link getRequest}. */
|
|
121
124
|
postRequest(url, params, signal) {
|
|
122
125
|
const body = new URLSearchParams(params).toString();
|
|
123
|
-
|
|
124
|
-
return fetchWithTimeout(url, this.config.timeoutMs, ctx, {
|
|
126
|
+
return fetch(url, {
|
|
125
127
|
method: 'POST',
|
|
126
128
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
127
129
|
body,
|
|
128
|
-
|
|
130
|
+
signal: this.buildTimeoutSignal(signal),
|
|
129
131
|
});
|
|
130
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Composes the per-request timeout (`AbortSignal.timeout`) with an optional caller
|
|
135
|
+
* signal — whichever aborts first wins. Shared by every fetch path in this client.
|
|
136
|
+
*/
|
|
137
|
+
buildTimeoutSignal(externalSignal) {
|
|
138
|
+
const timeoutSignal = AbortSignal.timeout(this.config.timeoutMs);
|
|
139
|
+
return externalSignal ? AbortSignal.any([timeoutSignal, externalSignal]) : timeoutSignal;
|
|
140
|
+
}
|
|
131
141
|
}
|
|
132
142
|
//# sourceMappingURL=api-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/services/ncbi/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC/F,OAAO,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/services/ncbi/api-client.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.9.
|
|
3
|
+
"version": "2.9.5",
|
|
4
4
|
"mcpName": "io.github.cyanheads/pubmed-mcp-server",
|
|
5
5
|
"description": "Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms via MCP. STDIO or Streamable HTTP.",
|
|
6
6
|
"type": "module",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"zod": "^4.4.3"
|
|
92
92
|
},
|
|
93
93
|
"devDependencies": {
|
|
94
|
-
"@biomejs/biome": "^2.
|
|
94
|
+
"@biomejs/biome": "^2.5.0",
|
|
95
95
|
"@types/node": "^25.9.3",
|
|
96
96
|
"@types/sanitize-html": "^2.16.1",
|
|
97
97
|
"@vitest/coverage-istanbul": "^4.1.8",
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/pubmed-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "2.9.
|
|
9
|
+
"version": "2.9.5",
|
|
10
10
|
"remotes": [
|
|
11
11
|
{
|
|
12
12
|
"type": "streamable-http",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/pubmed-mcp-server",
|
|
21
21
|
"runtimeHint": "bun",
|
|
22
|
-
"version": "2.9.
|
|
22
|
+
"version": "2.9.5",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{
|
|
25
25
|
"type": "positional",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
67
67
|
"identifier": "@cyanheads/pubmed-mcp-server",
|
|
68
68
|
"runtimeHint": "bun",
|
|
69
|
-
"version": "2.9.
|
|
69
|
+
"version": "2.9.5",
|
|
70
70
|
"packageArguments": [
|
|
71
71
|
{
|
|
72
72
|
"type": "positional",
|