mcp-dataverse 0.2.4 → 0.3.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/README.md +35 -25
- package/dist/doctor.d.ts +7 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +103 -0
- package/dist/doctor.js.map +1 -0
- package/dist/http-server.d.ts +3 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +61 -0
- package/dist/http-server.js.map +1 -0
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +111 -51
- package/dist/install.js.map +1 -1
- package/dist/server.js +112 -110
- package/dist/server.js.map +1 -1
- package/dist/tools/actions.tools.d.ts +36 -0
- package/dist/tools/actions.tools.d.ts.map +1 -1
- package/dist/tools/actions.tools.js +53 -18
- package/dist/tools/actions.tools.js.map +1 -1
- package/dist/tools/annotations.tools.d.ts +12 -0
- package/dist/tools/annotations.tools.d.ts.map +1 -1
- package/dist/tools/annotations.tools.js +24 -25
- package/dist/tools/annotations.tools.js.map +1 -1
- package/dist/tools/audit.tools.d.ts +6 -0
- package/dist/tools/audit.tools.d.ts.map +1 -1
- package/dist/tools/audit.tools.js +8 -8
- package/dist/tools/audit.tools.js.map +1 -1
- package/dist/tools/auth.tools.d.ts +6 -0
- package/dist/tools/auth.tools.d.ts.map +1 -1
- package/dist/tools/auth.tools.js +17 -13
- package/dist/tools/auth.tools.js.map +1 -1
- package/dist/tools/batch.tools.d.ts +6 -0
- package/dist/tools/batch.tools.d.ts.map +1 -1
- package/dist/tools/batch.tools.js +11 -8
- package/dist/tools/batch.tools.js.map +1 -1
- package/dist/tools/crud.tools.d.ts +36 -0
- package/dist/tools/crud.tools.d.ts.map +1 -1
- package/dist/tools/crud.tools.js +58 -52
- package/dist/tools/crud.tools.js.map +1 -1
- package/dist/tools/customization.tools.d.ts +18 -0
- package/dist/tools/customization.tools.d.ts.map +1 -1
- package/dist/tools/customization.tools.js +27 -29
- package/dist/tools/customization.tools.js.map +1 -1
- package/dist/tools/environment.tools.d.ts +12 -0
- package/dist/tools/environment.tools.d.ts.map +1 -1
- package/dist/tools/environment.tools.js +15 -6
- package/dist/tools/environment.tools.js.map +1 -1
- package/dist/tools/file.tools.d.ts +12 -0
- package/dist/tools/file.tools.d.ts.map +1 -1
- package/dist/tools/file.tools.js +29 -30
- package/dist/tools/file.tools.js.map +1 -1
- package/dist/tools/impersonate.tools.d.ts +6 -0
- package/dist/tools/impersonate.tools.d.ts.map +1 -1
- package/dist/tools/impersonate.tools.js +12 -12
- package/dist/tools/impersonate.tools.js.map +1 -1
- package/dist/tools/metadata.tools.d.ts +42 -0
- package/dist/tools/metadata.tools.d.ts.map +1 -1
- package/dist/tools/metadata.tools.js +92 -47
- package/dist/tools/metadata.tools.js.map +1 -1
- package/dist/tools/org.tools.d.ts +6 -0
- package/dist/tools/org.tools.d.ts.map +1 -1
- package/dist/tools/org.tools.js +10 -8
- package/dist/tools/org.tools.js.map +1 -1
- package/dist/tools/output.utils.d.ts +21 -0
- package/dist/tools/output.utils.d.ts.map +1 -0
- package/dist/tools/output.utils.js +31 -0
- package/dist/tools/output.utils.js.map +1 -0
- package/dist/tools/quality.tools.d.ts +6 -0
- package/dist/tools/quality.tools.d.ts.map +1 -1
- package/dist/tools/quality.tools.js +8 -3
- package/dist/tools/quality.tools.js.map +1 -1
- package/dist/tools/query.tools.d.ts +18 -0
- package/dist/tools/query.tools.d.ts.map +1 -1
- package/dist/tools/query.tools.js +42 -9
- package/dist/tools/query.tools.js.map +1 -1
- package/dist/tools/relations.tools.d.ts +12 -0
- package/dist/tools/relations.tools.d.ts.map +1 -1
- package/dist/tools/relations.tools.js +15 -20
- package/dist/tools/relations.tools.js.map +1 -1
- package/dist/tools/search.tools.d.ts +6 -0
- package/dist/tools/search.tools.d.ts.map +1 -1
- package/dist/tools/search.tools.js +11 -3
- package/dist/tools/search.tools.js.map +1 -1
- package/dist/tools/solution.tools.d.ts +18 -0
- package/dist/tools/solution.tools.d.ts.map +1 -1
- package/dist/tools/solution.tools.js +29 -14
- package/dist/tools/solution.tools.js.map +1 -1
- package/dist/tools/teams.tools.d.ts +6 -0
- package/dist/tools/teams.tools.d.ts.map +1 -1
- package/dist/tools/teams.tools.js +8 -8
- package/dist/tools/teams.tools.js.map +1 -1
- package/dist/tools/tool-registry.d.ts +34 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +31 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/trace.tools.d.ts +12 -0
- package/dist/tools/trace.tools.d.ts.map +1 -1
- package/dist/tools/trace.tools.js +17 -6
- package/dist/tools/trace.tools.js.map +1 -1
- package/dist/tools/tracking.tools.d.ts +6 -0
- package/dist/tools/tracking.tools.d.ts.map +1 -1
- package/dist/tools/tracking.tools.js +13 -3
- package/dist/tools/tracking.tools.js.map +1 -1
- package/dist/tools/users.tools.d.ts +12 -0
- package/dist/tools/users.tools.d.ts.map +1 -1
- package/dist/tools/users.tools.js +21 -22
- package/dist/tools/users.tools.js.map +1 -1
- package/dist/tools/views.tools.d.ts +6 -0
- package/dist/tools/views.tools.d.ts.map +1 -1
- package/dist/tools/views.tools.js +15 -16
- package/dist/tools/views.tools.js.map +1 -1
- package/dist/transport.d.ts +6 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +21 -0
- package/dist/transport.js.map +1 -0
- package/package.json +2 -1
- package/server.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.tools.d.ts","sourceRoot":"","sources":["../../src/tools/metadata.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"metadata.tools.d.ts","sourceRoot":"","sources":["../../src/tools/metadata.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAGzF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+JzB,CAAC;AA8CF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAuI7D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { formatData, formatList } from "./output.utils.js";
|
|
2
3
|
export const metadataTools = [
|
|
3
4
|
{
|
|
4
5
|
name: "dataverse_list_tables",
|
|
@@ -13,6 +14,12 @@ export const metadataTools = [
|
|
|
13
14
|
},
|
|
14
15
|
required: [],
|
|
15
16
|
},
|
|
17
|
+
annotations: {
|
|
18
|
+
readOnlyHint: true,
|
|
19
|
+
destructiveHint: false,
|
|
20
|
+
idempotentHint: true,
|
|
21
|
+
openWorldHint: true,
|
|
22
|
+
},
|
|
16
23
|
},
|
|
17
24
|
{
|
|
18
25
|
name: "dataverse_get_table_metadata",
|
|
@@ -31,6 +38,12 @@ export const metadataTools = [
|
|
|
31
38
|
},
|
|
32
39
|
required: ["logicalName"],
|
|
33
40
|
},
|
|
41
|
+
annotations: {
|
|
42
|
+
readOnlyHint: true,
|
|
43
|
+
destructiveHint: false,
|
|
44
|
+
idempotentHint: true,
|
|
45
|
+
openWorldHint: true,
|
|
46
|
+
},
|
|
34
47
|
},
|
|
35
48
|
{
|
|
36
49
|
name: "dataverse_get_relationships",
|
|
@@ -50,6 +63,12 @@ export const metadataTools = [
|
|
|
50
63
|
},
|
|
51
64
|
required: ["logicalName"],
|
|
52
65
|
},
|
|
66
|
+
annotations: {
|
|
67
|
+
readOnlyHint: true,
|
|
68
|
+
destructiveHint: false,
|
|
69
|
+
idempotentHint: true,
|
|
70
|
+
openWorldHint: true,
|
|
71
|
+
},
|
|
53
72
|
},
|
|
54
73
|
{
|
|
55
74
|
name: "dataverse_list_global_option_sets",
|
|
@@ -59,6 +78,12 @@ export const metadataTools = [
|
|
|
59
78
|
properties: {},
|
|
60
79
|
required: [],
|
|
61
80
|
},
|
|
81
|
+
annotations: {
|
|
82
|
+
readOnlyHint: true,
|
|
83
|
+
destructiveHint: false,
|
|
84
|
+
idempotentHint: true,
|
|
85
|
+
openWorldHint: true,
|
|
86
|
+
},
|
|
62
87
|
},
|
|
63
88
|
{
|
|
64
89
|
name: "dataverse_get_option_set",
|
|
@@ -73,6 +98,12 @@ export const metadataTools = [
|
|
|
73
98
|
},
|
|
74
99
|
required: ["name"],
|
|
75
100
|
},
|
|
101
|
+
annotations: {
|
|
102
|
+
readOnlyHint: true,
|
|
103
|
+
destructiveHint: false,
|
|
104
|
+
idempotentHint: true,
|
|
105
|
+
openWorldHint: true,
|
|
106
|
+
},
|
|
76
107
|
},
|
|
77
108
|
{
|
|
78
109
|
name: "dataverse_get_entity_key",
|
|
@@ -87,6 +118,12 @@ export const metadataTools = [
|
|
|
87
118
|
},
|
|
88
119
|
required: ["tableName"],
|
|
89
120
|
},
|
|
121
|
+
annotations: {
|
|
122
|
+
readOnlyHint: true,
|
|
123
|
+
destructiveHint: false,
|
|
124
|
+
idempotentHint: true,
|
|
125
|
+
openWorldHint: true,
|
|
126
|
+
},
|
|
90
127
|
},
|
|
91
128
|
{
|
|
92
129
|
name: "dataverse_get_attribute_option_set",
|
|
@@ -105,6 +142,12 @@ export const metadataTools = [
|
|
|
105
142
|
},
|
|
106
143
|
required: ["entityLogicalName", "attributeLogicalName"],
|
|
107
144
|
},
|
|
145
|
+
annotations: {
|
|
146
|
+
readOnlyHint: true,
|
|
147
|
+
destructiveHint: false,
|
|
148
|
+
idempotentHint: true,
|
|
149
|
+
openWorldHint: true,
|
|
150
|
+
},
|
|
108
151
|
},
|
|
109
152
|
];
|
|
110
153
|
const GetTableMetadataInput = z.object({
|
|
@@ -150,16 +193,21 @@ export async function handleMetadataTool(name, args, client) {
|
|
|
150
193
|
const { includeSystemTables = false } = ListTablesInput.parse(args ?? {});
|
|
151
194
|
const customOnly = !includeSystemTables;
|
|
152
195
|
const result = await client.listTables(customOnly);
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
196
|
+
const tables = Array.isArray(result) ? result : [];
|
|
197
|
+
return formatList(`tables (${customOnly ? "custom only" : "including system"})`, tables, [
|
|
198
|
+
"Use dataverse_get_table_metadata to inspect a specific table's columns and types",
|
|
199
|
+
]);
|
|
156
200
|
}
|
|
157
201
|
case "dataverse_get_table_metadata": {
|
|
158
202
|
const { logicalName, includeAttributes } = GetTableMetadataInput.parse(args);
|
|
159
203
|
const result = await client.getTableMetadata(logicalName, includeAttributes);
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
204
|
+
const attributeCount = Array.isArray(result?.Attributes)
|
|
205
|
+
? result.Attributes.length
|
|
206
|
+
: 0;
|
|
207
|
+
return formatData(`Metadata for ${logicalName}: ${attributeCount} attributes`, result, [
|
|
208
|
+
"Use dataverse_query to read records from this table",
|
|
209
|
+
"Use dataverse_get_relationships to see related tables",
|
|
210
|
+
]);
|
|
163
211
|
}
|
|
164
212
|
case "dataverse_get_relationships": {
|
|
165
213
|
const { logicalName, relationshipType } = GetRelationshipsInput.parse(args);
|
|
@@ -171,62 +219,59 @@ export async function handleMetadataTool(name, args, client) {
|
|
|
171
219
|
r.ReferencingEntity?.toLowerCase() === lname);
|
|
172
220
|
const manyToMany = rawRelationships.filter((r) => r.RelationshipType === "ManyToManyRelationship");
|
|
173
221
|
const includeAll = !relationshipType || relationshipType === "All";
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
222
|
+
const allRels = [
|
|
223
|
+
...(includeAll || relationshipType === "OneToMany" ? oneToMany : []),
|
|
224
|
+
...(includeAll || relationshipType === "ManyToOne" ? manyToOne : []),
|
|
225
|
+
...(includeAll || relationshipType === "ManyToMany" ? manyToMany : []),
|
|
226
|
+
];
|
|
227
|
+
return formatData(`${allRels.length} relationships found for ${logicalName}`, {
|
|
228
|
+
tableName: logicalName,
|
|
229
|
+
oneToMany: includeAll || relationshipType === "OneToMany"
|
|
230
|
+
? oneToMany
|
|
231
|
+
: undefined,
|
|
232
|
+
manyToOne: includeAll || relationshipType === "ManyToOne"
|
|
233
|
+
? manyToOne
|
|
234
|
+
: undefined,
|
|
235
|
+
manyToMany: includeAll || relationshipType === "ManyToMany"
|
|
236
|
+
? manyToMany
|
|
237
|
+
: undefined,
|
|
238
|
+
}, [
|
|
239
|
+
"Use dataverse_associate or dataverse_disassociate to manage N:N relationships",
|
|
240
|
+
]);
|
|
193
241
|
}
|
|
194
242
|
case "dataverse_list_global_option_sets": {
|
|
195
243
|
const result = await client.listGlobalOptionSets();
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
244
|
+
const items = Array.isArray(result) ? result : [];
|
|
245
|
+
return formatList("global option sets", items, [
|
|
246
|
+
"Use dataverse_get_option_set with a name to see the values",
|
|
247
|
+
]);
|
|
199
248
|
}
|
|
200
249
|
case "dataverse_get_option_set": {
|
|
201
250
|
const { name: optionSetName } = GetOptionSetInput.parse(args);
|
|
202
251
|
const result = await client.getOptionSet(optionSetName);
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
252
|
+
const options = Array.isArray(result?.Options)
|
|
253
|
+
? result.Options
|
|
254
|
+
: [];
|
|
255
|
+
return formatData(`Option set '${optionSetName}': ${options.length} options`, result, [
|
|
256
|
+
"Use these values in $filter expressions or when creating/updating records",
|
|
257
|
+
]);
|
|
206
258
|
}
|
|
207
259
|
case "dataverse_get_entity_key": {
|
|
208
260
|
const { tableName } = GetEntityKeyInput.parse(args);
|
|
209
261
|
const keys = await client.getEntityKeys(tableName);
|
|
210
|
-
return {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
type: "text",
|
|
214
|
-
text: JSON.stringify({ tableName, keys, count: keys.length }, null, 2),
|
|
215
|
-
},
|
|
216
|
-
],
|
|
217
|
-
};
|
|
262
|
+
return formatData(`${keys.length} alternate keys for ${tableName}`, { tableName, keys, count: keys.length }, [
|
|
263
|
+
"Use dataverse_upsert with these keys for create-or-update operations",
|
|
264
|
+
]);
|
|
218
265
|
}
|
|
219
266
|
case "dataverse_get_attribute_option_set": {
|
|
220
267
|
const { entityLogicalName, attributeLogicalName } = GetAttributeOptionSetInput.parse(args);
|
|
221
268
|
const result = await client.getAttributeOptionSet(entityLogicalName, attributeLogicalName);
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
],
|
|
229
|
-
};
|
|
269
|
+
const options = Array.isArray(result?.Options)
|
|
270
|
+
? result.Options
|
|
271
|
+
: [];
|
|
272
|
+
return formatData(`Attribute '${attributeLogicalName}' on '${entityLogicalName}': ${options.length} options`, result, [
|
|
273
|
+
"Use these integer values in $filter or when creating/updating records",
|
|
274
|
+
]);
|
|
230
275
|
}
|
|
231
276
|
default:
|
|
232
277
|
throw new Error(`Unknown metadata tool: ${name}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.tools.js","sourceRoot":"","sources":["../../src/tools/metadata.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"metadata.tools.js","sourceRoot":"","sources":["../../src/tools/metadata.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,12 @@ export declare const orgTools: {
|
|
|
16
16
|
};
|
|
17
17
|
required: never[];
|
|
18
18
|
};
|
|
19
|
+
annotations: {
|
|
20
|
+
readOnlyHint: boolean;
|
|
21
|
+
destructiveHint: boolean;
|
|
22
|
+
idempotentHint: boolean;
|
|
23
|
+
openWorldHint: boolean;
|
|
24
|
+
};
|
|
19
25
|
}[];
|
|
20
26
|
export declare function handleOrgTool(name: string, args: unknown, client: DataverseAdvancedClient): Promise<{
|
|
21
27
|
content: Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org.tools.d.ts","sourceRoot":"","sources":["../../src/tools/org.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"org.tools.d.ts","sourceRoot":"","sources":["../../src/tools/org.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAQzF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;GA0BpB,CAAC;AAUF,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwC7D"}
|
package/dist/tools/org.tools.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { formatData } from "./output.utils.js";
|
|
2
3
|
const ListBusinessUnitsInput = z.object({
|
|
3
4
|
top: z.number().int().positive().max(200).optional().default(50),
|
|
4
5
|
includeDisabled: z.boolean().optional().default(false),
|
|
@@ -21,6 +22,12 @@ export const orgTools = [
|
|
|
21
22
|
},
|
|
22
23
|
required: [],
|
|
23
24
|
},
|
|
25
|
+
annotations: {
|
|
26
|
+
readOnlyHint: true,
|
|
27
|
+
destructiveHint: false,
|
|
28
|
+
idempotentHint: true,
|
|
29
|
+
openWorldHint: true,
|
|
30
|
+
},
|
|
24
31
|
},
|
|
25
32
|
];
|
|
26
33
|
export async function handleOrgTool(name, args, client) {
|
|
@@ -47,14 +54,9 @@ export async function handleOrgTool(name, args, client) {
|
|
|
47
54
|
isDisabled: bu.isdisabled,
|
|
48
55
|
createdOn: bu.createdon,
|
|
49
56
|
}));
|
|
50
|
-
return {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
type: "text",
|
|
54
|
-
text: JSON.stringify({ businessUnits: units, count: units.length }, null, 2),
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
};
|
|
57
|
+
return formatData(`${units.length} business units found`, { businessUnits: units, count: units.length }, [
|
|
58
|
+
"Use business unit IDs for user management or security role assignment",
|
|
59
|
+
]);
|
|
58
60
|
}
|
|
59
61
|
default:
|
|
60
62
|
throw new Error(`Unknown org tool: ${name}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org.tools.js","sourceRoot":"","sources":["../../src/tools/org.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"org.tools.js","sourceRoot":"","sources":["../../src/tools/org.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAChE,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACvD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB;QACE,IAAI,EAAE,+BAA+B;QACrC,WAAW,EACT,uLAAuL;QACzL,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iDAAiD;iBAC/D;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,iDAAiD;iBAC/D;aACF;YACD,QAAQ,EAAE,EAAE;SACb;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF;CACF,CAAC;AAUF,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,IAAa,EACb,MAA+B;IAE/B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,+BAA+B,CAAC,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAE1E,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC;YAEnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAe,eAAe,EAAE;gBAC/D,MAAM,EAAE;oBACN,gBAAgB;oBAChB,MAAM;oBACN,sBAAsB;oBACtB,YAAY;oBACZ,WAAW;iBACZ;gBACD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,OAAO,EAAE,UAAU;gBACnB,GAAG;aACJ,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtC,EAAE,EAAE,EAAE,CAAC,cAAc;gBACrB,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,IAAI,IAAI;gBACrD,UAAU,EAAE,EAAE,CAAC,UAAU;gBACzB,SAAS,EAAE,EAAE,CAAC,SAAS;aACxB,CAAC,CAAC,CAAC;YAEJ,OAAO,UAAU,CACf,GAAG,KAAK,CAAC,MAAM,uBAAuB,EACtC,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAC7C;gBACE,uEAAuE;aACxE,CACF,CAAC;QACJ,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ToolResult } from "./tool-registry.js";
|
|
2
|
+
interface StructuredOutput {
|
|
3
|
+
summary: string;
|
|
4
|
+
data: unknown;
|
|
5
|
+
suggestions?: string[] | undefined;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Wraps a structured output into the MCP tool result format.
|
|
9
|
+
* Every tool handler should use this for consistent, LLM-friendly responses.
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatToolOutput(output: StructuredOutput): ToolResult;
|
|
12
|
+
/**
|
|
13
|
+
* Convenience: wrap raw data with a summary line and optional suggestions.
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatData(summary: string, data: unknown, suggestions?: string[]): ToolResult;
|
|
16
|
+
/**
|
|
17
|
+
* Format a count-based result (list of items).
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatList(label: string, items: unknown[], suggestions?: string[]): ToolResult;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=output.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.utils.d.ts","sourceRoot":"","sources":["../../src/tools/output.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CASrE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,EACb,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,UAAU,CAEZ;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EAAE,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,UAAU,CAMZ"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wraps a structured output into the MCP tool result format.
|
|
3
|
+
* Every tool handler should use this for consistent, LLM-friendly responses.
|
|
4
|
+
*/
|
|
5
|
+
export function formatToolOutput(output) {
|
|
6
|
+
return {
|
|
7
|
+
content: [
|
|
8
|
+
{
|
|
9
|
+
type: "text",
|
|
10
|
+
text: JSON.stringify(output, null, 2),
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Convenience: wrap raw data with a summary line and optional suggestions.
|
|
17
|
+
*/
|
|
18
|
+
export function formatData(summary, data, suggestions) {
|
|
19
|
+
return formatToolOutput({ summary, data, suggestions });
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Format a count-based result (list of items).
|
|
23
|
+
*/
|
|
24
|
+
export function formatList(label, items, suggestions) {
|
|
25
|
+
return formatToolOutput({
|
|
26
|
+
summary: `${items.length} ${label} found.`,
|
|
27
|
+
data: items,
|
|
28
|
+
suggestions,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=output.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.utils.js","sourceRoot":"","sources":["../../src/tools/output.utils.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,IAAa,EACb,WAAsB;IAEtB,OAAO,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,KAAa,EACb,KAAgB,EAChB,WAAsB;IAEtB,OAAO,gBAAgB,CAAC;QACtB,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,SAAS;QAC1C,IAAI,EAAE,KAAK;QACX,WAAW;KACZ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -20,6 +20,12 @@ export declare const qualityTools: {
|
|
|
20
20
|
};
|
|
21
21
|
required: string[];
|
|
22
22
|
};
|
|
23
|
+
annotations: {
|
|
24
|
+
readOnlyHint: boolean;
|
|
25
|
+
destructiveHint: boolean;
|
|
26
|
+
idempotentHint: boolean;
|
|
27
|
+
openWorldHint: boolean;
|
|
28
|
+
};
|
|
23
29
|
}[];
|
|
24
30
|
export declare function handleQualityTool(name: string, args: unknown, client: DataverseAdvancedClient): Promise<{
|
|
25
31
|
content: Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.tools.d.ts","sourceRoot":"","sources":["../../src/tools/quality.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"quality.tools.d.ts","sourceRoot":"","sources":["../../src/tools/quality.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAGzF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BxB,CAAC;AAWF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6C7D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { formatData } from "./output.utils.js";
|
|
2
3
|
export const qualityTools = [
|
|
3
4
|
{
|
|
4
5
|
name: "dataverse_detect_duplicates",
|
|
@@ -21,6 +22,12 @@ export const qualityTools = [
|
|
|
21
22
|
},
|
|
22
23
|
required: ["entityLogicalName", "record"],
|
|
23
24
|
},
|
|
25
|
+
annotations: {
|
|
26
|
+
readOnlyHint: true,
|
|
27
|
+
destructiveHint: false,
|
|
28
|
+
idempotentHint: true,
|
|
29
|
+
openWorldHint: true,
|
|
30
|
+
},
|
|
24
31
|
},
|
|
25
32
|
];
|
|
26
33
|
const DetectDuplicatesInput = z.object({
|
|
@@ -60,9 +67,7 @@ export async function handleQualityTool(name, args, client) {
|
|
|
60
67
|
return clean;
|
|
61
68
|
}),
|
|
62
69
|
};
|
|
63
|
-
return {
|
|
64
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
65
|
-
};
|
|
70
|
+
return formatData(`Duplicate detection: ${result.hasDuplicates ? "duplicates found" : "no duplicates"}`, result, ["Review duplicate records before creating new ones"]);
|
|
66
71
|
}
|
|
67
72
|
default:
|
|
68
73
|
throw new Error(`Unknown quality tool: ${name}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.tools.js","sourceRoot":"","sources":["../../src/tools/quality.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"quality.tools.js","sourceRoot":"","sources":["../../src/tools/quality.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,12 @@ export declare const queryTools: ({
|
|
|
45
45
|
};
|
|
46
46
|
required: string[];
|
|
47
47
|
};
|
|
48
|
+
annotations: {
|
|
49
|
+
readOnlyHint: boolean;
|
|
50
|
+
destructiveHint: boolean;
|
|
51
|
+
idempotentHint: boolean;
|
|
52
|
+
openWorldHint: boolean;
|
|
53
|
+
};
|
|
48
54
|
} | {
|
|
49
55
|
name: string;
|
|
50
56
|
description: string;
|
|
@@ -70,6 +76,12 @@ export declare const queryTools: ({
|
|
|
70
76
|
};
|
|
71
77
|
required: string[];
|
|
72
78
|
};
|
|
79
|
+
annotations: {
|
|
80
|
+
readOnlyHint: boolean;
|
|
81
|
+
destructiveHint: boolean;
|
|
82
|
+
idempotentHint: boolean;
|
|
83
|
+
openWorldHint: boolean;
|
|
84
|
+
};
|
|
73
85
|
} | {
|
|
74
86
|
name: string;
|
|
75
87
|
description: string;
|
|
@@ -110,6 +122,12 @@ export declare const queryTools: ({
|
|
|
110
122
|
};
|
|
111
123
|
required: string[];
|
|
112
124
|
};
|
|
125
|
+
annotations: {
|
|
126
|
+
readOnlyHint: boolean;
|
|
127
|
+
destructiveHint: boolean;
|
|
128
|
+
idempotentHint: boolean;
|
|
129
|
+
openWorldHint: boolean;
|
|
130
|
+
};
|
|
113
131
|
})[];
|
|
114
132
|
export declare function handleQueryTool(name: string, args: unknown, client: DataverseAdvancedClient): Promise<{
|
|
115
133
|
content: Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.tools.d.ts","sourceRoot":"","sources":["../../src/tools/query.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"query.tools.d.ts","sourceRoot":"","sources":["../../src/tools/query.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAwBzF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+GtB,CAAC;AAgCF,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6F7D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { safeEntitySetName } from "./validation.utils.js";
|
|
3
|
+
import { formatData } from "./output.utils.js";
|
|
3
4
|
/**
|
|
4
5
|
* Dataverse entities whose EntitySetName does not follow the simple <logicalName>+s pattern.
|
|
5
6
|
* Used to resolve the correct entity set name when auto-extracting from FetchXML.
|
|
@@ -62,6 +63,12 @@ export const queryTools = [
|
|
|
62
63
|
},
|
|
63
64
|
required: ["entitySetName"],
|
|
64
65
|
},
|
|
66
|
+
annotations: {
|
|
67
|
+
readOnlyHint: true,
|
|
68
|
+
destructiveHint: false,
|
|
69
|
+
idempotentHint: true,
|
|
70
|
+
openWorldHint: true,
|
|
71
|
+
},
|
|
65
72
|
},
|
|
66
73
|
{
|
|
67
74
|
name: "dataverse_execute_fetchxml",
|
|
@@ -80,6 +87,12 @@ export const queryTools = [
|
|
|
80
87
|
},
|
|
81
88
|
required: ["fetchXml"],
|
|
82
89
|
},
|
|
90
|
+
annotations: {
|
|
91
|
+
readOnlyHint: true,
|
|
92
|
+
destructiveHint: false,
|
|
93
|
+
idempotentHint: true,
|
|
94
|
+
openWorldHint: true,
|
|
95
|
+
},
|
|
83
96
|
},
|
|
84
97
|
{
|
|
85
98
|
name: "dataverse_retrieve_multiple_with_paging",
|
|
@@ -102,6 +115,12 @@ export const queryTools = [
|
|
|
102
115
|
},
|
|
103
116
|
required: ["entitySetName"],
|
|
104
117
|
},
|
|
118
|
+
annotations: {
|
|
119
|
+
readOnlyHint: true,
|
|
120
|
+
destructiveHint: false,
|
|
121
|
+
idempotentHint: true,
|
|
122
|
+
openWorldHint: true,
|
|
123
|
+
},
|
|
105
124
|
},
|
|
106
125
|
];
|
|
107
126
|
const QueryInput = z.object({
|
|
@@ -149,9 +168,11 @@ export async function handleQueryTool(name, args, client) {
|
|
|
149
168
|
if (params.apply !== undefined)
|
|
150
169
|
queryOptions.apply = params.apply;
|
|
151
170
|
const result = await client.query(params.entitySetName, queryOptions);
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
171
|
+
const records = Array.isArray(result?.value) ? result.value : [];
|
|
172
|
+
return formatData(`${records.length} records returned from ${params.entitySetName}`, result, [
|
|
173
|
+
"Use dataverse_execute_fetchxml for complex joins or aggregations",
|
|
174
|
+
"Add $select to minimize payload",
|
|
175
|
+
]);
|
|
155
176
|
}
|
|
156
177
|
case "dataverse_execute_fetchxml": {
|
|
157
178
|
const parsed = FetchXmlInput.parse(args);
|
|
@@ -177,9 +198,15 @@ export async function handleQueryTool(name, args, client) {
|
|
|
177
198
|
IRREGULAR_ENTITY_SET_NAMES[logicalName] ?? logicalName + "s";
|
|
178
199
|
}
|
|
179
200
|
const result = await client.executeFetchXml(entitySetName, fetchXml);
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
201
|
+
const records = Array.isArray(result)
|
|
202
|
+
? result
|
|
203
|
+
: Array.isArray(result?.value)
|
|
204
|
+
? result.value
|
|
205
|
+
: [];
|
|
206
|
+
return formatData(`${records.length} records returned via FetchXML`, result, [
|
|
207
|
+
"Use dataverse_query for simple OData reads",
|
|
208
|
+
"Add page/count attributes for large result sets",
|
|
209
|
+
]);
|
|
183
210
|
}
|
|
184
211
|
case "dataverse_retrieve_multiple_with_paging": {
|
|
185
212
|
const params = RetrieveWithPagingInput.parse(args);
|
|
@@ -195,9 +222,15 @@ export async function handleQueryTool(name, args, client) {
|
|
|
195
222
|
if (params.maxTotal !== undefined)
|
|
196
223
|
pagingOptions.maxTotal = params.maxTotal;
|
|
197
224
|
const result = await client.queryWithPaging(params.entitySetName, pagingOptions);
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
225
|
+
const totalRetrieved = result?.totalRetrieved ??
|
|
226
|
+
(Array.isArray(result?.value)
|
|
227
|
+
? result.value.length
|
|
228
|
+
: 0);
|
|
229
|
+
const pages = result?.pages ?? 1;
|
|
230
|
+
return formatData(`${totalRetrieved} records retrieved across ${pages} pages from ${params.entitySetName}`, result, [
|
|
231
|
+
"Set maxTotal to limit retrieval",
|
|
232
|
+
"Use $select to minimize payload size",
|
|
233
|
+
]);
|
|
201
234
|
}
|
|
202
235
|
default:
|
|
203
236
|
throw new Error(`Unknown query tool: ${name}`);
|