@mcp-consultant-tools/figma 27.0.0-beta.1 → 27.0.0-beta.2
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/figma/extractors/ado-story-extractor.d.ts +61 -0
- package/build/figma/extractors/ado-story-extractor.d.ts.map +1 -0
- package/build/figma/extractors/ado-story-extractor.js +185 -0
- package/build/figma/extractors/ado-story-extractor.js.map +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +32 -1
- package/build/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADO User Story Component Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts ADO User Story Components from FigJam boards, returning
|
|
5
|
+
* structured data with IDs, descriptions, states, parent context, and links.
|
|
6
|
+
* Reduces ~200K raw node data to ~5K structured result.
|
|
7
|
+
*/
|
|
8
|
+
import type { SimplifiedDesign } from "./types.js";
|
|
9
|
+
export interface AdoStoryItem {
|
|
10
|
+
/** Node ID of the ADO component */
|
|
11
|
+
nodeId: string;
|
|
12
|
+
/** ADO work item name/title */
|
|
13
|
+
adoName: string;
|
|
14
|
+
/** ADO work item description */
|
|
15
|
+
adoDescription: string | null;
|
|
16
|
+
/** ADO work item state (e.g. "New", "Active", "Closed") */
|
|
17
|
+
adoState: string | null;
|
|
18
|
+
/** Numeric ADO work item ID (null if placeholder) */
|
|
19
|
+
adoId: number | null;
|
|
20
|
+
/** Full ADO URL (null if no ID or missing org/project) */
|
|
21
|
+
adoLink: string | null;
|
|
22
|
+
/** Figma board URL pointing to parent context */
|
|
23
|
+
figmaLink: string | null;
|
|
24
|
+
/** Parent component type (e.g. "Dataverse Table", "API Endpoint") */
|
|
25
|
+
parentType: string | null;
|
|
26
|
+
/** Parent context string "{Header}: {Description}" */
|
|
27
|
+
parentContext: string | null;
|
|
28
|
+
/** Node ID of the parent INSTANCE */
|
|
29
|
+
parentNodeId: string | null;
|
|
30
|
+
}
|
|
31
|
+
export interface AdoStoryExtractResult {
|
|
32
|
+
/** All extracted ADO story items */
|
|
33
|
+
items: AdoStoryItem[];
|
|
34
|
+
/** Total count of items */
|
|
35
|
+
totalCount: number;
|
|
36
|
+
/** Count of items with placeholder IDs that were filtered */
|
|
37
|
+
placeholderCount: number;
|
|
38
|
+
/** Counts by ADO state */
|
|
39
|
+
byState: Record<string, number>;
|
|
40
|
+
/** Counts by parent type */
|
|
41
|
+
byParentType: Record<string, number>;
|
|
42
|
+
}
|
|
43
|
+
export interface AdoStoryExtractOptions {
|
|
44
|
+
/** Figma file key (for constructing Figma links) */
|
|
45
|
+
fileKey: string;
|
|
46
|
+
/** ADO organization name (for constructing ADO links) */
|
|
47
|
+
adoOrganization?: string;
|
|
48
|
+
/** ADO project name (for constructing ADO links) */
|
|
49
|
+
adoProject?: string;
|
|
50
|
+
/** Whether to include items with placeholder IDs (default: false) */
|
|
51
|
+
includePlaceholders?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Extract all ADO User Story Components from a simplified Figma design.
|
|
55
|
+
*
|
|
56
|
+
* @param design - The simplified design from getFigmaData
|
|
57
|
+
* @param options - Extraction options (file key, ADO org/project, placeholder filtering)
|
|
58
|
+
* @returns Structured result with items, counts, and summaries
|
|
59
|
+
*/
|
|
60
|
+
export declare function extractAdoStories(design: SimplifiedDesign, options: AdoStoryExtractOptions): AdoStoryExtractResult;
|
|
61
|
+
//# sourceMappingURL=ado-story-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ado-story-extractor.d.ts","sourceRoot":"","sources":["../../../src/figma/extractors/ado-story-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AAOnE,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,qDAAqD;IACrD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iDAAiD;IACjD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qEAAqE;IACrE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,sDAAsD;IACtD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qCAAqC;IACrC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,gBAAgB,EAAE,MAAM,CAAC;IACzB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAoLD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAmCvB"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADO User Story Component Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts ADO User Story Components from FigJam boards, returning
|
|
5
|
+
* structured data with IDs, descriptions, states, parent context, and links.
|
|
6
|
+
* Reduces ~200K raw node data to ~5K structured result.
|
|
7
|
+
*/
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Constants
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/** Target component name to match */
|
|
12
|
+
const ADO_COMPONENT_NAME = "ADO User Story Component";
|
|
13
|
+
/** Map of parent component names to display types */
|
|
14
|
+
const PARENT_TYPE_MAP = {
|
|
15
|
+
"API Endpoint": "API Endpoint",
|
|
16
|
+
"Power Automate Flow Component": "Power Automate Flow",
|
|
17
|
+
"Dataverse Table Component": "Dataverse Table",
|
|
18
|
+
"Plugin Component": "Dataverse Plugin",
|
|
19
|
+
"Customer Insights Component": "Customer Insights",
|
|
20
|
+
"Azure Function": "Azure Function",
|
|
21
|
+
"Service Bus Queue": "Service Bus Queue",
|
|
22
|
+
};
|
|
23
|
+
/** Detect placeholder ADO IDs */
|
|
24
|
+
const PLACEHOLDER_PATTERN = /xxxxx/i;
|
|
25
|
+
/** Extract numeric ADO ID from name */
|
|
26
|
+
const ADO_ID_PATTERN = /ADO\s+(\d+)/i;
|
|
27
|
+
// ============================================================================
|
|
28
|
+
// Helper Functions
|
|
29
|
+
// ============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Find a component property value by matching its name prefix (before # separator).
|
|
32
|
+
* Figma component property names have format "Property Name#311:0" where the
|
|
33
|
+
* hash suffix varies between files.
|
|
34
|
+
*/
|
|
35
|
+
function getPropertyValue(props, prefix) {
|
|
36
|
+
if (!props)
|
|
37
|
+
return null;
|
|
38
|
+
for (const prop of props) {
|
|
39
|
+
const cleanName = prop.name.replace(/#\d+:\d+$/, "").trim();
|
|
40
|
+
if (cleanName === prefix) {
|
|
41
|
+
return prop.value || null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve parent component type and context from a parent INSTANCE node.
|
|
48
|
+
* Returns [parentType, parentContext] tuple.
|
|
49
|
+
*/
|
|
50
|
+
function resolveParentContext(parentNode) {
|
|
51
|
+
if (!parentNode || parentNode.type !== "INSTANCE") {
|
|
52
|
+
return [null, null];
|
|
53
|
+
}
|
|
54
|
+
// Match parent name against known component types
|
|
55
|
+
let parentType = null;
|
|
56
|
+
for (const [componentName, displayType] of Object.entries(PARENT_TYPE_MAP)) {
|
|
57
|
+
if (parentNode.name === componentName) {
|
|
58
|
+
parentType = displayType;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (!parentType)
|
|
63
|
+
return [null, null];
|
|
64
|
+
// Extract context from parent's component properties
|
|
65
|
+
const header = getPropertyValue(parentNode.componentProperties, "Header");
|
|
66
|
+
const description = getPropertyValue(parentNode.componentProperties, "Description");
|
|
67
|
+
let parentContext = null;
|
|
68
|
+
if (header && description) {
|
|
69
|
+
parentContext = `${header}: ${description}`;
|
|
70
|
+
}
|
|
71
|
+
else if (header) {
|
|
72
|
+
parentContext = header;
|
|
73
|
+
}
|
|
74
|
+
else if (description) {
|
|
75
|
+
parentContext = description;
|
|
76
|
+
}
|
|
77
|
+
return [parentType, parentContext];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Construct an ADO work item URL.
|
|
81
|
+
*/
|
|
82
|
+
function constructAdoLink(id, org, project) {
|
|
83
|
+
if (!org || !project)
|
|
84
|
+
return null;
|
|
85
|
+
return `https://dev.azure.com/${encodeURIComponent(org)}/${encodeURIComponent(project)}/_workitems/edit/${id}`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Construct a Figma board URL pointing to a specific node.
|
|
89
|
+
* Replaces : with - in node IDs for URL format.
|
|
90
|
+
*/
|
|
91
|
+
function constructFigmaLink(fileKey, nodeId) {
|
|
92
|
+
const urlNodeId = nodeId.replace(/:/g, "-");
|
|
93
|
+
return `https://www.figma.com/board/${fileKey}/?node-id=${urlNodeId}`;
|
|
94
|
+
}
|
|
95
|
+
// ============================================================================
|
|
96
|
+
// Main Extraction
|
|
97
|
+
// ============================================================================
|
|
98
|
+
/**
|
|
99
|
+
* Recursively walk the node tree, tracking the nearest INSTANCE ancestor
|
|
100
|
+
* as a potential parent. When an ADO User Story Component is found,
|
|
101
|
+
* extract its properties and resolve parent context.
|
|
102
|
+
*/
|
|
103
|
+
function walkTree(node, parentInstance, items, options) {
|
|
104
|
+
const isInstance = node.type === "INSTANCE";
|
|
105
|
+
if (isInstance && node.name === ADO_COMPONENT_NAME) {
|
|
106
|
+
// Extract ADO properties
|
|
107
|
+
const adoName = getPropertyValue(node.componentProperties, "ADO Name") || node.name;
|
|
108
|
+
const adoDescription = getPropertyValue(node.componentProperties, "Description");
|
|
109
|
+
const adoState = getPropertyValue(node.componentProperties, "State");
|
|
110
|
+
// Extract ADO ID from name
|
|
111
|
+
const isPlaceholder = PLACEHOLDER_PATTERN.test(adoName);
|
|
112
|
+
let adoId = null;
|
|
113
|
+
if (!isPlaceholder) {
|
|
114
|
+
const idMatch = adoName.match(ADO_ID_PATTERN);
|
|
115
|
+
if (idMatch) {
|
|
116
|
+
adoId = parseInt(idMatch[1], 10);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Resolve parent context
|
|
120
|
+
const [parentType, parentContext] = resolveParentContext(parentInstance);
|
|
121
|
+
// Construct links
|
|
122
|
+
const adoLink = adoId ? constructAdoLink(adoId, options.adoOrganization, options.adoProject) : null;
|
|
123
|
+
const linkTargetNodeId = parentInstance?.id || node.id;
|
|
124
|
+
const figmaLink = constructFigmaLink(options.fileKey, linkTargetNodeId);
|
|
125
|
+
items.push({
|
|
126
|
+
nodeId: node.id,
|
|
127
|
+
adoName,
|
|
128
|
+
adoDescription,
|
|
129
|
+
adoState,
|
|
130
|
+
adoId,
|
|
131
|
+
adoLink,
|
|
132
|
+
figmaLink,
|
|
133
|
+
parentType,
|
|
134
|
+
parentContext,
|
|
135
|
+
parentNodeId: parentInstance?.id || null,
|
|
136
|
+
});
|
|
137
|
+
// ADO components don't contain nested ADO components, so return
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Track nearest INSTANCE ancestor as potential parent
|
|
141
|
+
const nextParent = isInstance ? node : parentInstance;
|
|
142
|
+
// Recurse into children
|
|
143
|
+
if (node.children) {
|
|
144
|
+
for (const child of node.children) {
|
|
145
|
+
walkTree(child, nextParent, items, options);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Extract all ADO User Story Components from a simplified Figma design.
|
|
151
|
+
*
|
|
152
|
+
* @param design - The simplified design from getFigmaData
|
|
153
|
+
* @param options - Extraction options (file key, ADO org/project, placeholder filtering)
|
|
154
|
+
* @returns Structured result with items, counts, and summaries
|
|
155
|
+
*/
|
|
156
|
+
export function extractAdoStories(design, options) {
|
|
157
|
+
const allItems = [];
|
|
158
|
+
// Walk all root nodes
|
|
159
|
+
for (const node of design.nodes) {
|
|
160
|
+
walkTree(node, null, allItems, options);
|
|
161
|
+
}
|
|
162
|
+
// Count placeholders before filtering
|
|
163
|
+
const placeholderCount = allItems.filter((item) => item.adoId === null).length;
|
|
164
|
+
// Filter placeholders unless requested
|
|
165
|
+
const items = options.includePlaceholders
|
|
166
|
+
? allItems
|
|
167
|
+
: allItems.filter((item) => item.adoId !== null);
|
|
168
|
+
// Build summary counts
|
|
169
|
+
const byState = {};
|
|
170
|
+
const byParentType = {};
|
|
171
|
+
for (const item of items) {
|
|
172
|
+
const state = item.adoState || "Unknown";
|
|
173
|
+
byState[state] = (byState[state] || 0) + 1;
|
|
174
|
+
const pType = item.parentType || "Standalone";
|
|
175
|
+
byParentType[pType] = (byParentType[pType] || 0) + 1;
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
items,
|
|
179
|
+
totalCount: items.length,
|
|
180
|
+
placeholderCount,
|
|
181
|
+
byState,
|
|
182
|
+
byParentType,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=ado-story-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ado-story-extractor.js","sourceRoot":"","sources":["../../../src/figma/extractors/ado-story-extractor.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,YAAY,QAsN1E;AAED;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import { realpathSync } from "node:fs";
|
|
|
12
12
|
import { createMcpServer, createEnvLoader, createErrorResponse, createSuccessResponse } from "@mcp-consultant-tools/core";
|
|
13
13
|
import { FigmaService } from "./FigmaService.js";
|
|
14
14
|
import { extractSemanticData } from "./figma/extractors/semantic-extractor.js";
|
|
15
|
+
import { extractAdoStories } from "./figma/extractors/ado-story-extractor.js";
|
|
15
16
|
/**
|
|
16
17
|
* Register Figma tools and prompts to an MCP server
|
|
17
18
|
* @param server - The MCP server instance
|
|
@@ -108,6 +109,36 @@ export function registerFigmaTools(server, figmaService) {
|
|
|
108
109
|
return createErrorResponse(error, "get-figma-semantic");
|
|
109
110
|
}
|
|
110
111
|
});
|
|
112
|
+
// Tool: extract-ado-stories
|
|
113
|
+
server.tool("extract-ado-stories", "Extract all ADO User Story Components from a FigJam board or section. Returns structured data with IDs, descriptions, states, parent context, and links. Reduces ~200K raw node data to ~5K structured result.", {
|
|
114
|
+
fileKey: z.string().describe("Figma file key (alphanumeric string from URL). Example: From 'https://figma.com/board/ABC123/MyBoard', use 'ABC123'"),
|
|
115
|
+
nodeId: z.string().optional().describe("Optional section node ID to scope extraction. Format: '1234:5678'. If omitted, extracts from entire file."),
|
|
116
|
+
adoOrganization: z.string().optional().describe("Azure DevOps organization name for constructing work item links. Example: 'myorg'"),
|
|
117
|
+
adoProject: z.string().optional().describe("Azure DevOps project name for constructing work item links. Example: 'MyProject'"),
|
|
118
|
+
includePlaceholders: z.boolean().optional().describe("Include ADO components with placeholder IDs (e.g. 'ADO xxxxx'). Default: false (placeholders are filtered out)."),
|
|
119
|
+
}, async ({ fileKey, nodeId, adoOrganization, adoProject, includePlaceholders, }) => {
|
|
120
|
+
try {
|
|
121
|
+
const figmaService = getFigmaService();
|
|
122
|
+
// Fetch with component properties preserved
|
|
123
|
+
const dataOptions = {
|
|
124
|
+
excludeStyles: true,
|
|
125
|
+
simplifyComponentInstances: true,
|
|
126
|
+
simplifyConnectors: true,
|
|
127
|
+
tablesToMarkdown: true,
|
|
128
|
+
};
|
|
129
|
+
const rawData = await figmaService.getFigmaData(fileKey, nodeId, undefined, dataOptions);
|
|
130
|
+
const result = extractAdoStories(rawData, {
|
|
131
|
+
fileKey,
|
|
132
|
+
adoOrganization,
|
|
133
|
+
adoProject,
|
|
134
|
+
includePlaceholders,
|
|
135
|
+
});
|
|
136
|
+
return createSuccessResponse(result);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
return createErrorResponse(error, "extract-ado-stories");
|
|
140
|
+
}
|
|
141
|
+
});
|
|
111
142
|
// Tool: download-figma-images (placeholder for v2)
|
|
112
143
|
server.tool("download-figma-images", "Download and process images from Figma designs (Coming in v2)", {
|
|
113
144
|
fileKey: z.string().describe("Figma file key"),
|
|
@@ -115,7 +146,7 @@ export function registerFigmaTools(server, figmaService) {
|
|
|
115
146
|
}, async ({ fileKey, localPath }) => {
|
|
116
147
|
return createErrorResponse(new Error("Image download functionality is coming in v2. Use get-figma-data for design metadata."), "download-figma-images");
|
|
117
148
|
});
|
|
118
|
-
console.error("Figma tools registered:
|
|
149
|
+
console.error("Figma tools registered: 4 tools");
|
|
119
150
|
}
|
|
120
151
|
/**
|
|
121
152
|
* Export service class for direct usage
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC1H,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED