@digital-science-dsl/dimensions-analytics-mcp 1.0.3 → 1.1.0

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 (115) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/client/deployment-config.d.ts +3 -17
  3. package/dist/client/deployment-config.d.ts.map +1 -1
  4. package/dist/client/deployment-config.js +3 -23
  5. package/dist/client/deployment-config.js.map +1 -1
  6. package/dist/client/http-client.d.ts +4 -26
  7. package/dist/client/http-client.d.ts.map +1 -1
  8. package/dist/client/http-client.js +26 -79
  9. package/dist/client/http-client.js.map +1 -1
  10. package/dist/client/internal-dsl-client.d.ts +15 -3
  11. package/dist/client/internal-dsl-client.d.ts.map +1 -1
  12. package/dist/client/internal-dsl-client.js +32 -4
  13. package/dist/client/internal-dsl-client.js.map +1 -1
  14. package/dist/client/request-retry.d.ts +39 -0
  15. package/dist/client/request-retry.d.ts.map +1 -0
  16. package/dist/client/request-retry.js +85 -0
  17. package/dist/client/request-retry.js.map +1 -0
  18. package/dist/client/usage-context.d.ts +29 -0
  19. package/dist/client/usage-context.d.ts.map +1 -0
  20. package/dist/client/usage-context.js +33 -0
  21. package/dist/client/usage-context.js.map +1 -0
  22. package/dist/client/usage-headers.d.ts +19 -0
  23. package/dist/client/usage-headers.d.ts.map +1 -0
  24. package/dist/client/usage-headers.js +39 -0
  25. package/dist/client/usage-headers.js.map +1 -0
  26. package/dist/dsl/client.d.ts.map +1 -1
  27. package/dist/dsl/client.js +7 -4
  28. package/dist/dsl/client.js.map +1 -1
  29. package/dist/dsl/schema/structured-entities.d.ts +1 -1
  30. package/dist/dsl/schema/structured-entities.d.ts.map +1 -1
  31. package/dist/dsl/schema/structured-entities.js +4 -0
  32. package/dist/dsl/schema/structured-entities.js.map +1 -1
  33. package/dist/dsl/types/vocabulary.d.ts +2 -2
  34. package/dist/dsl/types/vocabulary.d.ts.map +1 -1
  35. package/dist/dsl/types/vocabulary.js +5 -0
  36. package/dist/dsl/types/vocabulary.js.map +1 -1
  37. package/dist/mcp/examples/dsl-examples.d.ts.map +1 -1
  38. package/dist/mcp/examples/dsl-examples.js +12 -0
  39. package/dist/mcp/examples/dsl-examples.js.map +1 -1
  40. package/dist/mcp/http-server.d.ts.map +1 -1
  41. package/dist/mcp/http-server.js +6 -0
  42. package/dist/mcp/http-server.js.map +1 -1
  43. package/dist/mcp/middleware/field-aliases.d.ts.map +1 -1
  44. package/dist/mcp/middleware/field-aliases.js +4 -0
  45. package/dist/mcp/middleware/field-aliases.js.map +1 -1
  46. package/dist/mcp/server.d.ts +4 -0
  47. package/dist/mcp/server.d.ts.map +1 -1
  48. package/dist/mcp/server.js +9 -0
  49. package/dist/mcp/server.js.map +1 -1
  50. package/dist/mcp/tools/analytics-filters.d.ts.map +1 -1
  51. package/dist/mcp/tools/analytics-filters.js +2 -0
  52. package/dist/mcp/tools/analytics-filters.js.map +1 -1
  53. package/dist/mcp/tools/analytics.d.ts.map +1 -1
  54. package/dist/mcp/tools/analytics.js +5 -4
  55. package/dist/mcp/tools/analytics.js.map +1 -1
  56. package/dist/mcp/tools/fetch-search-pages.d.ts.map +1 -1
  57. package/dist/mcp/tools/fetch-search-pages.js +2 -1
  58. package/dist/mcp/tools/fetch-search-pages.js.map +1 -1
  59. package/dist/mcp/tools/functions.d.ts.map +1 -1
  60. package/dist/mcp/tools/functions.js +3 -2
  61. package/dist/mcp/tools/functions.js.map +1 -1
  62. package/dist/mcp/tools/lookup.d.ts.map +1 -1
  63. package/dist/mcp/tools/lookup.js +5 -4
  64. package/dist/mcp/tools/lookup.js.map +1 -1
  65. package/dist/mcp/tools/query.d.ts.map +1 -1
  66. package/dist/mcp/tools/query.js +2 -1
  67. package/dist/mcp/tools/query.js.map +1 -1
  68. package/dist/mcp/tools/schema.d.ts.map +1 -1
  69. package/dist/mcp/tools/schema.js +3 -2
  70. package/dist/mcp/tools/schema.js.map +1 -1
  71. package/dist/mcp/tools/search-entity-metadata.d.ts.map +1 -1
  72. package/dist/mcp/tools/search-entity-metadata.js +46 -0
  73. package/dist/mcp/tools/search-entity-metadata.js.map +1 -1
  74. package/dist/mcp/tools/search.d.ts.map +1 -1
  75. package/dist/mcp/tools/search.js +2 -1
  76. package/dist/mcp/tools/search.js.map +1 -1
  77. package/dist/mcp/usage-tracking.d.ts +28 -0
  78. package/dist/mcp/usage-tracking.d.ts.map +1 -0
  79. package/dist/mcp/usage-tracking.js +52 -0
  80. package/dist/mcp/usage-tracking.js.map +1 -0
  81. package/package.json +1 -1
  82. package/src/client/deployment-config.ts +3 -36
  83. package/src/client/http-client.ts +27 -93
  84. package/src/client/internal-dsl-client.ts +48 -4
  85. package/src/client/request-retry.ts +115 -0
  86. package/src/client/usage-context.ts +53 -0
  87. package/src/client/usage-headers.ts +45 -0
  88. package/src/dsl/client.ts +7 -4
  89. package/src/dsl/schema/structured-entities.ts +4 -0
  90. package/src/dsl/types/vocabulary.ts +12 -2
  91. package/src/mcp/examples/dsl-examples.ts +12 -0
  92. package/src/mcp/http-server.ts +9 -0
  93. package/src/mcp/middleware/field-aliases.ts +4 -0
  94. package/src/mcp/server.ts +14 -0
  95. package/src/mcp/tools/analytics-filters.ts +2 -0
  96. package/src/mcp/tools/analytics.ts +9 -4
  97. package/src/mcp/tools/fetch-search-pages.ts +3 -1
  98. package/src/mcp/tools/functions.ts +5 -2
  99. package/src/mcp/tools/lookup.ts +8 -4
  100. package/src/mcp/tools/query.ts +3 -1
  101. package/src/mcp/tools/schema.ts +5 -2
  102. package/src/mcp/tools/search-entity-metadata.ts +50 -0
  103. package/src/mcp/tools/search.ts +3 -1
  104. package/src/mcp/usage-tracking.ts +72 -0
  105. package/test/client/deployment-config.test.ts +1 -25
  106. package/test/client/http-client.test.ts +17 -17
  107. package/test/client/internal-dsl-client.test.ts +73 -10
  108. package/test/client/request-retry.test.ts +55 -0
  109. package/test/client/usage-headers.test.ts +45 -0
  110. package/test/fixtures/describe-schema.json +74 -0
  111. package/test/integration/suites/search.integration.ts +24 -0
  112. package/test/schema/store.test.ts +5 -0
  113. package/test/server.test.ts +3 -0
  114. package/test/tools/search.test.ts +42 -2
  115. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Tests for shared request retry helpers.
3
+ * @module test/client/request-retry
4
+ */
5
+
6
+ import { afterEach, describe, expect, it } from "vitest";
7
+ import { NetworkError, RateLimitError, ServerError } from "../../src/client/errors.js";
8
+ import {
9
+ calculateRequestRetryDelay,
10
+ executeRequestWithRetry,
11
+ isRetryableRequestError,
12
+ resetRequestRetryDelayFn,
13
+ setRequestRetryDelayFn,
14
+ } from "../../src/client/request-retry.js";
15
+
16
+ describe("request-retry", () => {
17
+ afterEach(() => {
18
+ resetRequestRetryDelayFn();
19
+ });
20
+
21
+ it("identifies retryable errors", () => {
22
+ expect(isRetryableRequestError(new RateLimitError())).toBe(true);
23
+ expect(isRetryableRequestError(new ServerError("boom", 500))).toBe(true);
24
+ expect(isRetryableRequestError(new NetworkError("net"))).toBe(true);
25
+ expect(isRetryableRequestError(new Error("nope"))).toBe(false);
26
+ });
27
+
28
+ it("retries transient failures then succeeds", async () => {
29
+ setRequestRetryDelayFn(async () => {});
30
+
31
+ let calls = 0;
32
+ const result = await executeRequestWithRetry(
33
+ async () => {
34
+ calls += 1;
35
+ if (calls < 2) {
36
+ throw new ServerError("temporary", 503);
37
+ }
38
+ return "ok";
39
+ },
40
+ { maxRetries: 2, retryDelay: 10 },
41
+ );
42
+
43
+ expect(result).toBe("ok");
44
+ expect(calls).toBe(2);
45
+ });
46
+
47
+ it("uses rate-limit retry delay when provided on the error", () => {
48
+ const delay = calculateRequestRetryDelay(
49
+ new RateLimitError("limited", 2, { remaining: 0, retryAfterMs: 3500 }),
50
+ 0,
51
+ { retryDelay: 10 },
52
+ );
53
+ expect(delay).toBe(3500);
54
+ });
55
+ });
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Tests for MCP usage header builder.
3
+ * @module test/client/usage-headers
4
+ */
5
+
6
+ import { describe, expect, it } from "vitest";
7
+ import { runWithMcpTool, setMcpUsageSession } from "../../src/client/usage-context.js";
8
+ import {
9
+ buildMcpUsageHeaders,
10
+ buildMcpUserAgent,
11
+ USAGE_HEADER_CHANNEL,
12
+ USAGE_HEADER_MCP_TOOL,
13
+ } from "../../src/client/usage-headers.js";
14
+
15
+ describe("buildMcpUsageHeaders", () => {
16
+ it("returns empty object when no session is configured", () => {
17
+ expect(buildMcpUsageHeaders()).toEqual({});
18
+ });
19
+
20
+ it("includes session fields and active tool name", () => {
21
+ setMcpUsageSession({
22
+ sessionId: "session-1",
23
+ deployment: "local",
24
+ client: "stdio",
25
+ version: "1.0.4",
26
+ });
27
+
28
+ const headers = runWithMcpTool("execute_dsl", () => buildMcpUsageHeaders());
29
+
30
+ expect(headers).toEqual({
31
+ [USAGE_HEADER_CHANNEL]: "mcp",
32
+ "X-Dimensions-MCP-Session-Id": "session-1",
33
+ "X-Dimensions-MCP-Client": "stdio",
34
+ "X-Dimensions-MCP-Version": "1.0.4",
35
+ "X-Dimensions-MCP-Deployment": "local",
36
+ [USAGE_HEADER_MCP_TOOL]: "execute_dsl",
37
+ });
38
+ });
39
+ });
40
+
41
+ describe("buildMcpUserAgent", () => {
42
+ it("formats version and client", () => {
43
+ expect(buildMcpUserAgent("1.0.4", "cursor")).toBe("dimensions-analytics-mcp/1.0.4 (cursor)");
44
+ });
45
+ });
@@ -3801,6 +3801,80 @@
3801
3801
  "fieldsets": ["basics", "categories"],
3802
3802
  "metrics": { "count": { "name": "count", "description": "Total count" } },
3803
3803
  "search_fields": ["full_data", "title_abstract_only", "concepts"]
3804
+ },
3805
+ "funder_groups": {
3806
+ "fields": {
3807
+ "id": {
3808
+ "type": "string",
3809
+ "description": "The Dimensions ID of the group.",
3810
+ "long_description": null,
3811
+ "is_entity": false,
3812
+ "is_filter": true,
3813
+ "is_facet": false,
3814
+ "is_multivalue": false,
3815
+ "solr_fields": { "return": "id", "filter": "id" }
3816
+ },
3817
+ "name": {
3818
+ "type": "string",
3819
+ "description": "The name of the group.",
3820
+ "long_description": null,
3821
+ "is_entity": false,
3822
+ "is_filter": true,
3823
+ "is_facet": false,
3824
+ "is_multivalue": false,
3825
+ "solr_fields": { "return": "name", "filter": "name" }
3826
+ },
3827
+ "organization_ids": {
3828
+ "type": "string",
3829
+ "description": "The GRID IDs of the organizations which are members of this group.",
3830
+ "long_description": null,
3831
+ "is_entity": false,
3832
+ "is_filter": true,
3833
+ "is_facet": false,
3834
+ "is_multivalue": true,
3835
+ "solr_fields": { "return": "values", "filter": "values" }
3836
+ }
3837
+ },
3838
+ "fieldsets": ["basics"],
3839
+ "metrics": { "count": { "name": "count", "description": "Total count" } },
3840
+ "search_fields": ["name"]
3841
+ },
3842
+ "research_org_groups": {
3843
+ "fields": {
3844
+ "id": {
3845
+ "type": "string",
3846
+ "description": "The Dimensions ID of the group.",
3847
+ "long_description": null,
3848
+ "is_entity": false,
3849
+ "is_filter": true,
3850
+ "is_facet": false,
3851
+ "is_multivalue": false,
3852
+ "solr_fields": { "return": "id", "filter": "id" }
3853
+ },
3854
+ "name": {
3855
+ "type": "string",
3856
+ "description": "The name of the group.",
3857
+ "long_description": null,
3858
+ "is_entity": false,
3859
+ "is_filter": true,
3860
+ "is_facet": false,
3861
+ "is_multivalue": false,
3862
+ "solr_fields": { "return": "name", "filter": "name" }
3863
+ },
3864
+ "organization_ids": {
3865
+ "type": "string",
3866
+ "description": "The GRID IDs of the organizations which are members of this group.",
3867
+ "long_description": null,
3868
+ "is_entity": false,
3869
+ "is_filter": true,
3870
+ "is_facet": false,
3871
+ "is_multivalue": true,
3872
+ "solr_fields": { "return": "values", "filter": "values" }
3873
+ }
3874
+ },
3875
+ "fieldsets": ["basics"],
3876
+ "metrics": { "count": { "name": "count", "description": "Total count" } },
3877
+ "search_fields": ["name"]
3804
3878
  }
3805
3879
  },
3806
3880
  "entities": {
@@ -76,5 +76,29 @@ export const searchSuite: EvalSuite = {
76
76
  args: { query: "Massachusetts Institute of Technology", limit: 5 },
77
77
  assertions: [isSuccess(), hasField("totalCount"), arrayMinLength("organizations", 1)],
78
78
  },
79
+ {
80
+ name: "search reports for climate",
81
+ tool: "search_reports",
82
+ args: { query: "climate change", limit: 5 },
83
+ assertions: [isSuccess(), hasField("totalCount"), arrayMinLength("reports", 1)],
84
+ },
85
+ {
86
+ name: "search source titles for Nature",
87
+ tool: "search_source_titles",
88
+ args: { query: "Nature", limit: 5 },
89
+ assertions: [isSuccess(), hasField("totalCount"), arrayMinLength("source_titles", 1)],
90
+ },
91
+ {
92
+ name: "search funder groups for NIH",
93
+ tool: "search_funder_groups",
94
+ args: { query: "NIH", limit: 5 },
95
+ assertions: [isSuccess(), hasField("totalCount"), arrayMinLength("funder_groups", 1)],
96
+ },
97
+ {
98
+ name: "search research org groups",
99
+ tool: "search_research_org_groups",
100
+ args: { query: "University", limit: 5 },
101
+ assertions: [isSuccess(), hasField("totalCount"), arrayMinLength("research_org_groups", 1)],
102
+ },
79
103
  ],
80
104
  };
@@ -41,5 +41,10 @@ describe("SchemaStore", () => {
41
41
  const types = store.structuredEntityTypes();
42
42
  expect(types).toContain("publications");
43
43
  expect(types).toContain("organizations");
44
+ expect(types).toContain("reports");
45
+ expect(types).toContain("source_titles");
46
+ expect(types).toContain("funder_groups");
47
+ expect(types).toContain("research_org_groups");
48
+ expect(types).toHaveLength(12);
44
49
  });
45
50
  });
@@ -60,6 +60,9 @@ describe("createMcpServerAsync", () => {
60
60
  expect(instructions).toContain("search_researchers matches names only");
61
61
  expect(instructions).toContain("research_orgs.id");
62
62
  expect(instructions).toContain("funder_orgs");
63
+ expect(instructions).toContain("search_organizations for institution lookup");
64
+ expect(instructions).toContain("search_source_titles");
65
+ expect(instructions).toContain("search_reports");
63
66
  expect(instructions).toContain("fetch_search_pages");
64
67
  expect(instructions).toContain("dimensions://schema/policy");
65
68
  });
@@ -37,7 +37,7 @@ describe("search tools", () => {
37
37
  registerSearchTools(server as never, client as never, testSchemaStore());
38
38
  });
39
39
 
40
- it("registers all 8 search tools", () => {
40
+ it("registers all 12 search tools", () => {
41
41
  const expectedTools = [
42
42
  "search_publications",
43
43
  "search_grants",
@@ -47,11 +47,15 @@ describe("search tools", () => {
47
47
  "search_datasets",
48
48
  "search_policy_documents",
49
49
  "search_organizations",
50
+ "search_reports",
51
+ "search_source_titles",
52
+ "search_funder_groups",
53
+ "search_research_org_groups",
50
54
  ];
51
55
  for (const name of expectedTools) {
52
56
  expect(handlers.has(name)).toBe(true);
53
57
  }
54
- expect(handlers.size).toBe(8);
58
+ expect(handlers.size).toBe(12);
55
59
  });
56
60
 
57
61
  describe("search_publications", () => {
@@ -243,6 +247,42 @@ describe("search tools", () => {
243
247
  });
244
248
  });
245
249
 
250
+ describe("search_reports", () => {
251
+ it("applies year filters and returns reports", async () => {
252
+ client.rawQuery.mockResolvedValue(apiRows("reports", [{ id: "rep.1", title: "Report" }], 1));
253
+
254
+ const result = await callTool(handlers, "search_reports", {
255
+ query: "climate",
256
+ yearFrom: 2020,
257
+ yearTo: 2024,
258
+ limit: 10,
259
+ });
260
+
261
+ const dsl = client.rawQuery.mock.calls[0][0] as string;
262
+ expect(dsl).toContain("search reports");
263
+ expect(dsl).toContain("year >= 2020");
264
+ expect(dsl).toContain("year <= 2024");
265
+ expect(parseToolResult(result).reports).toHaveLength(1);
266
+ });
267
+ });
268
+
269
+ describe("search_funder_groups", () => {
270
+ it("searches funder groups by name", async () => {
271
+ client.rawQuery.mockResolvedValue(
272
+ apiRows("funder_groups", [{ id: "fg.1", name: "NIH Institutes" }], 1),
273
+ );
274
+
275
+ const result = await callTool(handlers, "search_funder_groups", {
276
+ query: "NIH",
277
+ limit: 10,
278
+ });
279
+
280
+ const dsl = client.rawQuery.mock.calls[0][0] as string;
281
+ expect(dsl).toContain("search funder_groups");
282
+ expect(parseToolResult(result).funder_groups).toHaveLength(1);
283
+ });
284
+ });
285
+
246
286
  describe("truncation warnings", () => {
247
287
  it("includes truncation warning when totalCount exceeds returnedCount", async () => {
248
288
  client.rawQuery.mockResolvedValue(
@@ -1 +1 @@
1
- {"root":["./src/http-main.ts","./src/index.ts","./src/main.ts","./src/client/command.ts","./src/client/config.ts","./src/client/deployment-config.ts","./src/client/errors.ts","./src/client/http-client.ts","./src/client/index.ts","./src/client/internal-dsl-client.ts","./src/client/rate-limiter.ts","./src/client/resolve-api-key-user.ts","./src/client/types.ts","./src/client/auth/config-loaders.ts","./src/client/auth/factory.ts","./src/client/auth/index.ts","./src/client/auth/jwt-utils.ts","./src/client/auth/node.ts","./src/client/auth/schemas.ts","./src/client/auth/types.ts","./src/client/auth/decorators/index.ts","./src/client/auth/decorators/with-caching.ts","./src/client/auth/providers/index.ts","./src/client/auth/providers/jwt-auth-provider.ts","./src/client/config/index.ts","./src/client/config/loader.ts","./src/client/config/node.ts","./src/client/config/schemas.ts","./src/client/config/types.ts","./src/client/config/unified-loader.ts","./src/dsl/client.ts","./src/dsl/create-client.ts","./src/dsl/fluent-query-builder.ts","./src/dsl/index.ts","./src/dsl/pagination.ts","./src/dsl/query-builder.ts","./src/dsl/response-parser.ts","./src/dsl/usage-policy.ts","./src/dsl/commands/apply-filters.ts","./src/dsl/commands/index.ts","./src/dsl/commands/validate-input.ts","./src/dsl/commands/facet/index.ts","./src/dsl/commands/facet/schemas.ts","./src/dsl/commands/functions/ClassifyCommand.ts","./src/dsl/commands/functions/ExtractAffiliationsCommand.ts","./src/dsl/commands/functions/ExtractConceptsCommand.ts","./src/dsl/commands/functions/ExtractGrantsCommand.ts","./src/dsl/commands/functions/index.ts","./src/dsl/schema/cache.ts","./src/dsl/schema/extract.ts","./src/dsl/schema/index.ts","./src/dsl/schema/load.ts","./src/dsl/schema/store.ts","./src/dsl/schema/structured-entities.ts","./src/dsl/schema/summary.ts","./src/dsl/schema/types.ts","./src/dsl/schema/validation.ts","./src/dsl/types/buckets.ts","./src/dsl/types/common.ts","./src/dsl/types/entities.ts","./src/dsl/types/index.ts","./src/dsl/types/return-clauses.ts","./src/dsl/types/special-functions.ts","./src/dsl/types/vocabulary.ts","./src/dsl/utils/escape.ts","./src/dsl/utils/sanitize.ts","./src/dsl/utils/string-utils.ts","./src/dsl/utils/validate-field-name.ts","./src/mcp/batch-fetch.ts","./src/mcp/export-format.ts","./src/mcp/funder-org-names.ts","./src/mcp/http-server.ts","./src/mcp/server.ts","./src/mcp/shared-schema.ts","./src/mcp/utils.ts","./src/mcp/examples/dsl-examples.ts","./src/mcp/examples/usage-scenarios.ts","./src/mcp/middleware/field-aliases.ts","./src/mcp/resources/schema.ts","./src/mcp/schema/context.ts","./src/mcp/schema/index.ts","./src/mcp/tools/analytics-filters.ts","./src/mcp/tools/analytics.ts","./src/mcp/tools/fetch-search-pages.ts","./src/mcp/tools/functions.ts","./src/mcp/tools/lookup.ts","./src/mcp/tools/query.ts","./src/mcp/tools/schema.ts","./src/mcp/tools/search-entity-metadata.ts","./src/mcp/tools/search-input.ts","./src/mcp/tools/search.ts"],"version":"5.9.3"}
1
+ {"root":["./src/http-main.ts","./src/index.ts","./src/main.ts","./src/client/command.ts","./src/client/config.ts","./src/client/deployment-config.ts","./src/client/errors.ts","./src/client/http-client.ts","./src/client/index.ts","./src/client/internal-dsl-client.ts","./src/client/rate-limiter.ts","./src/client/request-retry.ts","./src/client/resolve-api-key-user.ts","./src/client/types.ts","./src/client/usage-context.ts","./src/client/usage-headers.ts","./src/client/auth/config-loaders.ts","./src/client/auth/factory.ts","./src/client/auth/index.ts","./src/client/auth/jwt-utils.ts","./src/client/auth/node.ts","./src/client/auth/schemas.ts","./src/client/auth/types.ts","./src/client/auth/decorators/index.ts","./src/client/auth/decorators/with-caching.ts","./src/client/auth/providers/index.ts","./src/client/auth/providers/jwt-auth-provider.ts","./src/client/config/index.ts","./src/client/config/loader.ts","./src/client/config/node.ts","./src/client/config/schemas.ts","./src/client/config/types.ts","./src/client/config/unified-loader.ts","./src/dsl/client.ts","./src/dsl/create-client.ts","./src/dsl/fluent-query-builder.ts","./src/dsl/index.ts","./src/dsl/pagination.ts","./src/dsl/query-builder.ts","./src/dsl/response-parser.ts","./src/dsl/usage-policy.ts","./src/dsl/commands/apply-filters.ts","./src/dsl/commands/index.ts","./src/dsl/commands/validate-input.ts","./src/dsl/commands/facet/index.ts","./src/dsl/commands/facet/schemas.ts","./src/dsl/commands/functions/ClassifyCommand.ts","./src/dsl/commands/functions/ExtractAffiliationsCommand.ts","./src/dsl/commands/functions/ExtractConceptsCommand.ts","./src/dsl/commands/functions/ExtractGrantsCommand.ts","./src/dsl/commands/functions/index.ts","./src/dsl/schema/cache.ts","./src/dsl/schema/extract.ts","./src/dsl/schema/index.ts","./src/dsl/schema/load.ts","./src/dsl/schema/store.ts","./src/dsl/schema/structured-entities.ts","./src/dsl/schema/summary.ts","./src/dsl/schema/types.ts","./src/dsl/schema/validation.ts","./src/dsl/types/buckets.ts","./src/dsl/types/common.ts","./src/dsl/types/entities.ts","./src/dsl/types/index.ts","./src/dsl/types/return-clauses.ts","./src/dsl/types/special-functions.ts","./src/dsl/types/vocabulary.ts","./src/dsl/utils/escape.ts","./src/dsl/utils/sanitize.ts","./src/dsl/utils/string-utils.ts","./src/dsl/utils/validate-field-name.ts","./src/mcp/batch-fetch.ts","./src/mcp/export-format.ts","./src/mcp/funder-org-names.ts","./src/mcp/http-server.ts","./src/mcp/server.ts","./src/mcp/shared-schema.ts","./src/mcp/usage-tracking.ts","./src/mcp/utils.ts","./src/mcp/examples/dsl-examples.ts","./src/mcp/examples/usage-scenarios.ts","./src/mcp/middleware/field-aliases.ts","./src/mcp/resources/schema.ts","./src/mcp/schema/context.ts","./src/mcp/schema/index.ts","./src/mcp/tools/analytics-filters.ts","./src/mcp/tools/analytics.ts","./src/mcp/tools/fetch-search-pages.ts","./src/mcp/tools/functions.ts","./src/mcp/tools/lookup.ts","./src/mcp/tools/query.ts","./src/mcp/tools/schema.ts","./src/mcp/tools/search-entity-metadata.ts","./src/mcp/tools/search-input.ts","./src/mcp/tools/search.ts"],"version":"5.9.3"}