@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
|
@@ -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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"}
|
package/dist/mcp/tools/kwq.d.ts
DELETED
|
@@ -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"}
|
package/dist/mcp/tools/kwq.js
DELETED
|
@@ -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"}
|