@mcp-consultant-tools/powerplatform 27.0.0 → 28.0.0-beta.13
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/build/PowerPlatformService.d.ts +23 -2
- package/build/PowerPlatformService.d.ts.map +1 -1
- package/build/PowerPlatformService.js +23 -1
- package/build/PowerPlatformService.js.map +1 -1
- package/build/cli/commands/app-commands.d.ts +7 -0
- package/build/cli/commands/app-commands.d.ts.map +1 -0
- package/build/cli/commands/app-commands.js +65 -0
- package/build/cli/commands/app-commands.js.map +1 -0
- package/build/cli/commands/flow-commands.d.ts +7 -0
- package/build/cli/commands/flow-commands.d.ts.map +1 -0
- package/build/cli/commands/flow-commands.js +170 -0
- package/build/cli/commands/flow-commands.js.map +1 -0
- package/build/cli/commands/form-commands.d.ts +7 -0
- package/build/cli/commands/form-commands.d.ts.map +1 -0
- package/build/cli/commands/form-commands.js +104 -0
- package/build/cli/commands/form-commands.js.map +1 -0
- package/build/cli/commands/index.d.ts +15 -0
- package/build/cli/commands/index.d.ts.map +1 -0
- package/build/cli/commands/index.js +30 -0
- package/build/cli/commands/index.js.map +1 -0
- package/build/cli/commands/integration-commands.d.ts +7 -0
- package/build/cli/commands/integration-commands.d.ts.map +1 -0
- package/build/cli/commands/integration-commands.js +97 -0
- package/build/cli/commands/integration-commands.js.map +1 -0
- package/build/cli/commands/metadata-commands.d.ts +7 -0
- package/build/cli/commands/metadata-commands.d.ts.map +1 -0
- package/build/cli/commands/metadata-commands.js +83 -0
- package/build/cli/commands/metadata-commands.js.map +1 -0
- package/build/cli/commands/plugin-commands.d.ts +7 -0
- package/build/cli/commands/plugin-commands.d.ts.map +1 -0
- package/build/cli/commands/plugin-commands.js +79 -0
- package/build/cli/commands/plugin-commands.js.map +1 -0
- package/build/cli/commands/security-commands.d.ts +7 -0
- package/build/cli/commands/security-commands.d.ts.map +1 -0
- package/build/cli/commands/security-commands.js +89 -0
- package/build/cli/commands/security-commands.js.map +1 -0
- package/build/cli/commands/solution-commands.d.ts +7 -0
- package/build/cli/commands/solution-commands.d.ts.map +1 -0
- package/build/cli/commands/solution-commands.js +146 -0
- package/build/cli/commands/solution-commands.js.map +1 -0
- package/build/cli/output.d.ts +11 -0
- package/build/cli/output.d.ts.map +1 -0
- package/build/cli/output.js +10 -0
- package/build/cli/output.js.map +1 -0
- package/build/cli.d.ts +9 -0
- package/build/cli.d.ts.map +1 -0
- package/build/cli.js +30 -0
- package/build/cli.js.map +1 -0
- package/build/context-factory.d.ts +11 -0
- package/build/context-factory.d.ts.map +1 -0
- package/build/context-factory.js +39 -0
- package/build/context-factory.js.map +1 -0
- package/build/index.d.ts +10 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +26 -2394
- package/build/index.js.map +1 -1
- package/build/prompts/analysis-prompts.d.ts +3 -0
- package/build/prompts/analysis-prompts.d.ts.map +1 -0
- package/build/prompts/analysis-prompts.js +286 -0
- package/build/prompts/analysis-prompts.js.map +1 -0
- package/build/prompts/entity-prompts.d.ts +3 -0
- package/build/prompts/entity-prompts.d.ts.map +1 -0
- package/build/prompts/entity-prompts.js +304 -0
- package/build/prompts/entity-prompts.js.map +1 -0
- package/build/prompts/index.d.ts +8 -0
- package/build/prompts/index.d.ts.map +1 -0
- package/build/prompts/index.js +11 -0
- package/build/prompts/index.js.map +1 -0
- package/build/services/index.d.ts +5 -0
- package/build/services/index.d.ts.map +1 -0
- package/build/services/index.js +5 -0
- package/build/services/index.js.map +1 -0
- package/build/tool-examples.d.ts +48 -0
- package/build/tool-examples.d.ts.map +1 -0
- package/build/tool-examples.js +91 -0
- package/build/tool-examples.js.map +1 -0
- package/build/tools/app-tools.d.ts +3 -0
- package/build/tools/app-tools.d.ts.map +1 -0
- package/build/tools/app-tools.js +127 -0
- package/build/tools/app-tools.js.map +1 -0
- package/build/tools/flow-tools.d.ts +3 -0
- package/build/tools/flow-tools.d.ts.map +1 -0
- package/build/tools/flow-tools.js +374 -0
- package/build/tools/flow-tools.js.map +1 -0
- package/build/tools/form-view-tools.d.ts +3 -0
- package/build/tools/form-view-tools.d.ts.map +1 -0
- package/build/tools/form-view-tools.js +162 -0
- package/build/tools/form-view-tools.js.map +1 -0
- package/build/tools/index.d.ts +14 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +29 -0
- package/build/tools/index.js.map +1 -0
- package/build/tools/integration-tools.d.ts +3 -0
- package/build/tools/integration-tools.d.ts.map +1 -0
- package/build/tools/integration-tools.js +325 -0
- package/build/tools/integration-tools.js.map +1 -0
- package/build/tools/metadata-tools.d.ts +3 -0
- package/build/tools/metadata-tools.d.ts.map +1 -0
- package/build/tools/metadata-tools.js +166 -0
- package/build/tools/metadata-tools.js.map +1 -0
- package/build/tools/plugin-tools.d.ts +3 -0
- package/build/tools/plugin-tools.d.ts.map +1 -0
- package/build/tools/plugin-tools.js +138 -0
- package/build/tools/plugin-tools.js.map +1 -0
- package/build/tools/security-tools.d.ts +3 -0
- package/build/tools/security-tools.d.ts.map +1 -0
- package/build/tools/security-tools.js +188 -0
- package/build/tools/security-tools.js.map +1 -0
- package/build/tools/solution-tools.d.ts +3 -0
- package/build/tools/solution-tools.d.ts.map +1 -0
- package/build/tools/solution-tools.js +284 -0
- package/build/tools/solution-tools.js.map +1 -0
- package/build/types.d.ts +9 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/package.json +6 -4
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata Tools - 5 tools for entity metadata inspection
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { descWithExamples, ENTITY_NAME_EXAMPLES, ATTRIBUTE_TYPE_EXAMPLES } from '../tool-examples.js';
|
|
6
|
+
export function registerMetadataTools(server, ctx) {
|
|
7
|
+
server.tool("get-entity-metadata", "Get metadata for a Dataverse entity including display name, ownership type, primary key/name fields, entity set name, and change tracking status. Returns schema info needed before querying or customizing the entity.", {
|
|
8
|
+
entityName: z.string().describe(descWithExamples("The logical name of the entity", ENTITY_NAME_EXAMPLES)),
|
|
9
|
+
}, async ({ entityName }) => {
|
|
10
|
+
try {
|
|
11
|
+
const service = ctx.pp;
|
|
12
|
+
const metadata = await service.getEntityMetadata(entityName);
|
|
13
|
+
const metadataStr = JSON.stringify(metadata, null, 2);
|
|
14
|
+
return {
|
|
15
|
+
content: [
|
|
16
|
+
{
|
|
17
|
+
type: "text",
|
|
18
|
+
text: `Entity metadata for '${entityName}':\n\n${metadataStr}`,
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.error("Error getting entity metadata:", error);
|
|
25
|
+
return {
|
|
26
|
+
content: [
|
|
27
|
+
{
|
|
28
|
+
type: "text",
|
|
29
|
+
text: `Failed to get entity metadata: ${error.message}`,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
server.tool("get-entity-attributes", "Get attributes/fields of a PowerPlatform entity. Use filtering options to reduce response size for large entities. Returns { attributes, returnedCount, totalBeforeFilter, hasMore }.", {
|
|
36
|
+
entityName: z.string().describe(descWithExamples("The logical name of the entity", ENTITY_NAME_EXAMPLES)),
|
|
37
|
+
prefix: z.string().optional().describe("Filter attributes by schema name prefix (e.g., 'si_' to get only custom columns)"),
|
|
38
|
+
attributeType: z.enum(['String', 'Integer', 'Boolean', 'DateTime', 'Decimal', 'Double', 'Money', 'Lookup', 'Picklist', 'State', 'Status', 'Uniqueidentifier', 'Memo', 'BigInt', 'Owner', 'Customer', 'PartyList']).optional().describe(descWithExamples("Filter by attribute type", ATTRIBUTE_TYPE_EXAMPLES)),
|
|
39
|
+
maxAttributes: z.number().optional().describe("Maximum number of attributes to return (omit for all)"),
|
|
40
|
+
}, async ({ entityName, prefix, attributeType, maxAttributes }) => {
|
|
41
|
+
try {
|
|
42
|
+
const service = ctx.pp;
|
|
43
|
+
const result = await service.getEntityAttributes(entityName, {
|
|
44
|
+
prefix,
|
|
45
|
+
attributeType,
|
|
46
|
+
maxAttributes
|
|
47
|
+
});
|
|
48
|
+
const attributesStr = JSON.stringify(result, null, 2);
|
|
49
|
+
let message = `Attributes for entity '${entityName}' (${result.returnedCount} returned)`;
|
|
50
|
+
if (prefix) {
|
|
51
|
+
message += `\nFiltered by prefix: ${prefix}`;
|
|
52
|
+
}
|
|
53
|
+
if (attributeType) {
|
|
54
|
+
message += `\nFiltered by type: ${attributeType}`;
|
|
55
|
+
}
|
|
56
|
+
if (result.hasMore) {
|
|
57
|
+
message += `\n⚠️ More attributes available - ${result.totalBeforeFilter} total before limit`;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: "text",
|
|
63
|
+
text: `${message}:\n\n${attributesStr}`,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error("Error getting entity attributes:", error);
|
|
70
|
+
return {
|
|
71
|
+
content: [
|
|
72
|
+
{
|
|
73
|
+
type: "text",
|
|
74
|
+
text: `Failed to get entity attributes: ${error.message}`,
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
server.tool("get-entity-attribute", "Get a specific attribute/field of a PowerPlatform entity including type, display name, required level, and option set values if applicable.", {
|
|
81
|
+
entityName: z.string().describe(descWithExamples("The logical name of the entity", ENTITY_NAME_EXAMPLES)),
|
|
82
|
+
attributeName: z.string().describe("The logical name of the attribute (e.g., 'emailaddress1', 'si_customfield')")
|
|
83
|
+
}, async ({ entityName, attributeName }) => {
|
|
84
|
+
try {
|
|
85
|
+
const service = ctx.pp;
|
|
86
|
+
const attribute = await service.getEntityAttribute(entityName, attributeName);
|
|
87
|
+
const attributeStr = JSON.stringify(attribute, null, 2);
|
|
88
|
+
return {
|
|
89
|
+
content: [
|
|
90
|
+
{
|
|
91
|
+
type: "text",
|
|
92
|
+
text: `Attribute '${attributeName}' for entity '${entityName}':\n\n${attributeStr}`,
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error("Error getting entity attribute:", error);
|
|
99
|
+
return {
|
|
100
|
+
content: [
|
|
101
|
+
{
|
|
102
|
+
type: "text",
|
|
103
|
+
text: `Failed to get entity attribute: ${error.message}`,
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
server.tool("get-entity-relationships", "Returns both one-to-many and many-to-many relationships for a Dataverse entity, including referenced/referencing entity, lookup field names, and cascade behaviors.", {
|
|
110
|
+
entityName: z.string().describe(descWithExamples("The logical name of the entity", ENTITY_NAME_EXAMPLES)),
|
|
111
|
+
}, async ({ entityName }) => {
|
|
112
|
+
try {
|
|
113
|
+
const service = ctx.pp;
|
|
114
|
+
const relationships = await service.getEntityRelationships(entityName);
|
|
115
|
+
const relationshipsStr = JSON.stringify(relationships, null, 2);
|
|
116
|
+
return {
|
|
117
|
+
content: [
|
|
118
|
+
{
|
|
119
|
+
type: "text",
|
|
120
|
+
text: `Relationships for entity '${entityName}':\n\n${relationshipsStr}`,
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.error("Error getting entity relationships:", error);
|
|
127
|
+
return {
|
|
128
|
+
content: [
|
|
129
|
+
{
|
|
130
|
+
type: "text",
|
|
131
|
+
text: `Failed to get entity relationships: ${error.message}`,
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
server.tool("get-global-option-set", "Get a global option set by name. Returns all options with integer values and labels. Use to look up valid values before creating/updating records.", {
|
|
138
|
+
optionSetName: z.string().describe("The name of the global option set (e.g., 'si_applicationstatus', 'budgetamount')"),
|
|
139
|
+
}, async ({ optionSetName }) => {
|
|
140
|
+
try {
|
|
141
|
+
const service = ctx.pp;
|
|
142
|
+
const optionSet = await service.getGlobalOptionSet(optionSetName);
|
|
143
|
+
const optionSetStr = JSON.stringify(optionSet, null, 2);
|
|
144
|
+
return {
|
|
145
|
+
content: [
|
|
146
|
+
{
|
|
147
|
+
type: "text",
|
|
148
|
+
text: `Global option set '${optionSetName}':\n\n${optionSetStr}`,
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
console.error("Error getting global option set:", error);
|
|
155
|
+
return {
|
|
156
|
+
content: [
|
|
157
|
+
{
|
|
158
|
+
type: "text",
|
|
159
|
+
text: `Failed to get global option set: ${error.message}`,
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
//# 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 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-tools.d.ts","sourceRoot":"","sources":["../../src/tools/plugin-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAoK1E"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Tools - 4 tools for plugin inspection
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { descWithExamples, ENTITY_NAME_EXAMPLES, MESSAGE_FILTER_EXAMPLES, HOURS_BACK_EXAMPLES } from '../tool-examples.js';
|
|
6
|
+
export function registerPluginTools(server, ctx) {
|
|
7
|
+
server.tool("get-plugin-assemblies", "Get a list of all plugin assemblies in the environment", {
|
|
8
|
+
includeManaged: z.boolean().optional().describe("Include managed assemblies (default: false)"),
|
|
9
|
+
maxRecords: z.number().optional().describe("Maximum number of assemblies to return (default: 100)"),
|
|
10
|
+
}, async ({ includeManaged, maxRecords }) => {
|
|
11
|
+
try {
|
|
12
|
+
const service = ctx.pp;
|
|
13
|
+
const result = await service.getPluginAssemblies(includeManaged || false, maxRecords || 100);
|
|
14
|
+
const resultStr = JSON.stringify(result, null, 2);
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: "text",
|
|
19
|
+
text: `Found ${result.totalCount} plugin assemblies:\n\n${resultStr}`,
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error("Error getting plugin assemblies:", error);
|
|
26
|
+
return {
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: "text",
|
|
30
|
+
text: `Failed to get plugin assemblies: ${error.message}`,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
server.tool("get-plugin-asm-full", "Get comprehensive information about a plugin assembly including all types, steps, images, and validation", {
|
|
37
|
+
assemblyName: z.string().describe("The name of the plugin assembly"),
|
|
38
|
+
includeDisabled: z.boolean().optional().describe("Include disabled steps (default: false)"),
|
|
39
|
+
}, async ({ assemblyName, includeDisabled }) => {
|
|
40
|
+
try {
|
|
41
|
+
const service = ctx.pp;
|
|
42
|
+
const result = await service.getPluginAssemblyComplete(assemblyName, includeDisabled || false);
|
|
43
|
+
const resultStr = JSON.stringify(result, null, 2);
|
|
44
|
+
return {
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: "text",
|
|
48
|
+
text: `Plugin assembly '${assemblyName}' complete information:\n\n${resultStr}`,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.error("Error getting plugin assembly:", error);
|
|
55
|
+
return {
|
|
56
|
+
content: [
|
|
57
|
+
{
|
|
58
|
+
type: "text",
|
|
59
|
+
text: `Failed to get plugin assembly: ${error.message}`,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
server.tool("get-entity-plugins", "Get all plugins that execute on a specific entity, organized by message and execution order", {
|
|
66
|
+
entityName: z.string().describe(descWithExamples("The logical name of the entity", ENTITY_NAME_EXAMPLES)),
|
|
67
|
+
messageFilter: z.string().optional().describe(descWithExamples("Filter by SDK message name", MESSAGE_FILTER_EXAMPLES)),
|
|
68
|
+
includeDisabled: z.boolean().optional().describe("Include disabled steps (default: false)"),
|
|
69
|
+
}, async ({ entityName, messageFilter, includeDisabled }) => {
|
|
70
|
+
try {
|
|
71
|
+
const service = ctx.pp;
|
|
72
|
+
const result = await service.getEntityPluginPipeline(entityName, messageFilter, includeDisabled || false);
|
|
73
|
+
const resultStr = JSON.stringify(result, null, 2);
|
|
74
|
+
return {
|
|
75
|
+
content: [
|
|
76
|
+
{
|
|
77
|
+
type: "text",
|
|
78
|
+
text: `Plugin pipeline for entity '${entityName}':\n\n${resultStr}`,
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error("Error getting entity plugin pipeline:", error);
|
|
85
|
+
return {
|
|
86
|
+
content: [
|
|
87
|
+
{
|
|
88
|
+
type: "text",
|
|
89
|
+
text: `Failed to get entity plugin pipeline: ${error.message}`,
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
server.tool("get-plugin-trace-logs", "Query plugin trace logs with filtering and exception parsing. Returns log entries with timestamps, execution duration, message block, and parsed exception details for failed executions.", {
|
|
96
|
+
entityName: z.string().optional().describe(descWithExamples("Filter by entity logical name", ENTITY_NAME_EXAMPLES)),
|
|
97
|
+
messageName: z.string().optional().describe(descWithExamples("Filter by SDK message name", MESSAGE_FILTER_EXAMPLES)),
|
|
98
|
+
correlationId: z.string().optional().describe("Filter by correlation ID (GUID from a specific request)"),
|
|
99
|
+
pluginStepId: z.string().optional().describe("Filter by specific step ID (GUID)"),
|
|
100
|
+
exceptionOnly: z.boolean().optional().describe("Only return logs with exceptions (default: false)"),
|
|
101
|
+
hoursBack: z.number().optional().describe(descWithExamples("How many hours back to search (default: 24)", HOURS_BACK_EXAMPLES)),
|
|
102
|
+
maxRecords: z.number().optional().describe("Maximum number of logs to return (default: 50)"),
|
|
103
|
+
}, async ({ entityName, messageName, correlationId, pluginStepId, exceptionOnly, hoursBack, maxRecords }) => {
|
|
104
|
+
try {
|
|
105
|
+
const service = ctx.pp;
|
|
106
|
+
const result = await service.getPluginTraceLogs({
|
|
107
|
+
entityName,
|
|
108
|
+
messageName,
|
|
109
|
+
correlationId,
|
|
110
|
+
pluginStepId,
|
|
111
|
+
exceptionOnly: exceptionOnly || false,
|
|
112
|
+
hoursBack: hoursBack || 24,
|
|
113
|
+
maxRecords: maxRecords || 50
|
|
114
|
+
});
|
|
115
|
+
const resultStr = JSON.stringify(result, null, 2);
|
|
116
|
+
return {
|
|
117
|
+
content: [
|
|
118
|
+
{
|
|
119
|
+
type: "text",
|
|
120
|
+
text: `Plugin trace logs (found ${result.totalCount}):\n\n${resultStr}`,
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.error("Error getting plugin trace logs:", error);
|
|
127
|
+
return {
|
|
128
|
+
content: [
|
|
129
|
+
{
|
|
130
|
+
type: "text",
|
|
131
|
+
text: `Failed to get plugin trace logs: ${error.message}`,
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=plugin-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-tools.js","sourceRoot":"","sources":["../../src/tools/plugin-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-tools.d.ts","sourceRoot":"","sources":["../../src/tools/security-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CA6N5E"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Tools - 4 tools for connection references and security roles
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { descWithExamples, SOLUTION_NAME_EXAMPLES } from '../tool-examples.js';
|
|
6
|
+
export function registerSecurityTools(server, ctx) {
|
|
7
|
+
server.tool("get-connection-references", `Get all connection references in the environment with their connection status and connector details.
|
|
8
|
+
|
|
9
|
+
Connection references define the connector configurations used by Power Automate flows and other components.
|
|
10
|
+
Returns a summary with counts by connector type, plus the full list of connection references.`, {
|
|
11
|
+
maxRecords: z.number().optional().describe("Maximum records to return (default: 100)"),
|
|
12
|
+
managedOnly: z.boolean().optional().describe("Filter to managed connection references only (default: false)"),
|
|
13
|
+
hasConnection: z.boolean().optional().describe("Filter: true = only with connections set, false = only without connections"),
|
|
14
|
+
}, async ({ maxRecords, managedOnly, hasConnection }) => {
|
|
15
|
+
try {
|
|
16
|
+
const service = ctx.pp;
|
|
17
|
+
const result = await service.getConnectionReferences({
|
|
18
|
+
maxRecords,
|
|
19
|
+
managedOnly,
|
|
20
|
+
hasConnection,
|
|
21
|
+
});
|
|
22
|
+
const summaryLines = [
|
|
23
|
+
`Total: ${result.summary.total}`,
|
|
24
|
+
`With connection: ${result.summary.withConnection}`,
|
|
25
|
+
`Without connection: ${result.summary.withoutConnection}`,
|
|
26
|
+
`Managed: ${result.summary.managed}, Unmanaged: ${result.summary.unmanaged}`,
|
|
27
|
+
'',
|
|
28
|
+
'By connector:',
|
|
29
|
+
...Object.entries(result.summary.byConnector)
|
|
30
|
+
.sort(([, a], [, b]) => b - a)
|
|
31
|
+
.map(([name, count]) => ` ${name}: ${count}`),
|
|
32
|
+
];
|
|
33
|
+
const refLines = result.references.map((r) => `- ${r.displayName} (${r.logicalName})\n` +
|
|
34
|
+
` Connector: ${r.connectorId}\n` +
|
|
35
|
+
` Connection: ${r.connectionId ? r.connectionId : 'Not set'}\n` +
|
|
36
|
+
` State: ${r.stateCode === 0 ? 'Active' : 'Inactive'} | Managed: ${r.isManaged}`);
|
|
37
|
+
return {
|
|
38
|
+
content: [{
|
|
39
|
+
type: "text",
|
|
40
|
+
text: `Connection References\n\n${summaryLines.join('\n')}\n\n${refLines.join('\n\n')}`,
|
|
41
|
+
}],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error("Error getting connection references:", error);
|
|
46
|
+
return {
|
|
47
|
+
content: [{
|
|
48
|
+
type: "text",
|
|
49
|
+
text: `Failed to get connection references: ${error.message}`,
|
|
50
|
+
}],
|
|
51
|
+
isError: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
server.tool("get-security-roles", `Get custom security roles defined in the environment. By default excludes well-known system roles (System Administrator, System Customizer, etc.).
|
|
56
|
+
|
|
57
|
+
Useful for security audits and understanding what custom roles exist in the environment.`, {
|
|
58
|
+
solutionUniqueName: z.string().optional().describe(descWithExamples("Filter to roles in a specific solution", SOLUTION_NAME_EXAMPLES)),
|
|
59
|
+
excludeSystemRoles: z.boolean().optional().describe("Exclude System Administrator, System Customizer, and other built-in roles (default: true)"),
|
|
60
|
+
maxRecords: z.number().optional().describe("Maximum records to return (default: 100)"),
|
|
61
|
+
}, async ({ solutionUniqueName, excludeSystemRoles, maxRecords }) => {
|
|
62
|
+
try {
|
|
63
|
+
const service = ctx.pp;
|
|
64
|
+
const result = await service.getSecurityRoles({
|
|
65
|
+
solutionUniqueName,
|
|
66
|
+
excludeSystemRoles,
|
|
67
|
+
maxRecords,
|
|
68
|
+
});
|
|
69
|
+
const summaryLines = [
|
|
70
|
+
`Total: ${result.summary.total}`,
|
|
71
|
+
`Managed: ${result.summary.managed}, Unmanaged: ${result.summary.unmanaged}`,
|
|
72
|
+
result.summary.systemRolesExcluded > 0
|
|
73
|
+
? `System roles excluded: ${result.summary.systemRolesExcluded}`
|
|
74
|
+
: null,
|
|
75
|
+
].filter(Boolean);
|
|
76
|
+
const roleLines = result.roles.map((r) => `- ${r.name}\n` +
|
|
77
|
+
` ID: ${r.roleId}\n` +
|
|
78
|
+
` Unique ID: ${r.roleIdUnique}\n` +
|
|
79
|
+
` Managed: ${r.isManaged} | Customizable: ${r.isCustomizable}`);
|
|
80
|
+
return {
|
|
81
|
+
content: [{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: `Security Roles\n\n${summaryLines.join('\n')}\n\n${roleLines.join('\n\n')}`,
|
|
84
|
+
}],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error("Error getting security roles:", error);
|
|
89
|
+
return {
|
|
90
|
+
content: [{
|
|
91
|
+
type: "text",
|
|
92
|
+
text: `Failed to get security roles: ${error.message}`,
|
|
93
|
+
}],
|
|
94
|
+
isError: true,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
server.tool("get-security-role-privileges", `Get the privilege assignments for a specific security role, showing what entities/actions the role grants access to.
|
|
99
|
+
|
|
100
|
+
Results are grouped by entity, showing the access depth (User/Business Unit/Parent:Child BU/Organization) for each action (Create, Read, Write, Delete, Append, AppendTo, Assign, Share).`, {
|
|
101
|
+
roleId: z.string().describe("The role ID (GUID) to get privileges for"),
|
|
102
|
+
entityFilter: z.string().optional().describe("Filter privileges to a specific entity name (partial match)"),
|
|
103
|
+
accessRightFilter: z.string().optional().describe("Filter by access right: Create, Read, Write, Delete, Append, AppendTo, Assign, Share"),
|
|
104
|
+
}, async ({ roleId, entityFilter, accessRightFilter }) => {
|
|
105
|
+
try {
|
|
106
|
+
const service = ctx.pp;
|
|
107
|
+
const result = await service.getSecurityRolePrivileges({
|
|
108
|
+
roleId,
|
|
109
|
+
entityFilter,
|
|
110
|
+
accessRightFilter,
|
|
111
|
+
});
|
|
112
|
+
const summaryLines = [
|
|
113
|
+
`Role ID: ${result.roleId}`,
|
|
114
|
+
`Total privileges: ${result.summary.total}`,
|
|
115
|
+
`Entities: ${result.summary.entityCount}`,
|
|
116
|
+
'',
|
|
117
|
+
'By access right:',
|
|
118
|
+
...Object.entries(result.summary.byAccessRight)
|
|
119
|
+
.sort(([, a], [, b]) => b - a)
|
|
120
|
+
.map(([right, count]) => ` ${right}: ${count}`),
|
|
121
|
+
];
|
|
122
|
+
const entityLines = Object.entries(result.groupedByEntity)
|
|
123
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
124
|
+
.map(([entity, privs]) => {
|
|
125
|
+
const privLines = privs.map((p) => ` ${p.accessRight}: ${p.depth}`);
|
|
126
|
+
return ` ${entity}:\n${privLines.join('\n')}`;
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
content: [{
|
|
130
|
+
type: "text",
|
|
131
|
+
text: `Security Role Privileges\n\n${summaryLines.join('\n')}\n\nPrivileges by Entity:\n${entityLines.join('\n\n')}`,
|
|
132
|
+
}],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
console.error("Error getting security role privileges:", error);
|
|
137
|
+
return {
|
|
138
|
+
content: [{
|
|
139
|
+
type: "text",
|
|
140
|
+
text: `Failed to get security role privileges: ${error.message}`,
|
|
141
|
+
}],
|
|
142
|
+
isError: true,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
server.tool("get-security-roles-by-solution", `Get all security roles that are components of a specific solution.
|
|
147
|
+
|
|
148
|
+
Queries solution components with componenttype=20 (Security Role) and fetches role details.
|
|
149
|
+
Optionally includes a privilege summary for each role (slower due to additional API calls).`, {
|
|
150
|
+
solutionUniqueName: z.string().describe(descWithExamples("The solution unique name to get roles from", SOLUTION_NAME_EXAMPLES)),
|
|
151
|
+
includePrivileges: z.boolean().optional().describe("Include privilege count summary per role (default: false, slower)"),
|
|
152
|
+
}, async ({ solutionUniqueName, includePrivileges }) => {
|
|
153
|
+
try {
|
|
154
|
+
const service = ctx.pp;
|
|
155
|
+
const result = await service.getSecurityRolesBySolution({
|
|
156
|
+
solutionUniqueName,
|
|
157
|
+
includePrivileges,
|
|
158
|
+
});
|
|
159
|
+
const roleLines = result.roles.map((r) => {
|
|
160
|
+
let line = `- ${r.name}\n` +
|
|
161
|
+
` ID: ${r.roleId}\n` +
|
|
162
|
+
` Managed: ${r.isManaged} | Customizable: ${r.isCustomizable}`;
|
|
163
|
+
if (r.privilegeSummary) {
|
|
164
|
+
line += `\n Privileges: ${r.privilegeSummary.total} across ${r.privilegeSummary.entityCount} entities`;
|
|
165
|
+
}
|
|
166
|
+
return line;
|
|
167
|
+
});
|
|
168
|
+
return {
|
|
169
|
+
content: [{
|
|
170
|
+
type: "text",
|
|
171
|
+
text: `Security Roles in Solution '${result.solutionUniqueName}'\n\n` +
|
|
172
|
+
`Total: ${result.summary.total}\n\n${roleLines.join('\n\n')}`,
|
|
173
|
+
}],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
console.error("Error getting security roles by solution:", error);
|
|
178
|
+
return {
|
|
179
|
+
content: [{
|
|
180
|
+
type: "text",
|
|
181
|
+
text: `Failed to get security roles by solution: ${error.message}`,
|
|
182
|
+
}],
|
|
183
|
+
isError: true,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=security-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-tools.js","sourceRoot":"","sources":["../../src/tools/security-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solution-tools.d.ts","sourceRoot":"","sources":["../../src/tools/solution-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAsW5E"}
|