mcp-consultant-tools 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +305 -849
- package/build/AzureDevOpsService.js +2 -1
- package/build/PowerPlatformService.js +1377 -8
- package/build/index.js +2882 -180
- package/build/types/app-module.js +78 -0
- package/build/types/customization.js +74 -0
- package/build/utils/audit-logger.js +281 -0
- package/build/utils/bestPractices.js +337 -0
- package/build/utils/iconManager.js +287 -0
- package/build/utils/rate-limiter.js +240 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,65 +1,70 @@
|
|
|
1
1
|
# MCP Consultant Tools
|
|
2
2
|
|
|
3
|
-
A Model Context Protocol (MCP) server
|
|
3
|
+
A Model Context Protocol (MCP) server providing intelligent access to PowerPlatform/Dataverse, Azure DevOps, and Figma through an AI-friendly interface.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
- **PowerPlatform/Dataverse**: Rich entity metadata exploration with formatted, context-aware prompts, advanced OData query support, comprehensive relationship mapping
|
|
7
|
-
- **Azure DevOps**: Wiki search, work item management, WIQL queries, and team collaboration tools
|
|
8
|
-
- **Figma**: Design data extraction with simplified AI-friendly format, component analysis, and style deduplication
|
|
9
|
-
- AI-assisted query building and data modeling through AI agent
|
|
10
|
-
- Full access to entity attributes, relationships, and global option sets
|
|
5
|
+
## Overview
|
|
11
6
|
|
|
12
|
-
|
|
7
|
+
This MCP server enables AI assistants to:
|
|
8
|
+
- **PowerPlatform/Dataverse** (70+ tools):
|
|
9
|
+
- **READ**: Explore entity metadata, query records, inspect plugins, analyze workflows and flows
|
|
10
|
+
- **WRITE** *(Optional, Feature-Flagged)*:
|
|
11
|
+
- Entities & attributes (all 11 user-creatable types)
|
|
12
|
+
- Global option sets, forms, views
|
|
13
|
+
- Business rules, web resources
|
|
14
|
+
- Solutions, publishers, import/export
|
|
15
|
+
- Publishing & validation
|
|
16
|
+
- **Azure DevOps** (12 tools): Search wikis, manage work items, execute WIQL queries
|
|
17
|
+
- **Figma** (2 tools): Extract design data in simplified, AI-friendly format
|
|
13
18
|
|
|
14
|
-
|
|
19
|
+
All integrations are **optional** - configure only the services you need.
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
**Total: 86+ MCP tools** providing comprehensive access to your development lifecycle.
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
### Installation
|
|
21
26
|
|
|
22
|
-
|
|
27
|
+
Run directly with npx (no installation needed):
|
|
23
28
|
|
|
24
29
|
```bash
|
|
25
|
-
mcp-consultant-tools
|
|
30
|
+
npx mcp-consultant-tools@latest
|
|
26
31
|
```
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Run without installing:
|
|
33
|
+
Or install globally:
|
|
31
34
|
|
|
32
35
|
```bash
|
|
33
|
-
|
|
36
|
+
npm install -g mcp-consultant-tools
|
|
34
37
|
```
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
### Configuration
|
|
37
40
|
|
|
38
|
-
|
|
41
|
+
#### Claude Desktop
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
For VS Code with Claude Code extension, create a `.vscode/mcp.json` file in your repository:
|
|
43
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
|
|
43
44
|
|
|
44
45
|
```json
|
|
45
46
|
{
|
|
46
|
-
"
|
|
47
|
+
"mcpServers": {
|
|
47
48
|
"mcp-consultant-tools": {
|
|
48
49
|
"command": "npx",
|
|
49
|
-
"args": ["-y", "mcp-consultant-tools"],
|
|
50
|
+
"args": ["-y", "mcp-consultant-tools@latest"],
|
|
50
51
|
"env": {
|
|
51
52
|
"POWERPLATFORM_URL": "https://yourenvironment.crm.dynamics.com",
|
|
52
|
-
"POWERPLATFORM_CLIENT_ID": "your-
|
|
53
|
-
"POWERPLATFORM_CLIENT_SECRET": "your-
|
|
54
|
-
"POWERPLATFORM_TENANT_ID": "your-
|
|
55
|
-
"
|
|
56
|
-
"
|
|
53
|
+
"POWERPLATFORM_CLIENT_ID": "your-client-id",
|
|
54
|
+
"POWERPLATFORM_CLIENT_SECRET": "your-client-secret",
|
|
55
|
+
"POWERPLATFORM_TENANT_ID": "your-tenant-id",
|
|
56
|
+
"POWERPLATFORM_ENABLE_CUSTOMIZATION": "false",
|
|
57
|
+
"POWERPLATFORM_DEFAULT_SOLUTION": "",
|
|
58
|
+
|
|
59
|
+
"AZUREDEVOPS_ORGANIZATION": "your-org",
|
|
60
|
+
"AZUREDEVOPS_PAT": "your-pat",
|
|
57
61
|
"AZUREDEVOPS_PROJECTS": "Project1,Project2",
|
|
58
62
|
"AZUREDEVOPS_API_VERSION": "7.1",
|
|
59
|
-
"AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE": "
|
|
63
|
+
"AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE": "false",
|
|
60
64
|
"AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE": "false",
|
|
61
65
|
"AZUREDEVOPS_ENABLE_WIKI_WRITE": "false",
|
|
62
|
-
|
|
66
|
+
|
|
67
|
+
"FIGMA_API_KEY": "your-figma-token",
|
|
63
68
|
"FIGMA_OAUTH_TOKEN": "",
|
|
64
69
|
"FIGMA_USE_OAUTH": "false"
|
|
65
70
|
}
|
|
@@ -68,67 +73,35 @@ For VS Code with Claude Code extension, create a `.vscode/mcp.json` file in your
|
|
|
68
73
|
}
|
|
69
74
|
```
|
|
70
75
|
|
|
71
|
-
|
|
72
|
-
1. Save the `.vscode/mcp.json` file
|
|
73
|
-
2. Reload VS Code window
|
|
74
|
-
3. The MCP server will be available in Claude Code
|
|
76
|
+
Restart Claude Desktop after saving.
|
|
75
77
|
|
|
76
|
-
|
|
78
|
+
#### VS Code (Claude Code)
|
|
77
79
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
Add this to your Claude Desktop config file at `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
|
|
80
|
+
Create `.vscode/mcp.json` in your project:
|
|
81
81
|
|
|
82
82
|
```json
|
|
83
83
|
{
|
|
84
|
-
"
|
|
84
|
+
"servers": {
|
|
85
85
|
"mcp-consultant-tools": {
|
|
86
86
|
"command": "npx",
|
|
87
|
-
"args": ["-y", "mcp-consultant-tools"],
|
|
87
|
+
"args": ["-y", "mcp-consultant-tools@latest"],
|
|
88
88
|
"env": {
|
|
89
89
|
"POWERPLATFORM_URL": "https://yourenvironment.crm.dynamics.com",
|
|
90
|
-
"POWERPLATFORM_CLIENT_ID": "your-
|
|
91
|
-
"POWERPLATFORM_CLIENT_SECRET": "your-
|
|
92
|
-
"POWERPLATFORM_TENANT_ID": "your-
|
|
93
|
-
"
|
|
94
|
-
"
|
|
90
|
+
"POWERPLATFORM_CLIENT_ID": "your-client-id",
|
|
91
|
+
"POWERPLATFORM_CLIENT_SECRET": "your-client-secret",
|
|
92
|
+
"POWERPLATFORM_TENANT_ID": "your-tenant-id",
|
|
93
|
+
"POWERPLATFORM_ENABLE_CUSTOMIZATION": "false",
|
|
94
|
+
"POWERPLATFORM_DEFAULT_SOLUTION": "",
|
|
95
|
+
|
|
96
|
+
"AZUREDEVOPS_ORGANIZATION": "your-org",
|
|
97
|
+
"AZUREDEVOPS_PAT": "your-pat",
|
|
95
98
|
"AZUREDEVOPS_PROJECTS": "Project1,Project2",
|
|
96
99
|
"AZUREDEVOPS_API_VERSION": "7.1",
|
|
97
|
-
"AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE": "
|
|
100
|
+
"AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE": "false",
|
|
98
101
|
"AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE": "false",
|
|
99
102
|
"AZUREDEVOPS_ENABLE_WIKI_WRITE": "false",
|
|
100
|
-
"FIGMA_API_KEY": "your-figma-personal-access-token",
|
|
101
|
-
"FIGMA_OAUTH_TOKEN": "",
|
|
102
|
-
"FIGMA_USE_OAUTH": "false"
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Local Development Configuration
|
|
110
|
-
|
|
111
|
-
For local development and testing, you can run the server directly from your cloned repository using Node.js. Add this to your Claude Desktop config:
|
|
112
103
|
|
|
113
|
-
|
|
114
|
-
{
|
|
115
|
-
"mcpServers": {
|
|
116
|
-
"mcp-consultant-tools-dev": {
|
|
117
|
-
"command": "node",
|
|
118
|
-
"args": ["/absolute/path/to/mcp-consultant-tools/build/index.js"],
|
|
119
|
-
"env": {
|
|
120
|
-
"POWERPLATFORM_URL": "https://yourenvironment.crm.dynamics.com",
|
|
121
|
-
"POWERPLATFORM_CLIENT_ID": "your-azure-app-client-id",
|
|
122
|
-
"POWERPLATFORM_CLIENT_SECRET": "your-azure-app-client-secret",
|
|
123
|
-
"POWERPLATFORM_TENANT_ID": "your-azure-tenant-id",
|
|
124
|
-
"AZUREDEVOPS_ORGANIZATION": "your-organization-name",
|
|
125
|
-
"AZUREDEVOPS_PAT": "your-personal-access-token",
|
|
126
|
-
"AZUREDEVOPS_PROJECTS": "Project1,Project2",
|
|
127
|
-
"AZUREDEVOPS_API_VERSION": "7.1",
|
|
128
|
-
"AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE": "true",
|
|
129
|
-
"AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE": "false",
|
|
130
|
-
"AZUREDEVOPS_ENABLE_WIKI_WRITE": "false",
|
|
131
|
-
"FIGMA_API_KEY": "your-figma-personal-access-token",
|
|
104
|
+
"FIGMA_API_KEY": "your-figma-token",
|
|
132
105
|
"FIGMA_OAUTH_TOKEN": "",
|
|
133
106
|
"FIGMA_USE_OAUTH": "false"
|
|
134
107
|
}
|
|
@@ -137,847 +110,330 @@ For local development and testing, you can run the server directly from your clo
|
|
|
137
110
|
}
|
|
138
111
|
```
|
|
139
112
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
- `
|
|
152
|
-
- `
|
|
153
|
-
- `
|
|
154
|
-
- `
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
-
|
|
158
|
-
- `
|
|
159
|
-
- `
|
|
160
|
-
- `
|
|
161
|
-
- `
|
|
162
|
-
- `
|
|
163
|
-
- `
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
- `
|
|
168
|
-
- `
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
- `get-
|
|
194
|
-
|
|
195
|
-
-
|
|
196
|
-
- `get-
|
|
197
|
-
- `get-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
- `
|
|
203
|
-
- `get-
|
|
204
|
-
- `get-
|
|
205
|
-
- `get-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
- `
|
|
209
|
-
- `get-
|
|
210
|
-
- `
|
|
211
|
-
- `
|
|
212
|
-
- `
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
- `
|
|
218
|
-
- `
|
|
219
|
-
- `
|
|
220
|
-
- `
|
|
221
|
-
- `
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
- `
|
|
225
|
-
- `
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
- `
|
|
229
|
-
- `
|
|
230
|
-
- `
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
- `
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
###
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
Here's the OData query you need:
|
|
298
|
-
accounts?$select=name,revenue,statecode,address1_stateorprovince
|
|
299
|
-
&$filter=statecode eq 0
|
|
300
|
-
and revenue gt 1000000
|
|
301
|
-
and address1_stateorprovince eq 'California'
|
|
302
|
-
&$orderby=revenue desc
|
|
303
|
-
|
|
304
|
-
This query:
|
|
305
|
-
1. Selects relevant fields
|
|
306
|
-
2. Filters for active accounts (statecode eq 0)
|
|
307
|
-
3. Checks revenue > $1M
|
|
308
|
-
4. Filters for California location
|
|
309
|
-
5. Orders by revenue highest to lowest
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
### 3. Understanding Relationships
|
|
313
|
-
|
|
314
|
-
You can explore entity relationships naturally:
|
|
315
|
-
|
|
316
|
-
```
|
|
317
|
-
User: "How are Accounts and Contacts related in our system?"
|
|
318
|
-
|
|
319
|
-
Response:
|
|
320
|
-
[uses RELATIONSHIP_MAP prompt for both entities internally]
|
|
321
|
-
|
|
322
|
-
Here are the key relationships between Accounts and Contacts:
|
|
323
|
-
|
|
324
|
-
1. Primary Contact (One-to-Many):
|
|
325
|
-
- account_primary_contact: Account (1) → Contact (N)
|
|
326
|
-
- An account can have many contacts, but one designated as primary
|
|
327
|
-
|
|
328
|
-
2. Customer Relationship:
|
|
329
|
-
- contact_customer_accounts: Contact (N) ← Account (1)
|
|
330
|
-
- Contacts can be associated with customer accounts
|
|
331
|
-
|
|
332
|
-
3. Additional Relationships:
|
|
333
|
-
- accountleads_association: For lead tracking
|
|
334
|
-
- account_connections: For relationship management
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
### 4. Field/Attribute Investigation
|
|
338
|
-
|
|
339
|
-
You can ask about specific fields:
|
|
340
|
-
|
|
341
|
-
```
|
|
342
|
-
User: "What kind of field is the revenue field on Account?"
|
|
343
|
-
|
|
344
|
-
Response:
|
|
345
|
-
[uses ATTRIBUTE_DETAILS prompt internally]
|
|
346
|
-
|
|
347
|
-
The revenue field on Account is:
|
|
348
|
-
- Data Type: Money
|
|
349
|
-
- Format: Currency
|
|
350
|
-
- Not required
|
|
351
|
-
- Searchable: Yes
|
|
352
|
-
- Used for: Tracking annual revenue for the account
|
|
353
|
-
- Can be used in advanced find and filtered views
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
### 5. Complex Data Modeling
|
|
357
|
-
|
|
358
|
-
You can get help with data modeling decisions:
|
|
359
|
-
|
|
360
|
-
```
|
|
361
|
-
User: "I need to design a solution for tracking product reviews. Which entities should I relate to?"
|
|
362
|
-
|
|
363
|
-
Response:
|
|
364
|
-
[uses multiple ENTITY_OVERVIEW and RELATIONSHIP_MAP prompts internally]
|
|
365
|
-
|
|
366
|
-
Based on the existing data model, here's a suggested approach:
|
|
367
|
-
|
|
368
|
-
1. Product (existing entity):
|
|
369
|
-
- Already has relationships with:
|
|
370
|
-
* Price lists
|
|
371
|
-
* Product categories
|
|
372
|
-
* Inventory units
|
|
373
|
-
|
|
374
|
-
2. New Review entity should relate to:
|
|
375
|
-
- Product (N:1) - Each review is for one product
|
|
376
|
-
- Contact (N:1) - Reviews are written by contacts
|
|
377
|
-
- Account (N:1) - Optional link to company if B2B review
|
|
378
|
-
|
|
379
|
-
Here's a sample lookup field structure...
|
|
380
|
-
[continues with detailed implementation guidance]
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
### 6. Debugging Assistance
|
|
384
|
-
|
|
385
|
-
You can get help troubleshooting:
|
|
386
|
-
|
|
387
|
-
```
|
|
388
|
-
User: "Why am I getting 'invalid property' when querying account.customertypecode?"
|
|
389
|
-
|
|
390
|
-
Response:
|
|
391
|
-
[uses ATTRIBUTE_DETAILS prompt internally]
|
|
392
|
-
|
|
393
|
-
I see the issue. The field 'customertypecode' is actually named 'customertype' in your environment. Here's the correct field information:
|
|
394
|
-
- Logical Name: customertype
|
|
395
|
-
- Type: OptionSetValue
|
|
396
|
-
- Valid Values:
|
|
397
|
-
* 1 = Competitor
|
|
398
|
-
* 2 = Consultant
|
|
399
|
-
* 3 = Customer
|
|
400
|
-
* 4 = Investor
|
|
401
|
-
* 5 = Partner
|
|
402
|
-
* 6 = Influencer
|
|
403
|
-
|
|
404
|
-
Try updating your query to use 'customertype' instead of 'customertypecode'.
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
These examples show how AI assistant can leverage the MCP prompts to provide context-aware, accurate assistance for PowerPlatform development tasks. The AI understands your environment's specific configuration and can help with both simple queries and complex architectural decisions.
|
|
408
|
-
|
|
409
|
-
## Plugin Registration & Validation
|
|
410
|
-
|
|
411
|
-
The server includes powerful tools for plugin discovery, validation, and troubleshooting. These tools eliminate the need for the Plugin Registration Tool for most inspection tasks and enable AI-assisted PR reviews.
|
|
412
|
-
|
|
413
|
-
### Use Cases
|
|
414
|
-
|
|
415
|
-
#### 1. Discover Plugin Assemblies
|
|
416
|
-
```javascript
|
|
417
|
-
// List all custom (unmanaged) plugin assemblies
|
|
418
|
-
await mcpClient.invoke("get-plugin-assemblies", {
|
|
419
|
-
includeManaged: false
|
|
420
|
-
});
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
**Output:**
|
|
424
|
-
```json
|
|
425
|
-
{
|
|
426
|
-
"totalCount": 10,
|
|
427
|
-
"assemblies": [
|
|
428
|
-
{
|
|
429
|
-
"name": "MyCompany.Plugins",
|
|
430
|
-
"version": "1.0.0.5",
|
|
431
|
-
"isolationMode": "Sandbox",
|
|
432
|
-
"modifiedOn": "2024-01-15T10:30:00Z",
|
|
433
|
-
"modifiedBy": "John Doe"
|
|
434
|
-
}
|
|
435
|
-
]
|
|
436
|
-
}
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
#### 2. Validate Plugin Deployment (PR Review)
|
|
440
|
-
```javascript
|
|
441
|
-
// Get comprehensive assembly info with automatic validation
|
|
442
|
-
await mcpClient.invoke("get-plugin-assembly-complete", {
|
|
443
|
-
assemblyName": "MyCompany.Plugins",
|
|
444
|
-
includeDisabled: false
|
|
445
|
-
});
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
**Returns:**
|
|
449
|
-
- Assembly metadata (version, isolation mode, last modified)
|
|
450
|
-
- All plugin types (class names)
|
|
451
|
-
- All registered steps with:
|
|
452
|
-
- Stage (PreValidation/PreOperation/PostOperation)
|
|
453
|
-
- Mode (Synchronous/Asynchronous)
|
|
454
|
-
- Execution rank
|
|
455
|
-
- Filtering attributes
|
|
456
|
-
- Pre/Post images with column lists
|
|
457
|
-
- **Automatic validation** detecting:
|
|
458
|
-
- Missing filtering attributes (performance issue)
|
|
459
|
-
- Missing images (potential runtime errors)
|
|
460
|
-
- Disabled steps
|
|
461
|
-
- Configuration issues
|
|
462
|
-
|
|
463
|
-
#### 3. View Entity Plugin Pipeline
|
|
464
|
-
```javascript
|
|
465
|
-
// See all plugins that run on an entity in execution order
|
|
466
|
-
await mcpClient.invoke("get-entity-plugin-pipeline", {
|
|
467
|
-
entityName": "account",
|
|
468
|
-
messageFilter": "Update" // Optional: filter by message
|
|
469
|
-
});
|
|
470
|
-
```
|
|
471
|
-
|
|
472
|
-
**Shows:**
|
|
473
|
-
- All plugins organized by stage and rank
|
|
474
|
-
- Execution order
|
|
475
|
-
- Filtering attributes per step
|
|
476
|
-
- Images configured
|
|
477
|
-
- Assembly versions
|
|
478
|
-
|
|
479
|
-
#### 4. Troubleshoot with Trace Logs
|
|
480
|
-
```javascript
|
|
481
|
-
// Query recent plugin failures
|
|
482
|
-
await mcpClient.invoke("get-plugin-trace-logs", {
|
|
483
|
-
entityName: "account",
|
|
484
|
-
exceptionOnly: true,
|
|
485
|
-
hoursBack: 24,
|
|
486
|
-
maxRecords: 50
|
|
487
|
-
});
|
|
488
|
-
```
|
|
489
|
-
|
|
490
|
-
**Returns:**
|
|
491
|
-
- Parsed exception details
|
|
492
|
-
- Exception type and message
|
|
493
|
-
- Stack traces
|
|
494
|
-
- Execution duration
|
|
495
|
-
- Correlation IDs for further investigation
|
|
496
|
-
|
|
497
|
-
### Plugin Validation for PR Reviews
|
|
498
|
-
|
|
499
|
-
When reviewing plugin PRs, use the `plugin-deployment-report` prompt for a human-readable validation report:
|
|
113
|
+
Reload VS Code window after saving.
|
|
114
|
+
|
|
115
|
+
**Note:** Omit credentials for integrations you don't need. See [SETUP.md](SETUP.md) for complete configuration options.
|
|
116
|
+
|
|
117
|
+
## Available Tools
|
|
118
|
+
|
|
119
|
+
### PowerPlatform/Dataverse (72 tools)
|
|
120
|
+
|
|
121
|
+
**Entity & Data (Read - 7 tools):**
|
|
122
|
+
- `get-entity-metadata` - Get entity metadata
|
|
123
|
+
- `get-entity-attributes` - Get entity fields/attributes
|
|
124
|
+
- `get-entity-attribute` - Get specific attribute details
|
|
125
|
+
- `get-entity-relationships` - Get entity relationships
|
|
126
|
+
- `get-global-option-set` - Get option set definitions
|
|
127
|
+
- `get-record` - Get a specific record
|
|
128
|
+
- `query-records` - Query records with OData filters
|
|
129
|
+
|
|
130
|
+
**Entity Management (Write - 7 tools) - Requires POWERPLATFORM_ENABLE_CUSTOMIZATION=true:**
|
|
131
|
+
- `create-entity` - Create new custom entity (table)
|
|
132
|
+
- `update-entity` - Update entity metadata
|
|
133
|
+
- `delete-entity` - Delete custom entity
|
|
134
|
+
- `create-attribute` - Create new attribute (column) - supports all 11 user-creatable types
|
|
135
|
+
- `update-attribute` - Update attribute metadata
|
|
136
|
+
- `delete-attribute` - Delete attribute
|
|
137
|
+
- `create-global-optionset-attribute` - Create attribute using global option set
|
|
138
|
+
|
|
139
|
+
**Relationships (Write - 4 tools) - Requires POWERPLATFORM_ENABLE_CUSTOMIZATION=true:**
|
|
140
|
+
- `create-one-to-many-relationship` - Create 1:N relationship
|
|
141
|
+
- `create-many-to-many-relationship` - Create N:N relationship
|
|
142
|
+
- `update-relationship` - Update relationship metadata
|
|
143
|
+
- `delete-relationship` - Delete relationship
|
|
144
|
+
|
|
145
|
+
**Global Option Sets (Write - 5 tools) - Requires POWERPLATFORM_ENABLE_CUSTOMIZATION=true:**
|
|
146
|
+
- `update-global-optionset` - Update option set metadata
|
|
147
|
+
- `add-optionset-value` - Add new value to option set
|
|
148
|
+
- `update-optionset-value` - Update existing value
|
|
149
|
+
- `delete-optionset-value` - Delete value
|
|
150
|
+
- `reorder-optionset-values` - Reorder values
|
|
151
|
+
|
|
152
|
+
**Forms (Write - 6 tools) - Requires POWERPLATFORM_ENABLE_CUSTOMIZATION=true:**
|
|
153
|
+
- `create-form` - Create new form (Main, QuickCreate, QuickView, Card)
|
|
154
|
+
- `update-form` - Update form XML and metadata
|
|
155
|
+
- `delete-form` - Delete form
|
|
156
|
+
- `activate-form` - Activate form
|
|
157
|
+
- `deactivate-form` - Deactivate form
|
|
158
|
+
- `get-forms` - Get all forms for entity
|
|
159
|
+
|
|
160
|
+
**Views (Write - 6 tools) - Requires POWERPLATFORM_ENABLE_CUSTOMIZATION=true:**
|
|
161
|
+
- `create-view` - Create new view with FetchXML
|
|
162
|
+
- `update-view` - Update view query and layout
|
|
163
|
+
- `delete-view` - Delete view
|
|
164
|
+
- `set-default-view` - Set view as default
|
|
165
|
+
- `get-view-fetchxml` - Get view FetchXML
|
|
166
|
+
- `get-views` - Get all views for entity
|
|
167
|
+
|
|
168
|
+
**Business Rules (Read-only - 2 tools):**
|
|
169
|
+
- `get-business-rules` - List all business rules (for troubleshooting)
|
|
170
|
+
- `get-business-rule` - Get business rule definition (for troubleshooting)
|
|
171
|
+
|
|
172
|
+
**Web Resources (Write - 6 tools) - Requires POWERPLATFORM_ENABLE_CUSTOMIZATION=true:**
|
|
173
|
+
- `create-web-resource` - Create web resource (JS, CSS, HTML, images)
|
|
174
|
+
- `update-web-resource` - Update web resource content
|
|
175
|
+
- `delete-web-resource` - Delete web resource
|
|
176
|
+
- `get-web-resource` - Get web resource by ID
|
|
177
|
+
- `get-web-resources` - Get web resources by name pattern
|
|
178
|
+
- `get-webresource-dependencies` - Get web resource dependencies
|
|
179
|
+
|
|
180
|
+
**Solution Management (Write - 7 tools) - Requires POWERPLATFORM_ENABLE_CUSTOMIZATION=true:**
|
|
181
|
+
- `create-publisher` - Create new solution publisher
|
|
182
|
+
- `get-publishers` - Get all publishers
|
|
183
|
+
- `create-solution` - Create new solution
|
|
184
|
+
- `add-solution-component` - Add component to solution
|
|
185
|
+
- `remove-solution-component` - Remove component from solution
|
|
186
|
+
- `export-solution` - Export solution (managed/unmanaged)
|
|
187
|
+
- `import-solution` - Import solution from base64 zip
|
|
188
|
+
|
|
189
|
+
**Publishing & Validation (Write - 8 tools) - Requires POWERPLATFORM_ENABLE_CUSTOMIZATION=true:**
|
|
190
|
+
- `publish-customizations` - Publish all pending customizations
|
|
191
|
+
- `publish-entity` - Publish specific entity
|
|
192
|
+
- `check-dependencies` - Check component dependencies
|
|
193
|
+
- `check-entity-dependencies` - Check entity dependencies
|
|
194
|
+
- `check-delete-eligibility` - Check if component can be deleted
|
|
195
|
+
- `get-entity-customization-info` - Check if entity is customizable
|
|
196
|
+
- `validate-schema-name` - Validate schema name against rules
|
|
197
|
+
- `preview-unpublished-changes` - Preview unpublished customizations
|
|
198
|
+
- `validate-solution-integrity` - Validate solution for missing dependencies
|
|
199
|
+
|
|
200
|
+
**Plugins (Read - 4 tools):**
|
|
201
|
+
- `get-plugin-assemblies` - List plugin assemblies
|
|
202
|
+
- `get-plugin-assembly-complete` - Full assembly details with validation
|
|
203
|
+
- `get-entity-plugin-pipeline` - Plugin execution order for entity
|
|
204
|
+
- `get-plugin-trace-logs` - Query plugin execution logs
|
|
205
|
+
|
|
206
|
+
**Workflows & Flows (Read - 5 tools):**
|
|
207
|
+
- `get-flows` - List Power Automate flows
|
|
208
|
+
- `get-flow-definition` - Get flow definition and logic
|
|
209
|
+
- `get-flow-runs` - Get flow run history
|
|
210
|
+
- `get-workflows` - List classic workflows
|
|
211
|
+
- `get-workflow-definition` - Get workflow definition
|
|
212
|
+
|
|
213
|
+
### Azure DevOps (12 tools)
|
|
214
|
+
|
|
215
|
+
**Wikis:**
|
|
216
|
+
- `get-wikis` - List wikis in project
|
|
217
|
+
- `search-wiki-pages` - Full-text search across wikis
|
|
218
|
+
- `get-wiki-page` - Get wiki page content
|
|
219
|
+
- `create-wiki-page` - Create new wiki page (requires write permission)
|
|
220
|
+
- `update-wiki-page` - Update wiki page (requires write permission)
|
|
221
|
+
|
|
222
|
+
**Work Items:**
|
|
223
|
+
- `get-work-item` - Get work item by ID
|
|
224
|
+
- `query-work-items` - Execute WIQL queries
|
|
225
|
+
- `get-work-item-comments` - Get work item comments
|
|
226
|
+
- `add-work-item-comment` - Add comment (requires write permission)
|
|
227
|
+
- `update-work-item` - Update work item fields (requires write permission)
|
|
228
|
+
- `create-work-item` - Create new work item (requires write permission)
|
|
229
|
+
- `delete-work-item` - Delete work item (requires delete permission)
|
|
230
|
+
|
|
231
|
+
### Figma (2 tools)
|
|
232
|
+
|
|
233
|
+
- `get-figma-data` - Get design data (layout, text, styles, components)
|
|
234
|
+
- `download-figma-images` - Download images (coming in v2)
|
|
235
|
+
|
|
236
|
+
## Available Prompts
|
|
237
|
+
|
|
238
|
+
The server includes **13 prompts** that provide formatted, context-rich output:
|
|
239
|
+
|
|
240
|
+
**PowerPlatform:**
|
|
241
|
+
- `entity-overview` - Comprehensive entity overview
|
|
242
|
+
- `attribute-details` - Detailed attribute information
|
|
243
|
+
- `query-template` - OData query examples
|
|
244
|
+
- `relationship-map` - Visual relationship mapping
|
|
245
|
+
- `plugin-deployment-report` - Plugin validation for PR reviews
|
|
246
|
+
- `entity-plugin-pipeline-report` - Visual plugin execution pipeline
|
|
247
|
+
- `flows-report` - Power Automate flows report
|
|
248
|
+
- `workflows-report` - Classic workflows report
|
|
249
|
+
- `business-rules-report` - Business rules report (read-only)
|
|
250
|
+
|
|
251
|
+
**Azure DevOps:**
|
|
252
|
+
- `wiki-search-results` - Formatted wiki search results
|
|
253
|
+
- `wiki-page-content` - Formatted wiki page with navigation
|
|
254
|
+
- `work-item-summary` - Comprehensive work item summary
|
|
255
|
+
- `work-items-query-report` - Formatted WIQL query results
|
|
256
|
+
|
|
257
|
+
## Documentation
|
|
258
|
+
|
|
259
|
+
- **[SETUP.md](SETUP.md)** - Complete setup guide with credentials, troubleshooting, and security
|
|
260
|
+
- **[TOOLS.md](TOOLS.md)** - Full reference for all 86+ tools and 12 prompts
|
|
261
|
+
- **[USAGE.md](USAGE.md)** - Examples and use cases for all integrations
|
|
262
|
+
- **[CLAUDE.md](CLAUDE.md)** - Architecture details and development guide
|
|
263
|
+
|
|
264
|
+
## Key Features
|
|
265
|
+
|
|
266
|
+
### PowerPlatform Plugin Validation
|
|
267
|
+
|
|
268
|
+
Automatically validate plugin deployments for PR reviews:
|
|
500
269
|
|
|
501
270
|
```javascript
|
|
271
|
+
// Get complete validation report
|
|
502
272
|
await mcpClient.callPrompt("plugin-deployment-report", {
|
|
503
273
|
assemblyName: "MyCompany.Plugins"
|
|
504
274
|
});
|
|
505
275
|
```
|
|
506
276
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
## Assembly Information
|
|
512
|
-
- Version: 1.0.0.5
|
|
513
|
-
- Isolation Mode: Sandbox
|
|
514
|
-
- Last Modified: 2024-01-15 by John Doe
|
|
515
|
-
|
|
516
|
-
## Registered Steps (8 total)
|
|
517
|
-
|
|
518
|
-
### Update - Account (PreOperation, Sync, Rank 10)
|
|
519
|
-
- Plugin: MyCompany.Plugins.AccountPlugin
|
|
520
|
-
- Status: ✓ Enabled
|
|
521
|
-
- Filtering Attributes: name, revenue, industrycode
|
|
522
|
-
- Images:
|
|
523
|
-
- PreImage "Target" → Attributes: name, revenue, accountnumber
|
|
524
|
-
|
|
525
|
-
## Validation Results
|
|
526
|
-
|
|
527
|
-
✓ All steps are enabled
|
|
528
|
-
✓ All Update/Delete steps have filtering attributes
|
|
529
|
-
⚠ Warning: 2 steps without images (may need entity data)
|
|
530
|
-
|
|
531
|
-
### Potential Issues
|
|
532
|
-
- Account.Delete step missing PreImage - code may fail at runtime
|
|
533
|
-
```
|
|
277
|
+
Returns:
|
|
278
|
+
- Assembly information
|
|
279
|
+
- All registered steps
|
|
280
|
+
- **Automatic validation warnings** for missing filtering attributes, images, disabled steps
|
|
534
281
|
|
|
535
|
-
###
|
|
282
|
+
### Azure DevOps Integration
|
|
536
283
|
|
|
537
|
-
|
|
284
|
+
Search documentation and manage work items:
|
|
538
285
|
|
|
539
286
|
```javascript
|
|
540
|
-
|
|
541
|
-
entityName: "account",
|
|
542
|
-
messageFilter: "Update" // Optional
|
|
543
|
-
});
|
|
544
|
-
```
|
|
545
|
-
|
|
546
|
-
**Sample Report:**
|
|
547
|
-
```markdown
|
|
548
|
-
# Plugin Pipeline: Account Entity
|
|
549
|
-
|
|
550
|
-
## Update Message
|
|
551
|
-
|
|
552
|
-
### Stage 1: PreValidation (Synchronous)
|
|
553
|
-
1. [Rank 5] DataValidationPlugin.ValidateAccount
|
|
554
|
-
- Assembly: ValidationPlugins v1.0.0
|
|
555
|
-
- Filtering: name, accountnumber
|
|
556
|
-
|
|
557
|
-
### Stage 2: PreOperation (Synchronous)
|
|
558
|
-
1. [Rank 10] BusinessLogicPlugin.EnrichAccountData
|
|
559
|
-
- Assembly: BusinessLogic v2.0.1
|
|
560
|
-
- Filtering: revenue, industrycode
|
|
561
|
-
- Images: PreImage
|
|
562
|
-
|
|
563
|
-
### Stage 3: PostOperation
|
|
564
|
-
1. [Rank 10] IntegrationPlugin.SyncToERP (Async)
|
|
565
|
-
- Assembly: Integrations v3.1.0
|
|
566
|
-
- Filtering: revenue
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
## Azure DevOps Integration
|
|
570
|
-
|
|
571
|
-
In addition to PowerPlatform capabilities, this MCP server provides comprehensive Azure DevOps integration for accessing wikis and work items across your organization.
|
|
572
|
-
|
|
573
|
-
### Azure DevOps Configuration
|
|
574
|
-
|
|
575
|
-
Set the following environment variables to enable Azure DevOps integration:
|
|
576
|
-
|
|
577
|
-
```bash
|
|
578
|
-
# Required: Azure DevOps organization and authentication
|
|
579
|
-
AZUREDEVOPS_ORGANIZATION=your-organization-name
|
|
580
|
-
AZUREDEVOPS_PAT=your-personal-access-token
|
|
581
|
-
AZUREDEVOPS_PROJECTS=Project1,Project2,Project3 # Comma-separated list of allowed projects
|
|
582
|
-
|
|
583
|
-
# Optional: API version (default: 7.1)
|
|
584
|
-
AZUREDEVOPS_API_VERSION=7.1
|
|
585
|
-
|
|
586
|
-
# Optional: Feature flags to control write/delete operations (default: false for all)
|
|
587
|
-
AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true # Enable create/update work items
|
|
588
|
-
AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE=true # Enable delete work items
|
|
589
|
-
AZUREDEVOPS_ENABLE_WIKI_WRITE=true # Enable create/update wiki pages
|
|
590
|
-
```
|
|
591
|
-
|
|
592
|
-
#### Creating a Personal Access Token (PAT)
|
|
593
|
-
|
|
594
|
-
1. Go to Azure DevOps → User Settings → Personal Access Tokens
|
|
595
|
-
2. Click "New Token"
|
|
596
|
-
3. Set required scopes:
|
|
597
|
-
- **Wiki**: `vso.wiki` (Read)
|
|
598
|
-
- **Work Items**: `vso.work` (Read) and optionally `vso.work_write` (Read & Write)
|
|
599
|
-
- **Search**: `vso.search` (Read - for wiki search)
|
|
600
|
-
4. Copy the token and set it in `AZUREDEVOPS_PAT` environment variable
|
|
601
|
-
|
|
602
|
-
**Security Note**: The PAT is scoped to specific permissions and projects. For maximum security, create separate PATs for read-only vs write operations.
|
|
603
|
-
|
|
604
|
-
### Available Azure DevOps Tools
|
|
605
|
-
|
|
606
|
-
#### Wiki Tools (5 tools)
|
|
607
|
-
- `get-wikis`: List all wikis in a project
|
|
608
|
-
- `search-wiki-pages`: Search wiki content across projects with highlighting
|
|
609
|
-
- `get-wiki-page`: Get specific wiki page content and metadata
|
|
610
|
-
- `create-wiki-page`: Create new wiki page (requires `AZUREDEVOPS_ENABLE_WIKI_WRITE=true`)
|
|
611
|
-
- `update-wiki-page`: Update existing wiki page (requires `AZUREDEVOPS_ENABLE_WIKI_WRITE=true`)
|
|
612
|
-
|
|
613
|
-
#### Work Item Tools (7 tools)
|
|
614
|
-
- `get-work-item`: Get work item by ID with full details
|
|
615
|
-
- `query-work-items`: Execute WIQL queries to find work items
|
|
616
|
-
- `get-work-item-comments`: Get discussion comments for a work item
|
|
617
|
-
- `add-work-item-comment`: Add comment to work item (requires `AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true`)
|
|
618
|
-
- `update-work-item`: Update work item fields using JSON Patch (requires `AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true`)
|
|
619
|
-
- `create-work-item`: Create new work item (requires `AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true`)
|
|
620
|
-
- `delete-work-item`: Delete work item (requires `AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE=true`)
|
|
621
|
-
|
|
622
|
-
### Available Azure DevOps Prompts
|
|
623
|
-
|
|
624
|
-
The server includes 4 prompts for formatted, human-readable Azure DevOps data:
|
|
625
|
-
|
|
626
|
-
1. **wiki-search-results**: Search wiki pages and get formatted results with content snippets
|
|
627
|
-
2. **wiki-page-content**: Get formatted wiki page with navigation context
|
|
628
|
-
3. **work-item-summary**: Comprehensive work item summary with details and comments
|
|
629
|
-
4. **work-items-query-report**: Execute WIQL query and get results grouped by state/type
|
|
630
|
-
|
|
631
|
-
### Azure DevOps Usage Examples
|
|
632
|
-
|
|
633
|
-
#### Example 1: Search Wiki Documentation
|
|
634
|
-
|
|
635
|
-
```javascript
|
|
636
|
-
// Search for authentication-related wiki pages
|
|
287
|
+
// Search wiki
|
|
637
288
|
await mcpClient.callPrompt("wiki-search-results", {
|
|
638
289
|
searchText: "authentication",
|
|
639
|
-
project: "MyProject"
|
|
640
|
-
maxResults: 10
|
|
641
|
-
});
|
|
642
|
-
```
|
|
643
|
-
|
|
644
|
-
**Sample Output:**
|
|
645
|
-
```markdown
|
|
646
|
-
# Wiki Search Results: "authentication"
|
|
647
|
-
|
|
648
|
-
**Project:** MyProject
|
|
649
|
-
**Total Results:** 3
|
|
650
|
-
|
|
651
|
-
## Results
|
|
652
|
-
|
|
653
|
-
### 1. Setup-Guide.md
|
|
654
|
-
- **Path:** /Setup/Setup-Guide
|
|
655
|
-
- **Wiki:** MyProject.wiki
|
|
656
|
-
- **Project:** MyProject
|
|
657
|
-
- **Highlights:**
|
|
658
|
-
- Authentication can be configured using OAuth or Azure AD
|
|
659
|
-
- The authentication flow supports SAML and JWT tokens
|
|
660
|
-
```
|
|
661
|
-
|
|
662
|
-
#### Example 2: Get Work Item with Comments
|
|
663
|
-
|
|
664
|
-
```javascript
|
|
665
|
-
// Get detailed work item summary with all comments
|
|
666
|
-
await mcpClient.callPrompt("work-item-summary", {
|
|
667
|
-
project: "MyProject",
|
|
668
|
-
workItemId: 12345
|
|
290
|
+
project: "MyProject"
|
|
669
291
|
});
|
|
670
|
-
```
|
|
671
|
-
|
|
672
|
-
**Sample Output:**
|
|
673
|
-
```markdown
|
|
674
|
-
# Work Item #12345: Login button not working
|
|
675
292
|
|
|
676
|
-
|
|
677
|
-
- **Type:** Bug
|
|
678
|
-
- **State:** Active
|
|
679
|
-
- **Assigned To:** John Doe
|
|
680
|
-
- **Created By:** Jane Smith
|
|
681
|
-
- **Created Date:** 2024-01-15T10:30:00Z
|
|
682
|
-
- **Area Path:** MyProject\\Web\\Authentication
|
|
683
|
-
- **Iteration Path:** Sprint 23
|
|
684
|
-
- **Tags:** critical, authentication
|
|
685
|
-
|
|
686
|
-
## Description
|
|
687
|
-
When users click the login button on the homepage, nothing happens.
|
|
688
|
-
The console shows a JavaScript error: "Cannot read property 'submit' of null"
|
|
689
|
-
|
|
690
|
-
## Repro Steps
|
|
691
|
-
1. Navigate to https://myapp.com
|
|
692
|
-
2. Click the "Login" button in the top right
|
|
693
|
-
3. Observe that nothing happens
|
|
694
|
-
|
|
695
|
-
## Comments (3)
|
|
696
|
-
|
|
697
|
-
### John Doe - 1/15/2024 11:00 AM
|
|
698
|
-
I've investigated this issue. The problem is in the form validation logic.
|
|
699
|
-
|
|
700
|
-
### Jane Smith - 1/15/2024 2:30 PM
|
|
701
|
-
Created PR #456 to fix this issue.
|
|
702
|
-
```
|
|
703
|
-
|
|
704
|
-
#### Example 3: Query Active Bugs
|
|
705
|
-
|
|
706
|
-
```javascript
|
|
707
|
-
// Find all active bugs assigned to current user
|
|
293
|
+
// Query work items
|
|
708
294
|
await mcpClient.callPrompt("work-items-query-report", {
|
|
709
295
|
project: "MyProject",
|
|
710
|
-
wiql: "SELECT
|
|
296
|
+
wiql: "SELECT * FROM WorkItems WHERE [State] = 'Active' AND [Assigned To] = @me"
|
|
711
297
|
});
|
|
712
298
|
```
|
|
713
299
|
|
|
714
|
-
|
|
715
|
-
```markdown
|
|
716
|
-
# Work Items Query Results
|
|
300
|
+
### Figma Design Extraction
|
|
717
301
|
|
|
718
|
-
|
|
719
|
-
**Total Results:** 5
|
|
720
|
-
|
|
721
|
-
## Active (5)
|
|
722
|
-
|
|
723
|
-
- **#12345**: Login button not working
|
|
724
|
-
- Type: Bug, Assigned: John Doe
|
|
725
|
-
- **#12346**: Password reset email not sent
|
|
726
|
-
- Type: Bug, Assigned: John Doe
|
|
727
|
-
- **#12347**: Dashboard loads slowly
|
|
728
|
-
- Type: Bug, Assigned: John Doe
|
|
729
|
-
```
|
|
730
|
-
|
|
731
|
-
#### Example 4: Read Wiki Page
|
|
302
|
+
Extract design specifications in AI-friendly format:
|
|
732
303
|
|
|
733
304
|
```javascript
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
wikiId: "MyProject.wiki",
|
|
738
|
-
pagePath: "/Architecture/API-Design"
|
|
305
|
+
await mcpClient.invoke("get-figma-data", {
|
|
306
|
+
fileKey: "ABC123xyz",
|
|
307
|
+
depth: 3 // Limit depth for large files
|
|
739
308
|
});
|
|
740
309
|
```
|
|
741
310
|
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
311
|
+
Returns simplified JSON with:
|
|
312
|
+
- Layout properties
|
|
313
|
+
- Text and typography
|
|
314
|
+
- Colors, fills, strokes
|
|
315
|
+
- Component definitions
|
|
316
|
+
- Deduplicated styles
|
|
745
317
|
|
|
746
|
-
|
|
747
|
-
**Wiki:** MyProject.wiki
|
|
748
|
-
**Git Path:** Architecture/API-Design.md
|
|
318
|
+
## Security & Permissions
|
|
749
319
|
|
|
750
|
-
|
|
751
|
-
- /Architecture/API-Design/REST-Guidelines
|
|
752
|
-
- /Architecture/API-Design/Authentication
|
|
753
|
-
- /Architecture/API-Design/Versioning
|
|
320
|
+
All integrations are optional and can be configured independently:
|
|
754
321
|
|
|
755
|
-
|
|
322
|
+
**PowerPlatform:**
|
|
323
|
+
- Requires Azure AD app registration
|
|
324
|
+
- Uses OAuth authentication with automatic token refresh
|
|
325
|
+
- **Customization tools** (optional, opt-in):
|
|
326
|
+
- Set `POWERPLATFORM_ENABLE_CUSTOMIZATION=true` to enable write operations
|
|
327
|
+
- Create entities, attributes, and publish customizations
|
|
328
|
+
- Specify `POWERPLATFORM_DEFAULT_SOLUTION` to auto-add customizations to a solution
|
|
329
|
+
- **WARNING:** These tools make permanent changes to your CRM environment. Use with caution.
|
|
756
330
|
|
|
757
|
-
|
|
331
|
+
**Azure DevOps:**
|
|
332
|
+
- Requires Personal Access Token (PAT)
|
|
333
|
+
- Write operations disabled by default (enable with environment variables)
|
|
334
|
+
- Project access controlled via `AZUREDEVOPS_PROJECTS`
|
|
758
335
|
|
|
759
|
-
|
|
336
|
+
**Figma:**
|
|
337
|
+
- Requires Personal Access Token or OAuth
|
|
338
|
+
- Read-only access to design files
|
|
760
339
|
|
|
761
|
-
|
|
762
|
-
1. Use nouns for resources
|
|
763
|
-
2. Use HTTP methods correctly...
|
|
764
|
-
```
|
|
765
|
-
|
|
766
|
-
#### Example 5: Create Work Item (Write Operations)
|
|
340
|
+
See [SETUP.md](SETUP.md#security-best-practices) for security best practices.
|
|
767
341
|
|
|
768
|
-
|
|
769
|
-
// Create a new bug (requires AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true)
|
|
770
|
-
await mcpClient.invoke("create-work-item", {
|
|
771
|
-
project: "MyProject",
|
|
772
|
-
workItemType: "Bug",
|
|
773
|
-
fields: {
|
|
774
|
-
"System.Title": "Login page shows 404 error",
|
|
775
|
-
"System.Description": "After deploying v2.3, the login page returns 404",
|
|
776
|
-
"System.AssignedTo": "john@company.com",
|
|
777
|
-
"Microsoft.VSTS.TCM.ReproSteps": "1. Navigate to /login\n2. Observe 404 error",
|
|
778
|
-
"System.Tags": "critical; deployment"
|
|
779
|
-
}
|
|
780
|
-
});
|
|
781
|
-
```
|
|
342
|
+
## Examples
|
|
782
343
|
|
|
783
|
-
|
|
344
|
+
### Ask about PowerPlatform entities
|
|
784
345
|
|
|
785
|
-
```javascript
|
|
786
|
-
// Update work item to Resolved (requires AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true)
|
|
787
|
-
await mcpClient.invoke("update-work-item", {
|
|
788
|
-
project: "MyProject",
|
|
789
|
-
workItemId: 12345,
|
|
790
|
-
patchOperations: [
|
|
791
|
-
{
|
|
792
|
-
"op": "add",
|
|
793
|
-
"path": "/fields/System.State",
|
|
794
|
-
"value": "Resolved"
|
|
795
|
-
},
|
|
796
|
-
{
|
|
797
|
-
"op": "add",
|
|
798
|
-
"path": "/fields/System.History",
|
|
799
|
-
"value": "Fixed in PR #456. Verified in staging environment."
|
|
800
|
-
}
|
|
801
|
-
]
|
|
802
|
-
});
|
|
803
346
|
```
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
Work Items queries use WIQL (Work Item Query Language), a SQL-like language:
|
|
808
|
-
|
|
809
|
-
**Common WIQL Patterns:**
|
|
810
|
-
|
|
811
|
-
```sql
|
|
812
|
-
-- Find all active bugs
|
|
813
|
-
SELECT [System.Id], [System.Title]
|
|
814
|
-
FROM WorkItems
|
|
815
|
-
WHERE [System.WorkItemType] = 'Bug'
|
|
816
|
-
AND [System.State] = 'Active'
|
|
817
|
-
|
|
818
|
-
-- Find work items changed in last 7 days
|
|
819
|
-
SELECT [System.Id], [System.Title], [System.ChangedDate]
|
|
820
|
-
FROM WorkItems
|
|
821
|
-
WHERE [System.TeamProject] = @project
|
|
822
|
-
AND [System.ChangedDate] > @today - 7
|
|
823
|
-
|
|
824
|
-
-- Find my active tasks in current sprint
|
|
825
|
-
SELECT [System.Id], [System.Title]
|
|
826
|
-
FROM WorkItems
|
|
827
|
-
WHERE [System.WorkItemType] = 'Task'
|
|
828
|
-
AND [System.AssignedTo] = @me
|
|
829
|
-
AND [System.State] = 'Active'
|
|
830
|
-
AND [System.IterationPath] UNDER @currentIteration
|
|
831
|
-
|
|
832
|
-
-- Find user stories with specific tag
|
|
833
|
-
SELECT [System.Id], [System.Title], [System.Tags]
|
|
834
|
-
FROM WorkItems
|
|
835
|
-
WHERE [System.WorkItemType] = 'User Story'
|
|
836
|
-
AND [System.Tags] CONTAINS 'authentication'
|
|
347
|
+
User: "Tell me about the Account entity"
|
|
348
|
+
AI: [uses entity-overview prompt]
|
|
349
|
+
Returns comprehensive overview with key fields and relationships
|
|
837
350
|
```
|
|
838
351
|
|
|
839
|
-
|
|
840
|
-
- `@me` - Current user
|
|
841
|
-
- `@today` - Today's date
|
|
842
|
-
- `@project` - Current project
|
|
843
|
-
- `@currentIteration` - Current iteration path
|
|
844
|
-
|
|
845
|
-
### Integration Use Cases
|
|
846
|
-
|
|
847
|
-
#### Use Case 1: AI-Assisted Development with Context
|
|
848
|
-
|
|
849
|
-
When working on a feature, the AI can automatically search relevant wiki documentation:
|
|
352
|
+
### Build OData queries
|
|
850
353
|
|
|
851
354
|
```
|
|
852
|
-
User: "
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
1. Searches wiki: search-wiki-pages with "OAuth authentication"
|
|
856
|
-
2. Finds and reads: get-wiki-page for /Architecture/Authentication/OAuth-Setup
|
|
857
|
-
3. Queries related work items: query-work-items for authentication tasks
|
|
858
|
-
4. Provides implementation guidance based on your organization's standards
|
|
355
|
+
User: "Help me query active accounts with revenue over $1M"
|
|
356
|
+
AI: [uses query-template prompt]
|
|
357
|
+
Returns formatted OData query with filters
|
|
859
358
|
```
|
|
860
359
|
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
AI can help manage work items throughout development:
|
|
360
|
+
### Plugin PR reviews
|
|
864
361
|
|
|
865
362
|
```
|
|
866
|
-
User: "
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
1. Gets work item details: get-work-item
|
|
870
|
-
2. Updates state: update-work-item to "Resolved"
|
|
871
|
-
3. Adds comment: add-work-item-comment with fix details
|
|
872
|
-
4. Links to PR if available
|
|
363
|
+
User: "Validate the deployment of MyCompany.Plugins"
|
|
364
|
+
AI: [uses plugin-deployment-report prompt]
|
|
365
|
+
Returns validation report with warnings
|
|
873
366
|
```
|
|
874
367
|
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
AI can analyze sprint work items and provide insights:
|
|
368
|
+
### Search Azure DevOps wikis
|
|
878
369
|
|
|
879
370
|
```
|
|
880
|
-
User: "
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
1. Executes WIQL query: query-work-items
|
|
884
|
-
2. Groups results: work-items-query-report by priority/state
|
|
885
|
-
3. Identifies blockers and dependencies
|
|
886
|
-
4. Suggests prioritization based on severity
|
|
371
|
+
User: "Search our wiki for OAuth documentation"
|
|
372
|
+
AI: [uses wiki-search-results prompt]
|
|
373
|
+
Returns formatted search results with snippets
|
|
887
374
|
```
|
|
888
375
|
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
AI can search and summarize documentation across wiki pages:
|
|
376
|
+
See [USAGE.md](USAGE.md) for more examples.
|
|
892
377
|
|
|
893
|
-
|
|
894
|
-
User: "How do we handle database migrations in our projects?"
|
|
895
|
-
|
|
896
|
-
AI Agent:
|
|
897
|
-
1. Searches wikis: search-wiki-pages for "database migrations"
|
|
898
|
-
2. Reads relevant pages: wiki-page-content for each result
|
|
899
|
-
3. Summarizes best practices from your team's documentation
|
|
900
|
-
4. Provides code examples from wiki pages
|
|
901
|
-
```
|
|
378
|
+
## Development
|
|
902
379
|
|
|
903
|
-
###
|
|
380
|
+
### Local Development Setup
|
|
904
381
|
|
|
905
|
-
|
|
382
|
+
```bash
|
|
383
|
+
# Clone repository
|
|
384
|
+
git clone <repository-url>
|
|
385
|
+
cd mcp-consultant-tools
|
|
906
386
|
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
3. **Feature Flags**: Write operations are disabled by default and must be explicitly enabled
|
|
910
|
-
4. **Audit Trail**: All API operations are logged in Azure DevOps audit logs
|
|
387
|
+
# Install dependencies
|
|
388
|
+
npm install
|
|
911
389
|
|
|
912
|
-
|
|
390
|
+
# Build
|
|
391
|
+
npm run build
|
|
913
392
|
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=false
|
|
917
|
-
AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE=false
|
|
918
|
-
AZUREDEVOPS_ENABLE_WIKI_WRITE=false
|
|
919
|
-
# PAT with: vso.wiki (read), vso.work (read), vso.search (read)
|
|
393
|
+
# Run locally
|
|
394
|
+
node build/index.js
|
|
920
395
|
```
|
|
921
396
|
|
|
922
|
-
|
|
923
|
-
```bash
|
|
924
|
-
AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true # Can update work items and add comments
|
|
925
|
-
AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE=false # Cannot delete
|
|
926
|
-
AZUREDEVOPS_ENABLE_WIKI_WRITE=false # Cannot modify wikis
|
|
927
|
-
# PAT with: vso.wiki (read), vso.work_write (read/write), vso.search (read)
|
|
928
|
-
```
|
|
397
|
+
### Branch Strategy
|
|
929
398
|
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE=true
|
|
934
|
-
AZUREDEVOPS_ENABLE_WIKI_WRITE=true
|
|
935
|
-
# PAT with: vso.wiki (read/write), vso.work_write (read/write), vso.search (read)
|
|
936
|
-
```
|
|
399
|
+
- **`main`** - Production code (published to npm)
|
|
400
|
+
- **`release/*`** - Testing before merge to main
|
|
401
|
+
- **`feature/*`** - Active development
|
|
937
402
|
|
|
938
|
-
|
|
403
|
+
**Publishing workflow:**
|
|
404
|
+
1. Merge to `main`
|
|
405
|
+
2. `npm version patch|minor|major`
|
|
406
|
+
3. `npm publish`
|
|
407
|
+
4. `git push && git push --tags`
|
|
939
408
|
|
|
940
|
-
|
|
409
|
+
See [CLAUDE.md](CLAUDE.md) for detailed architecture and development guide.
|
|
941
410
|
|
|
942
|
-
|
|
411
|
+
## Updates
|
|
943
412
|
|
|
944
|
-
|
|
945
|
-
- Create feature branches off `main`
|
|
946
|
-
- Develop and test changes locally
|
|
947
|
-
- Do NOT publish to npm from feature branches
|
|
948
|
-
|
|
949
|
-
- **`release/*` branches**: For testing versions before release
|
|
950
|
-
- Used to test and validate changes before merging to main
|
|
951
|
-
- Do NOT publish to npm from release branches
|
|
952
|
-
- Example: `release/1.0`, `release/2.0`
|
|
953
|
-
|
|
954
|
-
- **`main` branch**: Production-ready code
|
|
955
|
-
- **ONLY** publish to npm when main branch is updated
|
|
956
|
-
- Merge feature/release branches to main when ready
|
|
957
|
-
- Publishing workflow:
|
|
958
|
-
1. Merge changes to `main`
|
|
959
|
-
2. Update version: `npm version patch|minor|major`
|
|
960
|
-
3. Publish: `npm publish`
|
|
961
|
-
4. Push to GitHub: `git push && git push --tags`
|
|
413
|
+
### Ensuring Latest Version
|
|
962
414
|
|
|
963
|
-
|
|
415
|
+
**Using npx (recommended):**
|
|
964
416
|
|
|
965
|
-
|
|
417
|
+
Always use `@latest` in your configuration:
|
|
966
418
|
|
|
967
419
|
```json
|
|
968
420
|
{
|
|
969
|
-
"
|
|
970
|
-
"mcp-consultant-tools-dev": {
|
|
971
|
-
"command": "node",
|
|
972
|
-
"args": ["/absolute/path/to/mcp-consultant-tools/build/index.js"],
|
|
973
|
-
"env": { ... }
|
|
974
|
-
}
|
|
975
|
-
}
|
|
421
|
+
"args": ["-y", "mcp-consultant-tools@latest"]
|
|
976
422
|
}
|
|
977
423
|
```
|
|
978
424
|
|
|
979
|
-
|
|
425
|
+
**Using global install:**
|
|
426
|
+
|
|
427
|
+
```bash
|
|
428
|
+
npm update -g mcp-consultant-tools
|
|
429
|
+
```
|
|
980
430
|
|
|
981
431
|
## License
|
|
982
432
|
|
|
983
433
|
MIT
|
|
434
|
+
|
|
435
|
+
## Support
|
|
436
|
+
|
|
437
|
+
- **Issues**: Report bugs or request features in the GitHub repository
|
|
438
|
+
- **Documentation**: See docs above for complete guides
|
|
439
|
+
- **Architecture**: See [CLAUDE.md](CLAUDE.md) for technical details
|