@digital-science-dsl/dimensions-analytics-mcp 0.5.3 → 1.0.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.
Files changed (218) hide show
  1. package/CHANGELOG.md +4 -56
  2. package/README.md +1 -5
  3. package/dist/client/deployment-config.d.ts +20 -2
  4. package/dist/client/deployment-config.d.ts.map +1 -1
  5. package/dist/client/deployment-config.js +26 -2
  6. package/dist/client/deployment-config.js.map +1 -1
  7. package/dist/client/internal-dsl-client.d.ts +1 -1
  8. package/dist/client/internal-dsl-client.d.ts.map +1 -1
  9. package/dist/client/internal-dsl-client.js +2 -5
  10. package/dist/client/internal-dsl-client.js.map +1 -1
  11. package/dist/dsl/create-client.d.ts +1 -1
  12. package/dist/dsl/create-client.js +1 -1
  13. package/dist/dsl/fluent-query-builder.d.ts +1 -1
  14. package/dist/dsl/fluent-query-builder.js +1 -1
  15. package/dist/dsl/schema/cache.d.ts +2 -2
  16. package/dist/dsl/schema/cache.d.ts.map +1 -1
  17. package/dist/dsl/schema/cache.js +8 -14
  18. package/dist/dsl/schema/cache.js.map +1 -1
  19. package/dist/dsl/schema/load.d.ts +0 -1
  20. package/dist/dsl/schema/load.d.ts.map +1 -1
  21. package/dist/dsl/schema/load.js +1 -3
  22. package/dist/dsl/schema/load.js.map +1 -1
  23. package/dist/mcp/tools/schema.d.ts +0 -2
  24. package/dist/mcp/tools/schema.d.ts.map +1 -1
  25. package/dist/mcp/tools/schema.js.map +1 -1
  26. package/dist/mcp/utils.d.ts +0 -4
  27. package/dist/mcp/utils.d.ts.map +1 -1
  28. package/dist/mcp/utils.js +0 -7
  29. package/dist/mcp/utils.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/client/deployment-config.ts +39 -2
  32. package/src/client/internal-dsl-client.ts +2 -6
  33. package/src/dsl/create-client.ts +1 -1
  34. package/src/dsl/fluent-query-builder.ts +1 -1
  35. package/src/dsl/schema/cache.ts +8 -13
  36. package/src/dsl/schema/load.ts +1 -4
  37. package/src/mcp/tools/schema.ts +0 -3
  38. package/src/mcp/utils.ts +0 -12
  39. package/test/client/deployment-config.test.ts +25 -1
  40. package/test/client/http-client.test.ts +2 -2
  41. package/test/client/internal-dsl-client.test.ts +3 -0
  42. package/test/dsl/schema/cache.test.ts +2 -4
  43. package/test/helpers/tool-test-harness.ts +2 -19
  44. package/test/middleware/field-aliases.test.ts +1 -1
  45. package/test/tools/analytics.test.ts +2 -2
  46. package/tsconfig.tsbuildinfo +1 -1
  47. package/dist/examples/dsl-examples.d.ts +0 -11
  48. package/dist/examples/dsl-examples.d.ts.map +0 -1
  49. package/dist/examples/dsl-examples.js +0 -49
  50. package/dist/examples/dsl-examples.js.map +0 -1
  51. package/dist/examples/usage-scenarios.d.ts +0 -22
  52. package/dist/examples/usage-scenarios.d.ts.map +0 -1
  53. package/dist/examples/usage-scenarios.js +0 -173
  54. package/dist/examples/usage-scenarios.js.map +0 -1
  55. package/dist/funder-org-names.d.ts +0 -12
  56. package/dist/funder-org-names.d.ts.map +0 -1
  57. package/dist/funder-org-names.js +0 -30
  58. package/dist/funder-org-names.js.map +0 -1
  59. package/dist/http.d.ts +0 -29
  60. package/dist/http.d.ts.map +0 -1
  61. package/dist/http.js +0 -173
  62. package/dist/http.js.map +0 -1
  63. package/dist/kwq/build-query.d.ts +0 -26
  64. package/dist/kwq/build-query.d.ts.map +0 -1
  65. package/dist/kwq/build-query.js +0 -37
  66. package/dist/kwq/build-query.js.map +0 -1
  67. package/dist/kwq/concept-groups.d.ts +0 -49
  68. package/dist/kwq/concept-groups.d.ts.map +0 -1
  69. package/dist/kwq/concept-groups.js +0 -55
  70. package/dist/kwq/concept-groups.js.map +0 -1
  71. package/dist/kwq/dsl-assembler.d.ts +0 -28
  72. package/dist/kwq/dsl-assembler.d.ts.map +0 -1
  73. package/dist/kwq/dsl-assembler.js +0 -124
  74. package/dist/kwq/dsl-assembler.js.map +0 -1
  75. package/dist/kwq/ensemble.d.ts +0 -38
  76. package/dist/kwq/ensemble.d.ts.map +0 -1
  77. package/dist/kwq/ensemble.js +0 -107
  78. package/dist/kwq/ensemble.js.map +0 -1
  79. package/dist/kwq/index.d.ts +0 -16
  80. package/dist/kwq/index.d.ts.map +0 -1
  81. package/dist/kwq/index.js +0 -14
  82. package/dist/kwq/index.js.map +0 -1
  83. package/dist/kwq/types.d.ts +0 -120
  84. package/dist/kwq/types.d.ts.map +0 -1
  85. package/dist/kwq/types.js +0 -11
  86. package/dist/kwq/types.js.map +0 -1
  87. package/dist/lambda.d.ts +0 -10
  88. package/dist/lambda.d.ts.map +0 -1
  89. package/dist/lambda.js +0 -4
  90. package/dist/lambda.js.map +0 -1
  91. package/dist/mcp/tools/concept-profile.d.ts +0 -14
  92. package/dist/mcp/tools/concept-profile.d.ts.map +0 -1
  93. package/dist/mcp/tools/concept-profile.js +0 -130
  94. package/dist/mcp/tools/concept-profile.js.map +0 -1
  95. package/dist/mcp/tools/dataset-profile.d.ts +0 -15
  96. package/dist/mcp/tools/dataset-profile.d.ts.map +0 -1
  97. package/dist/mcp/tools/dataset-profile.js +0 -194
  98. package/dist/mcp/tools/dataset-profile.js.map +0 -1
  99. package/dist/mcp/tools/impact-chain.d.ts +0 -15
  100. package/dist/mcp/tools/impact-chain.d.ts.map +0 -1
  101. package/dist/mcp/tools/impact-chain.js +0 -96
  102. package/dist/mcp/tools/impact-chain.js.map +0 -1
  103. package/dist/mcp/tools/kwq.d.ts +0 -19
  104. package/dist/mcp/tools/kwq.d.ts.map +0 -1
  105. package/dist/mcp/tools/kwq.js +0 -156
  106. package/dist/mcp/tools/kwq.js.map +0 -1
  107. package/dist/mcp/tools/policy-profile.d.ts +0 -15
  108. package/dist/mcp/tools/policy-profile.d.ts.map +0 -1
  109. package/dist/mcp/tools/policy-profile.js +0 -174
  110. package/dist/mcp/tools/policy-profile.js.map +0 -1
  111. package/dist/mcp/tools/profile.d.ts +0 -14
  112. package/dist/mcp/tools/profile.d.ts.map +0 -1
  113. package/dist/mcp/tools/profile.js +0 -349
  114. package/dist/mcp/tools/profile.js.map +0 -1
  115. package/dist/middleware/field-aliases.d.ts +0 -97
  116. package/dist/middleware/field-aliases.d.ts.map +0 -1
  117. package/dist/middleware/field-aliases.js +0 -208
  118. package/dist/middleware/field-aliases.js.map +0 -1
  119. package/dist/resources/schema.d.ts +0 -13
  120. package/dist/resources/schema.d.ts.map +0 -1
  121. package/dist/resources/schema.js +0 -204
  122. package/dist/resources/schema.js.map +0 -1
  123. package/dist/schema/context.d.ts +0 -10
  124. package/dist/schema/context.d.ts.map +0 -1
  125. package/dist/schema/context.js +0 -6
  126. package/dist/schema/context.js.map +0 -1
  127. package/dist/schema/index.d.ts +0 -9
  128. package/dist/schema/index.d.ts.map +0 -1
  129. package/dist/schema/index.js +0 -6
  130. package/dist/schema/index.js.map +0 -1
  131. package/dist/schema/load.d.ts +0 -43
  132. package/dist/schema/load.d.ts.map +0 -1
  133. package/dist/schema/load.js +0 -139
  134. package/dist/schema/load.js.map +0 -1
  135. package/dist/schema/store.d.ts +0 -112
  136. package/dist/schema/store.d.ts.map +0 -1
  137. package/dist/schema/store.js +0 -173
  138. package/dist/schema/store.js.map +0 -1
  139. package/dist/schema/structured-entities.d.ts +0 -21
  140. package/dist/schema/structured-entities.d.ts.map +0 -1
  141. package/dist/schema/structured-entities.js +0 -39
  142. package/dist/schema/structured-entities.js.map +0 -1
  143. package/dist/schema/types.d.ts +0 -36
  144. package/dist/schema/types.d.ts.map +0 -1
  145. package/dist/schema/types.js +0 -6
  146. package/dist/schema/types.js.map +0 -1
  147. package/dist/server.d.ts +0 -57
  148. package/dist/server.d.ts.map +0 -1
  149. package/dist/server.js +0 -144
  150. package/dist/server.js.map +0 -1
  151. package/dist/telemetry.d.ts +0 -172
  152. package/dist/telemetry.d.ts.map +0 -1
  153. package/dist/telemetry.js +0 -233
  154. package/dist/telemetry.js.map +0 -1
  155. package/dist/tools/analytics-filters.d.ts +0 -18
  156. package/dist/tools/analytics-filters.d.ts.map +0 -1
  157. package/dist/tools/analytics-filters.js +0 -35
  158. package/dist/tools/analytics-filters.js.map +0 -1
  159. package/dist/tools/analytics.d.ts +0 -16
  160. package/dist/tools/analytics.d.ts.map +0 -1
  161. package/dist/tools/analytics.js +0 -381
  162. package/dist/tools/analytics.js.map +0 -1
  163. package/dist/tools/concept-profile.d.ts +0 -14
  164. package/dist/tools/concept-profile.d.ts.map +0 -1
  165. package/dist/tools/concept-profile.js +0 -130
  166. package/dist/tools/concept-profile.js.map +0 -1
  167. package/dist/tools/dataset-profile.d.ts +0 -15
  168. package/dist/tools/dataset-profile.d.ts.map +0 -1
  169. package/dist/tools/dataset-profile.js +0 -194
  170. package/dist/tools/dataset-profile.js.map +0 -1
  171. package/dist/tools/functions.d.ts +0 -14
  172. package/dist/tools/functions.d.ts.map +0 -1
  173. package/dist/tools/functions.js +0 -294
  174. package/dist/tools/functions.js.map +0 -1
  175. package/dist/tools/impact-chain.d.ts +0 -15
  176. package/dist/tools/impact-chain.d.ts.map +0 -1
  177. package/dist/tools/impact-chain.js +0 -96
  178. package/dist/tools/impact-chain.js.map +0 -1
  179. package/dist/tools/kwq.d.ts +0 -19
  180. package/dist/tools/kwq.d.ts.map +0 -1
  181. package/dist/tools/kwq.js +0 -156
  182. package/dist/tools/kwq.js.map +0 -1
  183. package/dist/tools/lookup.d.ts +0 -14
  184. package/dist/tools/lookup.d.ts.map +0 -1
  185. package/dist/tools/lookup.js +0 -213
  186. package/dist/tools/lookup.js.map +0 -1
  187. package/dist/tools/policy-profile.d.ts +0 -15
  188. package/dist/tools/policy-profile.d.ts.map +0 -1
  189. package/dist/tools/policy-profile.js +0 -174
  190. package/dist/tools/policy-profile.js.map +0 -1
  191. package/dist/tools/profile.d.ts +0 -14
  192. package/dist/tools/profile.d.ts.map +0 -1
  193. package/dist/tools/profile.js +0 -349
  194. package/dist/tools/profile.js.map +0 -1
  195. package/dist/tools/query.d.ts +0 -16
  196. package/dist/tools/query.d.ts.map +0 -1
  197. package/dist/tools/query.js +0 -53
  198. package/dist/tools/query.js.map +0 -1
  199. package/dist/tools/schema.d.ts +0 -23
  200. package/dist/tools/schema.d.ts.map +0 -1
  201. package/dist/tools/schema.js +0 -124
  202. package/dist/tools/schema.js.map +0 -1
  203. package/dist/tools/search-entity-metadata.d.ts +0 -18
  204. package/dist/tools/search-entity-metadata.d.ts.map +0 -1
  205. package/dist/tools/search-entity-metadata.js +0 -221
  206. package/dist/tools/search-entity-metadata.js.map +0 -1
  207. package/dist/tools/search.d.ts +0 -23
  208. package/dist/tools/search.d.ts.map +0 -1
  209. package/dist/tools/search.js +0 -110
  210. package/dist/tools/search.js.map +0 -1
  211. package/dist/tools/solr-fields.d.ts +0 -39
  212. package/dist/tools/solr-fields.d.ts.map +0 -1
  213. package/dist/tools/solr-fields.js +0 -40
  214. package/dist/tools/solr-fields.js.map +0 -1
  215. package/dist/utils.d.ts +0 -70
  216. package/dist/utils.d.ts.map +0 -1
  217. package/dist/utils.js +0 -104
  218. package/dist/utils.js.map +0 -1
@@ -1,194 +0,0 @@
1
- /**
2
- * Dataset profile tool for the MCP server.
3
- * Provides deep profiling of Dimensions datasets including structural links
4
- * to associated publications and grants.
5
- * @module mcp/tools/dataset-profile
6
- */
7
- import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
8
- import { z } from "zod";
9
- import { asArray, formatErrorResult, formatToolResult, READ_ONLY_API_ANNOTATIONS, } from "../utils.js";
10
- /**
11
- * Registers the dataset_profile tool with the MCP server.
12
- * @param server - MCP server instance
13
- * @param client - Dimensions client instance
14
- */
15
- export function registerDatasetProfileTools(server, client) {
16
- server.registerTool("dataset_profile", {
17
- description: "Get a comprehensive profile for a research dataset including its associated publication, linked grants, and related publications. Uses structural links (associated_publication_id, associated_grant_ids) rather than free-text search.",
18
- inputSchema: {
19
- datasetId: z.string().optional().describe("Dimensions dataset ID"),
20
- query: z
21
- .string()
22
- .optional()
23
- .describe("Search term to find datasets (used when datasetId is not known)"),
24
- includeLinkedPublications: z
25
- .boolean()
26
- .default(true)
27
- .describe("Include the associated publication and related publications"),
28
- includeLinkedGrants: z.boolean().default(true).describe("Include associated grants"),
29
- publicationLimit: z
30
- .number()
31
- .int()
32
- .min(1)
33
- .max(50)
34
- .default(10)
35
- .describe("Max related publications to return"),
36
- },
37
- outputSchema: {
38
- found: z.boolean().describe("Whether the dataset was found"),
39
- profile: z
40
- .record(z.string(), z.unknown())
41
- .optional()
42
- .describe("Dataset profile with linked entities"),
43
- message: z.string().optional().describe("Message when not found"),
44
- },
45
- annotations: READ_ONLY_API_ANNOTATIONS,
46
- }, async (args) => {
47
- if (!args.datasetId && !args.query) {
48
- throw new McpError(ErrorCode.InvalidParams, "Must provide at least one of: datasetId or query");
49
- }
50
- try {
51
- // Step 1: Find the dataset
52
- let datasetDsl;
53
- if (args.datasetId) {
54
- datasetDsl = client
55
- .createQueryBuilder()
56
- .search("datasets")
57
- .where("id", "=", args.datasetId)
58
- .fields([
59
- "id",
60
- "title",
61
- "doi",
62
- "year",
63
- "repository",
64
- "description",
65
- "associated_publication_id",
66
- "associated_grant_ids",
67
- ])
68
- .limit(1)
69
- .build();
70
- }
71
- else {
72
- datasetDsl = client
73
- .createQueryBuilder()
74
- .search("datasets")
75
- .for(args.query)
76
- .fields([
77
- "id",
78
- "title",
79
- "doi",
80
- "year",
81
- "repository",
82
- "description",
83
- "associated_publication_id",
84
- "associated_grant_ids",
85
- ])
86
- .limit(5)
87
- .build();
88
- }
89
- const datasetResponse = await client.rawQuery(datasetDsl);
90
- const datasets = asArray(datasetResponse.datasets);
91
- if (datasets.length === 0) {
92
- return formatToolResult({
93
- found: false,
94
- message: args.datasetId
95
- ? `No dataset found with ID: ${args.datasetId}`
96
- : `No dataset found matching: ${args.query}`,
97
- });
98
- }
99
- const dataset = datasets[0];
100
- const profile = {
101
- dataset,
102
- matchCount: datasets.length,
103
- };
104
- // Extract structural link IDs
105
- const associatedPubId = typeof dataset.associated_publication_id === "string"
106
- ? dataset.associated_publication_id
107
- : undefined;
108
- const associatedGrantIds = Array.isArray(dataset.associated_grant_ids)
109
- ? dataset.associated_grant_ids
110
- : undefined;
111
- const datasetTitle = typeof dataset.title === "string" ? dataset.title : undefined;
112
- // Step 2: Concurrent linked entity fetches
113
- const queries = [];
114
- if (args.includeLinkedPublications !== false) {
115
- // Linked publication via structural ID
116
- if (associatedPubId) {
117
- queries.push((async () => {
118
- const pubDsl = client
119
- .createQueryBuilder()
120
- .search("publications")
121
- .where("id", "=", associatedPubId)
122
- .fields([
123
- "id",
124
- "title",
125
- "doi",
126
- "year",
127
- "times_cited",
128
- "journal",
129
- "authors",
130
- "research_orgs",
131
- ])
132
- .limit(1)
133
- .build();
134
- const pubResponse = await client.rawQuery(pubDsl);
135
- const pubs = asArray(pubResponse.publications);
136
- if (pubs.length > 0) {
137
- profile.linkedPublication = pubs[0];
138
- }
139
- })());
140
- }
141
- // Related publications on same topic
142
- if (datasetTitle) {
143
- queries.push((async () => {
144
- const relDsl = client
145
- .createQueryBuilder()
146
- .search("publications")
147
- .for(datasetTitle)
148
- .fields(["id", "title", "doi", "year", "times_cited", "journal"])
149
- .sort("times_cited", "desc")
150
- .limit(args.publicationLimit)
151
- .build();
152
- const relResponse = await client.rawQuery(relDsl);
153
- const relPubs = asArray(relResponse.publications);
154
- profile.relatedPublications = {
155
- totalCount: typeof relResponse._stats?.total_count === "number"
156
- ? relResponse._stats.total_count
157
- : relPubs.length,
158
- returnedCount: relPubs.length,
159
- items: relPubs,
160
- };
161
- })());
162
- }
163
- }
164
- if (args.includeLinkedGrants !== false &&
165
- associatedGrantIds &&
166
- associatedGrantIds.length > 0) {
167
- queries.push((async () => {
168
- const grantDsl = client
169
- .createQueryBuilder()
170
- .search("grants")
171
- .whereIn("id", associatedGrantIds)
172
- .fields(["id", "title", "funding_usd", "funder_org_name", "start_year"])
173
- .limit(10)
174
- .build();
175
- const grantResponse = await client.rawQuery(grantDsl);
176
- const grants = asArray(grantResponse.grants);
177
- profile.linkedGrants = {
178
- totalCount: grants.length,
179
- items: grants,
180
- };
181
- })());
182
- }
183
- await Promise.all(queries);
184
- return formatToolResult({
185
- found: true,
186
- profile,
187
- });
188
- }
189
- catch (error) {
190
- return formatErrorResult(error);
191
- }
192
- });
193
- }
194
- //# sourceMappingURL=dataset-profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataset-profile.js","sourceRoot":"","sources":["../../../src/mcp/tools/dataset-profile.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Research impact chain tool for the MCP server.
3
- * Traces how a research topic flows from publications through patents,
4
- * clinical trials, and policy documents.
5
- * @module mcp/tools/impact-chain
6
- */
7
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
- import type { DimensionsClient } from "../../dsl/index.js";
9
- /**
10
- * Registers the research_impact_chain tool with the MCP server.
11
- * @param server - MCP server instance
12
- * @param client - Dimensions client instance
13
- */
14
- export declare function registerImpactChainTools(server: McpServer, client: DimensionsClient): void;
15
- //# sourceMappingURL=impact-chain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impact-chain.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/impact-chain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAgC3D;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAqE1F"}
@@ -1,96 +0,0 @@
1
- /**
2
- * Research impact chain tool for the MCP server.
3
- * Traces how a research topic flows from publications through patents,
4
- * clinical trials, and policy documents.
5
- * @module mcp/tools/impact-chain
6
- */
7
- import { z } from "zod";
8
- import { asArray, formatErrorResult, formatToolResult, READ_ONLY_API_ANNOTATIONS, } from "../utils.js";
9
- /** Impact chain stages in translation order. */
10
- const CHAIN_STAGES = [
11
- {
12
- entityType: "publications",
13
- fields: ["id", "title", "doi", "year", "times_cited", "journal"],
14
- sortField: "year",
15
- },
16
- {
17
- entityType: "patents",
18
- fields: ["id", "title", "year", "filing_date", "assignees"],
19
- sortField: "year",
20
- },
21
- {
22
- entityType: "clinical_trials",
23
- fields: ["id", "title", "phase", "overall_status", "conditions"],
24
- sortField: "date_inserted",
25
- },
26
- {
27
- entityType: "policy_documents",
28
- fields: ["id", "title", "year", "publisher_org"],
29
- sortField: "year",
30
- },
31
- ];
32
- /**
33
- * Registers the research_impact_chain tool with the MCP server.
34
- * @param server - MCP server instance
35
- * @param client - Dimensions client instance
36
- */
37
- export function registerImpactChainTools(server, client) {
38
- server.registerTool("research_impact_chain", {
39
- description: "Trace how a research topic translates from basic science through real-world impact. Shows publications, patents, clinical trials, and policy documents for a query.",
40
- inputSchema: {
41
- query: z.string().describe("Seed topic or concept (e.g., 'gene therapy', 'CRISPR')"),
42
- entityLimit: z.number().int().min(1).max(50).default(10).describe("Max entities per stage"),
43
- },
44
- outputSchema: {
45
- found: z.boolean().describe("Whether results were found"),
46
- query: z.string().optional().describe("The seed query"),
47
- profile: z
48
- .record(z.string(), z.unknown())
49
- .optional()
50
- .describe("Impact chain profile with stages"),
51
- },
52
- annotations: READ_ONLY_API_ANNOTATIONS,
53
- }, async (args) => {
54
- try {
55
- const profile = {};
56
- const stageResults = await Promise.all(CHAIN_STAGES.map(async (stage) => {
57
- const builder = client
58
- .createQueryBuilder()
59
- .search(stage.entityType)
60
- .for(args.query)
61
- .fields([...stage.fields])
62
- .sort(stage.sortField, "desc")
63
- .limit(args.entityLimit);
64
- const dsl = builder.build();
65
- const response = await client.rawQuery(dsl);
66
- const items = asArray(response[stage.entityType]);
67
- return {
68
- entityType: stage.entityType,
69
- totalCount: typeof response._stats?.total_count === "number"
70
- ? response._stats.total_count
71
- : items.length,
72
- returnedCount: items.length,
73
- items,
74
- };
75
- }));
76
- const stages = {};
77
- for (const result of stageResults) {
78
- stages[result.entityType] = {
79
- totalCount: result.totalCount,
80
- returnedCount: result.returnedCount,
81
- items: result.items,
82
- };
83
- }
84
- profile.stages = stages;
85
- return formatToolResult({
86
- found: true,
87
- query: args.query,
88
- profile,
89
- });
90
- }
91
- catch (error) {
92
- return formatErrorResult(error);
93
- }
94
- });
95
- }
96
- //# sourceMappingURL=impact-chain.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impact-chain.js","sourceRoot":"","sources":["../../../src/mcp/tools/impact-chain.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * KWQ (Keyword Query) tools for the MCP server.
3
- * Provides structured query building and RRF ensemble fusion via the Dimensions API.
4
- * @module mcp/tools/kwq
5
- */
6
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
- import type { DimensionsClient } from "../../dsl/index.js";
8
- import type { SchemaStore } from "../schema/index.js";
9
- /**
10
- * Registers KWQ tools with the MCP server.
11
- * - build_query: always registered (pure computation)
12
- * - ensemble_queries: always registered (uses Dimensions API via client)
13
- *
14
- * @param server - MCP server instance
15
- * @param client - Dimensions API client (for ensemble query execution)
16
- * @param schemaStore - Loaded describe schema for search index hints
17
- */
18
- export declare function registerKwqTools(server: McpServer, client: DimensionsClient, schemaStore: SchemaStore): void;
19
- //# sourceMappingURL=kwq.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kwq.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/kwq.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA+BtD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,GACvB,IAAI,CA2IN"}
@@ -1,156 +0,0 @@
1
- /**
2
- * KWQ (Keyword Query) tools for the MCP server.
3
- * Provides structured query building and RRF ensemble fusion via the Dimensions API.
4
- * @module mcp/tools/kwq
5
- */
6
- import { z } from "zod";
7
- import { buildQuery, conceptGroupsToQuerySpec, ensembleQueries } from "../../kwq/index.js";
8
- import { formatErrorResult, formatToolResult } from "../utils.js";
9
- // #region Shared schemas
10
- const ENTITY_ENUM = z.enum([
11
- "publications",
12
- "grants",
13
- "researchers",
14
- "patents",
15
- "clinical_trials",
16
- "datasets",
17
- "policy_documents",
18
- "organizations",
19
- ]);
20
- const ConceptGroupSchema = z.object({
21
- terms: z.array(z.string()).min(1).describe("Terms OR'd together (synonyms)"),
22
- role: z.enum(["include", "exclude"]).describe("include = AND into query, exclude = NOT"),
23
- });
24
- const FilterSchema = z.object({
25
- field: z.string(),
26
- op: z.string(),
27
- value: z.union([z.string(), z.number(), z.array(z.string()), z.array(z.number())]),
28
- });
29
- // #endregion
30
- // #region Tool registration
31
- /**
32
- * Registers KWQ tools with the MCP server.
33
- * - build_query: always registered (pure computation)
34
- * - ensemble_queries: always registered (uses Dimensions API via client)
35
- *
36
- * @param server - MCP server instance
37
- * @param client - Dimensions API client (for ensemble query execution)
38
- * @param schemaStore - Loaded describe schema for search index hints
39
- */
40
- export function registerKwqTools(server, client, schemaStore) {
41
- const indexHints = ENTITY_ENUM.options
42
- .map((entity) => `${entity}: ${schemaStore.searchIndexes(entity).join(", ") || "default"}`)
43
- .join("; ");
44
- // --- build_query ---
45
- server.registerTool("build_query", {
46
- description: `Build a validated Dimensions DSL query from structured concept groups.
47
-
48
- Use concept_groups for the common pattern: groups of synonym terms, AND'd together, with optional exclusions.
49
- Each group's terms are OR'd (synonyms), include groups are AND'd, exclude groups are NOT'd.
50
-
51
- Search indexes by entity: ${indexHints}
52
-
53
- For advanced nested boolean logic, use search_json with a SearchExpr tree instead.
54
- Returns the validated DSL string, validation status, human-readable description, and complexity metrics.`,
55
- inputSchema: {
56
- entity: ENTITY_ENUM.describe("Target entity type"),
57
- concept_groups: z
58
- .array(ConceptGroupSchema)
59
- .optional()
60
- .describe("Concept groups: include groups AND'd, each group's terms OR'd, exclude groups NOT'd"),
61
- search_json: z
62
- .string()
63
- .optional()
64
- .describe("Advanced: raw SearchExpr JSON tree (overrides concept_groups). Use for nested boolean logic."),
65
- index: z
66
- .string()
67
- .optional()
68
- .describe("Search index (e.g. title_abstract_only, full_data, title_only)"),
69
- filters: z.array(FilterSchema).optional().describe("WHERE clause filters"),
70
- fields: z.array(z.string()).optional().describe("Fields to return"),
71
- sort_by: z.string().optional().describe("Sort field"),
72
- sort_order: z.enum(["asc", "desc"]).optional().describe("Sort order"),
73
- limit: z
74
- .number()
75
- .int()
76
- .min(1)
77
- .max(1000)
78
- .optional()
79
- .default(20)
80
- .describe("Result limit (default 20, max 1000)"),
81
- skip: z.number().int().min(0).optional().describe("Result offset"),
82
- },
83
- annotations: {
84
- readOnlyHint: true,
85
- destructiveHint: false,
86
- idempotentHint: true,
87
- openWorldHint: false,
88
- },
89
- }, async (args) => {
90
- try {
91
- if (args.concept_groups && args.search_json) {
92
- return formatErrorResult(new Error("Provide either concept_groups or search_json, not both."));
93
- }
94
- const spec = conceptGroupsToQuerySpec(args);
95
- const result = buildQuery(spec);
96
- return formatToolResult({
97
- dsl: result.dsl,
98
- valid: result.validation._tag === "valid",
99
- errors: result.validation._tag === "invalid" ? result.validation.errors : undefined,
100
- warnings: result.validation._tag === "valid" && result.validation.warnings.length > 0
101
- ? result.validation.warnings
102
- : undefined,
103
- description: result.description,
104
- complexity: result.complexity,
105
- });
106
- }
107
- catch (error) {
108
- return formatErrorResult(error);
109
- }
110
- });
111
- // --- ensemble_queries ---
112
- server.registerTool("ensemble_queries", {
113
- description: `Execute 2-10 query specs in parallel and fuse results using Reciprocal Rank Fusion (RRF).
114
-
115
- Each spec uses the same concept_groups model as build_query. RRF produces a
116
- variance-reduced ranking by combining multiple retrieval strategies — different
117
- keyword formulations, different indexes, or different filter configurations.
118
-
119
- RRF score: score(d) = Σ 1/(k + rank_i(d)) across all lists containing document d.
120
- Higher k (default 60) weights more evenly; lower k favors top-ranked documents.`,
121
- inputSchema: {
122
- specs: z
123
- .array(z.object({
124
- entity: ENTITY_ENUM.default("publications"),
125
- concept_groups: z.array(ConceptGroupSchema).optional(),
126
- search_json: z.string().optional(),
127
- index: z.string().optional(),
128
- filters: z.array(FilterSchema).optional(),
129
- fields: z.array(z.string()).optional(),
130
- limit: z.number().int().optional().default(100).describe("Per-query result limit"),
131
- }))
132
- .min(2)
133
- .max(10)
134
- .describe("2-10 query specs to execute and fuse"),
135
- k: z.number().int().optional().default(60).describe("RRF k parameter (default 60)"),
136
- limit: z.number().int().optional().default(100).describe("Max fused results to return"),
137
- },
138
- annotations: {
139
- readOnlyHint: true,
140
- destructiveHint: false,
141
- idempotentHint: false,
142
- openWorldHint: true,
143
- },
144
- }, async (args) => {
145
- try {
146
- const querySpecs = args.specs.map((spec) => conceptGroupsToQuerySpec(spec));
147
- const result = await ensembleQueries((dsl) => client.rawQuery(dsl), querySpecs, { k: args.k, limit: args.limit });
148
- return formatToolResult(result);
149
- }
150
- catch (error) {
151
- return formatErrorResult(error);
152
- }
153
- });
154
- }
155
- // #endregion
156
- //# sourceMappingURL=kwq.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kwq.js","sourceRoot":"","sources":["../../../src/mcp/tools/kwq.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Policy document profile tool for the MCP server.
3
- * Provides deep profiling of policy documents including structural links
4
- * to cited publications and their supporting grants.
5
- * @module mcp/tools/policy-profile
6
- */
7
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
- import type { DimensionsClient } from "../../dsl/index.js";
9
- /**
10
- * Registers the policy_document_profile tool with the MCP server.
11
- * @param server - MCP server instance
12
- * @param client - Dimensions client instance
13
- */
14
- export declare function registerPolicyProfileTools(server: McpServer, client: DimensionsClient): void;
15
- //# sourceMappingURL=policy-profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy-profile.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/policy-profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAQ3D;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAiL5F"}