@digital-science-dsl/dimensions-analytics-mcp 0.5.3 → 1.0.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.
- package/CHANGELOG.md +2 -58
- package/README.md +1 -5
- package/dist/client/deployment-config.d.ts +20 -2
- package/dist/client/deployment-config.d.ts.map +1 -1
- package/dist/client/deployment-config.js +26 -2
- package/dist/client/deployment-config.js.map +1 -1
- package/dist/client/internal-dsl-client.d.ts +1 -1
- package/dist/client/internal-dsl-client.d.ts.map +1 -1
- package/dist/client/internal-dsl-client.js +2 -5
- package/dist/client/internal-dsl-client.js.map +1 -1
- package/dist/dsl/create-client.d.ts +1 -1
- package/dist/dsl/create-client.js +1 -1
- package/dist/dsl/fluent-query-builder.d.ts +1 -1
- package/dist/dsl/fluent-query-builder.js +1 -1
- package/dist/dsl/schema/cache.d.ts +2 -2
- package/dist/dsl/schema/cache.d.ts.map +1 -1
- package/dist/dsl/schema/cache.js +8 -14
- package/dist/dsl/schema/cache.js.map +1 -1
- package/dist/dsl/schema/load.d.ts +0 -1
- package/dist/dsl/schema/load.d.ts.map +1 -1
- package/dist/dsl/schema/load.js +1 -3
- package/dist/dsl/schema/load.js.map +1 -1
- package/dist/mcp/tools/schema.d.ts +0 -2
- package/dist/mcp/tools/schema.d.ts.map +1 -1
- package/dist/mcp/tools/schema.js.map +1 -1
- package/dist/mcp/utils.d.ts +0 -4
- package/dist/mcp/utils.d.ts.map +1 -1
- package/dist/mcp/utils.js +0 -7
- package/dist/mcp/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/client/deployment-config.ts +39 -2
- package/src/client/internal-dsl-client.ts +2 -6
- package/src/dsl/create-client.ts +1 -1
- package/src/dsl/fluent-query-builder.ts +1 -1
- package/src/dsl/schema/cache.ts +8 -13
- package/src/dsl/schema/load.ts +1 -4
- package/src/mcp/tools/schema.ts +0 -3
- package/src/mcp/utils.ts +0 -12
- package/test/client/deployment-config.test.ts +25 -1
- package/test/client/http-client.test.ts +2 -2
- package/test/client/internal-dsl-client.test.ts +3 -0
- package/test/dsl/schema/cache.test.ts +2 -4
- package/test/helpers/tool-test-harness.ts +2 -19
- package/test/middleware/field-aliases.test.ts +1 -1
- package/test/tools/analytics.test.ts +2 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/examples/dsl-examples.d.ts +0 -11
- package/dist/examples/dsl-examples.d.ts.map +0 -1
- package/dist/examples/dsl-examples.js +0 -49
- package/dist/examples/dsl-examples.js.map +0 -1
- package/dist/examples/usage-scenarios.d.ts +0 -22
- package/dist/examples/usage-scenarios.d.ts.map +0 -1
- package/dist/examples/usage-scenarios.js +0 -173
- package/dist/examples/usage-scenarios.js.map +0 -1
- package/dist/funder-org-names.d.ts +0 -12
- package/dist/funder-org-names.d.ts.map +0 -1
- package/dist/funder-org-names.js +0 -30
- package/dist/funder-org-names.js.map +0 -1
- package/dist/http.d.ts +0 -29
- package/dist/http.d.ts.map +0 -1
- package/dist/http.js +0 -173
- package/dist/http.js.map +0 -1
- package/dist/kwq/build-query.d.ts +0 -26
- package/dist/kwq/build-query.d.ts.map +0 -1
- package/dist/kwq/build-query.js +0 -37
- package/dist/kwq/build-query.js.map +0 -1
- package/dist/kwq/concept-groups.d.ts +0 -49
- package/dist/kwq/concept-groups.d.ts.map +0 -1
- package/dist/kwq/concept-groups.js +0 -55
- package/dist/kwq/concept-groups.js.map +0 -1
- package/dist/kwq/dsl-assembler.d.ts +0 -28
- package/dist/kwq/dsl-assembler.d.ts.map +0 -1
- package/dist/kwq/dsl-assembler.js +0 -124
- package/dist/kwq/dsl-assembler.js.map +0 -1
- package/dist/kwq/ensemble.d.ts +0 -38
- package/dist/kwq/ensemble.d.ts.map +0 -1
- package/dist/kwq/ensemble.js +0 -107
- package/dist/kwq/ensemble.js.map +0 -1
- package/dist/kwq/index.d.ts +0 -16
- package/dist/kwq/index.d.ts.map +0 -1
- package/dist/kwq/index.js +0 -14
- package/dist/kwq/index.js.map +0 -1
- package/dist/kwq/types.d.ts +0 -120
- package/dist/kwq/types.d.ts.map +0 -1
- package/dist/kwq/types.js +0 -11
- package/dist/kwq/types.js.map +0 -1
- package/dist/lambda.d.ts +0 -10
- package/dist/lambda.d.ts.map +0 -1
- package/dist/lambda.js +0 -4
- package/dist/lambda.js.map +0 -1
- package/dist/mcp/tools/concept-profile.d.ts +0 -14
- package/dist/mcp/tools/concept-profile.d.ts.map +0 -1
- package/dist/mcp/tools/concept-profile.js +0 -130
- package/dist/mcp/tools/concept-profile.js.map +0 -1
- package/dist/mcp/tools/dataset-profile.d.ts +0 -15
- package/dist/mcp/tools/dataset-profile.d.ts.map +0 -1
- package/dist/mcp/tools/dataset-profile.js +0 -194
- package/dist/mcp/tools/dataset-profile.js.map +0 -1
- package/dist/mcp/tools/impact-chain.d.ts +0 -15
- package/dist/mcp/tools/impact-chain.d.ts.map +0 -1
- package/dist/mcp/tools/impact-chain.js +0 -96
- package/dist/mcp/tools/impact-chain.js.map +0 -1
- package/dist/mcp/tools/kwq.d.ts +0 -19
- package/dist/mcp/tools/kwq.d.ts.map +0 -1
- package/dist/mcp/tools/kwq.js +0 -156
- package/dist/mcp/tools/kwq.js.map +0 -1
- package/dist/mcp/tools/policy-profile.d.ts +0 -15
- package/dist/mcp/tools/policy-profile.d.ts.map +0 -1
- package/dist/mcp/tools/policy-profile.js +0 -174
- package/dist/mcp/tools/policy-profile.js.map +0 -1
- package/dist/mcp/tools/profile.d.ts +0 -14
- package/dist/mcp/tools/profile.d.ts.map +0 -1
- package/dist/mcp/tools/profile.js +0 -349
- package/dist/mcp/tools/profile.js.map +0 -1
- package/dist/middleware/field-aliases.d.ts +0 -97
- package/dist/middleware/field-aliases.d.ts.map +0 -1
- package/dist/middleware/field-aliases.js +0 -208
- package/dist/middleware/field-aliases.js.map +0 -1
- package/dist/resources/schema.d.ts +0 -13
- package/dist/resources/schema.d.ts.map +0 -1
- package/dist/resources/schema.js +0 -204
- package/dist/resources/schema.js.map +0 -1
- package/dist/schema/context.d.ts +0 -10
- package/dist/schema/context.d.ts.map +0 -1
- package/dist/schema/context.js +0 -6
- package/dist/schema/context.js.map +0 -1
- package/dist/schema/index.d.ts +0 -9
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -6
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/load.d.ts +0 -43
- package/dist/schema/load.d.ts.map +0 -1
- package/dist/schema/load.js +0 -139
- package/dist/schema/load.js.map +0 -1
- package/dist/schema/store.d.ts +0 -112
- package/dist/schema/store.d.ts.map +0 -1
- package/dist/schema/store.js +0 -173
- package/dist/schema/store.js.map +0 -1
- package/dist/schema/structured-entities.d.ts +0 -21
- package/dist/schema/structured-entities.d.ts.map +0 -1
- package/dist/schema/structured-entities.js +0 -39
- package/dist/schema/structured-entities.js.map +0 -1
- package/dist/schema/types.d.ts +0 -36
- package/dist/schema/types.d.ts.map +0 -1
- package/dist/schema/types.js +0 -6
- package/dist/schema/types.js.map +0 -1
- package/dist/server.d.ts +0 -57
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -144
- package/dist/server.js.map +0 -1
- package/dist/telemetry.d.ts +0 -172
- package/dist/telemetry.d.ts.map +0 -1
- package/dist/telemetry.js +0 -233
- package/dist/telemetry.js.map +0 -1
- package/dist/tools/analytics-filters.d.ts +0 -18
- package/dist/tools/analytics-filters.d.ts.map +0 -1
- package/dist/tools/analytics-filters.js +0 -35
- package/dist/tools/analytics-filters.js.map +0 -1
- package/dist/tools/analytics.d.ts +0 -16
- package/dist/tools/analytics.d.ts.map +0 -1
- package/dist/tools/analytics.js +0 -381
- package/dist/tools/analytics.js.map +0 -1
- package/dist/tools/concept-profile.d.ts +0 -14
- package/dist/tools/concept-profile.d.ts.map +0 -1
- package/dist/tools/concept-profile.js +0 -130
- package/dist/tools/concept-profile.js.map +0 -1
- package/dist/tools/dataset-profile.d.ts +0 -15
- package/dist/tools/dataset-profile.d.ts.map +0 -1
- package/dist/tools/dataset-profile.js +0 -194
- package/dist/tools/dataset-profile.js.map +0 -1
- package/dist/tools/functions.d.ts +0 -14
- package/dist/tools/functions.d.ts.map +0 -1
- package/dist/tools/functions.js +0 -294
- package/dist/tools/functions.js.map +0 -1
- package/dist/tools/impact-chain.d.ts +0 -15
- package/dist/tools/impact-chain.d.ts.map +0 -1
- package/dist/tools/impact-chain.js +0 -96
- package/dist/tools/impact-chain.js.map +0 -1
- package/dist/tools/kwq.d.ts +0 -19
- package/dist/tools/kwq.d.ts.map +0 -1
- package/dist/tools/kwq.js +0 -156
- package/dist/tools/kwq.js.map +0 -1
- package/dist/tools/lookup.d.ts +0 -14
- package/dist/tools/lookup.d.ts.map +0 -1
- package/dist/tools/lookup.js +0 -213
- package/dist/tools/lookup.js.map +0 -1
- package/dist/tools/policy-profile.d.ts +0 -15
- package/dist/tools/policy-profile.d.ts.map +0 -1
- package/dist/tools/policy-profile.js +0 -174
- package/dist/tools/policy-profile.js.map +0 -1
- package/dist/tools/profile.d.ts +0 -14
- package/dist/tools/profile.d.ts.map +0 -1
- package/dist/tools/profile.js +0 -349
- package/dist/tools/profile.js.map +0 -1
- package/dist/tools/query.d.ts +0 -16
- package/dist/tools/query.d.ts.map +0 -1
- package/dist/tools/query.js +0 -53
- package/dist/tools/query.js.map +0 -1
- package/dist/tools/schema.d.ts +0 -23
- package/dist/tools/schema.d.ts.map +0 -1
- package/dist/tools/schema.js +0 -124
- package/dist/tools/schema.js.map +0 -1
- package/dist/tools/search-entity-metadata.d.ts +0 -18
- package/dist/tools/search-entity-metadata.d.ts.map +0 -1
- package/dist/tools/search-entity-metadata.js +0 -221
- package/dist/tools/search-entity-metadata.js.map +0 -1
- package/dist/tools/search.d.ts +0 -23
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js +0 -110
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/solr-fields.d.ts +0 -39
- package/dist/tools/solr-fields.d.ts.map +0 -1
- package/dist/tools/solr-fields.js +0 -40
- package/dist/tools/solr-fields.js.map +0 -1
- package/dist/utils.d.ts +0 -70
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -104
- package/dist/utils.js.map +0 -1
package/dist/tools/analytics.js
DELETED
|
@@ -1,381 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Analytics tools for the MCP server.
|
|
3
|
-
* Provides tools for facet distribution analysis, metric aggregation, and time-series trends.
|
|
4
|
-
* @module mcp/tools/analytics
|
|
5
|
-
*/
|
|
6
|
-
import { ExtendedWhereFilterSchema, parseFacetResponse, SUPPORTED_CURRENCIES, } from "@digital-science/dimensions-dsl";
|
|
7
|
-
import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
-
import { z } from "zod";
|
|
9
|
-
import { resolveFacetFieldName, withFieldAliases } from "../middleware/field-aliases.js";
|
|
10
|
-
import { formatErrorResult, formatToolResult, READ_ONLY_API_ANNOTATIONS } from "../utils.js";
|
|
11
|
-
import { applyAnalyticsFilters } from "./analytics-filters.js";
|
|
12
|
-
/** API may return year→value map or an array; normalize for MCP output schemas. */
|
|
13
|
-
function normalizeYearSeries(data, valueKey) {
|
|
14
|
-
if (Array.isArray(data)) {
|
|
15
|
-
return data;
|
|
16
|
-
}
|
|
17
|
-
if (data && typeof data === "object") {
|
|
18
|
-
return Object.entries(data)
|
|
19
|
-
.map(([year, value]) => ({ year: Number(year), [valueKey]: value }))
|
|
20
|
-
.sort((a, b) => a.year - b.year);
|
|
21
|
-
}
|
|
22
|
-
return [];
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Zod enum of structured entity types from the loaded schema.
|
|
26
|
-
* @param schemaStore - Loaded describe schema
|
|
27
|
-
* @returns Entity type enum for tool input schemas
|
|
28
|
-
*/
|
|
29
|
-
function entityTypeEnum(schemaStore) {
|
|
30
|
-
const types = schemaStore.structuredEntityTypes();
|
|
31
|
-
if (types.length === 0) {
|
|
32
|
-
return z.string().min(1).describe("Entity type (no sources loaded in schema)");
|
|
33
|
-
}
|
|
34
|
-
return z
|
|
35
|
-
.enum(types)
|
|
36
|
-
.describe("The entity type to analyze (e.g., 'publications', 'grants', 'patents')");
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Validates a facet field against describe schema.
|
|
40
|
-
* @param schemaStore - Loaded schema
|
|
41
|
-
* @param entity - Entity type
|
|
42
|
-
* @param facetField - Facet field name
|
|
43
|
-
*/
|
|
44
|
-
function assertFacetField(schemaStore, entity, facetField) {
|
|
45
|
-
const valid = schemaStore.facetFields(entity);
|
|
46
|
-
if (!valid.includes(facetField)) {
|
|
47
|
-
throw new McpError(ErrorCode.InvalidParams, `Invalid facet field "${facetField}" for entity "${entity}". Valid fields: ${valid.join(", ") || "(none)"}`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Validates aggregation indicators against describe schema.
|
|
52
|
-
* @param schemaStore - Loaded schema
|
|
53
|
-
* @param entity - Entity type
|
|
54
|
-
* @param indicators - Metric names
|
|
55
|
-
*/
|
|
56
|
-
function assertIndicators(schemaStore, entity, indicators) {
|
|
57
|
-
const valid = new Set(schemaStore.metrics(entity));
|
|
58
|
-
const invalid = indicators.filter((name) => !valid.has(name));
|
|
59
|
-
if (invalid.length > 0) {
|
|
60
|
-
throw new McpError(ErrorCode.InvalidParams, `Invalid indicator(s) for entity "${entity}": ${invalid.join(", ")}. Valid metrics: ${[...valid].join(", ") || "(none)"}`);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Builds facet field hint text from describe schema.
|
|
65
|
-
* @param schemaStore - Loaded schema
|
|
66
|
-
* @returns Description fragment
|
|
67
|
-
*/
|
|
68
|
-
function facetFieldsDescription(schemaStore) {
|
|
69
|
-
return schemaStore
|
|
70
|
-
.structuredEntityTypes()
|
|
71
|
-
.map((entity) => `${entity}: ${schemaStore.facetFieldsHint(entity)}`)
|
|
72
|
-
.join(". ");
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Builds metrics hint text from describe schema.
|
|
76
|
-
* @param schemaStore - Loaded schema
|
|
77
|
-
* @returns Description fragment
|
|
78
|
-
*/
|
|
79
|
-
function metricsDescription(schemaStore) {
|
|
80
|
-
return schemaStore
|
|
81
|
-
.structuredEntityTypes()
|
|
82
|
-
.map((entity) => `${entity}: ${schemaStore.metricsHint(entity)}`)
|
|
83
|
-
.join(". ");
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Registers all analytics tools with the MCP server.
|
|
87
|
-
* @param server - MCP server instance
|
|
88
|
-
* @param client - Dimensions client instance
|
|
89
|
-
* @param schemaStore - Loaded describe schema
|
|
90
|
-
*/
|
|
91
|
-
export function registerAnalyticsTools(server, client, schemaStore) {
|
|
92
|
-
const facetHint = facetFieldsDescription(schemaStore);
|
|
93
|
-
const metricsHint = metricsDescription(schemaStore);
|
|
94
|
-
const entityTypeSchema = entityTypeEnum(schemaStore);
|
|
95
|
-
// Facet Query
|
|
96
|
-
server.registerTool("facet_query", {
|
|
97
|
-
description: "Distribution analysis across entity dimensions. Returns facet buckets showing how records " +
|
|
98
|
-
"are distributed across a categorical field. Example: 'What journals publish the most CRISPR research?'",
|
|
99
|
-
inputSchema: {
|
|
100
|
-
entityType: entityTypeSchema,
|
|
101
|
-
facetField: z
|
|
102
|
-
.string()
|
|
103
|
-
.min(1)
|
|
104
|
-
.describe(`Field to facet on. Valid fields by entity: ${facetHint}`),
|
|
105
|
-
query: z
|
|
106
|
-
.string()
|
|
107
|
-
.min(1)
|
|
108
|
-
.optional()
|
|
109
|
-
.describe("Optional search query to filter records before faceting (e.g., 'CRISPR gene editing')"),
|
|
110
|
-
limit: z
|
|
111
|
-
.number()
|
|
112
|
-
.int()
|
|
113
|
-
.min(1)
|
|
114
|
-
.max(100)
|
|
115
|
-
.default(20)
|
|
116
|
-
.describe("Maximum number of facet buckets to return (default 20, max 100)"),
|
|
117
|
-
yearFrom: z
|
|
118
|
-
.number()
|
|
119
|
-
.int()
|
|
120
|
-
.optional()
|
|
121
|
-
.describe("Filter records from this year (publications: year; grants: start_year)"),
|
|
122
|
-
yearTo: z
|
|
123
|
-
.number()
|
|
124
|
-
.int()
|
|
125
|
-
.optional()
|
|
126
|
-
.describe("Filter records up to this year (publications: year; grants: start_year)"),
|
|
127
|
-
filters: z
|
|
128
|
-
.array(ExtendedWhereFilterSchema)
|
|
129
|
-
.optional()
|
|
130
|
-
.describe("Additional where-clause filters before faceting"),
|
|
131
|
-
},
|
|
132
|
-
outputSchema: {
|
|
133
|
-
entityType: z.string().describe("Entity type analyzed"),
|
|
134
|
-
facetField: z.string().describe("Field faceted on"),
|
|
135
|
-
totalBuckets: z.number().describe("Number of facet buckets returned"),
|
|
136
|
-
buckets: z.array(z.record(z.string(), z.unknown())).describe("Facet bucket distribution"),
|
|
137
|
-
},
|
|
138
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
139
|
-
}, withFieldAliases({
|
|
140
|
-
entitySource: { kind: "dynamic", argName: "entityType" },
|
|
141
|
-
filterArrayArgs: ["filters"],
|
|
142
|
-
}, async (args) => {
|
|
143
|
-
try {
|
|
144
|
-
const facetField = resolveFacetFieldName(args.entityType, args.facetField);
|
|
145
|
-
assertFacetField(schemaStore, args.entityType, facetField);
|
|
146
|
-
const builder = client.createQueryBuilder().search(args.entityType);
|
|
147
|
-
if (args.query) {
|
|
148
|
-
builder.for(args.query);
|
|
149
|
-
}
|
|
150
|
-
applyAnalyticsFilters(builder, args.entityType, args);
|
|
151
|
-
builder.returnFacet(facetField, { limit: args.limit });
|
|
152
|
-
const response = (await client.rawQuery(builder.build()));
|
|
153
|
-
const facetConfigs = {
|
|
154
|
-
[facetField]: {},
|
|
155
|
-
};
|
|
156
|
-
const parsed = parseFacetResponse(response, args.entityType, facetConfigs, {
|
|
157
|
-
includeRaw: false,
|
|
158
|
-
});
|
|
159
|
-
const facets = parsed.facets[facetField];
|
|
160
|
-
return formatToolResult({
|
|
161
|
-
entityType: args.entityType,
|
|
162
|
-
facetField,
|
|
163
|
-
totalBuckets: facets.buckets.length,
|
|
164
|
-
buckets: facets.buckets,
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
168
|
-
return formatErrorResult(error);
|
|
169
|
-
}
|
|
170
|
-
}));
|
|
171
|
-
// Aggregate Query
|
|
172
|
-
server.registerTool("aggregate_query", {
|
|
173
|
-
description: "Metric aggregation on facet buckets. Returns facet buckets enriched with aggregated indicator " +
|
|
174
|
-
"values. Example: 'Which funders have the highest average citation ratio?'",
|
|
175
|
-
inputSchema: {
|
|
176
|
-
entityType: entityTypeSchema,
|
|
177
|
-
facetField: z
|
|
178
|
-
.string()
|
|
179
|
-
.min(1)
|
|
180
|
-
.describe(`Field to facet on. Valid fields by entity: ${facetHint}`),
|
|
181
|
-
indicators: z
|
|
182
|
-
.array(z.string().min(1))
|
|
183
|
-
.min(1)
|
|
184
|
-
.describe(`Aggregation indicators per bucket. Valid metrics by entity: ${metricsHint}`),
|
|
185
|
-
query: z
|
|
186
|
-
.string()
|
|
187
|
-
.min(1)
|
|
188
|
-
.optional()
|
|
189
|
-
.describe("Optional search query to filter records before aggregating"),
|
|
190
|
-
sortBy: z
|
|
191
|
-
.string()
|
|
192
|
-
.optional()
|
|
193
|
-
.describe("Field to sort buckets by (must be 'count' or one of the specified indicators)"),
|
|
194
|
-
sortOrder: z.enum(["asc", "desc"]).optional().describe("Sort direction — 'asc' or 'desc'"),
|
|
195
|
-
limit: z
|
|
196
|
-
.number()
|
|
197
|
-
.int()
|
|
198
|
-
.min(1)
|
|
199
|
-
.default(20)
|
|
200
|
-
.describe("Maximum number of facet buckets to return (default 20)"),
|
|
201
|
-
yearFrom: z
|
|
202
|
-
.number()
|
|
203
|
-
.int()
|
|
204
|
-
.optional()
|
|
205
|
-
.describe("Filter records from this year (publications: year; grants: start_year)"),
|
|
206
|
-
yearTo: z
|
|
207
|
-
.number()
|
|
208
|
-
.int()
|
|
209
|
-
.optional()
|
|
210
|
-
.describe("Filter records up to this year (publications: year; grants: start_year)"),
|
|
211
|
-
filters: z
|
|
212
|
-
.array(ExtendedWhereFilterSchema)
|
|
213
|
-
.optional()
|
|
214
|
-
.describe("Additional where-clause filters before aggregating"),
|
|
215
|
-
},
|
|
216
|
-
outputSchema: {
|
|
217
|
-
entityType: z.string().describe("Entity type analyzed"),
|
|
218
|
-
facetField: z.string().describe("Field faceted on"),
|
|
219
|
-
indicators: z.array(z.string()).describe("Aggregation indicators computed"),
|
|
220
|
-
totalBuckets: z.number().describe("Number of facet buckets returned"),
|
|
221
|
-
buckets: z
|
|
222
|
-
.array(z.record(z.string(), z.unknown()))
|
|
223
|
-
.describe("Facet buckets with aggregated values"),
|
|
224
|
-
},
|
|
225
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
226
|
-
}, withFieldAliases({
|
|
227
|
-
entitySource: { kind: "dynamic", argName: "entityType" },
|
|
228
|
-
fieldStringArgs: ["sortBy"],
|
|
229
|
-
fieldArrayArgs: ["indicators"],
|
|
230
|
-
filterArrayArgs: ["filters"],
|
|
231
|
-
}, async (args) => {
|
|
232
|
-
try {
|
|
233
|
-
const facetField = resolveFacetFieldName(args.entityType, args.facetField);
|
|
234
|
-
assertFacetField(schemaStore, args.entityType, facetField);
|
|
235
|
-
assertIndicators(schemaStore, args.entityType, args.indicators);
|
|
236
|
-
const builder = client.createQueryBuilder().search(args.entityType);
|
|
237
|
-
if (args.query) {
|
|
238
|
-
builder.for(args.query);
|
|
239
|
-
}
|
|
240
|
-
applyAnalyticsFilters(builder, args.entityType, args);
|
|
241
|
-
builder.returnAggregate(facetField, args.indicators, {
|
|
242
|
-
sortBy: args.sortBy,
|
|
243
|
-
sortOrder: args.sortOrder,
|
|
244
|
-
limit: args.limit,
|
|
245
|
-
});
|
|
246
|
-
const response = (await client.rawQuery(builder.build()));
|
|
247
|
-
const facetConfigs = {
|
|
248
|
-
[facetField]: { indicators: args.indicators },
|
|
249
|
-
};
|
|
250
|
-
const parsed = parseFacetResponse(response, args.entityType, facetConfigs, {
|
|
251
|
-
includeRaw: false,
|
|
252
|
-
});
|
|
253
|
-
const facets = parsed.facets[facetField];
|
|
254
|
-
return formatToolResult({
|
|
255
|
-
entityType: args.entityType,
|
|
256
|
-
facetField,
|
|
257
|
-
indicators: args.indicators,
|
|
258
|
-
totalBuckets: facets.buckets.length,
|
|
259
|
-
buckets: facets.buckets,
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
catch (error) {
|
|
263
|
-
return formatErrorResult(error);
|
|
264
|
-
}
|
|
265
|
-
}));
|
|
266
|
-
// Citation Trend
|
|
267
|
-
server.registerTool("citation_trend", {
|
|
268
|
-
description: "Year-by-year citation counts for a topic. Returns annual citation totals for publications " +
|
|
269
|
-
"matching the query over the specified year range.",
|
|
270
|
-
inputSchema: {
|
|
271
|
-
query: z
|
|
272
|
-
.string()
|
|
273
|
-
.min(1)
|
|
274
|
-
.describe("Search query to identify publications (e.g., 'CRISPR gene editing')"),
|
|
275
|
-
startYear: z
|
|
276
|
-
.number()
|
|
277
|
-
.int()
|
|
278
|
-
.min(1900)
|
|
279
|
-
.max(2100)
|
|
280
|
-
.describe("First year of the time range (inclusive)"),
|
|
281
|
-
endYear: z
|
|
282
|
-
.number()
|
|
283
|
-
.int()
|
|
284
|
-
.min(1900)
|
|
285
|
-
.max(2100)
|
|
286
|
-
.describe("Last year of the time range (inclusive)"),
|
|
287
|
-
},
|
|
288
|
-
outputSchema: {
|
|
289
|
-
query: z.string().describe("Search query used"),
|
|
290
|
-
startYear: z.number().describe("First year of range"),
|
|
291
|
-
endYear: z.number().describe("Last year of range"),
|
|
292
|
-
citationsPerYear: z
|
|
293
|
-
.array(z.record(z.string(), z.unknown()))
|
|
294
|
-
.describe("Annual citation totals"),
|
|
295
|
-
},
|
|
296
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
297
|
-
}, async (args) => {
|
|
298
|
-
try {
|
|
299
|
-
if (args.startYear > args.endYear) {
|
|
300
|
-
throw new McpError(ErrorCode.InvalidParams, `startYear (${args.startYear}) must be ≤ endYear (${args.endYear})`);
|
|
301
|
-
}
|
|
302
|
-
const dsl = client
|
|
303
|
-
.createQueryBuilder()
|
|
304
|
-
.search("publications")
|
|
305
|
-
.for(args.query)
|
|
306
|
-
.returnCitationsPerYear(args.startYear, args.endYear)
|
|
307
|
-
.build();
|
|
308
|
-
const response = await client.rawQuery(dsl);
|
|
309
|
-
return formatToolResult({
|
|
310
|
-
query: args.query,
|
|
311
|
-
startYear: args.startYear,
|
|
312
|
-
endYear: args.endYear,
|
|
313
|
-
citationsPerYear: normalizeYearSeries(response.citations_per_year, "count"),
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
catch (error) {
|
|
317
|
-
return formatErrorResult(error);
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
// Funding Trend
|
|
321
|
-
server.registerTool("funding_trend", {
|
|
322
|
-
description: "Year-by-year funding totals for a topic. Returns annual grant funding amounts for grants " +
|
|
323
|
-
"matching the query over the specified year range.",
|
|
324
|
-
inputSchema: {
|
|
325
|
-
query: z
|
|
326
|
-
.string()
|
|
327
|
-
.min(1)
|
|
328
|
-
.describe("Search query to identify grants (e.g., 'cancer immunotherapy')"),
|
|
329
|
-
startYear: z
|
|
330
|
-
.number()
|
|
331
|
-
.int()
|
|
332
|
-
.min(1900)
|
|
333
|
-
.max(2100)
|
|
334
|
-
.describe("First year of the time range (inclusive)"),
|
|
335
|
-
endYear: z
|
|
336
|
-
.number()
|
|
337
|
-
.int()
|
|
338
|
-
.min(1900)
|
|
339
|
-
.max(2100)
|
|
340
|
-
.describe("Last year of the time range (inclusive)"),
|
|
341
|
-
currency: z
|
|
342
|
-
.enum(SUPPORTED_CURRENCIES)
|
|
343
|
-
.default("USD")
|
|
344
|
-
.describe(`Currency for funding amounts (default USD). Supported: ${SUPPORTED_CURRENCIES.join(", ")}.`),
|
|
345
|
-
},
|
|
346
|
-
outputSchema: {
|
|
347
|
-
query: z.string().describe("Search query used"),
|
|
348
|
-
startYear: z.number().describe("First year of range"),
|
|
349
|
-
endYear: z.number().describe("Last year of range"),
|
|
350
|
-
currency: z.string().describe("Currency of funding amounts"),
|
|
351
|
-
fundingPerYear: z
|
|
352
|
-
.array(z.record(z.string(), z.unknown()))
|
|
353
|
-
.describe("Annual funding totals"),
|
|
354
|
-
},
|
|
355
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
356
|
-
}, async (args) => {
|
|
357
|
-
try {
|
|
358
|
-
if (args.startYear > args.endYear) {
|
|
359
|
-
throw new McpError(ErrorCode.InvalidParams, `startYear (${args.startYear}) must be ≤ endYear (${args.endYear})`);
|
|
360
|
-
}
|
|
361
|
-
const dsl = client
|
|
362
|
-
.createQueryBuilder()
|
|
363
|
-
.search("grants")
|
|
364
|
-
.for(args.query)
|
|
365
|
-
.returnFundingPerYear(args.startYear, args.endYear, args.currency)
|
|
366
|
-
.build();
|
|
367
|
-
const response = await client.rawQuery(dsl);
|
|
368
|
-
return formatToolResult({
|
|
369
|
-
query: args.query,
|
|
370
|
-
startYear: args.startYear,
|
|
371
|
-
endYear: args.endYear,
|
|
372
|
-
currency: args.currency,
|
|
373
|
-
fundingPerYear: normalizeYearSeries(response.funding_per_year, "funding"),
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
catch (error) {
|
|
377
|
-
return formatErrorResult(error);
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
//# sourceMappingURL=analytics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Concept profile tool for the MCP server.
|
|
3
|
-
* Provides multi-dimensional concept profiling across entity types via the Dimensions DSL.
|
|
4
|
-
* @module mcp/tools/concept-profile
|
|
5
|
-
*/
|
|
6
|
-
import type { DimensionsClient } from "@digital-science/dimensions-dsl";
|
|
7
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
-
/**
|
|
9
|
-
* Registers the concept_profile tool with the MCP server.
|
|
10
|
-
* @param server - MCP server instance
|
|
11
|
-
* @param client - Dimensions client instance
|
|
12
|
-
*/
|
|
13
|
-
export declare function registerConceptProfileTools(server: McpServer, client: DimensionsClient): void;
|
|
14
|
-
//# sourceMappingURL=concept-profile.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"concept-profile.d.ts","sourceRoot":"","sources":["../../src/tools/concept-profile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBzE;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAkI7F"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Concept profile tool for the MCP server.
|
|
3
|
-
* Provides multi-dimensional concept profiling across entity types via the Dimensions DSL.
|
|
4
|
-
* @module mcp/tools/concept-profile
|
|
5
|
-
*/
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import { asArray, formatErrorResult, formatToolResult, READ_ONLY_API_ANNOTATIONS, } from "../utils.js";
|
|
8
|
-
/** Entity types used for entity footprint counts. */
|
|
9
|
-
const FOOTPRINT_ENTITIES = [
|
|
10
|
-
"publications",
|
|
11
|
-
"grants",
|
|
12
|
-
"patents",
|
|
13
|
-
"clinical_trials",
|
|
14
|
-
"datasets",
|
|
15
|
-
"policy_documents",
|
|
16
|
-
];
|
|
17
|
-
/**
|
|
18
|
-
* Registers the concept_profile tool with the MCP server.
|
|
19
|
-
* @param server - MCP server instance
|
|
20
|
-
* @param client - Dimensions client instance
|
|
21
|
-
*/
|
|
22
|
-
export function registerConceptProfileTools(server, client) {
|
|
23
|
-
server.registerTool("concept_profile", {
|
|
24
|
-
description: "Build a multi-dimensional profile for a research concept. Returns publication analytics (year trends, top orgs, journals, funders, field classification) and entity footprint across 6 entity types.",
|
|
25
|
-
inputSchema: {
|
|
26
|
-
concept: z.string().describe("The concept to profile (e.g., 'CRISPR', 'machine learning')"),
|
|
27
|
-
includeAnalytics: z
|
|
28
|
-
.boolean()
|
|
29
|
-
.default(true)
|
|
30
|
-
.describe("Include DSL facet analytics (year trends, top orgs, journals, funders, fields)"),
|
|
31
|
-
includeEntityFootprint: z
|
|
32
|
-
.boolean()
|
|
33
|
-
.default(true)
|
|
34
|
-
.describe("Include cross-entity type record counts"),
|
|
35
|
-
facetLimit: z
|
|
36
|
-
.number()
|
|
37
|
-
.int()
|
|
38
|
-
.min(1)
|
|
39
|
-
.max(50)
|
|
40
|
-
.default(10)
|
|
41
|
-
.describe("Max buckets per facet in analytics"),
|
|
42
|
-
},
|
|
43
|
-
outputSchema: {
|
|
44
|
-
found: z.boolean().describe("Whether results were found for the concept"),
|
|
45
|
-
concept: z.string().optional().describe("The profiled concept"),
|
|
46
|
-
profile: z
|
|
47
|
-
.record(z.string(), z.unknown())
|
|
48
|
-
.optional()
|
|
49
|
-
.describe("Multi-dimensional concept profile"),
|
|
50
|
-
},
|
|
51
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
52
|
-
}, async (args) => {
|
|
53
|
-
try {
|
|
54
|
-
const profile = {};
|
|
55
|
-
const phases = [];
|
|
56
|
-
// Phase 1: DSL facet analytics
|
|
57
|
-
if (args.includeAnalytics !== false) {
|
|
58
|
-
phases.push((async () => {
|
|
59
|
-
const facetFields = ["year", "research_orgs", "journal", "funders", "category_for"];
|
|
60
|
-
const facetResults = await Promise.all(facetFields.map(async (field) => {
|
|
61
|
-
const dsl = client
|
|
62
|
-
.createQueryBuilder()
|
|
63
|
-
.search("publications")
|
|
64
|
-
.for(args.concept)
|
|
65
|
-
.returnFacet(field, { limit: field === "year" ? 50 : args.facetLimit })
|
|
66
|
-
.limit(0)
|
|
67
|
-
.build();
|
|
68
|
-
const response = await client.rawQuery(dsl);
|
|
69
|
-
return { field, data: response };
|
|
70
|
-
}));
|
|
71
|
-
const analytics = {};
|
|
72
|
-
for (const { field, data } of facetResults) {
|
|
73
|
-
const buckets = asArray(data[field]);
|
|
74
|
-
switch (field) {
|
|
75
|
-
case "year":
|
|
76
|
-
analytics.yearTrend = buckets;
|
|
77
|
-
break;
|
|
78
|
-
case "research_orgs":
|
|
79
|
-
analytics.topOrgs = buckets;
|
|
80
|
-
break;
|
|
81
|
-
case "journal":
|
|
82
|
-
analytics.topJournals = buckets;
|
|
83
|
-
break;
|
|
84
|
-
case "funders":
|
|
85
|
-
analytics.topFunders = buckets;
|
|
86
|
-
break;
|
|
87
|
-
case "category_for":
|
|
88
|
-
analytics.fieldClassification = buckets;
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
profile.analytics = analytics;
|
|
93
|
-
})());
|
|
94
|
-
}
|
|
95
|
-
// Phase 2: DSL entity footprint
|
|
96
|
-
if (args.includeEntityFootprint !== false) {
|
|
97
|
-
phases.push((async () => {
|
|
98
|
-
const counts = await Promise.all(FOOTPRINT_ENTITIES.map(async (entityType) => {
|
|
99
|
-
const dsl = client
|
|
100
|
-
.createQueryBuilder()
|
|
101
|
-
.search(entityType)
|
|
102
|
-
.for(args.concept)
|
|
103
|
-
.limit(1)
|
|
104
|
-
.build();
|
|
105
|
-
const response = await client.rawQuery(dsl);
|
|
106
|
-
const total = typeof response._stats?.total_count === "number"
|
|
107
|
-
? response._stats.total_count
|
|
108
|
-
: 0;
|
|
109
|
-
return { entityType, count: total };
|
|
110
|
-
}));
|
|
111
|
-
const entityFootprint = {};
|
|
112
|
-
for (const { entityType, count } of counts) {
|
|
113
|
-
entityFootprint[entityType] = count;
|
|
114
|
-
}
|
|
115
|
-
profile.entityFootprint = entityFootprint;
|
|
116
|
-
})());
|
|
117
|
-
}
|
|
118
|
-
await Promise.all(phases);
|
|
119
|
-
return formatToolResult({
|
|
120
|
-
found: true,
|
|
121
|
-
concept: args.concept,
|
|
122
|
-
profile,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
return formatErrorResult(error);
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=concept-profile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"concept-profile.js","sourceRoot":"","sources":["../../src/tools/concept-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +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 type { DimensionsClient } from "@digital-science/dimensions-dsl";
|
|
8
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
|
-
/**
|
|
10
|
-
* Registers the dataset_profile tool with the MCP server.
|
|
11
|
-
* @param server - MCP server instance
|
|
12
|
-
* @param client - Dimensions client instance
|
|
13
|
-
*/
|
|
14
|
-
export declare function registerDatasetProfileTools(server: McpServer, client: DimensionsClient): void;
|
|
15
|
-
//# sourceMappingURL=dataset-profile.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dataset-profile.d.ts","sourceRoot":"","sources":["../../src/tools/dataset-profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA6M7F"}
|