clinicaltrialsgov-mcp-server 2.6.2 → 2.6.4

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 (26) hide show
  1. package/README.md +1 -9
  2. package/dist/config/server-config.d.ts +0 -15
  3. package/dist/config/server-config.d.ts.map +1 -1
  4. package/dist/config/server-config.js +0 -35
  5. package/dist/config/server-config.js.map +1 -1
  6. package/dist/index.js +1 -20
  7. package/dist/index.js.map +1 -1
  8. package/dist/mcp-server/tools/definitions/find-eligible.tool.js +1 -1
  9. package/dist/mcp-server/tools/definitions/find-eligible.tool.js.map +1 -1
  10. package/dist/services/clinical-trials/clinical-trials-service.d.ts +0 -19
  11. package/dist/services/clinical-trials/clinical-trials-service.d.ts.map +1 -1
  12. package/dist/services/clinical-trials/clinical-trials-service.js +1 -226
  13. package/dist/services/clinical-trials/clinical-trials-service.js.map +1 -1
  14. package/package.json +2 -2
  15. package/dist/services/clinical-trials/mirror/index.d.ts +0 -31
  16. package/dist/services/clinical-trials/mirror/index.d.ts.map +0 -1
  17. package/dist/services/clinical-trials/mirror/index.js +0 -66
  18. package/dist/services/clinical-trials/mirror/index.js.map +0 -1
  19. package/dist/services/clinical-trials/mirror/ingester.d.ts +0 -39
  20. package/dist/services/clinical-trials/mirror/ingester.d.ts.map +0 -1
  21. package/dist/services/clinical-trials/mirror/ingester.js +0 -308
  22. package/dist/services/clinical-trials/mirror/ingester.js.map +0 -1
  23. package/dist/services/clinical-trials/mirror/types.d.ts +0 -68
  24. package/dist/services/clinical-trials/mirror/types.d.ts.map +0 -1
  25. package/dist/services/clinical-trials/mirror/types.js +0 -45
  26. package/dist/services/clinical-trials/mirror/types.js.map +0 -1
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.6.2-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-^6.0-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.2-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.6.4-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-^6.0-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.2-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
@@ -177,10 +177,6 @@ All configuration is optional — the server works with defaults and no API keys
177
177
  | `CT_API_BASE_URL` | ClinicalTrials.gov API base URL. | `https://clinicaltrials.gov/api/v2` |
178
178
  | `CT_REQUEST_TIMEOUT_MS` | Per-request timeout in milliseconds. | `30000` |
179
179
  | `CT_MAX_PAGE_SIZE` | Maximum page size cap. | `200` |
180
- | `CT_MIRROR_ENABLED` | Enable the local SQLite study mirror. | `false` |
181
- | `CT_MIRROR_PATH` | Filesystem path for the mirror database. | `./clinical-trials-mirror.db` |
182
- | `CT_MIRROR_REFRESH_CRON` | Cron schedule for incremental mirror sync. | `0 3 * * *` (3 AM daily) |
183
- | `CT_MIRROR_FALLBACK_LIVE` | Fall back to live API when mirror is not yet bootstrapped. | `true` |
184
180
  | `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http`. | `stdio` |
185
181
  | `MCP_HTTP_PORT` | Port for HTTP server. | `3010` |
186
182
  | `MCP_AUTH_MODE` | Auth mode: `none`, `jwt`, or `oauth`. | `none` |
@@ -188,10 +184,6 @@ All configuration is optional — the server works with defaults and no API keys
188
184
  | `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |
189
185
  | `OTEL_ENABLED` | Enable OpenTelemetry tracing. | `false` |
190
186
 
191
- ### Local study mirror (opt-in)
192
-
193
- Setting `CT_MIRROR_ENABLED=true` activates a self-refreshing SQLite+FTS5 local mirror of the ~577K-study corpus. Search and count queries route to the mirror first, with transparent fallback to the live API when the mirror is not yet ready (`CT_MIRROR_FALLBACK_LIVE=true`, the default). The mirror must be bootstrapped out-of-band before it becomes ready — while enabled but not yet bootstrapped it falls through to the live API identically to the disabled state. Once bootstrapped, the mirror eliminates live-API round-trips for most search and lookup operations. Full-record lookups (`clinicaltrials_get_study_record`), results data, field definitions, and field values remain live-API only.
194
-
195
187
  ## Running the Server
196
188
 
197
189
  ### Local Development
@@ -8,23 +8,8 @@ declare const ServerConfigSchema: z.ZodObject<{
8
8
  requestTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
9
9
  maxPageSize: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
10
10
  }, z.core.$strip>;
11
- /** Mirror-specific configuration parsed separately from the flat env var set. */
12
- declare const MirrorConfigSchema: z.ZodObject<{
13
- enabled: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
14
- path: z.ZodDefault<z.ZodString>;
15
- refreshCron: z.ZodDefault<z.ZodString>;
16
- fallbackLive: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
17
- }, z.core.$strip>;
18
11
  export type ServerConfig = z.infer<typeof ServerConfigSchema>;
19
- export type MirrorConfig = z.infer<typeof MirrorConfigSchema> & {
20
- /** API base URL forwarded from the main config for the mirror ingester. */
21
- apiBaseUrl: string;
22
- /** Per-request timeout forwarded from the main config for the mirror ingester. */
23
- requestTimeoutMs: number;
24
- };
25
12
  /** Get server configuration (lazy-parsed from env vars). */
26
13
  export declare function getServerConfig(): ServerConfig;
27
- /** Get mirror configuration (lazy-parsed from env vars). */
28
- export declare function getMirrorConfig(): MirrorConfig;
29
14
  export {};
30
15
  //# sourceMappingURL=server-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAG3C,QAAA,MAAM,kBAAkB;;;;iBAOtB,CAAC;AAEH,iFAAiF;AACjF,QAAA,MAAM,kBAAkB;;;;;iBActB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAC9D,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAKF,4DAA4D;AAC5D,wBAAgB,eAAe,IAAI,YAAY,CAO9C;AAED,4DAA4D;AAC5D,wBAAgB,eAAe,IAAI,YAAY,CAgB9C"}
1
+ {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAG3C,QAAA,MAAM,kBAAkB;;;;iBAOtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,4DAA4D;AAC5D,wBAAgB,eAAe,IAAI,YAAY,CAO9C"}
@@ -12,24 +12,7 @@ const ServerConfigSchema = z.object({
12
12
  requestTimeoutMs: z.coerce.number().default(30_000).describe('Per-request timeout in ms'),
13
13
  maxPageSize: z.coerce.number().default(200).describe('Maximum page size cap'),
14
14
  });
15
- /** Mirror-specific configuration parsed separately from the flat env var set. */
16
- const MirrorConfigSchema = z.object({
17
- enabled: z.coerce.boolean().default(false).describe('Enable the local SQLite study mirror'),
18
- path: z
19
- .string()
20
- .default('./clinical-trials-mirror.db')
21
- .describe('Filesystem path for the mirror SQLite database'),
22
- refreshCron: z
23
- .string()
24
- .default('0 3 * * *')
25
- .describe('Cron expression for incremental mirror refresh (default: 3 AM daily)'),
26
- fallbackLive: z.coerce
27
- .boolean()
28
- .default(true)
29
- .describe('Fall back to live API when mirror is not ready'),
30
- });
31
15
  let _config;
32
- let _mirrorConfig;
33
16
  /** Get server configuration (lazy-parsed from env vars). */
34
17
  export function getServerConfig() {
35
18
  _config ??= parseEnvConfig(ServerConfigSchema, {
@@ -39,22 +22,4 @@ export function getServerConfig() {
39
22
  });
40
23
  return _config;
41
24
  }
42
- /** Get mirror configuration (lazy-parsed from env vars). */
43
- export function getMirrorConfig() {
44
- if (!_mirrorConfig) {
45
- const base = parseEnvConfig(MirrorConfigSchema, {
46
- enabled: 'CT_MIRROR_ENABLED',
47
- path: 'CT_MIRROR_PATH',
48
- refreshCron: 'CT_MIRROR_REFRESH_CRON',
49
- fallbackLive: 'CT_MIRROR_FALLBACK_LIVE',
50
- });
51
- const server = getServerConfig();
52
- _mirrorConfig = {
53
- ...base,
54
- apiBaseUrl: server.apiBaseUrl,
55
- requestTimeoutMs: server.requestTimeoutMs,
56
- };
57
- }
58
- return _mirrorConfig;
59
- }
60
25
  //# sourceMappingURL=server-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,OAAO,CAAC,mCAAmC,CAAC;SAC5C,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACzF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAC9E,CAAC,CAAC;AAEH,iFAAiF;AACjF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC3F,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,OAAO,CAAC,6BAA6B,CAAC;SACtC,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,OAAO,CAAC,WAAW,CAAC;SACpB,QAAQ,CAAC,sEAAsE,CAAC;IACnF,YAAY,EAAE,CAAC,CAAC,MAAM;SACnB,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,gDAAgD,CAAC;CAC9D,CAAC,CAAC;AAUH,IAAI,OAAiC,CAAC;AACtC,IAAI,aAAuC,CAAC;AAE5C,4DAA4D;AAC5D,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,cAAc,CAAC,kBAAkB,EAAE;QAC7C,UAAU,EAAE,iBAAiB;QAC7B,gBAAgB,EAAE,uBAAuB;QACzC,WAAW,EAAE,kBAAkB;KAChC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,cAAc,CAAC,kBAAkB,EAAE;YAC9C,OAAO,EAAE,mBAAmB;YAC5B,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,wBAAwB;YACrC,YAAY,EAAE,yBAAyB;SACxC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,aAAa,GAAG;YACd,GAAG,IAAI;YACP,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;SAC1C,CAAC;IACJ,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,OAAO,CAAC,mCAAmC,CAAC;SAC5C,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACzF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAC9E,CAAC,CAAC;AAIH,IAAI,OAAiC,CAAC;AAEtC,4DAA4D;AAC5D,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,cAAc,CAAC,kBAAkB,EAAE;QAC7C,UAAU,EAAE,iBAAiB;QAC7B,gBAAgB,EAAE,uBAAuB;QACzC,WAAW,EAAE,kBAAkB;KAChC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/index.js CHANGED
@@ -4,13 +4,10 @@
4
4
  * @module index
5
5
  */
6
6
  import { createApp } from '@cyanheads/mcp-ts-core';
7
- import { schedulerService } from '@cyanheads/mcp-ts-core/utils';
8
- import { getMirrorConfig } from './config/server-config.js';
9
7
  import { allPromptDefinitions } from './mcp-server/prompts/definitions/index.js';
10
8
  import { allResourceDefinitions } from './mcp-server/resources/definitions/index.js';
11
9
  import { allToolDefinitions } from './mcp-server/tools/definitions/index.js';
12
10
  import { initClinicalTrialsService } from './services/clinical-trials/clinical-trials-service.js';
13
- import { getClinicalTrialsMirror, initMirror } from './services/clinical-trials/mirror/index.js';
14
11
  await createApp({
15
12
  tools: allToolDefinitions,
16
13
  resources: allResourceDefinitions,
@@ -19,24 +16,8 @@ await createApp({
19
16
  landing: {
20
17
  requireAuth: false,
21
18
  },
22
- async setup({ config }) {
19
+ setup() {
23
20
  initClinicalTrialsService();
24
- const mirrorConfig = getMirrorConfig();
25
- if (mirrorConfig.enabled) {
26
- initMirror(mirrorConfig);
27
- // Schedule incremental refresh on HTTP transport only — stdio operators
28
- // run the server per-request and don't benefit from a persistent cron.
29
- // The full init must be run out-of-band (bootstrap script, CLI, or manual runSync).
30
- if (config.mcpTransportType === 'http') {
31
- const mirror = getClinicalTrialsMirror();
32
- if (mirror) {
33
- await schedulerService.schedule('ct-mirror-refresh', mirrorConfig.refreshCron, async (_ctx) => {
34
- await mirror.runSync({ mode: 'refresh' });
35
- }, 'Incremental ClinicalTrials.gov mirror refresh');
36
- schedulerService.start('ct-mirror-refresh');
37
- }
38
- }
39
- }
40
21
  },
41
22
  });
42
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAClG,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAEjG,MAAM,SAAS,CAAC;IACd,KAAK,EAAE,kBAAkB;IACzB,SAAS,EAAE,sBAAsB;IACjC,OAAO,EAAE,oBAAoB;IAC7B,YAAY,EAAE,qsBAAqsB;IACntB,OAAO,EAAE;QACP,WAAW,EAAE,KAAK;KACnB;IACD,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE;QACpB,yBAAyB,EAAE,CAAC;QAE5B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,UAAU,CAAC,YAAY,CAAC,CAAC;YAEzB,wEAAwE;YACxE,uEAAuE;YACvE,oFAAoF;YACpF,IAAI,MAAM,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;gBACzC,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,gBAAgB,CAAC,QAAQ,CAC7B,mBAAmB,EACnB,YAAY,CAAC,WAAW,EACxB,KAAK,EAAE,IAAI,EAAE,EAAE;wBACb,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC5C,CAAC,EACD,+CAA+C,CAChD,CAAC;oBACF,gBAAgB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAElG,MAAM,SAAS,CAAC;IACd,KAAK,EAAE,kBAAkB;IACzB,SAAS,EAAE,sBAAsB;IACjC,OAAO,EAAE,oBAAoB;IAC7B,YAAY,EAAE,qsBAAqsB;IACntB,OAAO,EAAE;QACP,WAAW,EAAE,KAAK;KACnB;IACD,KAAK;QACH,yBAAyB,EAAE,CAAC;IAC9B,CAAC;CACF,CAAC,CAAC"}
@@ -153,7 +153,7 @@ export const findEligible = tool('clinicaltrials_find_eligible', {
153
153
  input.location.country,
154
154
  ].filter(Boolean);
155
155
  const locationQuery = locationParts.join(', ');
156
- const statusFilter = input.recruitingOnly ? ['RECRUITING', 'NOT_YET_RECRUITING'] : undefined;
156
+ const statusFilter = input.recruitingOnly ? ['RECRUITING'] : undefined;
157
157
  const advancedParts = [
158
158
  `AREA[MinimumAge]RANGE[MIN, ${input.age} years]`,
159
159
  `AREA[MaximumAge]RANGE[${input.age} years, MAX]`,
@@ -1 +1 @@
1
- {"version":3,"file":"find-eligible.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/find-eligible.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-eligible.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/find-eligible.tool.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,8 @@
1
1
  /**
2
2
  * @fileoverview ClinicalTrials.gov REST API v2 client with retry, rate limiting, and timeout.
3
- * Routes search and count operations to the local mirror when enabled and ready,
4
- * falling back to the live API when the mirror is unavailable or the query requires
5
- * features the mirror cannot answer (geo filters, complex AREA[] expressions).
6
3
  * @module services/clinical-trials/clinical-trials-service
7
4
  */
8
5
  import type { Context } from '@cyanheads/mcp-ts-core';
9
- import type { MirrorStatus } from '@cyanheads/mcp-ts-core/mirror';
10
6
  import { type ServerConfig } from '../../config/server-config.js';
11
7
  import { type FieldIndexEntry } from './field-search.js';
12
8
  import type { FieldNode, FieldValueStats, PagedStudiesResponse, SearchParams, Study } from './types.js';
@@ -39,27 +35,12 @@ export declare class ClinicalTrialsService {
39
35
  getStudy(nctId: string, ctx: Context): Promise<Study>;
40
36
  /** Fetch multiple studies by NCT IDs in a single request. Returns identification and results section data. */
41
37
  getStudiesBatch(nctIds: string[], ctx: Context): Promise<Study[]>;
42
- /**
43
- * Return current mirror status, or `undefined` when the mirror is disabled.
44
- * Exposed so tools can surface mirror state to agents when useful.
45
- */
46
- mirrorStatus(): Promise<MirrorStatus | undefined>;
47
38
  /** Get field definitions (metadata tree) from the data model. */
48
39
  getMetadata(includeIndexedOnly: boolean, ctx: Context): Promise<FieldNode[]>;
49
40
  /** Get field value statistics for the specified fields. */
50
41
  getFieldValues(fields: string[], ctx: Context): Promise<FieldValueStats[]>;
51
42
  /** Search the field model by keyword, returning ranked matches with paths and types. */
52
43
  searchFieldDefinitions(query: string, limit: number, ctx: Context): Promise<FieldIndexEntry[]>;
53
- /**
54
- * Attempt to serve a `searchStudies` call from the local mirror.
55
- *
56
- * Returns `null` when the mirror is not ready, or when the query uses
57
- * features the mirror cannot answer (geo filters, complex AREA[] advanced
58
- * filters, field selection beyond the metadata tier, or pageToken
59
- * continuation from a previous live-API page). In all of those cases the
60
- * caller falls through to the live API.
61
- */
62
- private tryMirrorSearch;
63
44
  /** Lazy-load and memoize the flattened field index from /studies/metadata. */
64
45
  private getFieldIndex;
65
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"clinical-trials-service.d.ts","sourceRoot":"","sources":["../../../src/services/clinical-trials/clinical-trials-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAStD,OAAO,KAAK,EAAU,YAAY,EAAe,MAAM,+BAA+B,CAAC;AAEvF,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,KAAK,EACN,MAAM,YAAY,CAAC;AA4BpB,kGAAkG;AAClG,MAAM,WAAW,4BAA4B;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IAChD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,iBAAiB,CAMX;gBAEF,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,4BAAiC;IAU5E,2EAA2E;IACrE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkBtF,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAKrD,8GAA8G;IACxG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA2BvE;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAMvD,iEAAiE;IACjE,WAAW,CAAC,kBAAkB,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAO5E,2DAA2D;IACrD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAuChF,wFAAwF;IAClF,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,eAAe,EAAE,CAAC;IAU7B;;;;;;;;OAQG;YACW,eAAe;IAsG7B,8EAA8E;IAC9E,OAAO,CAAC,aAAa;IAoCrB;;;;;;OAMG;YACW,eAAe;IAoC7B,wEAAwE;YAC1D,cAAc;IAwC5B,OAAO,CAAC,gBAAgB;YA+BV,QAAQ;YAMR,SAAS;CAyLxB;AAyGD,0EAA0E;AAC1E,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,2DAA2D;AAC3D,wBAAgB,wBAAwB,IAAI,qBAAqB,CAMhE"}
1
+ {"version":3,"file":"clinical-trials-service.d.ts","sourceRoot":"","sources":["../../../src/services/clinical-trials/clinical-trials-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAUtD,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,KAAK,EACN,MAAM,YAAY,CAAC;AA4BpB,kGAAkG;AAClG,MAAM,WAAW,4BAA4B;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IAChD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,iBAAiB,CAMX;gBAEF,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,4BAAiC;IAU5E,2EAA2E;IACrE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAWtF,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAKrD,8GAA8G;IACxG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAevE,iEAAiE;IACjE,WAAW,CAAC,kBAAkB,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAO5E,2DAA2D;IACrD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAuChF,wFAAwF;IAClF,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,eAAe,EAAE,CAAC;IAU7B,8EAA8E;IAC9E,OAAO,CAAC,aAAa;IAoCrB;;;;;;OAMG;YACW,eAAe;IAoC7B,wEAAwE;YAC1D,cAAc;IAwC5B,OAAO,CAAC,gBAAgB;YA+BV,QAAQ;YAMR,SAAS;CAyLxB;AAQD,0EAA0E;AAC1E,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,2DAA2D;AAC3D,wBAAgB,wBAAwB,IAAI,qBAAqB,CAMhE"}
@@ -1,15 +1,11 @@
1
1
  /**
2
2
  * @fileoverview ClinicalTrials.gov REST API v2 client with retry, rate limiting, and timeout.
3
- * Routes search and count operations to the local mirror when enabled and ready,
4
- * falling back to the live API when the mirror is unavailable or the query requires
5
- * features the mirror cannot answer (geo filters, complex AREA[] expressions).
6
3
  * @module services/clinical-trials/clinical-trials-service
7
4
  */
8
5
  import { JsonRpcErrorCode, McpError, notFound, rateLimited, serviceUnavailable, validationError, } from '@cyanheads/mcp-ts-core/errors';
9
6
  import { httpErrorFromResponse } from '@cyanheads/mcp-ts-core/utils';
10
- import { getMirrorConfig, getServerConfig } from '../../config/server-config.js';
7
+ import { getServerConfig } from '../../config/server-config.js';
11
8
  import { flattenMetadata, nearestPieces, searchFields, } from './field-search.js';
12
- import { getClinicalTrialsMirror } from './mirror/index.js';
13
9
  const DEFAULT_MAX_RETRIES = 3;
14
10
  const DEFAULT_BASE_BACKOFF_MS = 1000;
15
11
  const DEFAULT_MAX_BACKOFF_MS = 30_000;
@@ -55,13 +51,6 @@ export class ClinicalTrialsService {
55
51
  }
56
52
  /** Search studies with query, filters, pagination, and field selection. */
57
53
  async searchStudies(params, ctx) {
58
- // Route to the local mirror when it is ready and the query is mirrorable.
59
- const mirror = getClinicalTrialsMirror();
60
- if (mirror) {
61
- const mirrorResult = await this.tryMirrorSearch(params, mirror, ctx);
62
- if (mirrorResult !== null)
63
- return mirrorResult;
64
- }
65
54
  if (this.validateFieldsLocally && params.fields?.length) {
66
55
  const normalized = await this.normalizeFields(params.fields, ctx);
67
56
  await this.validateFields(normalized, ctx);
@@ -79,16 +68,6 @@ export class ClinicalTrialsService {
79
68
  /** Fetch multiple studies by NCT IDs in a single request. Returns identification and results section data. */
80
69
  async getStudiesBatch(nctIds, ctx) {
81
70
  ctx.log.debug('getStudiesBatch', { count: nctIds.length });
82
- // Route to mirror for ID-targeted lookups when mirror is ready.
83
- const mirror = getClinicalTrialsMirror();
84
- if (mirror && (await mirror.ready())) {
85
- const rows = await mirror.getByIds(nctIds);
86
- if (rows.length > 0) {
87
- ctx.log.debug('getStudiesBatch served from mirror', { count: rows.length });
88
- return rows.map(mirrorRowToStudy);
89
- }
90
- // Mirror has no rows for these IDs → fall through to live API.
91
- }
92
71
  const response = await this.searchStudies({
93
72
  filterIds: nctIds,
94
73
  fields: ['NCTId', 'BriefTitle', 'HasResults', 'ResultsSection'],
@@ -98,16 +77,6 @@ export class ClinicalTrialsService {
98
77
  }, ctx);
99
78
  return response.studies;
100
79
  }
101
- /**
102
- * Return current mirror status, or `undefined` when the mirror is disabled.
103
- * Exposed so tools can surface mirror state to agents when useful.
104
- */
105
- async mirrorStatus() {
106
- const mirror = getClinicalTrialsMirror();
107
- if (!mirror)
108
- return;
109
- return await mirror.status();
110
- }
111
80
  /** Get field definitions (metadata tree) from the data model. */
112
81
  getMetadata(includeIndexedOnly, ctx) {
113
82
  ctx.log.debug('getMetadata', { includeIndexedOnly });
@@ -153,106 +122,6 @@ export class ClinicalTrialsService {
153
122
  return searchFields(query, entries, limit);
154
123
  }
155
124
  /* ------------------------------------------------------------------ */
156
- /* Mirror routing */
157
- /* ------------------------------------------------------------------ */
158
- /**
159
- * Attempt to serve a `searchStudies` call from the local mirror.
160
- *
161
- * Returns `null` when the mirror is not ready, or when the query uses
162
- * features the mirror cannot answer (geo filters, complex AREA[] advanced
163
- * filters, field selection beyond the metadata tier, or pageToken
164
- * continuation from a previous live-API page). In all of those cases the
165
- * caller falls through to the live API.
166
- */
167
- async tryMirrorSearch(params, mirror, ctx) {
168
- // Only serve from mirror when a full sync has ever completed.
169
- const ready = await mirror.ready();
170
- if (!ready) {
171
- const fallback = getMirrorConfig().fallbackLive;
172
- if (!fallback) {
173
- throw serviceUnavailable('Clinical-trials mirror is not ready and CT_MIRROR_FALLBACK_LIVE is disabled.', { hint: 'Run the mirror init script to bootstrap the local database.' });
174
- }
175
- ctx.log.debug('Mirror not ready — falling back to live API');
176
- return null;
177
- }
178
- // Mirror cannot handle: geo filters, advanced AREA[] expressions, or
179
- // pageToken continuation (tokens belong to the live API's pagination state).
180
- if (params.filterGeo || params.filterAdvanced || params.pageToken) {
181
- ctx.log.debug('Query not mirrorable — falling back to live API', {
182
- reason: params.filterGeo
183
- ? 'geo_filter'
184
- : params.filterAdvanced
185
- ? 'advanced_filter'
186
- : 'page_token',
187
- });
188
- return null;
189
- }
190
- // Build FTS match string from free-text query parameters.
191
- const ftsTerms = [];
192
- if (params.queryTerm)
193
- ftsTerms.push(sanitizeFts(params.queryTerm));
194
- if (params.queryCond)
195
- ftsTerms.push(sanitizeFts(params.queryCond));
196
- if (params.queryIntr)
197
- ftsTerms.push(sanitizeFts(params.queryIntr));
198
- if (params.querySpons)
199
- ftsTerms.push(sanitizeFts(params.querySpons));
200
- if (params.queryTitles)
201
- ftsTerms.push(sanitizeFts(params.queryTitles));
202
- // queryLocn and queryOutc are not in the FTS index — fall through to live.
203
- if (params.queryLocn || params.queryOutc) {
204
- ctx.log.debug('Query uses non-indexed fields — falling back to live API', {
205
- reason: params.queryLocn ? 'location_query' : 'outcome_query',
206
- });
207
- return null;
208
- }
209
- const match = ftsTerms.join(' ') || undefined;
210
- // Build structured filters for indexed columns.
211
- const filters = [];
212
- if (params.filterOverallStatus?.length === 1) {
213
- filters.push({
214
- column: 'overall_status',
215
- op: 'eq',
216
- value: params.filterOverallStatus[0],
217
- });
218
- }
219
- else if (params.filterOverallStatus?.length) {
220
- filters.push({ column: 'overall_status', op: 'in', value: params.filterOverallStatus });
221
- }
222
- // ID filter — if filterIds set, use getByIds for O(1) lookup.
223
- if (params.filterIds?.length) {
224
- const rows = await mirror.getByIds(params.filterIds);
225
- ctx.log.debug('Mirror ID lookup', { requested: params.filterIds.length, found: rows.length });
226
- const studies = rows.map(mirrorRowToStudy);
227
- return {
228
- studies,
229
- totalCount: studies.length,
230
- };
231
- }
232
- const limit = Math.min(params.pageSize ?? 10, this.maxPageSize);
233
- const offset = 0; // pageToken-based continuation not supported for mirror
234
- const result = await mirror.query({
235
- match,
236
- filters,
237
- sort: match ? 'relevance' : undefined,
238
- limit,
239
- offset,
240
- });
241
- ctx.log.debug('Mirror search', {
242
- match,
243
- filters: filters.length,
244
- total: result.total,
245
- returned: result.rows.length,
246
- });
247
- const studies = result.rows.map(mirrorRowToStudy);
248
- return {
249
- studies,
250
- // countTotal support: return total when params.countTotal !== false (default true)
251
- ...(params.countTotal !== false ? { totalCount: result.total } : {}),
252
- // No nextPageToken — mirror queries don't use cursor pagination
253
- };
254
- }
255
- /* ------------------------------------------------------------------ */
256
125
  /* Internal */
257
126
  /* ------------------------------------------------------------------ */
258
127
  /** Lazy-load and memoize the flattened field index from /studies/metadata. */
@@ -580,100 +449,6 @@ export class ClinicalTrialsService {
580
449
  }
581
450
  }
582
451
  /* ------------------------------------------------------------------ */
583
- /* Mirror helpers */
584
- /* ------------------------------------------------------------------ */
585
- /**
586
- * Convert a mirror row back to the nested study shape that tool handlers expect.
587
- * Only metadata-tier fields are populated; fields not stored in the mirror
588
- * (e.g., full eligibility details, derived MeSH terms, results section) are
589
- * omitted. Callers that need the full ~70KB record must use the live API.
590
- */
591
- function mirrorRowToStudy(rawRow) {
592
- const row = rawRow;
593
- return {
594
- protocolSection: {
595
- identificationModule: {
596
- ...(row.nct_id && { nctId: row.nct_id }),
597
- ...(row.brief_title && { briefTitle: row.brief_title }),
598
- ...(row.official_title && { officialTitle: row.official_title }),
599
- },
600
- statusModule: {
601
- ...(row.overall_status && { overallStatus: row.overall_status }),
602
- ...(row.start_date && { startDateStruct: { date: row.start_date } }),
603
- ...(row.primary_completion_date && {
604
- primaryCompletionDateStruct: { date: row.primary_completion_date },
605
- }),
606
- ...(row.last_update_post_date && {
607
- lastUpdatePostDateStruct: { date: row.last_update_post_date },
608
- }),
609
- },
610
- designModule: {
611
- ...(row.study_type && { studyType: row.study_type }),
612
- ...(row.phases && { phases: row.phases.split('|').filter(Boolean) }),
613
- ...(row.enrollment_count != null && {
614
- enrollmentInfo: { count: row.enrollment_count },
615
- }),
616
- },
617
- sponsorCollaboratorsModule: {
618
- ...(row.lead_sponsor_name || row.lead_sponsor_class
619
- ? {
620
- leadSponsor: {
621
- ...(row.lead_sponsor_name && { name: row.lead_sponsor_name }),
622
- ...(row.lead_sponsor_class && { class: row.lead_sponsor_class }),
623
- },
624
- }
625
- : {}),
626
- },
627
- conditionsModule: {
628
- ...(row.conditions && { conditions: row.conditions.split('|').filter(Boolean) }),
629
- },
630
- armsInterventionsModule: {
631
- ...(row.interventions && {
632
- interventions: row.interventions
633
- .split('|')
634
- .filter(Boolean)
635
- .map((name) => ({ name })),
636
- }),
637
- },
638
- eligibilityModule: {
639
- ...(row.eligibility_criteria && { eligibilityCriteria: row.eligibility_criteria }),
640
- ...(row.minimum_age && { minimumAge: row.minimum_age }),
641
- ...(row.maximum_age && { maximumAge: row.maximum_age }),
642
- ...(row.sex && { sex: row.sex }),
643
- ...(row.std_ages && { stdAges: row.std_ages.split('|').filter(Boolean) }),
644
- ...(row.healthy_volunteers != null && {
645
- healthyVolunteers: row.healthy_volunteers === 1,
646
- }),
647
- },
648
- contactsLocationsModule: {
649
- ...(row.locations && {
650
- locations: row.locations
651
- .split('|')
652
- .filter(Boolean)
653
- .map((loc) => {
654
- const [city, state, country] = loc.split(', ');
655
- return {
656
- ...(city && { city }),
657
- ...(state && { state }),
658
- ...(country && { country }),
659
- };
660
- }),
661
- }),
662
- },
663
- },
664
- ...(row.has_results != null && { hasResults: row.has_results === 1 }),
665
- };
666
- }
667
- /**
668
- * Sanitize a free-text query for FTS5 MATCH syntax.
669
- * Strips characters that FTS5 treats as special operators unless the caller
670
- * intentionally uses them. Preserves AND/OR/NOT boolean operators.
671
- */
672
- function sanitizeFts(query) {
673
- // Remove characters that break FTS5 MATCH parsing.
674
- return query.replace(/["*^()[\]]/g, ' ').trim();
675
- }
676
- /* ------------------------------------------------------------------ */
677
452
  /* Init / Accessor */
678
453
  /* ------------------------------------------------------------------ */
679
454
  let _service;