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,182 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Dataverse entities whose EntitySetName does not follow the simple <logicalName>+s pattern.
|
|
4
|
+
* Used to resolve the correct entity set name when auto-extracting from FetchXML.
|
|
5
|
+
*/
|
|
6
|
+
const IRREGULAR_ENTITY_SET_NAMES = {
|
|
7
|
+
opportunity: 'opportunities',
|
|
8
|
+
territory: 'territories',
|
|
9
|
+
category: 'categories',
|
|
10
|
+
activityparty: 'activityparties',
|
|
11
|
+
activitymimeattachment: 'activitymimeattachments',
|
|
12
|
+
queue: 'queues',
|
|
13
|
+
queueitem: 'queueitems',
|
|
14
|
+
dependency: 'dependencies',
|
|
15
|
+
salesliteratureitem: 'salesliteratureitems',
|
|
16
|
+
contractdetail: 'contractdetails',
|
|
17
|
+
discounttype: 'discounttypes',
|
|
18
|
+
entitlementtemplate: 'entitlementtemplates',
|
|
19
|
+
pricelevel: 'pricelevels',
|
|
20
|
+
};
|
|
21
|
+
export const queryTools = [
|
|
22
|
+
{
|
|
23
|
+
name: 'dataverse_query',
|
|
24
|
+
description: 'Queries a Dataverse table using OData ($filter, $select, $orderby, $top, $expand, $count). Use for simple to moderate reads on a single table or with shallow $expand for related fields. Always specify $select to minimize payload. For complex aggregations (count, sum, avg), multi-entity joins, many-to-many traversal, or advanced FetchXML-only operators, use dataverse_execute_fetchxml instead.',
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {
|
|
28
|
+
entitySetName: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
description: 'The OData entity set name (e.g., "accounts", "contacts", "new_mytables")',
|
|
31
|
+
},
|
|
32
|
+
select: {
|
|
33
|
+
type: 'array',
|
|
34
|
+
items: { type: 'string' },
|
|
35
|
+
description: 'Columns to return. Always specify to minimize payload.',
|
|
36
|
+
},
|
|
37
|
+
filter: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
description: 'OData $filter expression (e.g., "statecode eq 0 and new_amount gt 1000")',
|
|
40
|
+
},
|
|
41
|
+
orderby: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'OData $orderby expression (e.g., "createdon desc")',
|
|
44
|
+
},
|
|
45
|
+
top: {
|
|
46
|
+
type: 'number',
|
|
47
|
+
description: 'Maximum number of records to return (default: 50)',
|
|
48
|
+
},
|
|
49
|
+
expand: {
|
|
50
|
+
type: 'string',
|
|
51
|
+
description: 'OData $expand for related entities (e.g., "parentaccountid($select=name)")',
|
|
52
|
+
},
|
|
53
|
+
count: {
|
|
54
|
+
type: 'boolean',
|
|
55
|
+
description: 'Include total record count in response',
|
|
56
|
+
},
|
|
57
|
+
apply: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
description: 'OData $apply for server-side aggregation (e.g., "groupby((statuscode),aggregate($count as count))")',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
required: ['entitySetName'],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'dataverse_execute_fetchxml',
|
|
67
|
+
description: 'Executes a FetchXML query against Dataverse — use for complex scenarios requiring aggregations (count, sum, avg, min, max with grouping), linked-entity joins across multiple tables, many-to-many relationship traversal, or advanced filtering not expressible in OData. Returns a typed array of records. entitySetName is optional — if omitted it is extracted from the <entity name="..."> element in the FetchXML.',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: {
|
|
71
|
+
entitySetName: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'OData entity set name of the root entity (e.g., "accounts"). If omitted, extracted from the <entity name="..."> element in the FetchXML.',
|
|
74
|
+
},
|
|
75
|
+
fetchXml: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
description: 'The complete FetchXML query string',
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
required: ['fetchXml'],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'dataverse_retrieve_multiple_with_paging',
|
|
85
|
+
description: 'Retrieves ALL records matching a query by automatically following OData nextLink pages. Use instead of dataverse_query when you need more than 5000 records or all records in a table. Returns totalRetrieved count. Set maxTotal to cap retrieval (default 5000, max 50000) to avoid overwhelming the context.',
|
|
86
|
+
inputSchema: {
|
|
87
|
+
type: 'object',
|
|
88
|
+
properties: {
|
|
89
|
+
entitySetName: { type: 'string', description: 'OData entity set name (e.g., "accounts")' },
|
|
90
|
+
select: { type: 'array', items: { type: 'string' } },
|
|
91
|
+
filter: { type: 'string' },
|
|
92
|
+
orderby: { type: 'string' },
|
|
93
|
+
expand: { type: 'string' },
|
|
94
|
+
maxTotal: {
|
|
95
|
+
type: 'number',
|
|
96
|
+
description: 'Maximum records to retrieve (default: 5000, max: 50000)',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
required: ['entitySetName'],
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
const QueryInput = z.object({
|
|
104
|
+
entitySetName: z.string().min(1),
|
|
105
|
+
select: z.array(z.string()).optional(),
|
|
106
|
+
filter: z.string().optional(),
|
|
107
|
+
orderby: z.string().optional(),
|
|
108
|
+
top: z.number().positive().max(5000).optional().default(50),
|
|
109
|
+
expand: z.string().optional(),
|
|
110
|
+
count: z.boolean().optional(),
|
|
111
|
+
apply: z.string().optional(),
|
|
112
|
+
});
|
|
113
|
+
const FetchXmlInput = z.object({
|
|
114
|
+
fetchXml: z.string().min(1).describe('Complete FetchXML query string'),
|
|
115
|
+
entitySetName: z.string().optional().describe('OData entity set name (e.g., "accounts"). If omitted, extracted from the <entity name="..."> element in the FetchXML.'),
|
|
116
|
+
});
|
|
117
|
+
const RetrieveWithPagingInput = z.object({
|
|
118
|
+
entitySetName: z.string().min(1),
|
|
119
|
+
select: z.array(z.string()).optional(),
|
|
120
|
+
filter: z.string().optional(),
|
|
121
|
+
orderby: z.string().optional(),
|
|
122
|
+
expand: z.string().optional(),
|
|
123
|
+
maxTotal: z.number().positive().max(50000).optional(),
|
|
124
|
+
});
|
|
125
|
+
export async function handleQueryTool(name, args, client) {
|
|
126
|
+
switch (name) {
|
|
127
|
+
case 'dataverse_query': {
|
|
128
|
+
const params = QueryInput.parse(args);
|
|
129
|
+
const queryOptions = {};
|
|
130
|
+
if (params.select !== undefined)
|
|
131
|
+
queryOptions.select = params.select;
|
|
132
|
+
if (params.filter !== undefined)
|
|
133
|
+
queryOptions.filter = params.filter;
|
|
134
|
+
if (params.orderby !== undefined)
|
|
135
|
+
queryOptions.orderby = params.orderby;
|
|
136
|
+
if (params.top !== undefined)
|
|
137
|
+
queryOptions.top = params.top;
|
|
138
|
+
if (params.expand !== undefined)
|
|
139
|
+
queryOptions.expand = params.expand;
|
|
140
|
+
if (params.count !== undefined)
|
|
141
|
+
queryOptions.count = params.count;
|
|
142
|
+
if (params.apply !== undefined)
|
|
143
|
+
queryOptions.apply = params.apply;
|
|
144
|
+
const result = await client.query(params.entitySetName, queryOptions);
|
|
145
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
146
|
+
}
|
|
147
|
+
case 'dataverse_execute_fetchxml': {
|
|
148
|
+
const parsed = FetchXmlInput.parse(args);
|
|
149
|
+
let entitySetName = parsed.entitySetName;
|
|
150
|
+
const { fetchXml } = parsed;
|
|
151
|
+
if (!entitySetName) {
|
|
152
|
+
const match = fetchXml.match(/<entity\s+name=["']([^"']+)["']/i);
|
|
153
|
+
if (!match) {
|
|
154
|
+
return { content: [{ type: 'text', text: JSON.stringify({ isError: true, error: 'entitySetName is required when not present in FetchXML <entity> element' }) }] };
|
|
155
|
+
}
|
|
156
|
+
const logicalName = match[1];
|
|
157
|
+
entitySetName = IRREGULAR_ENTITY_SET_NAMES[logicalName] ?? (logicalName + 's');
|
|
158
|
+
}
|
|
159
|
+
const result = await client.executeFetchXml(entitySetName, fetchXml);
|
|
160
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
161
|
+
}
|
|
162
|
+
case 'dataverse_retrieve_multiple_with_paging': {
|
|
163
|
+
const params = RetrieveWithPagingInput.parse(args);
|
|
164
|
+
const pagingOptions = {};
|
|
165
|
+
if (params.select !== undefined)
|
|
166
|
+
pagingOptions.select = params.select;
|
|
167
|
+
if (params.filter !== undefined)
|
|
168
|
+
pagingOptions.filter = params.filter;
|
|
169
|
+
if (params.orderby !== undefined)
|
|
170
|
+
pagingOptions.orderby = params.orderby;
|
|
171
|
+
if (params.expand !== undefined)
|
|
172
|
+
pagingOptions.expand = params.expand;
|
|
173
|
+
if (params.maxTotal !== undefined)
|
|
174
|
+
pagingOptions.maxTotal = params.maxTotal;
|
|
175
|
+
const result = await client.queryWithPaging(params.entitySetName, pagingOptions);
|
|
176
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
177
|
+
}
|
|
178
|
+
default:
|
|
179
|
+
throw new Error(`Unknown query tool: ${name}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=query.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.tools.js","sourceRoot":"","sources":["../../src/tools/query.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { DataverseClient } from '../dataverse/dataverse-client.js';
|
|
2
|
+
export declare const relationTools: ({
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object";
|
|
7
|
+
properties: {
|
|
8
|
+
entitySetName: {
|
|
9
|
+
type: string;
|
|
10
|
+
};
|
|
11
|
+
id: {
|
|
12
|
+
type: string;
|
|
13
|
+
description: string;
|
|
14
|
+
};
|
|
15
|
+
relationshipName: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
relatedEntitySetName: {
|
|
20
|
+
type: string;
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
relatedId: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
required: string[];
|
|
29
|
+
};
|
|
30
|
+
} | {
|
|
31
|
+
name: string;
|
|
32
|
+
description: string;
|
|
33
|
+
inputSchema: {
|
|
34
|
+
type: "object";
|
|
35
|
+
properties: {
|
|
36
|
+
entitySetName: {
|
|
37
|
+
type: string;
|
|
38
|
+
};
|
|
39
|
+
id: {
|
|
40
|
+
type: string;
|
|
41
|
+
description?: never;
|
|
42
|
+
};
|
|
43
|
+
relationshipName: {
|
|
44
|
+
type: string;
|
|
45
|
+
description?: never;
|
|
46
|
+
};
|
|
47
|
+
relatedId: {
|
|
48
|
+
type: string;
|
|
49
|
+
description: string;
|
|
50
|
+
};
|
|
51
|
+
relatedEntitySetName: {
|
|
52
|
+
type: string;
|
|
53
|
+
description: string;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
required: string[];
|
|
57
|
+
};
|
|
58
|
+
})[];
|
|
59
|
+
export declare function handleRelationTool(name: string, args: unknown, client: DataverseClient): Promise<{
|
|
60
|
+
content: Array<{
|
|
61
|
+
type: 'text';
|
|
62
|
+
text: string;
|
|
63
|
+
}>;
|
|
64
|
+
}>;
|
|
65
|
+
//# sourceMappingURL=relations.tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relations.tools.d.ts","sourceRoot":"","sources":["../../src/tools/relations.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+BzB,CAAC;AAkBF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAgB7D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const relationTools = [
|
|
3
|
+
{
|
|
4
|
+
name: 'dataverse_associate',
|
|
5
|
+
description: 'Creates an association between two Dataverse records via a named N:N or 1:N relationship. Requires the relationship schema name obtainable from dataverse_get_relationships. Use for N:N relationships or to link records without modifying a lookup field directly — for simple 1:N lookups, setting the lookup field in dataverse_update is simpler.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
entitySetName: { type: 'string' },
|
|
10
|
+
id: { type: 'string', description: 'Source record GUID' },
|
|
11
|
+
relationshipName: { type: 'string', description: 'Relationship schema name' },
|
|
12
|
+
relatedEntitySetName: { type: 'string', description: 'Related entity set name' },
|
|
13
|
+
relatedId: { type: 'string', description: 'Related record GUID' },
|
|
14
|
+
},
|
|
15
|
+
required: ['entitySetName', 'id', 'relationshipName', 'relatedEntitySetName', 'relatedId'],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'dataverse_disassociate',
|
|
20
|
+
description: 'Removes an existing association between two Dataverse records on a named relationship. For N:N relationships, provide relatedId and relatedEntitySetName to build the correct $id URL. For 1:N relationships, relatedId and relatedEntitySetName are optional. Use dataverse_get_relationships to find the correct relationship schema name.',
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
entitySetName: { type: 'string' },
|
|
25
|
+
id: { type: 'string' },
|
|
26
|
+
relationshipName: { type: 'string' },
|
|
27
|
+
relatedId: { type: 'string', description: 'Required for N:N relationships' },
|
|
28
|
+
relatedEntitySetName: { type: 'string', description: 'Entity set name of the related record (required for N:N). E.g., "contacts"' },
|
|
29
|
+
},
|
|
30
|
+
required: ['entitySetName', 'id', 'relationshipName'],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
const AssociateInput = z.object({
|
|
35
|
+
entitySetName: z.string().min(1),
|
|
36
|
+
id: z.string().uuid(),
|
|
37
|
+
relationshipName: z.string().min(1),
|
|
38
|
+
relatedEntitySetName: z.string().min(1),
|
|
39
|
+
relatedId: z.string().uuid(),
|
|
40
|
+
});
|
|
41
|
+
const DisassociateInput = z.object({
|
|
42
|
+
entitySetName: z.string().min(1),
|
|
43
|
+
id: z.string().uuid(),
|
|
44
|
+
relationshipName: z.string().min(1),
|
|
45
|
+
relatedId: z.string().uuid().optional(),
|
|
46
|
+
relatedEntitySetName: z.string().min(1).optional(),
|
|
47
|
+
});
|
|
48
|
+
export async function handleRelationTool(name, args, client) {
|
|
49
|
+
switch (name) {
|
|
50
|
+
case 'dataverse_associate': {
|
|
51
|
+
const { entitySetName, id, relationshipName, relatedEntitySetName, relatedId } = AssociateInput.parse(args);
|
|
52
|
+
await client.associate(entitySetName, id, relationshipName, relatedEntitySetName, relatedId);
|
|
53
|
+
return { content: [{ type: 'text', text: JSON.stringify({ message: 'Records associated successfully' }) }] };
|
|
54
|
+
}
|
|
55
|
+
case 'dataverse_disassociate': {
|
|
56
|
+
const { entitySetName, id, relationshipName, relatedId, relatedEntitySetName } = DisassociateInput.parse(args);
|
|
57
|
+
await client.disassociate(entitySetName, id, relationshipName, relatedId, relatedEntitySetName);
|
|
58
|
+
return { content: [{ type: 'text', text: JSON.stringify({ message: 'Records disassociated successfully' }) }] };
|
|
59
|
+
}
|
|
60
|
+
default:
|
|
61
|
+
throw new Error(`Unknown relation tool: ${name}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=relations.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relations.tools.js","sourceRoot":"","sources":["../../src/tools/relations.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { DataverseAdvancedClient } from '../dataverse/dataverse-client-advanced.js';
|
|
2
|
+
export declare const searchTools: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object";
|
|
7
|
+
properties: {
|
|
8
|
+
query: {
|
|
9
|
+
type: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
entities: {
|
|
13
|
+
type: string;
|
|
14
|
+
items: {
|
|
15
|
+
type: string;
|
|
16
|
+
};
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
top: {
|
|
20
|
+
type: string;
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
searchMode: {
|
|
24
|
+
type: string;
|
|
25
|
+
enum: string[];
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
28
|
+
searchType: {
|
|
29
|
+
type: string;
|
|
30
|
+
enum: string[];
|
|
31
|
+
description: string;
|
|
32
|
+
};
|
|
33
|
+
filter: {
|
|
34
|
+
type: string;
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
facets: {
|
|
38
|
+
type: string;
|
|
39
|
+
items: {
|
|
40
|
+
type: string;
|
|
41
|
+
};
|
|
42
|
+
description: string;
|
|
43
|
+
};
|
|
44
|
+
orderby: {
|
|
45
|
+
type: string;
|
|
46
|
+
items: {
|
|
47
|
+
type: string;
|
|
48
|
+
};
|
|
49
|
+
description: string;
|
|
50
|
+
};
|
|
51
|
+
select: {
|
|
52
|
+
type: string;
|
|
53
|
+
items: {
|
|
54
|
+
type: string;
|
|
55
|
+
};
|
|
56
|
+
description: string;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
required: string[];
|
|
60
|
+
};
|
|
61
|
+
}[];
|
|
62
|
+
export declare function handleSearchTool(name: string, args: unknown, client: DataverseAdvancedClient): Promise<{
|
|
63
|
+
content: Array<{
|
|
64
|
+
type: 'text';
|
|
65
|
+
text: string;
|
|
66
|
+
}>;
|
|
67
|
+
}>;
|
|
68
|
+
//# sourceMappingURL=search.tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.tools.d.ts","sourceRoot":"","sources":["../../src/tools/search.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAEzF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDvB,CAAC;AAcF,wBAAsB,gBAAgB,CACpC,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,CAuE7D"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const searchTools = [
|
|
3
|
+
{
|
|
4
|
+
name: 'dataverse_search',
|
|
5
|
+
description: 'Full-text Relevance Search across all configured Dataverse tables. Returns ranked results with entity name, record ID, score, and matched fields. Requires Relevance Search to be enabled in Dataverse admin settings. Use when you need to find records without knowing which table they belong to.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
query: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: 'Full-text search string (supports Lucene syntax with searchType=full)',
|
|
12
|
+
},
|
|
13
|
+
entities: {
|
|
14
|
+
type: 'array',
|
|
15
|
+
items: { type: 'string' },
|
|
16
|
+
description: 'Restrict to specific table logical names (omit to search all configured tables)',
|
|
17
|
+
},
|
|
18
|
+
top: {
|
|
19
|
+
type: 'number',
|
|
20
|
+
description: 'Max results (default 10, max 50)',
|
|
21
|
+
},
|
|
22
|
+
searchMode: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
enum: ['any', 'all'],
|
|
25
|
+
description: 'Match any or all terms (default: any)',
|
|
26
|
+
},
|
|
27
|
+
searchType: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
enum: ['simple', 'full'],
|
|
30
|
+
description: 'Search mode: simple (default) or full (enables Lucene syntax: AND, OR, NOT, wildcards, fuzzy)',
|
|
31
|
+
},
|
|
32
|
+
filter: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
description: 'OData $filter to apply on search results (e.g., "statecode eq 0")',
|
|
35
|
+
},
|
|
36
|
+
facets: {
|
|
37
|
+
type: 'array',
|
|
38
|
+
items: { type: 'string' },
|
|
39
|
+
description: 'Fields to return faceted counts for (e.g., ["@search.entityname","statecode"])',
|
|
40
|
+
},
|
|
41
|
+
orderby: {
|
|
42
|
+
type: 'array',
|
|
43
|
+
items: { type: 'string' },
|
|
44
|
+
description: 'OData $orderby for result sorting (e.g., ["@search.score desc","name asc"])',
|
|
45
|
+
},
|
|
46
|
+
select: {
|
|
47
|
+
type: 'array',
|
|
48
|
+
items: { type: 'string' },
|
|
49
|
+
description: 'Fields to return in each result (default: all indexed fields)',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
required: ['query'],
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
const SearchInput = z.object({
|
|
57
|
+
query: z.string().min(1),
|
|
58
|
+
entities: z.array(z.string()).optional(),
|
|
59
|
+
top: z.number().int().positive().max(50).optional().default(10),
|
|
60
|
+
searchMode: z.enum(['any', 'all']).optional().default('any'),
|
|
61
|
+
searchType: z.enum(['simple', 'full']).optional(),
|
|
62
|
+
filter: z.string().optional(),
|
|
63
|
+
facets: z.array(z.string()).optional(),
|
|
64
|
+
orderby: z.array(z.string()).optional(),
|
|
65
|
+
select: z.array(z.string()).optional(),
|
|
66
|
+
});
|
|
67
|
+
export async function handleSearchTool(name, args, client) {
|
|
68
|
+
switch (name) {
|
|
69
|
+
case 'dataverse_search': {
|
|
70
|
+
const params = SearchInput.parse(args);
|
|
71
|
+
const body = {
|
|
72
|
+
search: params.query,
|
|
73
|
+
top: params.top,
|
|
74
|
+
searchMode: params.searchMode,
|
|
75
|
+
returntotalrecordcount: true,
|
|
76
|
+
};
|
|
77
|
+
if (params.entities?.length) {
|
|
78
|
+
body.entities = params.entities;
|
|
79
|
+
}
|
|
80
|
+
if (params.searchType)
|
|
81
|
+
body.searchType = params.searchType;
|
|
82
|
+
if (params.filter)
|
|
83
|
+
body.filter = params.filter;
|
|
84
|
+
if (params.facets?.length)
|
|
85
|
+
body.facets = params.facets;
|
|
86
|
+
if (params.orderby?.length)
|
|
87
|
+
body.orderby = params.orderby;
|
|
88
|
+
if (params.select?.length)
|
|
89
|
+
body.select = params.select;
|
|
90
|
+
let raw;
|
|
91
|
+
try {
|
|
92
|
+
raw = (await client.executeAction('../../search/v1.0/query', body));
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
96
|
+
if (message.includes('404') || message.includes('Not Found')) {
|
|
97
|
+
return {
|
|
98
|
+
content: [
|
|
99
|
+
{
|
|
100
|
+
type: 'text',
|
|
101
|
+
text: JSON.stringify({
|
|
102
|
+
isError: true,
|
|
103
|
+
error: 'Relevance Search is not enabled for this Dataverse environment. ' +
|
|
104
|
+
'An administrator must enable it in the Power Platform admin center ' +
|
|
105
|
+
'under Environment → Settings → Product → Features → Dataverse Search.',
|
|
106
|
+
}),
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
throw err;
|
|
112
|
+
}
|
|
113
|
+
const results = (raw['value'] ?? []).map((r) => ({
|
|
114
|
+
entityName: r['entityname'] ?? '',
|
|
115
|
+
objectId: r['objectid'] ?? '',
|
|
116
|
+
score: r['score'] ?? 0,
|
|
117
|
+
highlights: r['highlights'] ?? {},
|
|
118
|
+
fields: r['attributes'] ?? {},
|
|
119
|
+
}));
|
|
120
|
+
const output = {
|
|
121
|
+
totalRecordCount: raw['totalrecordcount'] ?? 0,
|
|
122
|
+
results,
|
|
123
|
+
};
|
|
124
|
+
if (raw['facets'])
|
|
125
|
+
output.facets = raw['facets'];
|
|
126
|
+
return {
|
|
127
|
+
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
default:
|
|
131
|
+
throw new Error(`Unknown search tool: ${name}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=search.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.tools.js","sourceRoot":"","sources":["../../src/tools/search.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { DataverseAdvancedClient } from '../dataverse/dataverse-client-advanced.js';
|
|
2
|
+
export declare const solutionTools: ({
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object";
|
|
7
|
+
properties: {
|
|
8
|
+
includeManaged: {
|
|
9
|
+
type: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
nameFilter: {
|
|
13
|
+
type: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
top: {
|
|
17
|
+
type: string;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
solutionName?: never;
|
|
21
|
+
componentType?: never;
|
|
22
|
+
components?: never;
|
|
23
|
+
};
|
|
24
|
+
required: never[];
|
|
25
|
+
};
|
|
26
|
+
} | {
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
inputSchema: {
|
|
30
|
+
type: "object";
|
|
31
|
+
properties: {
|
|
32
|
+
solutionName: {
|
|
33
|
+
type: string;
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
componentType: {
|
|
37
|
+
type: string;
|
|
38
|
+
description: string;
|
|
39
|
+
};
|
|
40
|
+
top: {
|
|
41
|
+
type: string;
|
|
42
|
+
description: string;
|
|
43
|
+
};
|
|
44
|
+
includeManaged?: never;
|
|
45
|
+
nameFilter?: never;
|
|
46
|
+
components?: never;
|
|
47
|
+
};
|
|
48
|
+
required: string[];
|
|
49
|
+
};
|
|
50
|
+
} | {
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object";
|
|
55
|
+
properties: {
|
|
56
|
+
components: {
|
|
57
|
+
type: string;
|
|
58
|
+
description: string;
|
|
59
|
+
properties: {
|
|
60
|
+
entities: {
|
|
61
|
+
type: string;
|
|
62
|
+
items: {
|
|
63
|
+
type: string;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
webResources: {
|
|
67
|
+
type: string;
|
|
68
|
+
items: {
|
|
69
|
+
type: string;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
optionSets: {
|
|
73
|
+
type: string;
|
|
74
|
+
items: {
|
|
75
|
+
type: string;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
includeManaged?: never;
|
|
81
|
+
nameFilter?: never;
|
|
82
|
+
top?: never;
|
|
83
|
+
solutionName?: never;
|
|
84
|
+
componentType?: never;
|
|
85
|
+
};
|
|
86
|
+
required: never[];
|
|
87
|
+
};
|
|
88
|
+
})[];
|
|
89
|
+
export declare function handleSolutionTool(name: string, args: unknown, client: DataverseAdvancedClient): Promise<{
|
|
90
|
+
content: Array<{
|
|
91
|
+
type: 'text';
|
|
92
|
+
text: string;
|
|
93
|
+
}>;
|
|
94
|
+
}>;
|
|
95
|
+
//# sourceMappingURL=solution.tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solution.tools.d.ts","sourceRoot":"","sources":["../../src/tools/solution.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAiCzF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0DzB,CAAC;AAEF,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,CAqD7D"}
|