@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.
- package/CHANGELOG.md +4 -56
- 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/tools/dataset-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Special function tools for the MCP server.
|
|
3
|
-
* Provides tools for classify, extract_concepts, and similar documents search.
|
|
4
|
-
* @module mcp/tools/functions
|
|
5
|
-
*/
|
|
6
|
-
import { type DimensionsClient } from "@digital-science/dimensions-dsl";
|
|
7
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
-
/**
|
|
9
|
-
* Registers all special function tools with the MCP server.
|
|
10
|
-
* @param server - MCP server instance
|
|
11
|
-
* @param client - Dimensions client instance
|
|
12
|
-
*/
|
|
13
|
-
export declare function registerFunctionTools(server: McpServer, client: DimensionsClient): void;
|
|
14
|
-
//# sourceMappingURL=functions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../src/tools/functions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA2UvF"}
|
package/dist/tools/functions.js
DELETED
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Special function tools for the MCP server.
|
|
3
|
-
* Provides tools for classify, extract_concepts, and similar documents search.
|
|
4
|
-
* @module mcp/tools/functions
|
|
5
|
-
*/
|
|
6
|
-
import { CLASSIFICATION_SYSTEMS, } from "@digital-science/dimensions-dsl";
|
|
7
|
-
import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
-
import { z } from "zod";
|
|
9
|
-
import { withFieldAliases } from "../middleware/field-aliases.js";
|
|
10
|
-
import { formatErrorResult, formatToolResult, READ_ONLY_API_ANNOTATIONS } from "../utils.js";
|
|
11
|
-
/**
|
|
12
|
-
* Registers all special function tools with the MCP server.
|
|
13
|
-
* @param server - MCP server instance
|
|
14
|
-
* @param client - Dimensions client instance
|
|
15
|
-
*/
|
|
16
|
-
export function registerFunctionTools(server, client) {
|
|
17
|
-
// Classify Text
|
|
18
|
-
server.registerTool("classify_text", {
|
|
19
|
-
description: "Classify text (title and/or abstract) using Dimensions classification systems. " +
|
|
20
|
-
"Supports FOR (Fields of Research), SDG (Sustainable Development Goals), RCDC, " +
|
|
21
|
-
"HRCS, and other research classification taxonomies. Returns classification codes with names.",
|
|
22
|
-
inputSchema: {
|
|
23
|
-
title: z
|
|
24
|
-
.string()
|
|
25
|
-
.optional()
|
|
26
|
-
.describe("Document title for classification (at least title or abstract required)"),
|
|
27
|
-
abstract: z
|
|
28
|
-
.string()
|
|
29
|
-
.optional()
|
|
30
|
-
.describe("Document abstract for classification (at least title or abstract required)"),
|
|
31
|
-
system: z
|
|
32
|
-
.enum(CLASSIFICATION_SYSTEMS)
|
|
33
|
-
.describe("Classification system to use: FOR (Fields of Research), FOR_2020, " +
|
|
34
|
-
"SDG (Sustainable Development Goals), SDG_2021, RCDC, HRCS_HC, HRCS_RAC, " +
|
|
35
|
-
"HRA, BRA, ICRP_CSO, ICRP_CT, UOA"),
|
|
36
|
-
},
|
|
37
|
-
outputSchema: {
|
|
38
|
-
system: z.string().describe("Classification system used"),
|
|
39
|
-
classifications: z
|
|
40
|
-
.array(z.record(z.string(), z.unknown()))
|
|
41
|
-
.describe("Classification results"),
|
|
42
|
-
},
|
|
43
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
44
|
-
}, async (args) => {
|
|
45
|
-
if (!args.title && !args.abstract) {
|
|
46
|
-
throw new McpError(ErrorCode.InvalidParams, "At least one of title or abstract must be provided");
|
|
47
|
-
}
|
|
48
|
-
try {
|
|
49
|
-
const result = await client.classify({
|
|
50
|
-
title: args.title,
|
|
51
|
-
abstract: args.abstract,
|
|
52
|
-
system: args.system,
|
|
53
|
-
});
|
|
54
|
-
return formatToolResult({
|
|
55
|
-
system: args.system,
|
|
56
|
-
classifications: result[args.system],
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
return formatErrorResult(error);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
// Extract Concepts
|
|
64
|
-
server.registerTool("extract_concepts", {
|
|
65
|
-
description: "Extract research concepts from text using Dimensions natural language processing. " +
|
|
66
|
-
"Identifies key scientific concepts, terms, and topics from abstracts or descriptions.",
|
|
67
|
-
inputSchema: {
|
|
68
|
-
text: z
|
|
69
|
-
.string()
|
|
70
|
-
.min(1)
|
|
71
|
-
.describe("Text to extract concepts from (e.g., abstract, description)"),
|
|
72
|
-
return_scores: z
|
|
73
|
-
.boolean()
|
|
74
|
-
.optional()
|
|
75
|
-
.default(false)
|
|
76
|
-
.describe("Include relevance scores for each concept (0-1 scale)"),
|
|
77
|
-
},
|
|
78
|
-
outputSchema: {
|
|
79
|
-
concepts: z.array(z.record(z.string(), z.unknown())).describe("Extracted concepts"),
|
|
80
|
-
returnedWithScores: z.boolean().describe("Whether relevance scores are included"),
|
|
81
|
-
},
|
|
82
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
83
|
-
}, async (args) => {
|
|
84
|
-
try {
|
|
85
|
-
const result = await client.extractConcepts(args.text, {
|
|
86
|
-
returnScores: args.return_scores,
|
|
87
|
-
});
|
|
88
|
-
return formatToolResult({
|
|
89
|
-
concepts: result.extracted_concepts,
|
|
90
|
-
returnedWithScores: args.return_scores,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
return formatErrorResult(error);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
// Find Similar Publications
|
|
98
|
-
server.registerTool("find_similar_publications", {
|
|
99
|
-
description: "Find publications semantically similar to provided text. " +
|
|
100
|
-
"Uses the similar_documents() function to match publications based on meaning, " +
|
|
101
|
-
"not just keywords. Great for finding related research based on an abstract.",
|
|
102
|
-
inputSchema: {
|
|
103
|
-
text: z
|
|
104
|
-
.string()
|
|
105
|
-
.min(1)
|
|
106
|
-
.describe("Abstract or description text to find similar publications for"),
|
|
107
|
-
year_from: z
|
|
108
|
-
.number()
|
|
109
|
-
.int()
|
|
110
|
-
.optional()
|
|
111
|
-
.describe("Filter publications from this year (inclusive)"),
|
|
112
|
-
year_to: z
|
|
113
|
-
.number()
|
|
114
|
-
.int()
|
|
115
|
-
.optional()
|
|
116
|
-
.describe("Filter publications up to this year (inclusive)"),
|
|
117
|
-
limit: z
|
|
118
|
-
.number()
|
|
119
|
-
.int()
|
|
120
|
-
.min(1)
|
|
121
|
-
.max(1000)
|
|
122
|
-
.default(10)
|
|
123
|
-
.describe("Maximum results to return (max 1000)"),
|
|
124
|
-
fields: z
|
|
125
|
-
.array(z.string())
|
|
126
|
-
.optional()
|
|
127
|
-
.describe("Fields to return (e.g., ['id', 'title', 'doi', 'year', 'times_cited'])"),
|
|
128
|
-
},
|
|
129
|
-
outputSchema: {
|
|
130
|
-
totalCount: z.number().describe("Total matching records"),
|
|
131
|
-
returnedCount: z.number().describe("Records returned in this response"),
|
|
132
|
-
publications: z.array(z.record(z.string(), z.unknown())).describe("Similar publications"),
|
|
133
|
-
},
|
|
134
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
135
|
-
}, withFieldAliases({ entitySource: { kind: "static", entity: "publications" }, fieldArrayArgs: ["fields"] }, async (args) => {
|
|
136
|
-
try {
|
|
137
|
-
let builder = client.publications().forSimilar(args.text);
|
|
138
|
-
if (args.year_from !== undefined) {
|
|
139
|
-
builder = builder.where("year", ">=", args.year_from);
|
|
140
|
-
}
|
|
141
|
-
if (args.year_to !== undefined) {
|
|
142
|
-
builder = builder.where("year", "<=", args.year_to);
|
|
143
|
-
}
|
|
144
|
-
if (args.fields && args.fields.length > 0) {
|
|
145
|
-
builder = builder.fields(args.fields);
|
|
146
|
-
}
|
|
147
|
-
const result = await builder.limit(args.limit).execute();
|
|
148
|
-
return formatToolResult({
|
|
149
|
-
totalCount: result.totalCount,
|
|
150
|
-
returnedCount: result.data.length,
|
|
151
|
-
publications: result.data,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
return formatErrorResult(error);
|
|
156
|
-
}
|
|
157
|
-
}));
|
|
158
|
-
// Extract Affiliations
|
|
159
|
-
server.registerTool("extract_affiliations", {
|
|
160
|
-
description: "Resolve and disambiguate organization affiliations using Dimensions entity resolution. " +
|
|
161
|
-
"Takes freetext affiliation strings or structured organization data and returns matched " +
|
|
162
|
-
"organizations with GRID/ROR identifiers and confidence scores.",
|
|
163
|
-
inputSchema: {
|
|
164
|
-
affiliations: z
|
|
165
|
-
.array(z.object({
|
|
166
|
-
affiliation: z
|
|
167
|
-
.string()
|
|
168
|
-
.optional()
|
|
169
|
-
.describe("Freetext affiliation string (e.g., 'University of Oxford, UK')"),
|
|
170
|
-
name: z.string().optional().describe("Organization name"),
|
|
171
|
-
city: z.string().optional().describe("City"),
|
|
172
|
-
state: z.string().optional().describe("State/province"),
|
|
173
|
-
country: z.string().optional().describe("Country"),
|
|
174
|
-
}))
|
|
175
|
-
.min(1)
|
|
176
|
-
.describe("Array of affiliations to resolve. Each must have either 'affiliation' or 'name'"),
|
|
177
|
-
},
|
|
178
|
-
outputSchema: {
|
|
179
|
-
matchCount: z.number().describe("Number of resolved affiliations"),
|
|
180
|
-
affiliations: z.array(z.record(z.string(), z.unknown())).describe("Resolved affiliations"),
|
|
181
|
-
},
|
|
182
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
183
|
-
}, async (args) => {
|
|
184
|
-
try {
|
|
185
|
-
const result = await client.extractAffiliations(args.affiliations);
|
|
186
|
-
return formatToolResult({
|
|
187
|
-
matchCount: result.extracted_affiliations.length,
|
|
188
|
-
affiliations: result.extracted_affiliations,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
catch (error) {
|
|
192
|
-
return formatErrorResult(error);
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
// Extract Grants
|
|
196
|
-
server.registerTool("extract_grants", {
|
|
197
|
-
description: "Resolve grant numbers to Dimensions grant records. " +
|
|
198
|
-
"Takes a grant number and optional funder information to find matching grants " +
|
|
199
|
-
"with full metadata including funding amounts, dates, and funder details.",
|
|
200
|
-
inputSchema: {
|
|
201
|
-
grant_number: z.string().min(1).describe("Grant number to look up (e.g., 'R01HL117329')"),
|
|
202
|
-
fundref: z
|
|
203
|
-
.string()
|
|
204
|
-
.optional()
|
|
205
|
-
.describe("FundRef ID of the funder (e.g., '100000050' for NIH)"),
|
|
206
|
-
funder_name: z
|
|
207
|
-
.string()
|
|
208
|
-
.optional()
|
|
209
|
-
.describe("Funder name as alternative to FundRef ID (e.g., 'NIH')"),
|
|
210
|
-
},
|
|
211
|
-
outputSchema: {
|
|
212
|
-
matchCount: z.number().describe("Number of matched grants"),
|
|
213
|
-
grants: z.array(z.record(z.string(), z.unknown())).describe("Matched grant records"),
|
|
214
|
-
},
|
|
215
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
216
|
-
}, async (args) => {
|
|
217
|
-
try {
|
|
218
|
-
const result = await client.extractGrants({
|
|
219
|
-
grantNumber: args.grant_number,
|
|
220
|
-
fundref: args.fundref,
|
|
221
|
-
funderName: args.funder_name,
|
|
222
|
-
});
|
|
223
|
-
return formatToolResult({
|
|
224
|
-
matchCount: result.grant_id ? 1 : 0,
|
|
225
|
-
grants: result.grant_id ? [{ grant_id: result.grant_id }] : [],
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
catch (error) {
|
|
229
|
-
return formatErrorResult(error);
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
// Find Similar Grants
|
|
233
|
-
server.registerTool("find_similar_grants", {
|
|
234
|
-
description: "Find grants semantically similar to provided text. " +
|
|
235
|
-
"Uses the similar_documents() function to match grants based on meaning. " +
|
|
236
|
-
"Useful for identifying similar funding opportunities or research projects.",
|
|
237
|
-
inputSchema: {
|
|
238
|
-
text: z
|
|
239
|
-
.string()
|
|
240
|
-
.min(1)
|
|
241
|
-
.describe("Project description or abstract to find similar grants for"),
|
|
242
|
-
start_year_from: z
|
|
243
|
-
.number()
|
|
244
|
-
.int()
|
|
245
|
-
.optional()
|
|
246
|
-
.describe("Filter grants starting from this year (inclusive)"),
|
|
247
|
-
start_year_to: z
|
|
248
|
-
.number()
|
|
249
|
-
.int()
|
|
250
|
-
.optional()
|
|
251
|
-
.describe("Filter grants starting up to this year (inclusive)"),
|
|
252
|
-
limit: z
|
|
253
|
-
.number()
|
|
254
|
-
.int()
|
|
255
|
-
.min(1)
|
|
256
|
-
.max(1000)
|
|
257
|
-
.default(10)
|
|
258
|
-
.describe("Maximum results to return (max 1000)"),
|
|
259
|
-
fields: z
|
|
260
|
-
.array(z.string())
|
|
261
|
-
.optional()
|
|
262
|
-
.describe("Fields to return (e.g., ['id', 'title', 'funder_org_name', 'funding_usd'])"),
|
|
263
|
-
},
|
|
264
|
-
outputSchema: {
|
|
265
|
-
totalCount: z.number().describe("Total matching records"),
|
|
266
|
-
returnedCount: z.number().describe("Records returned in this response"),
|
|
267
|
-
grants: z.array(z.record(z.string(), z.unknown())).describe("Similar grants"),
|
|
268
|
-
},
|
|
269
|
-
annotations: READ_ONLY_API_ANNOTATIONS,
|
|
270
|
-
}, withFieldAliases({ entitySource: { kind: "static", entity: "grants" }, fieldArrayArgs: ["fields"] }, async (args) => {
|
|
271
|
-
try {
|
|
272
|
-
let builder = client.grants().forSimilar(args.text);
|
|
273
|
-
if (args.start_year_from !== undefined) {
|
|
274
|
-
builder = builder.where("start_year", ">=", args.start_year_from);
|
|
275
|
-
}
|
|
276
|
-
if (args.start_year_to !== undefined) {
|
|
277
|
-
builder = builder.where("start_year", "<=", args.start_year_to);
|
|
278
|
-
}
|
|
279
|
-
if (args.fields && args.fields.length > 0) {
|
|
280
|
-
builder = builder.fields(args.fields);
|
|
281
|
-
}
|
|
282
|
-
const result = await builder.limit(args.limit).execute();
|
|
283
|
-
return formatToolResult({
|
|
284
|
-
totalCount: result.totalCount,
|
|
285
|
-
returnedCount: result.data.length,
|
|
286
|
-
grants: result.data,
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
catch (error) {
|
|
290
|
-
return formatErrorResult(error);
|
|
291
|
-
}
|
|
292
|
-
}));
|
|
293
|
-
}
|
|
294
|
-
//# sourceMappingURL=functions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/tools/functions.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 { DimensionsClient } from "@digital-science/dimensions-dsl";
|
|
8
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.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/tools/impact-chain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiCzE;;;;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/tools/impact-chain.ts"],"names":[],"mappings":"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"}
|