@cyanheads/pubmed-mcp-server 2.10.11 → 2.10.13

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 (40) hide show
  1. package/AGENTS.md +19 -18
  2. package/CLAUDE.md +19 -18
  3. package/README.md +87 -119
  4. package/dist/config/server-config.d.ts +4 -4
  5. package/dist/config/server-config.d.ts.map +1 -1
  6. package/dist/config/server-config.js +9 -24
  7. package/dist/config/server-config.js.map +1 -1
  8. package/dist/mcp-server/resources/definitions/database-info.resource.js +6 -6
  9. package/dist/mcp-server/resources/definitions/database-info.resource.js.map +1 -1
  10. package/dist/services/ncbi/formatting/citation-formatter.d.ts +13 -0
  11. package/dist/services/ncbi/formatting/citation-formatter.d.ts.map +1 -1
  12. package/dist/services/ncbi/formatting/citation-formatter.js +35 -11
  13. package/dist/services/ncbi/formatting/citation-formatter.js.map +1 -1
  14. package/dist/services/ncbi/ncbi-service.d.ts.map +1 -1
  15. package/dist/services/ncbi/ncbi-service.js +7 -4
  16. package/dist/services/ncbi/ncbi-service.js.map +1 -1
  17. package/dist/services/ncbi/parsing/article-parser.d.ts.map +1 -1
  18. package/dist/services/ncbi/parsing/article-parser.js +14 -22
  19. package/dist/services/ncbi/parsing/article-parser.js.map +1 -1
  20. package/dist/services/ncbi/parsing/esummary-parser.d.ts +11 -1
  21. package/dist/services/ncbi/parsing/esummary-parser.d.ts.map +1 -1
  22. package/dist/services/ncbi/parsing/esummary-parser.js +16 -7
  23. package/dist/services/ncbi/parsing/esummary-parser.js.map +1 -1
  24. package/dist/services/ncbi/parsing/pmc-article-parser.d.ts.map +1 -1
  25. package/dist/services/ncbi/parsing/pmc-article-parser.js +26 -3
  26. package/dist/services/ncbi/parsing/pmc-article-parser.js.map +1 -1
  27. package/dist/services/ncbi/parsing/pmc-xml-helpers.d.ts +19 -0
  28. package/dist/services/ncbi/parsing/pmc-xml-helpers.d.ts.map +1 -1
  29. package/dist/services/ncbi/parsing/pmc-xml-helpers.js +81 -2
  30. package/dist/services/ncbi/parsing/pmc-xml-helpers.js.map +1 -1
  31. package/dist/services/ncbi/parsing/xml-helpers.d.ts +29 -3
  32. package/dist/services/ncbi/parsing/xml-helpers.d.ts.map +1 -1
  33. package/dist/services/ncbi/parsing/xml-helpers.js +46 -0
  34. package/dist/services/ncbi/parsing/xml-helpers.js.map +1 -1
  35. package/dist/services/ncbi/response-handler.d.ts +9 -0
  36. package/dist/services/ncbi/response-handler.d.ts.map +1 -1
  37. package/dist/services/ncbi/response-handler.js +91 -32
  38. package/dist/services/ncbi/response-handler.js.map +1 -1
  39. package/package.json +9 -7
  40. package/server.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"pmc-xml-helpers.js","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/pmc-xml-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEzB,uFAAuF;AACvF,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;IACvD,CAAC;IACD,OAAO;AACT,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,MAAM,CAAC,IAAc,EAAE,IAAY;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAwC,CAAC;IACpE,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACjC,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,OAAO,QAAQ,IAAI,IAAI,CAAC;AAC1B,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,MAAM,CAAC,IAAc;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAA8B,EAAE,QAA8B;IAChF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0C;IACvE,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAA0C;IACpE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAA0C,EAC1C,YAAiC;IAEjC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrE,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,OAAO,CACrB,KAA0C,EAC1C,OAAe;IAEf,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,OAAO,CAAC,KAA0C,EAAE,OAAe;IACjF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA0C,EAC1C,OAAe;IAEf,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,CAAC,KAAmB,EAAQ,EAAE;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"pmc-xml-helpers.js","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/pmc-xml-helpers.ts"],"names":[],"mappings":"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"}
@@ -14,20 +14,46 @@ export declare function ensureArray<T>(item: T | T[] | undefined | null): T[];
14
14
  /**
15
15
  * Safely extracts text content from an XML element, which might be a string or an object with a '#text' property.
16
16
  * Handles cases where #text might be a number or boolean by converting to string.
17
+ *
18
+ * Always returns a string. Use {@link getOptionalText} where an absent element
19
+ * must stay distinguishable from an empty one — a default parameter fires on an
20
+ * explicit `undefined`, so this function cannot report absence. (#137)
17
21
  * @param element - The XML element (string, object with #text, or undefined).
18
22
  * @param defaultValue - The value to return if text cannot be extracted. Defaults to an empty string.
19
23
  * @returns The text content or the default value.
20
24
  */
21
- export declare function getText(element: unknown, defaultValue: undefined): string | undefined;
22
25
  export declare function getText(element: unknown, defaultValue?: string): string;
26
+ /**
27
+ * Text of an XML element, with an absent or empty element reported as absent.
28
+ *
29
+ * NCBI ships a field it carries with no value as an empty element — `<AuthType/>`,
30
+ * `<ClusterID/>`, `<ELocationID></ELocationID>` — and a caller cannot act on the
31
+ * difference between that and no element at all. Both are `undefined` here, so
32
+ * a conditional spread (`...(v !== undefined && { v })`) omits the key instead
33
+ * of writing an empty string into the parsed record. (#137)
34
+ * @param element - The XML element (string, object with #text, or undefined).
35
+ * @returns The text content, or undefined when the element is absent or empty.
36
+ */
37
+ export declare function getOptionalText(element: unknown): string | undefined;
23
38
  /**
24
39
  * Safely extracts an attribute value from an XML element.
25
40
  * Assumes attributes are prefixed with '@_' by fast-xml-parser.
41
+ *
42
+ * Always returns a string; {@link getOptionalAttribute} is the form that reports
43
+ * absence. (#137)
26
44
  * @param element - The XML element object.
27
45
  * @param attributeName - The name of the attribute (e.g., 'UI', 'MajorTopicYN', without the '@_' prefix).
28
46
  * @param defaultValue - The value to return if the attribute is not found. Defaults to an empty string.
29
47
  * @returns The attribute value or the default value.
30
48
  */
31
- export declare function getAttribute(element: unknown, attributeName: string, defaultValue: undefined): string | undefined;
32
- export declare function getAttribute(element: unknown, attributeName: string, defaultValue?: string): string;
49
+ export declare function getAttribute(element: unknown, attributeName: string, // e.g., 'UI', 'MajorTopicYN'
50
+ defaultValue?: string): string;
51
+ /**
52
+ * Attribute value of an XML element, with a missing or empty attribute reported
53
+ * as absent — the {@link getOptionalText} rule applied to attributes. (#137)
54
+ * @param element - The XML element object.
55
+ * @param attributeName - The attribute name, without the '@_' prefix.
56
+ * @returns The attribute value, or undefined when it is missing or empty.
57
+ */
58
+ export declare function getOptionalAttribute(element: unknown, attributeName: string): string | undefined;
33
59
  //# sourceMappingURL=xml-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"xml-helpers.d.ts","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/xml-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,EAAE,CAKpE;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AACvF,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;AAyBzE;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,SAAS,GACtB,MAAM,GAAG,SAAS,CAAC;AACtB,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAAC"}
1
+ {"version":3,"file":"xml-helpers.d.ts","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/xml-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,EAAE,CAKpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,SAAK,GAAG,MAAM,CAmBnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,EAAE,6BAA6B;AACpD,YAAY,SAAK,GAChB,MAAM,CAUR;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhG"}
@@ -16,6 +16,17 @@ export function ensureArray(item) {
16
16
  }
17
17
  return Array.isArray(item) ? item : [item];
18
18
  }
19
+ /**
20
+ * Safely extracts text content from an XML element, which might be a string or an object with a '#text' property.
21
+ * Handles cases where #text might be a number or boolean by converting to string.
22
+ *
23
+ * Always returns a string. Use {@link getOptionalText} where an absent element
24
+ * must stay distinguishable from an empty one — a default parameter fires on an
25
+ * explicit `undefined`, so this function cannot report absence. (#137)
26
+ * @param element - The XML element (string, object with #text, or undefined).
27
+ * @param defaultValue - The value to return if text cannot be extracted. Defaults to an empty string.
28
+ * @returns The text content or the default value.
29
+ */
19
30
  export function getText(element, defaultValue = '') {
20
31
  if (element == null) {
21
32
  return defaultValue;
@@ -38,6 +49,31 @@ export function getText(element, defaultValue = '') {
38
49
  }
39
50
  return defaultValue;
40
51
  }
52
+ /**
53
+ * Text of an XML element, with an absent or empty element reported as absent.
54
+ *
55
+ * NCBI ships a field it carries with no value as an empty element — `<AuthType/>`,
56
+ * `<ClusterID/>`, `<ELocationID></ELocationID>` — and a caller cannot act on the
57
+ * difference between that and no element at all. Both are `undefined` here, so
58
+ * a conditional spread (`...(v !== undefined && { v })`) omits the key instead
59
+ * of writing an empty string into the parsed record. (#137)
60
+ * @param element - The XML element (string, object with #text, or undefined).
61
+ * @returns The text content, or undefined when the element is absent or empty.
62
+ */
63
+ export function getOptionalText(element) {
64
+ return getText(element) || undefined;
65
+ }
66
+ /**
67
+ * Safely extracts an attribute value from an XML element.
68
+ * Assumes attributes are prefixed with '@_' by fast-xml-parser.
69
+ *
70
+ * Always returns a string; {@link getOptionalAttribute} is the form that reports
71
+ * absence. (#137)
72
+ * @param element - The XML element object.
73
+ * @param attributeName - The name of the attribute (e.g., 'UI', 'MajorTopicYN', without the '@_' prefix).
74
+ * @param defaultValue - The value to return if the attribute is not found. Defaults to an empty string.
75
+ * @returns The attribute value or the default value.
76
+ */
41
77
  export function getAttribute(element, attributeName, // e.g., 'UI', 'MajorTopicYN'
42
78
  defaultValue = '') {
43
79
  const fullAttributeName = `@_${attributeName}`; // As per fast-xml-parser config
@@ -53,4 +89,14 @@ defaultValue = '') {
53
89
  }
54
90
  return defaultValue;
55
91
  }
92
+ /**
93
+ * Attribute value of an XML element, with a missing or empty attribute reported
94
+ * as absent — the {@link getOptionalText} rule applied to attributes. (#137)
95
+ * @param element - The XML element object.
96
+ * @param attributeName - The attribute name, without the '@_' prefix.
97
+ * @returns The attribute value, or undefined when it is missing or empty.
98
+ */
99
+ export function getOptionalAttribute(element, attributeName) {
100
+ return getAttribute(element, attributeName) || undefined;
101
+ }
56
102
  //# sourceMappingURL=xml-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xml-helpers.js","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/xml-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAI,IAAgC;IAC7D,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAWD,MAAM,UAAU,OAAO,CACrB,OAAgB,EAChB,YAAY,GAAuB,EAAE;IAErC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,wCAAwC;IAClE,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,OAAkC,CAAC;QAC/C,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC;YACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAoBD,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,aAAqB,EAAE,6BAA6B;AACpD,YAAY,GAAuB,EAAE;IAErC,MAAM,iBAAiB,GAAG,KAAK,aAAa,EAAE,CAAC,CAAC,gCAAgC;IAChF,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,OAAkC,CAAC;QAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACnC,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,uCAAuC;QACzF,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,sCAAsC;IACzF,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"xml-helpers.js","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/xml-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAI,IAAgC;IAC7D,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,OAAgB,EAAE,YAAY,GAAG,EAAE;IACzD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,wCAAwC;IAClE,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,OAAkC,CAAC;QAC/C,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC;YACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;AACvC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,aAAqB,EAAE,6BAA6B;AACpD,YAAY,GAAG,EAAE;IAEjB,MAAM,iBAAiB,GAAG,KAAK,aAAa,EAAE,CAAC,CAAC,gCAAgC;IAChF,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,OAAkC,CAAC;QAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACnC,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,uCAAuC;QACzF,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,sCAAsC;IACzF,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,aAAqB;IAC1E,OAAO,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,SAAS,CAAC;AAC3D,CAAC"}
@@ -5,6 +5,15 @@
5
5
  * @module src/services/ncbi/response-handler
6
6
  */
7
7
  import type { NcbiRequestOptions } from './types.js';
8
+ /**
9
+ * Reclassifies an HTTP error from a eutils request whose captured body is an NCBI
10
+ * `<ERROR>` envelope reporting a backend failure. The status-derived code reads such a
11
+ * response as caller error (400 → InvalidParams), which the retry gate never retries.
12
+ * Any other error — including a genuine invalid-parameter 400 — is returned unchanged.
13
+ * Matches the body text rather than parsing it, since the framework captures only a
14
+ * bounded prefix. (#153)
15
+ */
16
+ export declare function reclassifyNcbiHttpError(error: unknown, endpoint: string): unknown;
8
17
  /**
9
18
  * Flattens inline mixed-content markup (`<sup>`, `<sub>`, `<inf>`, `<i>`,
10
19
  * `<b>`, `<u>`, `<sc>`) inside PubMed/MEDLINE XML before fast-xml-parser
@@ -1 +1 @@
1
- {"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/response-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAmNrD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvD;AAeD;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IACjD;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;IAElD,cAcC;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IA2BtB,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAoBrE;IAED,sBAAsB,CAAC,CAAC,EACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,CAsOH;CACF"}
1
+ {"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/response-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2BH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAkGrD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAqBjF;AAsJD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvD;AAeD;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IACjD;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;IAElD,cAkBC;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IA2BtB,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAoBrE;IAED,sBAAsB,CAAC,CAAC,EACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,CAsOH;CACF"}
@@ -4,7 +4,7 @@
4
4
  * NCBI's inconsistent XML structures where single-element lists are collapsed to scalars.
5
5
  * @module src/services/ncbi/response-handler
6
6
  */
7
- import { notFound, serializationError, serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
7
+ import { McpError, notFound, serializationError, serviceUnavailable, } from '@cyanheads/mcp-ts-core/errors';
8
8
  import { logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
9
9
  /**
10
10
  * fast-xml-parser 5.8.0 marks the in-tree `XMLValidator` as `@deprecated` in
@@ -24,50 +24,73 @@ import { decodeHtmlEntities } from './parsing/text-helpers.js';
24
24
  * jpaths that NCBI may return as either a single value or an array.
25
25
  * The `isArray` callback forces these to always parse as arrays for consistency.
26
26
  *
27
- * A jpath is the **full** dotted path from the document root, so only an entry
28
- * that spells out every ancestor matches. Read sites still pass values through
29
- * `ensureArray`, which is what makes the shorter, ancestor-less entries below
30
- * harmless.
27
+ * **Convention: one entry per shape, spelling the full path from the document
28
+ * root.** fast-xml-parser supplies that full dotted path and the lookup is an
29
+ * exact match, so an entry naming only its last segments never fires. Where a
30
+ * child is shared between record kinds, both ancestries are listed —
31
+ * `PubmedArticle` and `PubmedBookArticle.BookDocument` each get their own line.
32
+ * (#138)
33
+ *
34
+ * Two absences are deliberate. `<Link>` carries exactly one `<Id>`, which
35
+ * `find-related` reads without `ensureArray`, so listing it would strand every
36
+ * related PMID; and the JATS paths a PMC full-text response uses are governed by
37
+ * {@link ORDERED_XML_PARSER_OPTIONS}, which declares no `isArray` at all, so an
38
+ * entry for one here could never fire.
39
+ *
40
+ * Read sites still pass values through `ensureArray`, which is why correcting
41
+ * the previously ancestor-less entries changes nothing downstream. It stays.
31
42
  */
32
43
  const NCBI_ARRAY_JPATHS = new Set([
33
- 'IdList.Id',
44
+ // ESearch
34
45
  'eSearchResult.IdList.Id',
46
+ // EFetch — journal articles
35
47
  'PubmedArticleSet.PubmedArticle',
48
+ 'PubmedArticleSet.PubmedArticle.MedlineCitation.Article.AuthorList.Author',
49
+ 'PubmedArticleSet.PubmedArticle.MedlineCitation.Article.AuthorList.Author.AffiliationInfo',
50
+ 'PubmedArticleSet.PubmedArticle.MedlineCitation.Article.GrantList.Grant',
51
+ 'PubmedArticleSet.PubmedArticle.MedlineCitation.Article.PublicationTypeList.PublicationType',
52
+ 'PubmedArticleSet.PubmedArticle.MedlineCitation.KeywordList.Keyword',
53
+ 'PubmedArticleSet.PubmedArticle.MedlineCitation.MeshHeadingList.MeshHeading',
54
+ 'PubmedArticleSet.PubmedArticle.MedlineCitation.MeshHeadingList.MeshHeading.QualifierName',
55
+ 'PubmedArticleSet.PubmedArticle.PubmedData.History.PubMedPubDate',
56
+ // EFetch — Bookshelf records
36
57
  'PubmedArticleSet.PubmedBookArticle',
37
58
  'PubmedArticleSet.PubmedBookArticle.BookDocument.AuthorList',
59
+ 'PubmedArticleSet.PubmedBookArticle.BookDocument.AuthorList.Author',
60
+ 'PubmedArticleSet.PubmedBookArticle.BookDocument.AuthorList.Author.AffiliationInfo',
61
+ 'PubmedArticleSet.PubmedBookArticle.BookDocument.KeywordList.Keyword',
38
62
  'PubmedArticleSet.PubmedBookArticle.BookDocument.PublicationType',
39
63
  'PubmedArticleSet.PubmedBookArticle.BookDocument.Book.AuthorList',
64
+ 'PubmedArticleSet.PubmedBookArticle.BookDocument.Book.AuthorList.Author',
40
65
  'PubmedArticleSet.PubmedBookArticle.BookDocument.Book.ELocationID',
41
66
  'PubmedArticleSet.PubmedBookArticle.BookDocument.Book.Isbn',
67
+ 'PubmedArticleSet.PubmedBookArticle.PubmedBookData.History.PubMedPubDate',
42
68
  'PubmedArticleSet.DeleteCitation.PMID',
43
- 'AuthorList.Author',
44
- 'AffiliationInfo',
45
- 'MeshHeadingList.MeshHeading',
46
- 'MeshHeading.QualifierName',
47
- 'GrantList.Grant',
48
- 'KeywordList.Keyword',
49
- 'PublicationTypeList.PublicationType',
50
- 'History.PubMedPubDate',
51
- 'LinkSet.LinkSetDb.Link',
52
- 'Link.Id',
53
- 'DbInfo.FieldList.Field',
54
- 'DbInfo.LinkList.Link',
69
+ // ELink
70
+ 'eLinkResult.LinkSet.LinkSetDb',
71
+ 'eLinkResult.LinkSet.LinkSetDb.Link',
72
+ // EInfo
73
+ 'eInfoResult.DbInfo.FieldList.Field',
74
+ 'eInfoResult.DbInfo.LinkList.Link',
75
+ // ESummary
55
76
  'eSummaryResult.DocSum',
56
- 'DocSum.Item',
77
+ // EFetch — MeSH descriptor records
57
78
  'DescriptorRecordSet.DescriptorRecord',
58
- 'ConceptList.Concept',
59
- 'TermList.Term',
60
- 'TreeNumberList.TreeNumber',
61
- 'pmc-articleset.article',
62
- 'article-meta.article-id',
63
- 'article-meta.pub-date',
64
- 'contrib-group.contrib',
65
- 'kwd-group.kwd',
66
- 'body.sec',
67
- 'sec.sec',
68
- 'sec.p',
69
- 'ref-list.ref',
79
+ 'DescriptorRecordSet.DescriptorRecord.ConceptList.Concept',
80
+ 'DescriptorRecordSet.DescriptorRecord.ConceptList.Concept.TermList.Term',
81
+ 'DescriptorRecordSet.DescriptorRecord.TreeNumberList.TreeNumber',
70
82
  ]);
83
+ /**
84
+ * ESummary version-1 `<Item>` elements, at any nesting depth.
85
+ *
86
+ * A `DocSum` item of `Type="List"` or `Type="Structure"` holds further `<Item>`
87
+ * children, and `lookup-mesh` walks three levels of them to reach a tree number.
88
+ * The nesting is open-ended, so one anchored pattern covers it where a fixed
89
+ * list of paths would silently cap the depth. Anchored at the root for the same
90
+ * reason the set is: a suffix match would catch an unrelated `Item` elsewhere.
91
+ * (#138)
92
+ */
93
+ const ESUMMARY_ITEM_JPATH = /^eSummaryResult\.DocSum(?:\.Item)+$/;
71
94
  /**
72
95
  * Ordered paths to check for NCBI error messages in parsed XML.
73
96
  * More specific paths come first so they take precedence.
@@ -76,9 +99,41 @@ const ERROR_PATHS = [
76
99
  'eLinkResult.ERROR',
77
100
  'eSearchResult.ERROR',
78
101
  'eSummaryResult.ERROR',
102
+ 'eFetchResult.ERROR',
79
103
  'PubmedArticleSet.ErrorList.CannotRetrievePMID',
80
104
  'ERROR',
81
105
  ];
106
+ /**
107
+ * NCBI `<ERROR>` messages describing a backend failure rather than the request.
108
+ * EFetch sends the viewer-timeout envelope under HTTP 200 and HTTP 400 alike, so
109
+ * the status cannot tell it from a malformed request; the message can. (#153)
110
+ */
111
+ const NCBI_TRANSIENT_ERROR_PATTERNS = [/External viewer error/i, /Status:\s*Timeout/i];
112
+ /** Captures the text of each uppercase `<ERROR>` element in a raw response body. */
113
+ const ERROR_TEXT_REGEX = /<ERROR(?:\s[^>]*)?>([^<]*)<\/ERROR>/g;
114
+ /**
115
+ * Reclassifies an HTTP error from a eutils request whose captured body is an NCBI
116
+ * `<ERROR>` envelope reporting a backend failure. The status-derived code reads such a
117
+ * response as caller error (400 → InvalidParams), which the retry gate never retries.
118
+ * Any other error — including a genuine invalid-parameter 400 — is returned unchanged.
119
+ * Matches the body text rather than parsing it, since the framework captures only a
120
+ * bounded prefix. (#153)
121
+ */
122
+ export function reclassifyNcbiHttpError(error, endpoint) {
123
+ if (!(error instanceof McpError) || typeof error.data?.body !== 'string')
124
+ return error;
125
+ const ncbiErrors = [...error.data.body.matchAll(ERROR_TEXT_REGEX)].map((match) => decodeHtmlEntities(match[1] ?? '').trim());
126
+ if (!ncbiErrors.some((msg) => NCBI_TRANSIENT_ERROR_PATTERNS.some((p) => p.test(msg)))) {
127
+ return error;
128
+ }
129
+ return serviceUnavailable(`NCBI API Error: ${ncbiErrors.join('; ')}`, {
130
+ reason: 'ncbi_unreachable',
131
+ endpoint,
132
+ status: error.data.status,
133
+ ncbiErrors,
134
+ ...recoveryFor('ncbi_unreachable'),
135
+ }, { cause: error });
136
+ }
82
137
  /**
83
138
  * NCBI error messages indicating the requested record doesn't exist (permanent
84
139
  * failure). Throwing NotFound for these prevents the retry loop from hammering
@@ -282,7 +337,11 @@ export class NcbiResponseHandler {
282
337
  attributeNamePrefix: '@_',
283
338
  processEntities: XML_PROCESS_ENTITIES_OPTIONS,
284
339
  htmlEntities: true,
285
- isArray: (_name, jpath) => NCBI_ARRAY_JPATHS.has(jpath),
340
+ isArray: (_name, jpath) => {
341
+ // `jPathOrMatcher` is a string unless `jPath: false` is set, which it is not.
342
+ const path = jpath;
343
+ return NCBI_ARRAY_JPATHS.has(path) || ESUMMARY_ITEM_JPATH.test(path);
344
+ },
286
345
  tagValueProcessor: preserveIsbnText,
287
346
  };
288
347
  this.xmlParser = new FastXmlParser({ ...flatOptions, parseTagValue: true });
@@ -1 +1 @@
1
- {"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../../src/services/ncbi/response-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../../src/services/ncbi/response-handler.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.10.11",
3
+ "version": "2.10.13",
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",
@@ -19,6 +19,8 @@
19
19
  "format": "biome check --write .",
20
20
  "format:unsafe": "biome check --write --unsafe .",
21
21
  "test": "bunx vitest run",
22
+ "test:coverage": "bunx vitest run --coverage",
23
+ "audit:fix": "bun audit fix",
22
24
  "audit:refresh": "rm -f bun.lock && bun install && bun audit",
23
25
  "list-skills": "bun run scripts/list-skills.ts",
24
26
  "lint:mcp": "bun run scripts/lint-mcp.ts",
@@ -74,31 +76,31 @@
74
76
  "license": "Apache-2.0",
75
77
  "packageManager": "bun@1.4.0",
76
78
  "engines": {
77
- "bun": ">=1.3.0",
79
+ "bun": ">=1.4.0",
78
80
  "node": ">=24.0.0"
79
81
  },
80
82
  "publishConfig": {
81
83
  "access": "public"
82
84
  },
83
85
  "dependencies": {
84
- "@cyanheads/mcp-ts-core": "^0.12.8",
86
+ "@cyanheads/mcp-ts-core": "^0.13.0",
85
87
  "defuddle": "^0.19.3",
86
88
  "fast-xml-parser": "^5.11.1",
87
89
  "linkedom": "^0.18.13",
88
90
  "pino-pretty": "^13.1.3",
89
91
  "sanitize-html": "^2.17.7",
90
92
  "unpdf": "^1.8.1",
91
- "zod": "^4.5.4"
93
+ "zod": "^4.6.1"
92
94
  },
93
95
  "devDependencies": {
94
- "@biomejs/biome": "^2.5.12",
96
+ "@biomejs/biome": "^2.5.13",
95
97
  "@socketsecurity/bun-security-scanner": "^1.1.2",
96
- "@types/node": "^26.4.1",
98
+ "@types/node": "^26.5.1",
97
99
  "@types/sanitize-html": "^2.16.1",
98
100
  "@vitest/coverage-istanbul": "^5.0.0",
99
101
  "depcheck": "^1.4.7",
100
102
  "fast-check": "^4.9.0",
101
- "ignore": "^7.0.8",
103
+ "ignore": "^7.0.9",
102
104
  "tsc-alias": "^1.9.4",
103
105
  "typescript": "^7.0.2",
104
106
  "vitest": "^5.0.0"
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.10.11",
9
+ "version": "2.10.13",
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.10.11",
22
+ "version": "2.10.13",
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.10.11",
69
+ "version": "2.10.13",
70
70
  "packageArguments": [
71
71
  {
72
72
  "type": "positional",