@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 +0,0 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/tools/profile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAsYtF"}
@@ -1,349 +0,0 @@
1
- /**
2
- * Profile tools for the MCP server.
3
- * Provides researcher and organization profile aggregation.
4
- * @module mcp/tools/profile
5
- */
6
- import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
7
- import { z } from "zod";
8
- import { asArray, formatErrorResult, formatToolResult, READ_ONLY_API_ANNOTATIONS, } from "../utils.js";
9
- /**
10
- * Registers all profile tools with the MCP server.
11
- * @param server - MCP server instance
12
- * @param client - Dimensions client instance
13
- */
14
- export function registerProfileTools(server, client) {
15
- // Author/Researcher Profile
16
- server.registerTool("author_profile", {
17
- description: "Get a comprehensive profile for a researcher including their publications, grants, and institutional affiliations. Search by name or ORCID.",
18
- inputSchema: {
19
- researcherId: z.string().optional().describe("Dimensions researcher ID (if known)"),
20
- orcid: z.string().optional().describe("ORCID identifier (e.g., '0000-0001-2345-6789')"),
21
- name: z
22
- .string()
23
- .optional()
24
- .describe("Researcher name to search for (e.g., 'Jennifer Doudna')"),
25
- includePublications: z
26
- .boolean()
27
- .default(true)
28
- .describe("Include recent publications in profile"),
29
- includeGrants: z.boolean().default(true).describe("Include grants in profile"),
30
- publicationLimit: z
31
- .number()
32
- .int()
33
- .min(1)
34
- .max(100)
35
- .default(20)
36
- .describe("Max publications to return"),
37
- grantLimit: z.number().int().min(1).max(100).default(10).describe("Max grants to return"),
38
- },
39
- outputSchema: {
40
- found: z.boolean().describe("Whether the researcher was found"),
41
- profile: z
42
- .record(z.string(), z.unknown())
43
- .optional()
44
- .describe("Aggregated researcher profile"),
45
- message: z.string().optional().describe("Message when not found"),
46
- },
47
- annotations: READ_ONLY_API_ANNOTATIONS,
48
- }, async (args) => {
49
- // Validate that at least one identifier is provided
50
- if (!args.researcherId && !args.orcid && !args.name) {
51
- throw new McpError(ErrorCode.InvalidParams, "Must provide at least one of: researcherId, orcid, or name");
52
- }
53
- try {
54
- // Step 1: Find the researcher
55
- let researcherDsl;
56
- if (args.researcherId) {
57
- researcherDsl = client
58
- .createQueryBuilder()
59
- .search("researchers")
60
- .where("id", "=", args.researcherId)
61
- .limit(1)
62
- .build();
63
- }
64
- else if (args.orcid) {
65
- researcherDsl = client
66
- .createQueryBuilder()
67
- .search("researchers")
68
- .where("orcid_id", "=", args.orcid)
69
- .limit(1)
70
- .build();
71
- }
72
- else {
73
- const name = args.name;
74
- if (!name) {
75
- throw new McpError(ErrorCode.InvalidParams, "Must provide at least one of: researcherId, orcid, or name");
76
- }
77
- researcherDsl = client
78
- .createQueryBuilder()
79
- .search("researchers")
80
- .for(name)
81
- .limit(5)
82
- .build();
83
- }
84
- const researcherResponse = await client.rawQuery(researcherDsl);
85
- const researchers = asArray(researcherResponse.researchers);
86
- if (researchers.length === 0) {
87
- return formatToolResult({
88
- found: false,
89
- message: args.name
90
- ? `No researcher found matching: ${args.name}`
91
- : `No researcher found with provided identifier`,
92
- });
93
- }
94
- // Use the first/best match
95
- const researcher = researchers[0];
96
- if (typeof researcher.id !== "string") {
97
- return formatErrorResult(new Error("API returned researcher record without a valid id field"));
98
- }
99
- const researcherId = researcher.id;
100
- const profile = {
101
- researcher,
102
- matchCount: researchers.length,
103
- };
104
- // Steps 2 & 3: Get publications and grants concurrently
105
- const queries = [];
106
- if (args.includePublications) {
107
- queries.push((async () => {
108
- const pubDsl = client
109
- .createQueryBuilder()
110
- .search("publications")
111
- .where("researchers.id", "=", researcherId)
112
- .fields(["id", "title", "doi", "year", "times_cited", "journal", "type"])
113
- .sort("year", "desc")
114
- .limit(args.publicationLimit)
115
- .build();
116
- const pubResponse = await client.rawQuery(pubDsl);
117
- const publications = asArray(pubResponse.publications);
118
- profile.publications = {
119
- totalCount: pubResponse._stats?.total_count ?? publications.length,
120
- returnedCount: publications.length,
121
- items: publications,
122
- };
123
- })());
124
- }
125
- if (args.includeGrants) {
126
- queries.push((async () => {
127
- const grantDsl = client
128
- .createQueryBuilder()
129
- .search("grants")
130
- .where("researchers.id", "=", researcherId)
131
- .fields(["id", "title", "funding_usd", "funder_org_name", "start_year"])
132
- .sort("start_year", "desc")
133
- .limit(args.grantLimit)
134
- .build();
135
- const grantResponse = await client.rawQuery(grantDsl);
136
- const grants = asArray(grantResponse.grants);
137
- profile.grants = {
138
- totalCount: grantResponse._stats?.total_count ?? grants.length,
139
- returnedCount: grants.length,
140
- items: grants,
141
- };
142
- })());
143
- }
144
- await Promise.all(queries);
145
- return formatToolResult({
146
- found: true,
147
- profile,
148
- });
149
- }
150
- catch (error) {
151
- return formatErrorResult(error);
152
- }
153
- });
154
- // Organization Profile
155
- server.registerTool("org_profile", {
156
- description: "Get a comprehensive profile for a research organization including publication output, funding received, and top researchers. " +
157
- "Prefer organizationId (GRID id) when known — common names can match multiple organizations.",
158
- inputSchema: {
159
- organizationId: z
160
- .string()
161
- .optional()
162
- .describe("Dimensions organization GRID id (preferred, e.g. grid.168010.e for Stanford University)"),
163
- name: z
164
- .string()
165
- .optional()
166
- .describe("Organization name to search for (e.g., 'Stanford University', 'MIT')"),
167
- includePublications: z.boolean().default(true).describe("Include recent publications"),
168
- includeGrants: z.boolean().default(true).describe("Include grants received"),
169
- includeTopResearchers: z
170
- .boolean()
171
- .default(true)
172
- .describe("Include top researchers by publication count"),
173
- publicationLimit: z
174
- .number()
175
- .int()
176
- .min(1)
177
- .max(100)
178
- .default(20)
179
- .describe("Max publications to return"),
180
- grantLimit: z.number().int().min(1).max(100).default(10).describe("Max grants to return"),
181
- researcherLimit: z
182
- .number()
183
- .int()
184
- .min(1)
185
- .max(50)
186
- .default(10)
187
- .describe("Max researchers to return"),
188
- },
189
- outputSchema: {
190
- found: z.boolean().describe("Whether the organization was found"),
191
- ambiguous: z
192
- .boolean()
193
- .optional()
194
- .describe("True when name search matched multiple organizations"),
195
- matchCount: z.number().optional().describe("Number of name matches returned"),
196
- candidates: z
197
- .array(z.record(z.string(), z.unknown()))
198
- .optional()
199
- .describe("Matching organizations when ambiguous (id and name)"),
200
- profile: z
201
- .record(z.string(), z.unknown())
202
- .optional()
203
- .describe("Aggregated organization profile"),
204
- message: z.string().optional().describe("Message when not found or ambiguous"),
205
- },
206
- annotations: READ_ONLY_API_ANNOTATIONS,
207
- }, async (args) => {
208
- // Validate that at least one identifier is provided
209
- if (!args.organizationId && !args.name) {
210
- throw new McpError(ErrorCode.InvalidParams, "Must provide either organizationId or name");
211
- }
212
- try {
213
- // Step 1: Find the organization
214
- let orgDsl;
215
- if (args.organizationId) {
216
- orgDsl = client
217
- .createQueryBuilder()
218
- .search("organizations")
219
- .where("id", "=", args.organizationId)
220
- .limit(1)
221
- .build();
222
- }
223
- else {
224
- const name = args.name;
225
- if (!name) {
226
- throw new McpError(ErrorCode.InvalidParams, "Must provide either organizationId or name");
227
- }
228
- orgDsl = client.createQueryBuilder().search("organizations").for(name).limit(5).build();
229
- }
230
- const orgResponse = await client.rawQuery(orgDsl);
231
- const organizations = asArray(orgResponse.organizations);
232
- if (organizations.length === 0) {
233
- return formatToolResult({
234
- found: false,
235
- message: args.name
236
- ? `No organization found matching: ${args.name}`
237
- : `No organization found with provided ID`,
238
- });
239
- }
240
- if (!args.organizationId && organizations.length > 1) {
241
- const candidates = organizations.map((org) => ({
242
- id: org.id,
243
- name: org.name,
244
- }));
245
- return formatToolResult({
246
- found: false,
247
- ambiguous: true,
248
- matchCount: organizations.length,
249
- candidates,
250
- message: `Name "${args.name}" matched ${organizations.length} organizations. ` +
251
- "Pass organizationId (GRID id) to disambiguate.",
252
- });
253
- }
254
- const organization = organizations[0];
255
- if (typeof organization.id !== "string") {
256
- return formatErrorResult(new Error("API returned organization record without a valid id field"));
257
- }
258
- const orgId = organization.id;
259
- const profile = {
260
- organization,
261
- matchCount: organizations.length,
262
- };
263
- // Steps 2, 3 & 4: Get publications, grants, and top researchers concurrently
264
- const orgQueries = [];
265
- if (args.includePublications) {
266
- orgQueries.push((async () => {
267
- const pubDsl = client
268
- .createQueryBuilder()
269
- .search("publications")
270
- .where("research_orgs.id", "=", orgId)
271
- .fields(["id", "title", "doi", "year", "times_cited", "authors"])
272
- .sort("year", "desc")
273
- .limit(args.publicationLimit)
274
- .build();
275
- const pubResponse = await client.rawQuery(pubDsl);
276
- const publications = asArray(pubResponse.publications);
277
- profile.publications = {
278
- totalCount: pubResponse._stats?.total_count ?? publications.length,
279
- returnedCount: publications.length,
280
- items: publications,
281
- };
282
- })());
283
- }
284
- if (args.includeGrants) {
285
- orgQueries.push((async () => {
286
- const grantDsl = client
287
- .createQueryBuilder()
288
- .search("grants")
289
- .where("research_orgs.id", "=", orgId)
290
- .fields(["id", "title", "funding_usd", "funder_org_name", "start_year"])
291
- .sort("start_year", "desc")
292
- .limit(args.grantLimit)
293
- .build();
294
- const grantResponse = await client.rawQuery(grantDsl);
295
- const grants = asArray(grantResponse.grants);
296
- // Calculate total funding if available
297
- let totalFunding = 0;
298
- for (const grant of grants) {
299
- const funding = typeof grant.funding_usd === "number" ? grant.funding_usd : 0;
300
- if (funding > 0) {
301
- totalFunding += funding;
302
- }
303
- }
304
- profile.grants = {
305
- totalCount: grantResponse._stats?.total_count ?? grants.length,
306
- returnedCount: grants.length,
307
- totalFundingUsd: totalFunding,
308
- items: grants,
309
- };
310
- })());
311
- }
312
- if (args.includeTopResearchers) {
313
- orgQueries.push((async () => {
314
- const resDsl = client
315
- .createQueryBuilder()
316
- .search("researchers")
317
- .where("research_orgs.id", "=", orgId)
318
- .fields([
319
- "id",
320
- "first_name",
321
- "last_name",
322
- "orcid_id",
323
- "total_publications",
324
- "total_grants",
325
- ])
326
- .sort("total_publications", "desc")
327
- .limit(args.researcherLimit)
328
- .build();
329
- const resResponse = await client.rawQuery(resDsl);
330
- const researchers = asArray(resResponse.researchers);
331
- profile.topResearchers = {
332
- totalCount: resResponse._stats?.total_count ?? researchers.length,
333
- returnedCount: researchers.length,
334
- items: researchers,
335
- };
336
- })());
337
- }
338
- await Promise.all(orgQueries);
339
- return formatToolResult({
340
- found: true,
341
- profile,
342
- });
343
- }
344
- catch (error) {
345
- return formatErrorResult(error);
346
- }
347
- });
348
- }
349
- //# sourceMappingURL=profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/tools/profile.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Query tools for the MCP server.
3
- * Provides raw DSL query execution for power users.
4
- * @module mcp/tools/query
5
- */
6
- import type { DimensionsClient } from "@digital-science/dimensions-dsl";
7
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
- import type { SchemaStore } from "../schema/index.js";
9
- /**
10
- * Registers the raw DSL query tool with the MCP server.
11
- * @param server - MCP server instance
12
- * @param client - Dimensions client instance
13
- * @param schemaStore - Loaded describe schema for enriched descriptions
14
- */
15
- export declare function registerQueryTools(server: McpServer, client: DimensionsClient, schemaStore: SchemaStore): void;
16
- //# sourceMappingURL=query.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,GACvB,IAAI,CAyCN"}
@@ -1,53 +0,0 @@
1
- /**
2
- * Query tools for the MCP server.
3
- * Provides raw DSL query execution for power users.
4
- * @module mcp/tools/query
5
- */
6
- import { z } from "zod";
7
- import { formatErrorResult, formatToolResult } from "../utils.js";
8
- /**
9
- * Registers the raw DSL query tool with the MCP server.
10
- * @param server - MCP server instance
11
- * @param client - Dimensions client instance
12
- * @param schemaStore - Loaded describe schema for enriched descriptions
13
- */
14
- export function registerQueryTools(server, client, schemaStore) {
15
- const sources = schemaStore.structuredEntityTypes().join(", ");
16
- server.registerTool("execute_dsl", {
17
- description: `Execute a raw Dimensions DSL query. Read dimensions://schema and dimensions://examples first. Official docs: https://docs.dimensions.ai/dsl/
18
-
19
- Prefer search_* tools for keyword search with yearFrom/yearTo and sortBy — they build valid DSL automatically.
20
-
21
- DSL modifier order (required): return <entity>[fields] sort by <field> desc limit <n> skip <n>
22
- - Use "sort by", not "sort"
23
- - Put sort before limit (limit before sort causes a syntax error)
24
-
25
- Examples:
26
- - search publications for "CRISPR" where year >= 2020 return publications[id+title+times_cited] sort by times_cited desc limit 20
27
- - search publications return publications facet journal limit 20
28
- - return funders aggregate funding_usd
29
-
30
- Structured entity types: ${sources}`,
31
- inputSchema: {
32
- dsl: z.string().describe("Complete DSL query string to execute"),
33
- },
34
- outputSchema: {
35
- result: z.record(z.string(), z.unknown()).describe("Raw DSL query response"),
36
- },
37
- annotations: {
38
- readOnlyHint: true,
39
- destructiveHint: false,
40
- idempotentHint: false,
41
- openWorldHint: true,
42
- },
43
- }, async (args) => {
44
- try {
45
- const response = await client.rawQuery(args.dsl);
46
- return formatToolResult({ result: response });
47
- }
48
- catch (error) {
49
- return formatErrorResult(error);
50
- }
51
- });
52
- }
53
- //# sourceMappingURL=query.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,MAAwB,EACxB,WAAwB;IAExB,MAAM,OAAO,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EAAE;;;;;;;;;;;;;2BAaQ,OAAO,EAAE;QAC9B,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;SACjE;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SAC7E;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjD,OAAO,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Schema introspection and validation tools for the MCP server.
3
- * @module mcp/tools/schema
4
- */
5
- import type { DimensionsClient } from "@digital-science/dimensions-dsl";
6
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
- import type { SchemaContext } from "../schema/context.js";
8
- import { type SchemaStore } from "../schema/index.js";
9
- /** @deprecated Use {@link SchemaContext} from schema/context.js */
10
- export type { SchemaContext } from "../schema/context.js";
11
- /**
12
- * Registers schema introspection and validation tools.
13
- * @param server - MCP server instance
14
- * @param client - Dimensions client
15
- * @param context - Mutable schema context shared with refresh
16
- */
17
- export declare function registerSchemaTools(server: McpServer, client: DimensionsClient, context: SchemaContext): void;
18
- /**
19
- * Validates field aliases against loaded schema; logs warnings for unknown targets.
20
- * @param schemaStore - Loaded schema store
21
- */
22
- export declare function validateFieldAliases(schemaStore: SchemaStore): void;
23
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGlE,mEAAmE;AACnE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,aAAa,GACrB,IAAI,CAsGN;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAYnE"}
@@ -1,124 +0,0 @@
1
- /**
2
- * Schema introspection and validation tools for the MCP server.
3
- * @module mcp/tools/schema
4
- */
5
- import { z } from "zod";
6
- import { buildReverseAliasMap } from "../middleware/field-aliases.js";
7
- import { loadSchema } from "../schema/index.js";
8
- import { formatErrorResult, formatToolResult, READ_ONLY_API_ANNOTATIONS } from "../utils.js";
9
- /**
10
- * Registers schema introspection and validation tools.
11
- * @param server - MCP server instance
12
- * @param client - Dimensions client
13
- * @param context - Mutable schema context shared with refresh
14
- */
15
- export function registerSchemaTools(server, client, context) {
16
- server.registerTool("describe_schema", {
17
- description: "Return Dimensions DSL schema metadata loaded at server startup. " +
18
- "Default: compact summary with source/entity counts and resource URIs. " +
19
- "Use full=true or dimensions://schema for the complete describe payload. " +
20
- "Optionally fetch live describe for a single source or entity.",
21
- inputSchema: {
22
- source: z.string().optional().describe("Source name (e.g. publications)"),
23
- entity: z.string().optional().describe("Auxiliary entity name (e.g. journals)"),
24
- full: z
25
- .boolean()
26
- .optional()
27
- .describe("When true, return the full raw describe schema instead of the summary"),
28
- live: z
29
- .boolean()
30
- .optional()
31
- .describe("When true, fetch fresh describe for source/entity from the API"),
32
- },
33
- outputSchema: {
34
- summary: z
35
- .record(z.string(), z.unknown())
36
- .optional()
37
- .describe("Compact schema overview (default response)"),
38
- schema: z
39
- .record(z.string(), z.unknown())
40
- .optional()
41
- .describe("Full or sliced schema when full=true or source/entity is set"),
42
- version: z.string().optional().describe("DSL version"),
43
- stats: z.record(z.string(), z.unknown()).optional().describe("Load stats and provenance"),
44
- },
45
- annotations: READ_ONLY_API_ANNOTATIONS,
46
- }, async (args) => {
47
- try {
48
- if (args.live && args.source) {
49
- const raw = await client.rawQuery(`describe source ${args.source}`);
50
- return formatToolResult({ schema: raw });
51
- }
52
- if (args.live && args.entity) {
53
- const raw = await client.rawQuery(`describe entity ${args.entity}`);
54
- return formatToolResult({ schema: raw });
55
- }
56
- if (args.source) {
57
- const source = context.store.getSource(args.source);
58
- if (!source) {
59
- return formatErrorResult(new Error(`Unknown source: ${args.source}`));
60
- }
61
- return formatToolResult({ schema: source });
62
- }
63
- if (args.entity) {
64
- const entity = context.store.getEntity(args.entity);
65
- if (!entity) {
66
- return formatErrorResult(new Error(`Unknown entity: ${args.entity}`));
67
- }
68
- return formatToolResult({ schema: entity });
69
- }
70
- if (args.full) {
71
- return formatToolResult({
72
- schema: context.store.raw,
73
- version: context.store.version,
74
- stats: context.store.stats(),
75
- });
76
- }
77
- return formatToolResult({
78
- summary: context.store.summary(),
79
- version: context.store.version,
80
- stats: context.store.stats(),
81
- });
82
- }
83
- catch (error) {
84
- return formatErrorResult(error);
85
- }
86
- });
87
- server.registerTool("refresh_schema", {
88
- description: "Re-fetch describe schema from the Dimensions API, rebuild in-memory schema, and re-register MCP resources.",
89
- inputSchema: {},
90
- outputSchema: {
91
- refreshed: z.boolean(),
92
- stats: z.record(z.string(), z.unknown()),
93
- },
94
- annotations: READ_ONLY_API_ANNOTATIONS,
95
- }, async () => {
96
- try {
97
- const store = await loadSchema(client, {
98
- cachePath: process.env.SCHEMA_CACHE_PATH,
99
- forceRefresh: true,
100
- });
101
- context.store = store;
102
- return formatToolResult({ refreshed: true, stats: store.stats() });
103
- }
104
- catch (error) {
105
- return formatErrorResult(error);
106
- }
107
- });
108
- }
109
- /**
110
- * Validates field aliases against loaded schema; logs warnings for unknown targets.
111
- * @param schemaStore - Loaded schema store
112
- */
113
- export function validateFieldAliases(schemaStore) {
114
- for (const entity of schemaStore.structuredEntityTypes()) {
115
- const filterable = new Set(schemaStore.filterableFields(entity));
116
- const reverse = buildReverseAliasMap(entity);
117
- for (const [canonical, aliases] of reverse) {
118
- if (!filterable.has(canonical)) {
119
- console.error(`Field alias warning: ${entity}.${canonical} not in describe filterable fields (aliases: ${aliases.join(", ")})`);
120
- }
121
- }
122
- }
123
- }
124
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Per-entity search tool metadata (descriptions, convenience filters, sort hints).
3
- * @module mcp/tools/search-entity-metadata
4
- */
5
- import type { QueryBuilder, StructuredEntityType } from "@digital-science/dimensions-dsl";
6
- import { z } from "zod";
7
- /** Convenience filters applied before extended `filters`. */
8
- export type ConvenienceFilterApplier = (builder: QueryBuilder, args: Record<string, unknown>) => void;
9
- /** Static configuration for one structured search entity. */
10
- export interface SearchEntityMetadata {
11
- readonly source: StructuredEntityType;
12
- readonly description: string;
13
- readonly applyConvenienceFilters: ConvenienceFilterApplier;
14
- readonly extraInputSchema: Record<string, z.ZodTypeAny>;
15
- }
16
- /** Metadata for all structured search tools. */
17
- export declare const SEARCH_ENTITY_METADATA: readonly SearchEntityMetadata[];
18
- //# sourceMappingURL=search-entity-metadata.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-entity-metadata.d.ts","sourceRoot":"","sources":["../../src/tools/search-entity-metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,6DAA6D;AAC7D,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,IAAI,CAAC;AAEV,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;CACzD;AAiBD,gDAAgD;AAChD,eAAO,MAAM,sBAAsB,EAAE,SAAS,oBAAoB,EAqNjE,CAAC"}