@cyanheads/pubmed-mcp-server 2.6.4 → 2.6.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.
Files changed (58) hide show
  1. package/CLAUDE.md +41 -15
  2. package/README.md +1 -1
  3. package/dist/mcp-server/prompts/definitions/research-plan.prompt.d.ts.map +1 -1
  4. package/dist/mcp-server/prompts/definitions/research-plan.prompt.js +1 -1
  5. package/dist/mcp-server/prompts/definitions/research-plan.prompt.js.map +1 -1
  6. package/dist/mcp-server/resources/definitions/database-info.resource.d.ts +1 -1
  7. package/dist/mcp-server/resources/definitions/database-info.resource.d.ts.map +1 -1
  8. package/dist/mcp-server/tools/definitions/_error-contracts.d.ts +41 -0
  9. package/dist/mcp-server/tools/definitions/_error-contracts.d.ts.map +1 -0
  10. package/dist/mcp-server/tools/definitions/_error-contracts.js +45 -0
  11. package/dist/mcp-server/tools/definitions/_error-contracts.js.map +1 -0
  12. package/dist/mcp-server/tools/definitions/convert-ids.tool.d.ts +2 -2
  13. package/dist/mcp-server/tools/definitions/convert-ids.tool.d.ts.map +1 -1
  14. package/dist/mcp-server/tools/definitions/convert-ids.tool.js +3 -3
  15. package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts +25 -1
  16. package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts.map +1 -1
  17. package/dist/mcp-server/tools/definitions/fetch-articles.tool.js +12 -1
  18. package/dist/mcp-server/tools/definitions/fetch-articles.tool.js.map +1 -1
  19. package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts +25 -1
  20. package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts.map +1 -1
  21. package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js +15 -1
  22. package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js.map +1 -1
  23. package/dist/mcp-server/tools/definitions/find-related.tool.d.ts +25 -1
  24. package/dist/mcp-server/tools/definitions/find-related.tool.d.ts.map +1 -1
  25. package/dist/mcp-server/tools/definitions/find-related.tool.js +20 -1
  26. package/dist/mcp-server/tools/definitions/find-related.tool.js.map +1 -1
  27. package/dist/mcp-server/tools/definitions/format-citations.tool.d.ts +8 -3
  28. package/dist/mcp-server/tools/definitions/format-citations.tool.d.ts.map +1 -1
  29. package/dist/mcp-server/tools/definitions/format-citations.tool.js +15 -7
  30. package/dist/mcp-server/tools/definitions/format-citations.tool.js.map +1 -1
  31. package/dist/mcp-server/tools/definitions/lookup-citation.tool.d.ts +1 -1
  32. package/dist/mcp-server/tools/definitions/lookup-citation.tool.d.ts.map +1 -1
  33. package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts +4 -3
  34. package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts.map +1 -1
  35. package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js +26 -15
  36. package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js.map +1 -1
  37. package/dist/mcp-server/tools/definitions/search-articles.tool.d.ts +1 -1
  38. package/dist/mcp-server/tools/definitions/search-articles.tool.d.ts.map +1 -1
  39. package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts +1 -1
  40. package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts.map +1 -1
  41. package/dist/services/ncbi/api-client.d.ts.map +1 -1
  42. package/dist/services/ncbi/api-client.js +14 -36
  43. package/dist/services/ncbi/api-client.js.map +1 -1
  44. package/dist/services/ncbi/ncbi-service.d.ts.map +1 -1
  45. package/dist/services/ncbi/ncbi-service.js +24 -19
  46. package/dist/services/ncbi/ncbi-service.js.map +1 -1
  47. package/dist/services/ncbi/request-queue.d.ts.map +1 -1
  48. package/dist/services/ncbi/request-queue.js +9 -9
  49. package/dist/services/ncbi/request-queue.js.map +1 -1
  50. package/dist/services/ncbi/response-handler.d.ts +2 -2
  51. package/dist/services/ncbi/response-handler.d.ts.map +1 -1
  52. package/dist/services/ncbi/response-handler.js +50 -29
  53. package/dist/services/ncbi/response-handler.js.map +1 -1
  54. package/dist/services/unpaywall/unpaywall-service.d.ts.map +1 -1
  55. package/dist/services/unpaywall/unpaywall-service.js +22 -18
  56. package/dist/services/unpaywall/unpaywall-service.js.map +1 -1
  57. package/package.json +4 -5
  58. package/server.json +3 -3
@@ -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 { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
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 new McpError(JsonRpcErrorCode.ServiceUnavailable, `Unpaywall request failed: ${msg}`, {
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 new McpError(response.status >= 500
57
- ? JsonRpcErrorCode.ServiceUnavailable
58
- : JsonRpcErrorCode.InvalidRequest, `Unpaywall returned HTTP ${response.status}.`, { doi: normalized, status: response.status, body: body.substring(0, 300) });
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 new McpError(JsonRpcErrorCode.ServiceUnavailable, `Unpaywall content fetch failed: ${msg}`, { url });
117
+ throw serviceUnavailable(`Unpaywall content fetch failed: ${msg}`, { url }, { cause: error });
116
118
  }
117
119
  if (!response.ok) {
118
- throw new McpError(response.status >= 500
119
- ? JsonRpcErrorCode.ServiceUnavailable
120
- : JsonRpcErrorCode.InvalidRequest, `Unpaywall content fetch returned HTTP ${response.status}.`, { url, status: response.status });
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":"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"}
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.4",
3
+ "version": "2.6.6",
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",
@@ -22,8 +22,6 @@
22
22
  "changelog:build": "bun run scripts/build-changelog.ts",
23
23
  "changelog:check": "bun run scripts/build-changelog.ts --check",
24
24
  "publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish",
25
- "dev:stdio": "MCP_TRANSPORT_TYPE=stdio bun --watch src/index.ts",
26
- "dev:http": "MCP_TRANSPORT_TYPE=http bun --watch src/index.ts",
27
25
  "start:stdio": "MCP_TRANSPORT_TYPE=stdio bun ./dist/index.js",
28
26
  "start:http": "MCP_TRANSPORT_TYPE=http bun ./dist/index.js"
29
27
  },
@@ -73,13 +71,13 @@
73
71
  "access": "public"
74
72
  },
75
73
  "dependencies": {
76
- "@cyanheads/mcp-ts-core": "^0.7.5",
74
+ "@cyanheads/mcp-ts-core": "^0.8.6",
77
75
  "defuddle": "^0.18.1",
78
76
  "fast-xml-parser": "^5.7.2",
79
77
  "linkedom": "^0.18.12",
80
78
  "pino-pretty": "^13.1.3",
81
79
  "sanitize-html": "^2.17.3",
82
- "unpdf": "^1.6.0"
80
+ "unpdf": "^1.6.2"
83
81
  },
84
82
  "devDependencies": {
85
83
  "@biomejs/biome": "^2.4.13",
@@ -87,6 +85,7 @@
87
85
  "@types/sanitize-html": "^2.16.1",
88
86
  "@vitest/coverage-istanbul": "^4.1.5",
89
87
  "depcheck": "^1.4.7",
88
+ "fast-check": "^4.7.0",
90
89
  "ignore": "^7.0.5",
91
90
  "tsc-alias": "^1.8.16",
92
91
  "typescript": "^6.0.3",
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.6.4",
9
+ "version": "2.6.6",
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.6.4",
22
+ "version": "2.6.6",
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.6.4",
69
+ "version": "2.6.6",
70
70
  "packageArguments": [
71
71
  {
72
72
  "type": "positional",