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