mcp-dataverse 0.1.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/.env.example +15 -0
- package/CAPABILITIES.md +992 -0
- package/LICENSE +21 -0
- package/README.md +277 -0
- package/config.example.json +11 -0
- package/dist/auth/auth-provider.factory.d.ts +4 -0
- package/dist/auth/auth-provider.factory.d.ts.map +1 -0
- package/dist/auth/auth-provider.factory.js +15 -0
- package/dist/auth/auth-provider.factory.js.map +1 -0
- package/dist/auth/auth-provider.interface.d.ts +21 -0
- package/dist/auth/auth-provider.interface.d.ts.map +1 -0
- package/dist/auth/auth-provider.interface.js +2 -0
- package/dist/auth/auth-provider.interface.js.map +1 -0
- package/dist/auth/msal-auth-provider.d.ts +14 -0
- package/dist/auth/msal-auth-provider.d.ts.map +1 -0
- package/dist/auth/msal-auth-provider.js +62 -0
- package/dist/auth/msal-auth-provider.js.map +1 -0
- package/dist/auth/pac-auth-provider.d.ts +19 -0
- package/dist/auth/pac-auth-provider.d.ts.map +1 -0
- package/dist/auth/pac-auth-provider.js +153 -0
- package/dist/auth/pac-auth-provider.js.map +1 -0
- package/dist/config/config.loader.d.ts +3 -0
- package/dist/config/config.loader.d.ts.map +1 -0
- package/dist/config/config.loader.js +52 -0
- package/dist/config/config.loader.js.map +1 -0
- package/dist/config/config.schema.d.ts +34 -0
- package/dist/config/config.schema.d.ts.map +1 -0
- package/dist/config/config.schema.js +25 -0
- package/dist/config/config.schema.js.map +1 -0
- package/dist/dataverse/dataverse-client-advanced.d.ts +47 -0
- package/dist/dataverse/dataverse-client-advanced.d.ts.map +1 -0
- package/dist/dataverse/dataverse-client-advanced.js +147 -0
- package/dist/dataverse/dataverse-client-advanced.js.map +1 -0
- package/dist/dataverse/dataverse-client.d.ts +49 -0
- package/dist/dataverse/dataverse-client.d.ts.map +1 -0
- package/dist/dataverse/dataverse-client.js +313 -0
- package/dist/dataverse/dataverse-client.js.map +1 -0
- package/dist/dataverse/dataverse-client.metadata.d.ts +40 -0
- package/dist/dataverse/dataverse-client.metadata.d.ts.map +1 -0
- package/dist/dataverse/dataverse-client.metadata.js +121 -0
- package/dist/dataverse/dataverse-client.metadata.js.map +1 -0
- package/dist/dataverse/dataverse-client.utils.d.ts +14 -0
- package/dist/dataverse/dataverse-client.utils.d.ts.map +1 -0
- package/dist/dataverse/dataverse-client.utils.js +65 -0
- package/dist/dataverse/dataverse-client.utils.js.map +1 -0
- package/dist/dataverse/http-client.d.ts +36 -0
- package/dist/dataverse/http-client.d.ts.map +1 -0
- package/dist/dataverse/http-client.js +103 -0
- package/dist/dataverse/http-client.js.map +1 -0
- package/dist/dataverse/types.d.ts +68 -0
- package/dist/dataverse/types.d.ts.map +1 -0
- package/dist/dataverse/types.js +2 -0
- package/dist/dataverse/types.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +165 -0
- package/dist/server.js.map +1 -0
- package/dist/setup-auth.d.ts +2 -0
- package/dist/setup-auth.d.ts.map +1 -0
- package/dist/setup-auth.js +29 -0
- package/dist/setup-auth.js.map +1 -0
- package/dist/tools/actions.tools.d.ts +170 -0
- package/dist/tools/actions.tools.d.ts.map +1 -0
- package/dist/tools/actions.tools.js +179 -0
- package/dist/tools/actions.tools.js.map +1 -0
- package/dist/tools/annotations.tools.d.ts +82 -0
- package/dist/tools/annotations.tools.d.ts.map +1 -0
- package/dist/tools/annotations.tools.js +180 -0
- package/dist/tools/annotations.tools.js.map +1 -0
- package/dist/tools/audit.tools.d.ts +45 -0
- package/dist/tools/audit.tools.d.ts.map +1 -0
- package/dist/tools/audit.tools.js +163 -0
- package/dist/tools/audit.tools.js.map +1 -0
- package/dist/tools/auth.tools.d.ts +17 -0
- package/dist/tools/auth.tools.d.ts.map +1 -0
- package/dist/tools/auth.tools.js +30 -0
- package/dist/tools/auth.tools.js.map +1 -0
- package/dist/tools/batch.tools.d.ts +45 -0
- package/dist/tools/batch.tools.d.ts.map +1 -0
- package/dist/tools/batch.tools.js +71 -0
- package/dist/tools/batch.tools.js.map +1 -0
- package/dist/tools/crud.tools.d.ts +206 -0
- package/dist/tools/crud.tools.d.ts.map +1 -0
- package/dist/tools/crud.tools.js +213 -0
- package/dist/tools/crud.tools.js.map +1 -0
- package/dist/tools/customization.tools.d.ts +75 -0
- package/dist/tools/customization.tools.d.ts.map +1 -0
- package/dist/tools/customization.tools.js +187 -0
- package/dist/tools/customization.tools.js.map +1 -0
- package/dist/tools/environment.tools.d.ts +40 -0
- package/dist/tools/environment.tools.d.ts.map +1 -0
- package/dist/tools/environment.tools.js +145 -0
- package/dist/tools/environment.tools.js.map +1 -0
- package/dist/tools/file.tools.d.ts +61 -0
- package/dist/tools/file.tools.d.ts.map +1 -0
- package/dist/tools/file.tools.js +142 -0
- package/dist/tools/file.tools.js.map +1 -0
- package/dist/tools/impersonate.tools.d.ts +37 -0
- package/dist/tools/impersonate.tools.d.ts.map +1 -0
- package/dist/tools/impersonate.tools.js +85 -0
- package/dist/tools/impersonate.tools.js.map +1 -0
- package/dist/tools/metadata.tools.d.ts +156 -0
- package/dist/tools/metadata.tools.d.ts.map +1 -0
- package/dist/tools/metadata.tools.js +200 -0
- package/dist/tools/metadata.tools.js.map +1 -0
- package/dist/tools/org.tools.d.ts +26 -0
- package/dist/tools/org.tools.d.ts.map +1 -0
- package/dist/tools/org.tools.js +57 -0
- package/dist/tools/org.tools.js.map +1 -0
- package/dist/tools/quality.tools.d.ts +30 -0
- package/dist/tools/quality.tools.d.ts.map +1 -0
- package/dist/tools/quality.tools.js +69 -0
- package/dist/tools/quality.tools.js.map +1 -0
- package/dist/tools/query.tools.d.ts +120 -0
- package/dist/tools/query.tools.d.ts.map +1 -0
- package/dist/tools/query.tools.js +182 -0
- package/dist/tools/query.tools.js.map +1 -0
- package/dist/tools/relations.tools.d.ts +65 -0
- package/dist/tools/relations.tools.d.ts.map +1 -0
- package/dist/tools/relations.tools.js +64 -0
- package/dist/tools/relations.tools.js.map +1 -0
- package/dist/tools/search.tools.d.ts +68 -0
- package/dist/tools/search.tools.d.ts.map +1 -0
- package/dist/tools/search.tools.js +134 -0
- package/dist/tools/search.tools.js.map +1 -0
- package/dist/tools/solution.tools.d.ts +95 -0
- package/dist/tools/solution.tools.d.ts.map +1 -0
- package/dist/tools/solution.tools.js +130 -0
- package/dist/tools/solution.tools.js.map +1 -0
- package/dist/tools/teams.tools.d.ts +27 -0
- package/dist/tools/teams.tools.d.ts.map +1 -0
- package/dist/tools/teams.tools.js +67 -0
- package/dist/tools/teams.tools.js.map +1 -0
- package/dist/tools/trace.tools.d.ts +63 -0
- package/dist/tools/trace.tools.d.ts.map +1 -0
- package/dist/tools/trace.tools.js +218 -0
- package/dist/tools/trace.tools.js.map +1 -0
- package/dist/tools/tracking.tools.d.ts +35 -0
- package/dist/tools/tracking.tools.d.ts.map +1 -0
- package/dist/tools/tracking.tools.js +40 -0
- package/dist/tools/tracking.tools.js.map +1 -0
- package/dist/tools/users.tools.d.ts +57 -0
- package/dist/tools/users.tools.d.ts.map +1 -0
- package/dist/tools/users.tools.js +146 -0
- package/dist/tools/users.tools.js.map +1 -0
- package/dist/tools/views.tools.d.ts +30 -0
- package/dist/tools/views.tools.d.ts.map +1 -0
- package/dist/tools/views.tools.js +84 -0
- package/dist/tools/views.tools.js.map +1 -0
- package/package.json +81 -0
- package/server.json +30 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const metadataTools = [
|
|
3
|
+
{
|
|
4
|
+
name: 'dataverse_list_tables',
|
|
5
|
+
description: 'Lists all Dataverse tables. By default returns ONLY custom (non-system) tables. Set includeSystemTables=true to include all ~1700+ system tables.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
includeSystemTables: {
|
|
10
|
+
type: 'boolean',
|
|
11
|
+
description: 'Include system tables. Default false = custom tables only.',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
required: [],
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: 'dataverse_get_table_metadata',
|
|
19
|
+
description: 'Returns full schema metadata for a Dataverse table: all attribute (column) logical names, display names, data types, required levels, and lookup target entities. Use this before writing queries or creating/updating records to confirm correct field names and types. Set includeAttributes=false if you only need table-level metadata without column details.',
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: 'object',
|
|
22
|
+
properties: {
|
|
23
|
+
logicalName: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'The logical name of the table (e.g., "account", "contact", "new_mytable")',
|
|
26
|
+
},
|
|
27
|
+
includeAttributes: {
|
|
28
|
+
type: 'boolean',
|
|
29
|
+
description: 'Include attribute (column) definitions. Default: true',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ['logicalName'],
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'dataverse_get_relationships',
|
|
37
|
+
description: 'Returns all relationship definitions (1:N, N:1, N:N) for a Dataverse table, including relationship schema names, referenced/referencing entity names, and lookup attribute names. Use to determine the correct relationshipName for dataverse_associate/dataverse_disassociate, or to map lookup fields before building FetchXML joins. Use relationshipType to filter results.',
|
|
38
|
+
inputSchema: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: {
|
|
41
|
+
logicalName: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'The logical name of the table',
|
|
44
|
+
},
|
|
45
|
+
relationshipType: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
enum: ['OneToMany', 'ManyToOne', 'ManyToMany', 'All'],
|
|
48
|
+
description: 'Filter by relationship type. Default: All',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
required: ['logicalName'],
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'dataverse_list_global_option_sets',
|
|
56
|
+
description: 'Lists all global (shared) option sets defined in the Dataverse environment, returning their names and metadata IDs. Use this to discover available option sets before calling dataverse_get_option_set to retrieve their values. Prefer this over dataverse_get_table_metadata when you need to find option sets that are reused across multiple tables.',
|
|
57
|
+
inputSchema: {
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {},
|
|
60
|
+
required: [],
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'dataverse_get_option_set',
|
|
65
|
+
description: 'Returns all option labels and their integer values for a named global option set. Use this to look up the numeric code for a picklist value before filtering records (e.g., statecode or statuscode equivalents), or to populate dropdowns with correct option values.',
|
|
66
|
+
inputSchema: {
|
|
67
|
+
type: 'object',
|
|
68
|
+
properties: {
|
|
69
|
+
name: {
|
|
70
|
+
type: 'string',
|
|
71
|
+
description: 'The name of the global option set',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
required: ['name'],
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'dataverse_get_entity_key',
|
|
79
|
+
description: 'Returns all alternate key definitions for a Dataverse table. Useful before using dataverse_upsert to know which fields serve as alternate keys, their index status (Active/InProgress/Failed), and whether they are customizable.',
|
|
80
|
+
inputSchema: {
|
|
81
|
+
type: 'object',
|
|
82
|
+
properties: {
|
|
83
|
+
tableName: {
|
|
84
|
+
type: 'string',
|
|
85
|
+
description: 'Logical name of the table (e.g., "account", "contact")',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
required: ['tableName'],
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'dataverse_get_attribute_option_set',
|
|
93
|
+
description: 'Returns all option labels and integer values for a table-specific attribute (Picklist, Status, or State field). Use to look up the numeric codes for a column\'s choices before filtering or updating records.',
|
|
94
|
+
inputSchema: {
|
|
95
|
+
type: 'object',
|
|
96
|
+
properties: {
|
|
97
|
+
entityLogicalName: {
|
|
98
|
+
type: 'string',
|
|
99
|
+
description: 'Logical name of the table (e.g., "account", "contact")',
|
|
100
|
+
},
|
|
101
|
+
attributeLogicalName: {
|
|
102
|
+
type: 'string',
|
|
103
|
+
description: 'Logical name of the attribute (e.g., "statuscode", "industrycode")',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
required: ['entityLogicalName', 'attributeLogicalName'],
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
const GetTableMetadataInput = z.object({
|
|
111
|
+
logicalName: z.string().min(1),
|
|
112
|
+
includeAttributes: z.boolean().optional().default(true),
|
|
113
|
+
});
|
|
114
|
+
const GetRelationshipsInput = z.object({
|
|
115
|
+
logicalName: z.string().min(1),
|
|
116
|
+
relationshipType: z.enum(['OneToMany', 'ManyToOne', 'ManyToMany', 'All']).optional(),
|
|
117
|
+
});
|
|
118
|
+
const ListTablesInput = z.object({
|
|
119
|
+
includeSystemTables: z.boolean().default(false).optional().describe('Include system tables. Default false = custom tables only.'),
|
|
120
|
+
});
|
|
121
|
+
const GetOptionSetInput = z.object({
|
|
122
|
+
name: z.string().min(1),
|
|
123
|
+
});
|
|
124
|
+
const GetEntityKeyInput = z.object({
|
|
125
|
+
tableName: z.string().min(1).describe('Logical name of the table (e.g., "account", "contact")'),
|
|
126
|
+
});
|
|
127
|
+
const DV_NAME_RE = /^[a-z_][a-z0-9_]*$/;
|
|
128
|
+
const GetAttributeOptionSetInput = z.object({
|
|
129
|
+
entityLogicalName: z.string().min(1).regex(DV_NAME_RE, 'Invalid Dataverse logical name'),
|
|
130
|
+
attributeLogicalName: z.string().min(1).regex(DV_NAME_RE, 'Invalid Dataverse logical name'),
|
|
131
|
+
});
|
|
132
|
+
export async function handleMetadataTool(name, args, client) {
|
|
133
|
+
switch (name) {
|
|
134
|
+
case 'dataverse_list_tables': {
|
|
135
|
+
const { includeSystemTables = false } = ListTablesInput.parse(args ?? {});
|
|
136
|
+
const customOnly = !includeSystemTables;
|
|
137
|
+
const result = await client.listTables(customOnly);
|
|
138
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
139
|
+
}
|
|
140
|
+
case 'dataverse_get_table_metadata': {
|
|
141
|
+
const { logicalName, includeAttributes } = GetTableMetadataInput.parse(args);
|
|
142
|
+
const result = await client.getTableMetadata(logicalName, includeAttributes);
|
|
143
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
144
|
+
}
|
|
145
|
+
case 'dataverse_get_relationships': {
|
|
146
|
+
const { logicalName, relationshipType } = GetRelationshipsInput.parse(args);
|
|
147
|
+
const rawRelationships = await client.getRelationships(logicalName);
|
|
148
|
+
const lname = logicalName.toLowerCase();
|
|
149
|
+
const oneToMany = rawRelationships.filter(r => r.RelationshipType === 'OneToManyRelationship' &&
|
|
150
|
+
r.ReferencedEntity?.toLowerCase() === lname);
|
|
151
|
+
const manyToOne = rawRelationships.filter(r => r.RelationshipType === 'OneToManyRelationship' &&
|
|
152
|
+
r.ReferencingEntity?.toLowerCase() === lname);
|
|
153
|
+
const manyToMany = rawRelationships.filter(r => r.RelationshipType === 'ManyToManyRelationship');
|
|
154
|
+
const includeAll = !relationshipType || relationshipType === 'All';
|
|
155
|
+
return {
|
|
156
|
+
content: [{
|
|
157
|
+
type: 'text',
|
|
158
|
+
text: JSON.stringify({
|
|
159
|
+
tableName: logicalName,
|
|
160
|
+
oneToMany: (includeAll || relationshipType === 'OneToMany') ? oneToMany : undefined,
|
|
161
|
+
manyToOne: (includeAll || relationshipType === 'ManyToOne') ? manyToOne : undefined,
|
|
162
|
+
manyToMany: (includeAll || relationshipType === 'ManyToMany') ? manyToMany : undefined,
|
|
163
|
+
}, null, 2)
|
|
164
|
+
}]
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
case 'dataverse_list_global_option_sets': {
|
|
168
|
+
const result = await client.listGlobalOptionSets();
|
|
169
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
170
|
+
}
|
|
171
|
+
case 'dataverse_get_option_set': {
|
|
172
|
+
const { name: optionSetName } = GetOptionSetInput.parse(args);
|
|
173
|
+
const result = await client.getOptionSet(optionSetName);
|
|
174
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
175
|
+
}
|
|
176
|
+
case 'dataverse_get_entity_key': {
|
|
177
|
+
const { tableName } = GetEntityKeyInput.parse(args);
|
|
178
|
+
const keys = await client.getEntityKeys(tableName);
|
|
179
|
+
return {
|
|
180
|
+
content: [{
|
|
181
|
+
type: 'text',
|
|
182
|
+
text: JSON.stringify({ tableName, keys, count: keys.length }, null, 2),
|
|
183
|
+
}],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
case 'dataverse_get_attribute_option_set': {
|
|
187
|
+
const { entityLogicalName, attributeLogicalName } = GetAttributeOptionSetInput.parse(args);
|
|
188
|
+
const result = await client.getAttributeOptionSet(entityLogicalName, attributeLogicalName);
|
|
189
|
+
return {
|
|
190
|
+
content: [{
|
|
191
|
+
type: 'text',
|
|
192
|
+
text: JSON.stringify(result, null, 2),
|
|
193
|
+
}],
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
default:
|
|
197
|
+
throw new Error(`Unknown metadata tool: ${name}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=metadata.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.tools.js","sourceRoot":"","sources":["../../src/tools/metadata.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DataverseAdvancedClient } from '../dataverse/dataverse-client-advanced.js';
|
|
2
|
+
export declare const orgTools: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object";
|
|
7
|
+
properties: {
|
|
8
|
+
top: {
|
|
9
|
+
type: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
includeDisabled: {
|
|
13
|
+
type: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
required: never[];
|
|
18
|
+
};
|
|
19
|
+
}[];
|
|
20
|
+
export declare function handleOrgTool(name: string, args: unknown, client: DataverseAdvancedClient): Promise<{
|
|
21
|
+
content: Array<{
|
|
22
|
+
type: 'text';
|
|
23
|
+
text: string;
|
|
24
|
+
}>;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=org.tools.d.ts.map
|
|
@@ -0,0 +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;AAOzF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;GAoBpB,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,CAmC7D"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const ListBusinessUnitsInput = z.object({
|
|
3
|
+
top: z.number().int().positive().max(200).optional().default(50),
|
|
4
|
+
includeDisabled: z.boolean().optional().default(false),
|
|
5
|
+
});
|
|
6
|
+
export const orgTools = [
|
|
7
|
+
{
|
|
8
|
+
name: 'dataverse_list_business_units',
|
|
9
|
+
description: 'Lists business units in the Dataverse environment. Returns name, ID, parent business unit ID, disabled status, and creation date. By default only active business units are returned.',
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: 'object',
|
|
12
|
+
properties: {
|
|
13
|
+
top: {
|
|
14
|
+
type: 'number',
|
|
15
|
+
description: 'Maximum number of results (default 50, max 200)',
|
|
16
|
+
},
|
|
17
|
+
includeDisabled: {
|
|
18
|
+
type: 'boolean',
|
|
19
|
+
description: 'Include disabled business units (default false)',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
required: [],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
export async function handleOrgTool(name, args, client) {
|
|
27
|
+
switch (name) {
|
|
28
|
+
case 'dataverse_list_business_units': {
|
|
29
|
+
const { top, includeDisabled } = ListBusinessUnitsInput.parse(args ?? {});
|
|
30
|
+
const filter = includeDisabled ? undefined : 'isdisabled eq false';
|
|
31
|
+
const result = await client.query('businessunits', {
|
|
32
|
+
select: ['businessunitid', 'name', 'parentbusinessunitid', 'isdisabled', 'createdon'],
|
|
33
|
+
...(filter ? { filter } : {}),
|
|
34
|
+
orderby: 'name asc',
|
|
35
|
+
top,
|
|
36
|
+
});
|
|
37
|
+
const units = result.value.map(bu => ({
|
|
38
|
+
id: bu.businessunitid,
|
|
39
|
+
name: bu.name,
|
|
40
|
+
parentBusinessUnitId: bu.parentbusinessunitid ?? null,
|
|
41
|
+
isDisabled: bu.isdisabled,
|
|
42
|
+
createdOn: bu.createdon,
|
|
43
|
+
}));
|
|
44
|
+
return {
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: 'text',
|
|
48
|
+
text: JSON.stringify({ businessUnits: units, count: units.length }, null, 2),
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
default:
|
|
54
|
+
throw new Error(`Unknown org tool: ${name}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=org.tools.js.map
|
|
@@ -0,0 +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;AAGxB,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;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,CAAC,gBAAgB,EAAE,MAAM,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,CAAC;gBACrF,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,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpC,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;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC7E;iBACF;aACF,CAAC;QACJ,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { DataverseAdvancedClient } from '../dataverse/dataverse-client-advanced.js';
|
|
2
|
+
export declare const qualityTools: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object";
|
|
7
|
+
properties: {
|
|
8
|
+
entityLogicalName: {
|
|
9
|
+
type: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
record: {
|
|
13
|
+
type: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
top: {
|
|
17
|
+
type: string;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
required: string[];
|
|
22
|
+
};
|
|
23
|
+
}[];
|
|
24
|
+
export declare function handleQualityTool(name: string, args: unknown, client: DataverseAdvancedClient): Promise<{
|
|
25
|
+
content: Array<{
|
|
26
|
+
type: 'text';
|
|
27
|
+
text: string;
|
|
28
|
+
}>;
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=quality.tools.d.ts.map
|
|
@@ -0,0 +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;AAEzF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;GAwBxB,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,CAyC7D"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const qualityTools = [
|
|
3
|
+
{
|
|
4
|
+
name: 'dataverse_detect_duplicates',
|
|
5
|
+
description: 'Checks for potential duplicate records before creating. Uses Dataverse built-in duplicate detection rules. Pass the prospective record fields to check against existing records.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
entityLogicalName: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: 'Table to check, e.g., "account"',
|
|
12
|
+
},
|
|
13
|
+
record: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
description: 'The prospective record fields to check for duplicates',
|
|
16
|
+
},
|
|
17
|
+
top: {
|
|
18
|
+
type: 'number',
|
|
19
|
+
description: 'Maximum number of duplicates to return (default 5, max 20)',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
required: ['entityLogicalName', 'record'],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
const DetectDuplicatesInput = z.object({
|
|
27
|
+
entityLogicalName: z
|
|
28
|
+
.string()
|
|
29
|
+
.min(1)
|
|
30
|
+
.regex(/^[a-z_][a-z0-9_]*$/i, 'Must be a valid Dataverse logical name'),
|
|
31
|
+
record: z.record(z.string(), z.unknown()),
|
|
32
|
+
top: z.number().int().positive().max(20).optional().default(5),
|
|
33
|
+
});
|
|
34
|
+
export async function handleQualityTool(name, args, client) {
|
|
35
|
+
switch (name) {
|
|
36
|
+
case 'dataverse_detect_duplicates': {
|
|
37
|
+
const params = DetectDuplicatesInput.parse(args);
|
|
38
|
+
const body = {
|
|
39
|
+
BusinessEntity: {
|
|
40
|
+
'@odata.type': `Microsoft.Dynamics.CRM.${params.entityLogicalName}`,
|
|
41
|
+
...params.record,
|
|
42
|
+
},
|
|
43
|
+
MatchingEntityName: params.entityLogicalName,
|
|
44
|
+
PagingInfo: {
|
|
45
|
+
PageNumber: 1,
|
|
46
|
+
Count: params.top,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
const raw = (await client.executeAction('RetrieveDuplicates', body));
|
|
50
|
+
const duplicates = (raw['value'] ?? []);
|
|
51
|
+
const result = {
|
|
52
|
+
hasDuplicates: duplicates.length > 0,
|
|
53
|
+
duplicateCount: duplicates.length,
|
|
54
|
+
duplicates: duplicates.map((d) => {
|
|
55
|
+
const clean = {};
|
|
56
|
+
for (const [key, val] of Object.entries(d)) {
|
|
57
|
+
if (!key.startsWith('@'))
|
|
58
|
+
clean[key] = val;
|
|
59
|
+
}
|
|
60
|
+
return clean;
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
63
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
64
|
+
}
|
|
65
|
+
default:
|
|
66
|
+
throw new Error(`Unknown quality tool: ${name}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=quality.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality.tools.js","sourceRoot":"","sources":["../../src/tools/quality.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { DataverseAdvancedClient } from '../dataverse/dataverse-client-advanced.js';
|
|
2
|
+
export declare const queryTools: ({
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object";
|
|
7
|
+
properties: {
|
|
8
|
+
entitySetName: {
|
|
9
|
+
type: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
select: {
|
|
13
|
+
type: string;
|
|
14
|
+
items: {
|
|
15
|
+
type: string;
|
|
16
|
+
};
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
filter: {
|
|
20
|
+
type: string;
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
orderby: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
top: {
|
|
28
|
+
type: string;
|
|
29
|
+
description: string;
|
|
30
|
+
};
|
|
31
|
+
expand: {
|
|
32
|
+
type: string;
|
|
33
|
+
description: string;
|
|
34
|
+
};
|
|
35
|
+
count: {
|
|
36
|
+
type: string;
|
|
37
|
+
description: string;
|
|
38
|
+
};
|
|
39
|
+
apply: {
|
|
40
|
+
type: string;
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
43
|
+
fetchXml?: never;
|
|
44
|
+
maxTotal?: never;
|
|
45
|
+
};
|
|
46
|
+
required: string[];
|
|
47
|
+
};
|
|
48
|
+
} | {
|
|
49
|
+
name: string;
|
|
50
|
+
description: string;
|
|
51
|
+
inputSchema: {
|
|
52
|
+
type: "object";
|
|
53
|
+
properties: {
|
|
54
|
+
entitySetName: {
|
|
55
|
+
type: string;
|
|
56
|
+
description: string;
|
|
57
|
+
};
|
|
58
|
+
fetchXml: {
|
|
59
|
+
type: string;
|
|
60
|
+
description: string;
|
|
61
|
+
};
|
|
62
|
+
select?: never;
|
|
63
|
+
filter?: never;
|
|
64
|
+
orderby?: never;
|
|
65
|
+
top?: never;
|
|
66
|
+
expand?: never;
|
|
67
|
+
count?: never;
|
|
68
|
+
apply?: never;
|
|
69
|
+
maxTotal?: never;
|
|
70
|
+
};
|
|
71
|
+
required: string[];
|
|
72
|
+
};
|
|
73
|
+
} | {
|
|
74
|
+
name: string;
|
|
75
|
+
description: string;
|
|
76
|
+
inputSchema: {
|
|
77
|
+
type: "object";
|
|
78
|
+
properties: {
|
|
79
|
+
entitySetName: {
|
|
80
|
+
type: string;
|
|
81
|
+
description: string;
|
|
82
|
+
};
|
|
83
|
+
select: {
|
|
84
|
+
type: string;
|
|
85
|
+
items: {
|
|
86
|
+
type: string;
|
|
87
|
+
};
|
|
88
|
+
description?: never;
|
|
89
|
+
};
|
|
90
|
+
filter: {
|
|
91
|
+
type: string;
|
|
92
|
+
description?: never;
|
|
93
|
+
};
|
|
94
|
+
orderby: {
|
|
95
|
+
type: string;
|
|
96
|
+
description?: never;
|
|
97
|
+
};
|
|
98
|
+
expand: {
|
|
99
|
+
type: string;
|
|
100
|
+
description?: never;
|
|
101
|
+
};
|
|
102
|
+
maxTotal: {
|
|
103
|
+
type: string;
|
|
104
|
+
description: string;
|
|
105
|
+
};
|
|
106
|
+
top?: never;
|
|
107
|
+
count?: never;
|
|
108
|
+
apply?: never;
|
|
109
|
+
fetchXml?: never;
|
|
110
|
+
};
|
|
111
|
+
required: string[];
|
|
112
|
+
};
|
|
113
|
+
})[];
|
|
114
|
+
export declare function handleQueryTool(name: string, args: unknown, client: DataverseAdvancedClient): Promise<{
|
|
115
|
+
content: Array<{
|
|
116
|
+
type: 'text';
|
|
117
|
+
text: string;
|
|
118
|
+
}>;
|
|
119
|
+
}>;
|
|
120
|
+
//# sourceMappingURL=query.tools.d.ts.map
|
|
@@ -0,0 +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;AAsBzF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiFtB,CAAC;AA2BF,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,CA4C7D"}
|