clinicaltrialsgov-mcp-server 2.9.0 → 2.9.1

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/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![npm](https://img.shields.io/npm/v/clinicaltrialsgov-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/clinicaltrialsgov-mcp-server) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/clinicaltrialsgov-mcp-server) [![Version](https://img.shields.io/badge/Version-2.9.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.14-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![npm](https://img.shields.io/npm/v/clinicaltrialsgov-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/clinicaltrialsgov-mcp-server) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/clinicaltrialsgov-mcp-server) [![Version](https://img.shields.io/badge/Version-2.9.1-blue.svg?style=flat-square)](./CHANGELOG.md) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.14-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
@@ -53,7 +53,7 @@ export declare const findEligible: import("@cyanheads/mcp-ts-core").ToolDefiniti
53
53
  readonly reason: "blank_value";
54
54
  readonly code: JsonRpcErrorCode.ValidationError;
55
55
  readonly when: "A parameter was supplied with a blank, whitespace-only, or empty-list value.";
56
- readonly recovery: "Omit the parameter entirely to leave it unset — omission and a blank value mean different things here. To constrain the request, supply a value containing non-whitespace; for list parameters, supply at least one non-blank entry.";
56
+ readonly recovery: "Supply a value containing non-whitespace, or for a list parameter at least one non-blank entry. Only when the parameter is optional and you meant to leave it unset, omit it entirely instead — omission and a blank value mean different things here.";
57
57
  }, {
58
58
  readonly reason: "rate_limited";
59
59
  readonly code: JsonRpcErrorCode.RateLimited;
@@ -25,7 +25,7 @@ export declare const getFieldValues: import("@cyanheads/mcp-ts-core").ToolDefini
25
25
  readonly reason: "blank_value";
26
26
  readonly code: JsonRpcErrorCode.ValidationError;
27
27
  readonly when: "A parameter was supplied with a blank, whitespace-only, or empty-list value.";
28
- readonly recovery: "Omit the parameter entirely to leave it unset — omission and a blank value mean different things here. To constrain the request, supply a value containing non-whitespace; for list parameters, supply at least one non-blank entry.";
28
+ readonly recovery: "Supply a value containing non-whitespace, or for a list parameter at least one non-blank entry. Only when the parameter is optional and you meant to leave it unset, omit it entirely instead — omission and a blank value mean different things here.";
29
29
  }, {
30
30
  readonly reason: "field_invalid";
31
31
  readonly code: JsonRpcErrorCode.ValidationError;
@@ -22,7 +22,7 @@ export declare const getStudyCount: import("@cyanheads/mcp-ts-core").ToolDefinit
22
22
  readonly reason: "blank_value";
23
23
  readonly code: JsonRpcErrorCode.ValidationError;
24
24
  readonly when: "A parameter was supplied with a blank, whitespace-only, or empty-list value.";
25
- readonly recovery: "Omit the parameter entirely to leave it unset — omission and a blank value mean different things here. To constrain the request, supply a value containing non-whitespace; for list parameters, supply at least one non-blank entry.";
25
+ readonly recovery: "Supply a value containing non-whitespace, or for a list parameter at least one non-blank entry. Only when the parameter is optional and you meant to leave it unset, omit it entirely instead — omission and a blank value mean different things here.";
26
26
  }, {
27
27
  readonly reason: "field_invalid";
28
28
  readonly code: JsonRpcErrorCode.ValidationError;
@@ -50,7 +50,7 @@ export declare const getStudyResults: import("@cyanheads/mcp-ts-core").ToolDefin
50
50
  readonly reason: "blank_value";
51
51
  readonly code: JsonRpcErrorCode.ValidationError;
52
52
  readonly when: "A parameter was supplied with a blank, whitespace-only, or empty-list value.";
53
- readonly recovery: "Omit the parameter entirely to leave it unset — omission and a blank value mean different things here. To constrain the request, supply a value containing non-whitespace; for list parameters, supply at least one non-blank entry.";
53
+ readonly recovery: "Supply a value containing non-whitespace, or for a list parameter at least one non-blank entry. Only when the parameter is optional and you meant to leave it unset, omit it entirely instead — omission and a blank value mean different things here.";
54
54
  }, {
55
55
  readonly reason: "rate_limited";
56
56
  readonly code: JsonRpcErrorCode.RateLimited;
@@ -32,7 +32,7 @@ export declare const searchStudies: import("@cyanheads/mcp-ts-core").ToolDefinit
32
32
  readonly reason: "blank_value";
33
33
  readonly code: JsonRpcErrorCode.ValidationError;
34
34
  readonly when: "A parameter was supplied with a blank, whitespace-only, or empty-list value.";
35
- readonly recovery: "Omit the parameter entirely to leave it unset — omission and a blank value mean different things here. To constrain the request, supply a value containing non-whitespace; for list parameters, supply at least one non-blank entry.";
35
+ readonly recovery: "Supply a value containing non-whitespace, or for a list parameter at least one non-blank entry. Only when the parameter is optional and you meant to leave it unset, omit it entirely instead — omission and a blank value mean different things here.";
36
36
  }, {
37
37
  readonly reason: "ids_not_found";
38
38
  readonly code: JsonRpcErrorCode.NotFound;
@@ -30,7 +30,11 @@ export declare function firstBlankParam(params: Record<string, string | undefine
30
30
  * `'[]'` form LLM callers sometimes send is judged on what it resolves to.
31
31
  */
32
32
  export declare function firstBlankListParam(params: Record<string, string[] | undefined>): string | undefined;
33
- /** Actionable message for a parameter supplied with a blank value. */
33
+ /**
34
+ * Actionable message for a parameter supplied with a blank value. Leads with
35
+ * the fix that works on a required parameter too — omitting one of those fails
36
+ * the schema and returns a bare -32602 with no reason and no recovery hint.
37
+ */
34
38
  export declare function blankValueMessage(param: string): string;
35
39
  /** Build AREA[] phase filter and combine with user's advancedFilter. */
36
40
  export declare function buildAdvancedFilter(phaseFilter?: string[], advancedFilter?: string): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"query-helpers.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/utils/query-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AACxD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAkBhF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAK9F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,GAC3C,MAAM,GAAG,SAAS,CAMpB;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CACjC,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,GAAG,SAAS,CAWpB"}
1
+ {"version":3,"file":"query-helpers.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/utils/query-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AACxD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAkBhF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAK9F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,GAC3C,MAAM,GAAG,SAAS,CAMpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CACjC,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,GAAG,SAAS,CAWpB"}
@@ -50,9 +50,13 @@ export function firstBlankListParam(params) {
50
50
  }
51
51
  return undefined;
52
52
  }
53
- /** Actionable message for a parameter supplied with a blank value. */
53
+ /**
54
+ * Actionable message for a parameter supplied with a blank value. Leads with
55
+ * the fix that works on a required parameter too — omitting one of those fails
56
+ * the schema and returns a bare -32602 with no reason and no recovery hint.
57
+ */
54
58
  export function blankValueMessage(param) {
55
- return `Parameter '${param}' was supplied with a blank value — an empty or whitespace-only string, an empty list, or a list carrying a blank entry. Omit it to leave it unset, or supply a value containing non-whitespace.`;
59
+ return `Parameter '${param}' was supplied with a blank value — an empty or whitespace-only string, an empty list, or a list carrying a blank entry. Supply a value containing non-whitespace, or for a list at least one non-blank entry; omit the parameter entirely only if it is optional and you meant to leave it unset.`;
56
60
  }
57
61
  /** Build AREA[] phase filter and combine with user's advancedFilter. */
58
62
  export function buildAdvancedFilter(phaseFilter, advancedFilter) {
@@ -1 +1 @@
1
- {"version":3,"file":"query-helpers.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/utils/query-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,MAAM,UAAU,OAAO,CAAC,CAAgC;IACtD,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACrF,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,MAA0C;IACxE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IACpE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA4C;IAE5C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACpF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,cAAc,KAAK,kMAAkM,CAAC;AAC/N,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CACjC,WAAsB,EACtB,cAAuB;IAEvB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,EAAE,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GACR,WAAW,CAAC,MAAM,KAAK,CAAC;YACtB,CAAC,CAAC,cAAc,WAAW,CAAC,CAAC,CAAC,EAAE;YAChC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"query-helpers.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/utils/query-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,MAAM,UAAU,OAAO,CAAC,CAAgC;IACtD,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACrF,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,MAA0C;IACxE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IACpE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA4C;IAE5C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACpF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,cAAc,KAAK,oSAAoS,CAAC;AACjU,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CACjC,WAAsB,EACtB,cAAuB;IAEvB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,EAAE,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GACR,WAAW,CAAC,MAAM,KAAK,CAAC;YACtB,CAAC,CAAC,cAAc,WAAW,CAAC,CAAC,CAAC,EAAE;YAChC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC"}
@@ -7,7 +7,7 @@
7
7
  * @module mcp-server/tools/utils/recovery-hints
8
8
  */
9
9
  export declare const RECOVERY_HINTS: {
10
- readonly blank_value: 'Omit the parameter entirely to leave it unset — omission and a blank value mean different things here. To constrain the request, supply a value containing non-whitespace; for list parameters, supply at least one non-blank entry.';
10
+ readonly blank_value: 'Supply a value containing non-whitespace, or for a list parameter at least one non-blank entry. Only when the parameter is optional and you meant to leave it unset, omit it entirely instead — omission and a blank value mean different things here.';
11
11
  readonly study_not_found: 'Verify the NCT ID at clinicaltrials.gov or call clinicaltrials_search_studies to discover a valid identifier.';
12
12
  readonly ids_not_found: 'Verify each NCT ID exists at clinicaltrials.gov, or call clinicaltrials_search_studies first to discover valid identifiers.';
13
13
  readonly field_invalid: 'Call clinicaltrials_get_field_definitions to browse the field tree; use PascalCase piece names like OverallStatus, Phase, or StudyType.';
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-hints.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/utils/recovery-hints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,cAAc;aACzB,WAAW,EACT,sOAAsO;aACxO,eAAe,EACb,+GAA+G;aACjH,aAAa,EACX,6HAA6H;aAC/H,aAAa,EACX,yIAAyI;aAC3I,YAAY,EACV,yIAAyI;aAC3I,iBAAiB,EACf,+ZAA+Z;aACja,WAAW,EACT,oMAAoM;aACtM,YAAY,EACV,gMAAgM;aAClM,cAAc,EACZ,4KAA4K;aAC9K,YAAY,EACV,6GAA6G;CACvG,CAAC"}
1
+ {"version":3,"file":"recovery-hints.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/utils/recovery-hints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,cAAc;aACzB,WAAW,EACT,wPAAwP;aAC1P,eAAe,EACb,+GAA+G;aACjH,aAAa,EACX,6HAA6H;aAC/H,aAAa,EACX,yIAAyI;aAC3I,YAAY,EACV,yIAAyI;aAC3I,iBAAiB,EACf,+ZAA+Z;aACja,WAAW,EACT,oMAAoM;aACtM,YAAY,EACV,gMAAgM;aAClM,cAAc,EACZ,4KAA4K;aAC9K,YAAY,EACV,6GAA6G;CACvG,CAAC"}
@@ -7,7 +7,7 @@
7
7
  * @module mcp-server/tools/utils/recovery-hints
8
8
  */
9
9
  export const RECOVERY_HINTS = {
10
- blank_value: 'Omit the parameter entirely to leave it unset — omission and a blank value mean different things here. To constrain the request, supply a value containing non-whitespace; for list parameters, supply at least one non-blank entry.',
10
+ blank_value: 'Supply a value containing non-whitespace, or for a list parameter at least one non-blank entry. Only when the parameter is optional and you meant to leave it unset, omit it entirely instead — omission and a blank value mean different things here.',
11
11
  study_not_found: 'Verify the NCT ID at clinicaltrials.gov or call clinicaltrials_search_studies to discover a valid identifier.',
12
12
  ids_not_found: 'Verify each NCT ID exists at clinicaltrials.gov, or call clinicaltrials_search_studies first to discover valid identifiers.',
13
13
  field_invalid: 'Call clinicaltrials_get_field_definitions to browse the field tree; use PascalCase piece names like OverallStatus, Phase, or StudyType.',
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-hints.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/utils/recovery-hints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EACT,sOAAsO;IACxO,eAAe,EACb,+GAA+G;IACjH,aAAa,EACX,6HAA6H;IAC/H,aAAa,EACX,yIAAyI;IAC3I,YAAY,EACV,yIAAyI;IAC3I,iBAAiB,EACf,+ZAA+Z;IACja,WAAW,EACT,oMAAoM;IACtM,YAAY,EACV,gMAAgM;IAClM,cAAc,EACZ,4KAA4K;IAC9K,YAAY,EACV,6GAA6G;CACvG,CAAC"}
1
+ {"version":3,"file":"recovery-hints.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/utils/recovery-hints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EACT,wPAAwP;IAC1P,eAAe,EACb,+GAA+G;IACjH,aAAa,EACX,6HAA6H;IAC/H,aAAa,EACX,yIAAyI;IAC3I,YAAY,EACV,yIAAyI;IAC3I,iBAAiB,EACf,+ZAA+Z;IACja,WAAW,EACT,oMAAoM;IACtM,YAAY,EACV,gMAAgM;IAClM,cAAc,EACZ,4KAA4K;IAC9K,YAAY,EACV,6GAA6G;CACvG,CAAC"}
@@ -38,6 +38,11 @@ export declare function searchFields(query: string, entries: FieldIndexEntry[],
38
38
  * Suggest the closest valid `piece` names to an invalid input. Uses the same
39
39
  * keyword scoring first, falls back to Levenshtein distance for typos that
40
40
  * don't share token-level signal (e.g., `ConditionList` → `Condition`).
41
+ *
42
+ * Both paths drop candidates clearing no minimum similarity, so an input
43
+ * related to no piece name yields nothing rather than the nearest of the
44
+ * unrelated. Callers already render the no-suggestion case: the message still
45
+ * names the invalid input and points at `clinicaltrials_get_field_definitions`.
41
46
  */
42
47
  export declare function nearestPieces(invalid: string, entries: FieldIndexEntry[], n?: number): string[];
43
48
  //# sourceMappingURL=field-search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-search.d.ts","sourceRoot":"","sources":["../../../src/services/clinical-trials/field-search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,CAkBpE;AA2FD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,EAC1B,KAAK,EAAE,MAAM,GACZ;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAI/C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,CAAC,SAAI,GAAG,MAAM,EAAE,CAc1F"}
1
+ {"version":3,"file":"field-search.d.ts","sourceRoot":"","sources":["../../../src/services/clinical-trials/field-search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,CAkBpE;AA2FD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,EAC1B,KAAK,EAAE,MAAM,GACZ;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAI/C;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,CAAC,SAAI,GAAG,MAAM,EAAE,CAmB1F"}
@@ -130,22 +130,45 @@ export function searchFields(query, entries, limit) {
130
130
  scored.sort((a, b) => b.s - a.s);
131
131
  return { entries: scored.slice(0, Math.max(1, limit)).map((x) => x.e), total: scored.length };
132
132
  }
133
+ /**
134
+ * Floor a keyword-scored suggestion must clear. Sits above the most a candidate
135
+ * can earn with no piece-name evidence at all — a lone path token (60), a lone
136
+ * description token (30), or both (90) — so a coincidence in the metadata
137
+ * surrounding a field never reads as a did-you-mean.
138
+ */
139
+ const MIN_SUGGESTION_SCORE = 100;
140
+ /**
141
+ * Ceiling on edit distance as a fraction of the longer string, for the fallback
142
+ * path. A near miss stays well under it (`Enrolment` → `EnrollmentCount` is
143
+ * 0.40); a name sharing no structure with any piece sits at or near 1.0.
144
+ */
145
+ const MAX_SUGGESTION_DISTANCE_RATIO = 0.5;
133
146
  /**
134
147
  * Suggest the closest valid `piece` names to an invalid input. Uses the same
135
148
  * keyword scoring first, falls back to Levenshtein distance for typos that
136
149
  * don't share token-level signal (e.g., `ConditionList` → `Condition`).
150
+ *
151
+ * Both paths drop candidates clearing no minimum similarity, so an input
152
+ * related to no piece name yields nothing rather than the nearest of the
153
+ * unrelated. Callers already render the no-suggestion case: the message still
154
+ * names the invalid input and points at `clinicaltrials_get_field_definitions`.
137
155
  */
138
156
  export function nearestPieces(invalid, entries, n = 3) {
139
157
  const scored = entries
140
158
  .map((e) => ({ piece: e.piece, score: scoreEntry(invalid, e) }))
141
- .filter((x) => x.score > 0);
159
+ .filter((x) => x.score >= MIN_SUGGESTION_SCORE);
142
160
  if (scored.length > 0) {
143
161
  scored.sort((a, b) => b.score - a.score);
144
162
  return scored.slice(0, n).map((x) => x.piece);
145
163
  }
146
164
  const target = invalid.toLowerCase();
147
165
  return entries
148
- .map((e) => ({ piece: e.piece, dist: levenshtein(target, e.piece.toLowerCase()) }))
166
+ .map((e) => {
167
+ const piece = e.piece.toLowerCase();
168
+ const dist = levenshtein(target, piece);
169
+ return { piece: e.piece, dist, ratio: dist / Math.max(target.length, piece.length) };
170
+ })
171
+ .filter((x) => x.ratio <= MAX_SUGGESTION_DISTANCE_RATIO)
149
172
  .sort((a, b) => a.dist - b.dist)
150
173
  .slice(0, n)
151
174
  .map((x) => x.piece);
@@ -1 +1 @@
1
- {"version":3,"file":"field-search.js","sourceRoot":"","sources":["../../../src/services/clinical-trials/field-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-search.js","sourceRoot":"","sources":["../../../src/services/clinical-trials/field-search.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clinicaltrialsgov-mcp-server",
3
- "version": "2.9.0",
3
+ "version": "2.9.1",
4
4
  "mcpName": "io.github.cyanheads/clinicaltrialsgov-mcp-server",
5
5
  "description": "Search ClinicalTrials.gov trials, retrieve study details and results, and match patients to eligible trials via MCP. STDIO or Streamable HTTP.",
6
6
  "main": "dist/index.js",
@@ -28,9 +28,6 @@
28
28
  "homepage": "https://github.com/cyanheads/clinicaltrialsgov-mcp-server#readme",
29
29
  "scripts": {
30
30
  "build": "bun run scripts/build.ts",
31
- "build:worker": "bun build ./src/worker.ts --outdir ./dist --target bun --no-external",
32
- "deploy:dev": "MCP_TRANSPORT_TYPE=http bunx wrangler dev",
33
- "deploy:prod": "MCP_TRANSPORT_TYPE=http bunx wrangler deploy",
34
31
  "start": "bun ./dist/index.js",
35
32
  "start:stdio": "MCP_TRANSPORT_TYPE=stdio bun ./dist/index.js",
36
33
  "start:http": "MCP_TRANSPORT_TYPE=http bun ./dist/index.js",
@@ -49,7 +46,6 @@
49
46
  "prepare": "git config core.hooksPath .husky || exit 0",
50
47
  "inspector": "bunx mcp-inspector --config mcp.json --server clinicaltrialsgov-mcp-server",
51
48
  "test": "bunx vitest run",
52
- "test:conformance": "bunx vitest run --config vitest.conformance.ts",
53
49
  "test:fuzz": "bunx vitest run fuzz",
54
50
  "test:coverage": "bunx vitest run --coverage",
55
51
  "coverage:update": "bun run scripts/update-coverage.ts",
@@ -108,7 +104,6 @@
108
104
  },
109
105
  "devDependencies": {
110
106
  "@biomejs/biome": "^2.5.8",
111
- "@cloudflare/workers-types": "5.20260815.1",
112
107
  "@socketsecurity/bun-security-scanner": "^1.1.2",
113
108
  "@types/bun": "^1.3.14",
114
109
  "@types/node": "26.2.0",