@mcp-consultant-tools/powerplatform 27.0.0 → 28.0.0-beta.4
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/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/tools/app-tools.d.ts +3 -0
- package/build/tools/app-tools.d.ts.map +1 -0
- package/build/tools/app-tools.js +126 -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 +373 -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 +161 -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 +324 -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 +165 -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 +137 -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 +187 -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 +283 -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 +1 -1
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration Tools - 5 tools for integration audit and environment variables
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export function registerIntegrationTools(server, ctx) {
|
|
6
|
+
server.tool("get-service-endpoints", `Get all service endpoints (webhooks, Azure Service Bus, REST) configured in the environment.
|
|
7
|
+
|
|
8
|
+
Service endpoints are external URLs that Dataverse can call via SDK message processing steps.
|
|
9
|
+
Use this to discover outbound integration touchpoints.
|
|
10
|
+
|
|
11
|
+
Optionally validate endpoint URLs against required patterns (e.g. your organization's domains).
|
|
12
|
+
Flagged endpoints are those whose URLs do NOT match any of the provided patterns.
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
- Endpoint name, full URL, contract type (OneWay/TwoWay/Queue/Topic/REST/EventHub/Webhook/EventGrid)
|
|
16
|
+
- Authentication type (Anonymous/HttpHeader/WebKey/SASKey/etc.)
|
|
17
|
+
- Number of SDK message steps using each endpoint
|
|
18
|
+
- Summary statistics by type and auth method
|
|
19
|
+
- Flagged endpoints (when requiredUrlStrings provided)`, {
|
|
20
|
+
maxRecords: z.number().optional().describe("Maximum endpoints to return (default: 100)"),
|
|
21
|
+
requiredUrlStrings: z.array(z.string()).optional().describe("URL patterns to validate against. Endpoints not matching any pattern are flagged.\n\nExamples:\n - Validate production URLs: `[\"mycompany.com\"]`\n - Multiple environments: `[\"prod.mycompany.com\", \"staging.mycompany.com\"]`"),
|
|
22
|
+
outputFormat: z.enum(["summary", "full"]).optional().describe("Output format: 'summary' shows flagged items only, 'full' shows everything (default: full)"),
|
|
23
|
+
excludeOotb: z.boolean().optional().describe("Exclude Microsoft out-of-the-box (OOTB) components from results (default: true). Set to false to include all items."),
|
|
24
|
+
}, async ({ maxRecords, requiredUrlStrings, outputFormat, excludeOotb }) => {
|
|
25
|
+
try {
|
|
26
|
+
const service = ctx.pp;
|
|
27
|
+
const ootb = excludeOotb ?? true;
|
|
28
|
+
if (requiredUrlStrings && requiredUrlStrings.length > 0) {
|
|
29
|
+
const result = await service.getServiceEndpointsValidated(maxRecords ?? 100, requiredUrlStrings, ootb);
|
|
30
|
+
const lines = [];
|
|
31
|
+
lines.push(`# Service Endpoints (${result.summary.total} found, ${result.summary.flagged} flagged)`);
|
|
32
|
+
lines.push('');
|
|
33
|
+
if (result.flaggedEndpoints.length > 0) {
|
|
34
|
+
lines.push('## Flagged Endpoints');
|
|
35
|
+
lines.push('');
|
|
36
|
+
lines.push('| Name | URL | Issue |');
|
|
37
|
+
lines.push('|------|-----|-------|');
|
|
38
|
+
for (const f of result.flaggedEndpoints) {
|
|
39
|
+
lines.push(`| ${f.endpoint.name} | ${f.endpoint.url} | ${f.urlIssue} |`);
|
|
40
|
+
}
|
|
41
|
+
lines.push('');
|
|
42
|
+
}
|
|
43
|
+
if (outputFormat !== 'summary') {
|
|
44
|
+
lines.push('## All Endpoints');
|
|
45
|
+
lines.push('');
|
|
46
|
+
lines.push('| Name | URL |');
|
|
47
|
+
lines.push('|------|-----|');
|
|
48
|
+
for (const ep of result.allEndpoints) {
|
|
49
|
+
lines.push(`| ${ep.name} | ${ep.url} |`);
|
|
50
|
+
}
|
|
51
|
+
lines.push('');
|
|
52
|
+
}
|
|
53
|
+
return { content: [{ type: "text", text: lines.join('\n') }] };
|
|
54
|
+
}
|
|
55
|
+
const result = await service.getServiceEndpoints(maxRecords ?? 100, ootb);
|
|
56
|
+
const ootbNote = result.summary.ootbExcluded ? `, ${result.summary.ootbExcluded} OOTB excluded` : '';
|
|
57
|
+
return {
|
|
58
|
+
content: [
|
|
59
|
+
{
|
|
60
|
+
type: "text",
|
|
61
|
+
text: `Service Endpoints (${result.summary.total} found${ootbNote}):\n\n${JSON.stringify(result, null, 2)}`,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error("Error getting service endpoints:", error);
|
|
68
|
+
return {
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: "text",
|
|
72
|
+
text: `Failed to get service endpoints: ${error.message}`,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
server.tool("get-webhook-registrations", `Get all webhook-type SDK message processing steps in the environment.
|
|
79
|
+
|
|
80
|
+
Webhooks are registrations that call external service endpoints when Dataverse events occur.
|
|
81
|
+
This identifies inbound integration patterns where external systems receive notifications.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
- Webhook name and endpoint URL
|
|
85
|
+
- Trigger entity and message (Create/Update/Delete)
|
|
86
|
+
- Filtering attributes and execution stage
|
|
87
|
+
- Enabled/disabled status
|
|
88
|
+
- Summary by entity and message type`, {
|
|
89
|
+
maxRecords: z.number().optional().describe("Maximum webhooks to return (default: 100)"),
|
|
90
|
+
excludeOotb: z.boolean().optional().describe("Exclude Microsoft out-of-the-box (OOTB) components from results (default: true). Set to false to include all items."),
|
|
91
|
+
}, async ({ maxRecords, excludeOotb }) => {
|
|
92
|
+
try {
|
|
93
|
+
const service = ctx.pp;
|
|
94
|
+
const result = await service.getWebhookRegistrations(maxRecords ?? 100, excludeOotb ?? true);
|
|
95
|
+
const ootbNote = result.summary.ootbExcluded ? `, ${result.summary.ootbExcluded} OOTB excluded` : '';
|
|
96
|
+
return {
|
|
97
|
+
content: [
|
|
98
|
+
{
|
|
99
|
+
type: "text",
|
|
100
|
+
text: `Webhook Registrations (${result.summary.total} found, ${result.summary.enabledCount} enabled${ootbNote}):\n\n${JSON.stringify(result, null, 2)}`,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error("Error getting webhook registrations:", error);
|
|
107
|
+
return {
|
|
108
|
+
content: [
|
|
109
|
+
{
|
|
110
|
+
type: "text",
|
|
111
|
+
text: `Failed to get webhook registrations: ${error.message}`,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
server.tool("analyze-flow-complexity", `Analyze Power Automate flow complexity and calculate risk scores.
|
|
118
|
+
|
|
119
|
+
Now includes URL extraction and hardcoded secret detection per flow.
|
|
120
|
+
|
|
121
|
+
Complexity scoring factors:
|
|
122
|
+
- Action count (base complexity)
|
|
123
|
+
- Unique connectors (integration surface, +2 each)
|
|
124
|
+
- HTTP/REST connectors (external dependency, +5 each)
|
|
125
|
+
- Premium connectors (licensing concern, +3 each)
|
|
126
|
+
- Conditions/switches (+2 each)
|
|
127
|
+
- Loops (+3 each)
|
|
128
|
+
- Parallel branches (+3 each)
|
|
129
|
+
- Error handling scopes (+1 each)
|
|
130
|
+
|
|
131
|
+
Risk levels: Low (0-20), Medium (21-50), High (51-100), Critical (>100)
|
|
132
|
+
|
|
133
|
+
Use flowId to analyze a single flow, or omit to analyze all flows.`, {
|
|
134
|
+
flowId: z.string().optional().describe("Specific flow ID to analyze (omit for all flows)"),
|
|
135
|
+
maxFlows: z.number().optional().describe("Maximum flows to analyze when flowId not specified (default: 0 = unlimited)"),
|
|
136
|
+
outputFormat: z.enum(["summary", "full"]).optional().describe("Output format: 'summary' shows flagged items and stats only, 'full' shows all details (default: full)"),
|
|
137
|
+
excludeOotb: z.boolean().optional().describe("Exclude Microsoft out-of-the-box (OOTB/managed) flows from analysis (default: true). Set to false to include all flows."),
|
|
138
|
+
}, async ({ flowId, maxFlows, outputFormat, excludeOotb }) => {
|
|
139
|
+
try {
|
|
140
|
+
const service = ctx.pp;
|
|
141
|
+
const result = await service.analyzeFlowComplexity(flowId, maxFlows ?? 0, excludeOotb ?? true);
|
|
142
|
+
const lines = [];
|
|
143
|
+
const ootbNote = result.summary.ootbExcluded ? `, ${result.summary.ootbExcluded} OOTB excluded` : '';
|
|
144
|
+
lines.push(`# Flow Complexity Analysis (${result.summary.total} flows${ootbNote})`);
|
|
145
|
+
lines.push('');
|
|
146
|
+
lines.push(`- Average Score: ${result.summary.averageComplexity}`);
|
|
147
|
+
lines.push(`- By Risk: Low=${result.summary.byRiskLevel.Low}, Medium=${result.summary.byRiskLevel.Medium}, High=${result.summary.byRiskLevel.High}, Critical=${result.summary.byRiskLevel.Critical}`);
|
|
148
|
+
lines.push(`- URLs Found: ${result.summary.totalUrlsFound ?? 0}`);
|
|
149
|
+
lines.push(`- Secret Warnings: ${result.summary.totalSecretWarnings ?? 0} in ${result.summary.flowsWithSecretWarnings ?? 0} flows`);
|
|
150
|
+
if (result.summary.uniqueEnvironmentVariables && result.summary.uniqueEnvironmentVariables.length > 0) {
|
|
151
|
+
lines.push(`- Environment Variables Referenced: ${result.summary.uniqueEnvironmentVariables.join(', ')}`);
|
|
152
|
+
}
|
|
153
|
+
lines.push('');
|
|
154
|
+
if (result.summary.highRiskFlows.length > 0) {
|
|
155
|
+
lines.push('## High/Critical Risk Flows');
|
|
156
|
+
for (const name of result.summary.highRiskFlows) {
|
|
157
|
+
const flow = result.flows.find(f => f.name === name);
|
|
158
|
+
if (flow) {
|
|
159
|
+
lines.push(`- **${name}** - Score: ${flow.complexity.score} (${flow.complexity.riskLevel})`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
lines.push('');
|
|
163
|
+
}
|
|
164
|
+
const flowsWithSecrets = result.flows.filter(f => f.secretWarnings && f.secretWarnings.length > 0);
|
|
165
|
+
if (flowsWithSecrets.length > 0) {
|
|
166
|
+
lines.push('## Security Warnings');
|
|
167
|
+
lines.push('');
|
|
168
|
+
lines.push('| Flow | Action | Field | Warning |');
|
|
169
|
+
lines.push('|------|--------|-------|---------|');
|
|
170
|
+
for (const flow of flowsWithSecrets) {
|
|
171
|
+
for (const w of flow.secretWarnings) {
|
|
172
|
+
lines.push(`| ${flow.name} | ${w.actionName} | ${w.fieldPath} | ${w.message} |`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
lines.push('');
|
|
176
|
+
}
|
|
177
|
+
if (outputFormat !== 'summary') {
|
|
178
|
+
lines.push('## Full Details');
|
|
179
|
+
lines.push('');
|
|
180
|
+
lines.push('```json');
|
|
181
|
+
lines.push(JSON.stringify(result, null, 2));
|
|
182
|
+
lines.push('```');
|
|
183
|
+
}
|
|
184
|
+
return { content: [{ type: "text", text: lines.join('\n') }] };
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
console.error("Error analyzing flow complexity:", error);
|
|
188
|
+
return {
|
|
189
|
+
content: [
|
|
190
|
+
{
|
|
191
|
+
type: "text",
|
|
192
|
+
text: `Failed to analyze flow complexity: ${error.message}`,
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
server.tool("gen-integration-audit", `Generate a comprehensive integration audit report for the PowerPlatform environment.
|
|
199
|
+
|
|
200
|
+
This top-down report aggregates all integration touchpoints:
|
|
201
|
+
|
|
202
|
+
OUTBOUND: Service endpoints, flows with HTTP/external calls, plugins with external access
|
|
203
|
+
INBOUND: Webhook registrations, flows with external triggers
|
|
204
|
+
COMPLEXITY: Flow complexity scores, risk levels, URL extraction, secret detection
|
|
205
|
+
ENVIRONMENT: Environment variable inventory with URL validation
|
|
206
|
+
PLUGINS: Plugin assembly inventory
|
|
207
|
+
|
|
208
|
+
Includes URL validation (flag endpoints/variables not matching required patterns),
|
|
209
|
+
hardcoded secret detection in flows, and environment variable analysis.
|
|
210
|
+
|
|
211
|
+
Returns a pre-formatted Markdown report. Use outputFormat="summary" for a compact view.`, {
|
|
212
|
+
maxFlows: z.number().optional().describe("Maximum flows to analyze (default: 0 = unlimited)"),
|
|
213
|
+
maxRecords: z.number().optional().describe("Maximum records to return for service endpoints, webhooks, and plugin assemblies (default: 100). Increase to get all items in large environments."),
|
|
214
|
+
requiredUrlStrings: z.array(z.string()).optional().describe("URL patterns to validate against. Endpoints and env vars not matching are flagged.\n\nExamples:\n - `[\"mycompany.com\"]`\n - `[\"prod.api.com\", \"staging.api.com\"]`"),
|
|
215
|
+
outputFormat: z.enum(["summary", "full"]).optional().describe("Output format: 'summary' shows flagged items and stats only, 'full' shows everything (default: full)"),
|
|
216
|
+
excludeOotb: z.boolean().optional().describe("Exclude Microsoft out-of-the-box (OOTB) components from results (default: true). Set to false to include all items."),
|
|
217
|
+
}, async ({ maxFlows, maxRecords, requiredUrlStrings, outputFormat, excludeOotb }) => {
|
|
218
|
+
try {
|
|
219
|
+
const service = ctx.pp;
|
|
220
|
+
const result = await service.generateIntegrationAuditReport(maxFlows ?? 0, requiredUrlStrings, outputFormat, excludeOotb ?? true, maxRecords ?? 100);
|
|
221
|
+
return {
|
|
222
|
+
content: [
|
|
223
|
+
{
|
|
224
|
+
type: "text",
|
|
225
|
+
text: result.markdownReport,
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
type: "text",
|
|
229
|
+
text: `\n\n---\n\n**Full JSON Data:**\n\n${JSON.stringify({
|
|
230
|
+
summary: result.summary,
|
|
231
|
+
riskAssessment: result.riskAssessment,
|
|
232
|
+
outbound: {
|
|
233
|
+
serviceEndpointCount: result.outbound.serviceEndpoints.length,
|
|
234
|
+
httpFlowCount: result.outbound.httpFlows.length,
|
|
235
|
+
externalPluginCount: result.outbound.externalPlugins.length,
|
|
236
|
+
},
|
|
237
|
+
inbound: {
|
|
238
|
+
webhookCount: result.inbound.webhooks.length,
|
|
239
|
+
externalTriggerFlowCount: result.inbound.externalTriggerFlows.length,
|
|
240
|
+
},
|
|
241
|
+
complexity: result.complexity.summary,
|
|
242
|
+
}, null, 2)}`,
|
|
243
|
+
},
|
|
244
|
+
],
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.error("Error generating integration audit report:", error);
|
|
249
|
+
return {
|
|
250
|
+
content: [
|
|
251
|
+
{
|
|
252
|
+
type: "text",
|
|
253
|
+
text: `Failed to generate integration audit report: ${error.message}`,
|
|
254
|
+
},
|
|
255
|
+
],
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
server.tool("get-env-variables", `Get all environment variable definitions from the PowerPlatform environment.
|
|
260
|
+
|
|
261
|
+
Environment variables store configuration values (URLs, connection strings, feature flags)
|
|
262
|
+
that can be referenced by flows and other components. Sensitive variables are masked.
|
|
263
|
+
|
|
264
|
+
Optionally validate URL-type variables against required patterns to flag diverging values
|
|
265
|
+
(e.g. variables pointing to wrong environments).
|
|
266
|
+
|
|
267
|
+
Returns:
|
|
268
|
+
- Schema name, display name, type (String/Number/Boolean/JSON/Secret)
|
|
269
|
+
- Current value, default value, and effective value
|
|
270
|
+
- Managed status and sensitivity flag
|
|
271
|
+
- Diverging variables (when requiredUrlStrings provided)`, {
|
|
272
|
+
maxRecords: z.number().optional().describe("Maximum variables to return (default: 500)"),
|
|
273
|
+
requiredUrlStrings: z.array(z.string()).optional().describe("URL patterns to validate against. URL-type variables not matching any pattern are flagged.\n\nExamples:\n - `[\"mycompany.com\"]`\n - `[\"prod.api.com\", \"staging.api.com\"]`"),
|
|
274
|
+
outputFormat: z.enum(["summary", "full"]).optional().describe("Output format: 'summary' shows diverging variables only, 'full' shows everything (default: full)"),
|
|
275
|
+
excludeOotb: z.boolean().optional().describe("Exclude Microsoft out-of-the-box (OOTB) components from results (default: true). Set to false to include all items."),
|
|
276
|
+
}, async ({ maxRecords, requiredUrlStrings, outputFormat, excludeOotb }) => {
|
|
277
|
+
try {
|
|
278
|
+
const service = ctx.pp;
|
|
279
|
+
const result = await service.getEnvironmentVariables(maxRecords ?? 500, requiredUrlStrings, excludeOotb ?? true);
|
|
280
|
+
const ootbNote = result.summary.ootbExcluded ? `, ${result.summary.ootbExcluded} OOTB excluded` : '';
|
|
281
|
+
const lines = [];
|
|
282
|
+
lines.push(`# Environment Variables (${result.summary.total} found${ootbNote})`);
|
|
283
|
+
lines.push('');
|
|
284
|
+
lines.push(`Types: ${Object.entries(result.summary.byType).map(([k, v]) => `${k}=${v}`).join(', ')}`);
|
|
285
|
+
lines.push('');
|
|
286
|
+
if (result.divergingVariables.length > 0) {
|
|
287
|
+
lines.push('## Diverging Variables');
|
|
288
|
+
lines.push('');
|
|
289
|
+
lines.push('| Schema Name | Display Name | Value | Reason |');
|
|
290
|
+
lines.push('|-------------|-------------|-------|--------|');
|
|
291
|
+
for (const d of result.divergingVariables) {
|
|
292
|
+
const val = d.variable.isSensitive ? '***' : (d.variable.effectiveValue ?? '(none)');
|
|
293
|
+
lines.push(`| ${d.variable.schemaName} | ${d.variable.displayName} | ${val} | ${d.reason} |`);
|
|
294
|
+
}
|
|
295
|
+
lines.push('');
|
|
296
|
+
}
|
|
297
|
+
if (outputFormat !== 'summary') {
|
|
298
|
+
lines.push('## All Variables');
|
|
299
|
+
lines.push('');
|
|
300
|
+
lines.push('| Schema Name | Display Name | Type | Effective Value | Managed |');
|
|
301
|
+
lines.push('|-------------|-------------|------|-----------------|---------|');
|
|
302
|
+
for (const v of result.allVariables) {
|
|
303
|
+
const val = v.isSensitive ? (v.maskedValue ?? '***') : (v.effectiveValue ?? v.defaultValue ?? '(none)');
|
|
304
|
+
const managed = v.isManaged ? 'Yes' : 'No';
|
|
305
|
+
lines.push(`| ${v.schemaName} | ${v.displayName} | ${v.type} | ${val} | ${managed} |`);
|
|
306
|
+
}
|
|
307
|
+
lines.push('');
|
|
308
|
+
}
|
|
309
|
+
return { content: [{ type: "text", text: lines.join('\n') }] };
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
console.error("Error getting environment variables:", error);
|
|
313
|
+
return {
|
|
314
|
+
content: [
|
|
315
|
+
{
|
|
316
|
+
type: "text",
|
|
317
|
+
text: `Failed to get environment variables: ${error.message}`,
|
|
318
|
+
},
|
|
319
|
+
],
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=integration-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-tools.js","sourceRoot":"","sources":["../../src/tools/integration-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-tools.d.ts","sourceRoot":"","sources":["../../src/tools/metadata-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CA8L5E"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata Tools - 5 tools for entity metadata inspection
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export function registerMetadataTools(server, ctx) {
|
|
6
|
+
server.tool("get-entity-metadata", "Get metadata about a PowerPlatform entity", {
|
|
7
|
+
entityName: z.string().describe("The logical name of the entity"),
|
|
8
|
+
}, async ({ entityName }) => {
|
|
9
|
+
try {
|
|
10
|
+
const service = ctx.pp;
|
|
11
|
+
const metadata = await service.getEntityMetadata(entityName);
|
|
12
|
+
const metadataStr = JSON.stringify(metadata, null, 2);
|
|
13
|
+
return {
|
|
14
|
+
content: [
|
|
15
|
+
{
|
|
16
|
+
type: "text",
|
|
17
|
+
text: `Entity metadata for '${entityName}':\n\n${metadataStr}`,
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error("Error getting entity metadata:", error);
|
|
24
|
+
return {
|
|
25
|
+
content: [
|
|
26
|
+
{
|
|
27
|
+
type: "text",
|
|
28
|
+
text: `Failed to get entity metadata: ${error.message}`,
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
server.tool("get-entity-attributes", "Get attributes/fields of a PowerPlatform entity. Use filtering options to reduce response size for large entities.", {
|
|
35
|
+
entityName: z.string().describe("The logical name of the entity"),
|
|
36
|
+
prefix: z.string().optional().describe("Filter attributes by schema name prefix (e.g., 'si_' to get only custom columns)"),
|
|
37
|
+
attributeType: z.enum(['String', 'Integer', 'Boolean', 'DateTime', 'Decimal', 'Double', 'Money', 'Lookup', 'Picklist', 'State', 'Status', 'Uniqueidentifier', 'Memo', 'BigInt', 'Owner', 'Customer', 'PartyList']).optional().describe("Filter by attribute type"),
|
|
38
|
+
maxAttributes: z.number().optional().describe("Maximum number of attributes to return (omit for all)"),
|
|
39
|
+
}, async ({ entityName, prefix, attributeType, maxAttributes }) => {
|
|
40
|
+
try {
|
|
41
|
+
const service = ctx.pp;
|
|
42
|
+
const result = await service.getEntityAttributes(entityName, {
|
|
43
|
+
prefix,
|
|
44
|
+
attributeType,
|
|
45
|
+
maxAttributes
|
|
46
|
+
});
|
|
47
|
+
const attributesStr = JSON.stringify(result, null, 2);
|
|
48
|
+
let message = `Attributes for entity '${entityName}' (${result.returnedCount} returned)`;
|
|
49
|
+
if (prefix) {
|
|
50
|
+
message += `\nFiltered by prefix: ${prefix}`;
|
|
51
|
+
}
|
|
52
|
+
if (attributeType) {
|
|
53
|
+
message += `\nFiltered by type: ${attributeType}`;
|
|
54
|
+
}
|
|
55
|
+
if (result.hasMore) {
|
|
56
|
+
message += `\n⚠️ More attributes available - ${result.totalBeforeFilter} total before limit`;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
content: [
|
|
60
|
+
{
|
|
61
|
+
type: "text",
|
|
62
|
+
text: `${message}:\n\n${attributesStr}`,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error("Error getting entity attributes:", error);
|
|
69
|
+
return {
|
|
70
|
+
content: [
|
|
71
|
+
{
|
|
72
|
+
type: "text",
|
|
73
|
+
text: `Failed to get entity attributes: ${error.message}`,
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
server.tool("get-entity-attribute", "Get a specific attribute/field of a PowerPlatform entity", {
|
|
80
|
+
entityName: z.string().describe("The logical name of the entity"),
|
|
81
|
+
attributeName: z.string().describe("The logical name of the attribute")
|
|
82
|
+
}, async ({ entityName, attributeName }) => {
|
|
83
|
+
try {
|
|
84
|
+
const service = ctx.pp;
|
|
85
|
+
const attribute = await service.getEntityAttribute(entityName, attributeName);
|
|
86
|
+
const attributeStr = JSON.stringify(attribute, null, 2);
|
|
87
|
+
return {
|
|
88
|
+
content: [
|
|
89
|
+
{
|
|
90
|
+
type: "text",
|
|
91
|
+
text: `Attribute '${attributeName}' for entity '${entityName}':\n\n${attributeStr}`,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error("Error getting entity attribute:", error);
|
|
98
|
+
return {
|
|
99
|
+
content: [
|
|
100
|
+
{
|
|
101
|
+
type: "text",
|
|
102
|
+
text: `Failed to get entity attribute: ${error.message}`,
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
server.tool("get-entity-relationships", "Get relationships (one-to-many and many-to-many) for a PowerPlatform entity", {
|
|
109
|
+
entityName: z.string().describe("The logical name of the entity"),
|
|
110
|
+
}, async ({ entityName }) => {
|
|
111
|
+
try {
|
|
112
|
+
const service = ctx.pp;
|
|
113
|
+
const relationships = await service.getEntityRelationships(entityName);
|
|
114
|
+
const relationshipsStr = JSON.stringify(relationships, null, 2);
|
|
115
|
+
return {
|
|
116
|
+
content: [
|
|
117
|
+
{
|
|
118
|
+
type: "text",
|
|
119
|
+
text: `Relationships for entity '${entityName}':\n\n${relationshipsStr}`,
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error("Error getting entity relationships:", error);
|
|
126
|
+
return {
|
|
127
|
+
content: [
|
|
128
|
+
{
|
|
129
|
+
type: "text",
|
|
130
|
+
text: `Failed to get entity relationships: ${error.message}`,
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
server.tool("get-global-option-set", "Get a global option set definition by name", {
|
|
137
|
+
optionSetName: z.string().describe("The name of the global option set"),
|
|
138
|
+
}, async ({ optionSetName }) => {
|
|
139
|
+
try {
|
|
140
|
+
const service = ctx.pp;
|
|
141
|
+
const optionSet = await service.getGlobalOptionSet(optionSetName);
|
|
142
|
+
const optionSetStr = JSON.stringify(optionSet, null, 2);
|
|
143
|
+
return {
|
|
144
|
+
content: [
|
|
145
|
+
{
|
|
146
|
+
type: "text",
|
|
147
|
+
text: `Global option set '${optionSetName}':\n\n${optionSetStr}`,
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
console.error("Error getting global option set:", error);
|
|
154
|
+
return {
|
|
155
|
+
content: [
|
|
156
|
+
{
|
|
157
|
+
type: "text",
|
|
158
|
+
text: `Failed to get global option set: ${error.message}`,
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
//# 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;AAElD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CA0J1E"}
|