flowzap-mcp 1.3.6 → 1.4.1
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 +15 -0
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/tools/artifactToDiagram (# Edit conflict 2026-05-24 a7hs75C #).js +487 -0
- package/dist/tools/complianceCheck.d.ts +14 -0
- package/dist/tools/complianceCheck.d.ts.map +1 -0
- package/dist/tools/complianceCheck.js +149 -0
- package/dist/tools/complianceCheck.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/playgroundApi.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -157,6 +157,21 @@ npx skills add flowzap-xyz/flowzap-mcp
|
|
|
157
157
|
- **Skill source:** [skills/flowzap-diagrams/](https://github.com/flowzap-xyz/flowzap-mcp/tree/main/skills/flowzap-diagrams)
|
|
158
158
|
- Compatible with: Claude Code, Cursor, Windsurf, Codex, Gemini CLI, GitHub Copilot, Cline, Roo Code, Augment, OpenCode, and more.
|
|
159
159
|
|
|
160
|
+
## Public MCP Adoption Signals
|
|
161
|
+
|
|
162
|
+
- **Public MCP Usage Stats:** [https://flowzap.xyz/.well-known/flowzap-stats.json](https://flowzap.xyz/.well-known/flowzap-stats.json)
|
|
163
|
+
- **MCP Calls Badge JSON:** [https://flowzap.xyz/.well-known/flowzap-stats-badge.json](https://flowzap.xyz/.well-known/flowzap-stats-badge.json)
|
|
164
|
+
|
|
165
|
+
## Official Listings
|
|
166
|
+
|
|
167
|
+
- **Official MCP Registry:** [https://registry.modelcontextprotocol.io/?q=flowzap](https://registry.modelcontextprotocol.io/?q=flowzap)
|
|
168
|
+
- **Smithery Server:** [https://smithery.ai/server/@flowzap/flowzap](https://smithery.ai/server/@flowzap/flowzap)
|
|
169
|
+
- **Smithery Skill:** [https://smithery.ai/skills/Flowzap/diagram-skill](https://smithery.ai/skills/Flowzap/diagram-skill)
|
|
170
|
+
- **PulseMCP:** [https://www.pulsemcp.com/servers/flowzap](https://www.pulsemcp.com/servers/flowzap)
|
|
171
|
+
- **Glama:** [https://glama.ai/mcp/servers/flowzap-xyz/flowzap-mcp](https://glama.ai/mcp/servers/flowzap-xyz/flowzap-mcp)
|
|
172
|
+
- **MCPServers.org:** [https://mcpservers.org/servers/flowzap-xyz-docs-mcp](https://mcpservers.org/servers/flowzap-xyz-docs-mcp)
|
|
173
|
+
- **AIBase:** [https://mcp.aibase.com/server/1639702939289526535](https://mcp.aibase.com/server/1639702939289526535)
|
|
174
|
+
|
|
160
175
|
## Links
|
|
161
176
|
|
|
162
177
|
- [FlowZap Website](https://flowzap.xyz)
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
-
import { exportGraphTool, handleExportGraph, artifactToDiagramTool, handleArtifactToDiagram, diffTool, applyChangeTool, handleDiff, handleApplyChange, } from "./tools/index.js";
|
|
5
|
+
import { exportGraphTool, handleExportGraph, artifactToDiagramTool, handleArtifactToDiagram, diffTool, applyChangeTool, handleDiff, handleApplyChange, complianceCheckTool, handleComplianceCheck, } from "./tools/index.js";
|
|
6
6
|
// =============================================================================
|
|
7
7
|
// SECURITY CONFIGURATION
|
|
8
8
|
// =============================================================================
|
|
@@ -95,7 +95,7 @@ async function secureFetch(url, options) {
|
|
|
95
95
|
signal: controller.signal,
|
|
96
96
|
headers: {
|
|
97
97
|
...options.headers,
|
|
98
|
-
"User-Agent": "flowzap-mcp/1.
|
|
98
|
+
"User-Agent": "flowzap-mcp/1.4.1",
|
|
99
99
|
"X-MCP-Client": "flowzap-mcp",
|
|
100
100
|
},
|
|
101
101
|
});
|
|
@@ -158,6 +158,7 @@ const tools = [
|
|
|
158
158
|
artifactToDiagramTool,
|
|
159
159
|
diffTool,
|
|
160
160
|
applyChangeTool,
|
|
161
|
+
complianceCheckTool,
|
|
161
162
|
];
|
|
162
163
|
// FlowZap Code syntax documentation
|
|
163
164
|
const FLOWZAP_SYNTAX = `
|
|
@@ -386,7 +387,7 @@ async function handleCreatePlayground(code, view) {
|
|
|
386
387
|
// Main server setup
|
|
387
388
|
const server = new Server({
|
|
388
389
|
name: "flowzap-mcp",
|
|
389
|
-
version: "1.
|
|
390
|
+
version: "1.4.1",
|
|
390
391
|
}, {
|
|
391
392
|
capabilities: {
|
|
392
393
|
tools: {},
|
|
@@ -401,7 +402,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
401
402
|
const { name, arguments: args } = request.params;
|
|
402
403
|
securityLog("TOOL_CALL", { tool: name });
|
|
403
404
|
// Validate tool name (whitelist approach)
|
|
404
|
-
const allowedTools = ["flowzap_validate", "flowzap_create_playground", "flowzap_get_syntax", "flowzap_export_graph", "flowzap_artifact_to_diagram", "flowzap_diff", "flowzap_apply_change"];
|
|
405
|
+
const allowedTools = ["flowzap_validate", "flowzap_create_playground", "flowzap_get_syntax", "flowzap_export_graph", "flowzap_artifact_to_diagram", "flowzap_diff", "flowzap_apply_change", "flowzap_compliance_check"];
|
|
405
406
|
if (!allowedTools.includes(name)) {
|
|
406
407
|
securityLog("UNKNOWN_TOOL", { tool: name });
|
|
407
408
|
throw new Error(`Unknown tool: ${name}`);
|
|
@@ -440,6 +441,11 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
440
441
|
const result = await handleApplyChange(code, operations);
|
|
441
442
|
return { content: [{ type: "text", text: result }] };
|
|
442
443
|
}
|
|
444
|
+
case "flowzap_compliance_check": {
|
|
445
|
+
const { code, lng } = args;
|
|
446
|
+
const result = await handleComplianceCheck(code, lng);
|
|
447
|
+
return { content: [{ type: "text", text: result }] };
|
|
448
|
+
}
|
|
443
449
|
default:
|
|
444
450
|
throw new Error(`Unknown tool: ${name}`);
|
|
445
451
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArtifactToDiagram Tool
|
|
3
|
+
*
|
|
4
|
+
* Parses real artifacts (HTTP logs, OpenAPI specs, code snippets) into FlowZap Code.
|
|
5
|
+
* Gives AI agents a capability they don't have natively: structured extraction from logs/specs.
|
|
6
|
+
*/
|
|
7
|
+
import { createPlaygroundUrl } from "./playgroundApi.js";
|
|
8
|
+
export const artifactToDiagramTool = {
|
|
9
|
+
name: "flowzap_artifact_to_diagram",
|
|
10
|
+
description: "Parse real artifacts (HTTP logs, OpenAPI specs, code snippets) into FlowZap Code diagrams. Use this to convert raw technical data into visual workflows that can be explained and refined.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
artifactType: {
|
|
15
|
+
type: "string",
|
|
16
|
+
enum: ["http_logs", "openapi", "code"],
|
|
17
|
+
description: "Type of artifact: http_logs (request/response sequences), openapi (API specs), code (function call traces)",
|
|
18
|
+
},
|
|
19
|
+
content: {
|
|
20
|
+
type: "string",
|
|
21
|
+
description: "Raw artifact content to parse",
|
|
22
|
+
},
|
|
23
|
+
view: {
|
|
24
|
+
type: "string",
|
|
25
|
+
enum: ["workflow", "sequence"],
|
|
26
|
+
description: "Preferred diagram view (default: sequence for logs, workflow for openapi)",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
required: ["artifactType", "content"],
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Parse HTTP logs into FlowZap Code
|
|
34
|
+
*
|
|
35
|
+
* Supports formats:
|
|
36
|
+
* - Apache/Nginx combined log format
|
|
37
|
+
* - Simple request/response pairs
|
|
38
|
+
* - HAR-like JSON
|
|
39
|
+
*/
|
|
40
|
+
function parseHttpLogs(content) {
|
|
41
|
+
const lines = content.split("\n").filter((l) => l.trim());
|
|
42
|
+
const actors = new Set(["Client"]);
|
|
43
|
+
const steps = [];
|
|
44
|
+
// Try to detect format
|
|
45
|
+
let nodeId = 1;
|
|
46
|
+
// Pattern 1: Simple "METHOD URL -> STATUS" or "CLIENT -> SERVER: MESSAGE"
|
|
47
|
+
const simplePattern = /^(\w+)?\s*(?:->|→)\s*(\w+)(?:\s*:\s*(.+))?$/;
|
|
48
|
+
const httpPattern = /^(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)\s+(\S+)(?:\s+(\d{3}))?/i;
|
|
49
|
+
const responsePattern = /^(\d{3})\s+(.+)/;
|
|
50
|
+
let currentServer = "Server";
|
|
51
|
+
for (const line of lines) {
|
|
52
|
+
const trimmed = line.trim();
|
|
53
|
+
if (!trimmed)
|
|
54
|
+
continue;
|
|
55
|
+
// Try HTTP method pattern
|
|
56
|
+
const httpMatch = trimmed.match(httpPattern);
|
|
57
|
+
if (httpMatch) {
|
|
58
|
+
const [, method, path, status] = httpMatch;
|
|
59
|
+
// Extract server from path if it's a full URL
|
|
60
|
+
try {
|
|
61
|
+
const url = new URL(path.startsWith("http") ? path : `https://example.com${path}`);
|
|
62
|
+
currentServer = url.hostname.split(".")[0] || "Server";
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Keep current server
|
|
66
|
+
}
|
|
67
|
+
actors.add(currentServer);
|
|
68
|
+
// Request
|
|
69
|
+
steps.push({
|
|
70
|
+
from: "Client",
|
|
71
|
+
to: currentServer,
|
|
72
|
+
label: `${method} ${path.length > 30 ? path.substring(0, 30) + "..." : path}`,
|
|
73
|
+
});
|
|
74
|
+
// Response if status included
|
|
75
|
+
if (status) {
|
|
76
|
+
steps.push({
|
|
77
|
+
from: currentServer,
|
|
78
|
+
to: "Client",
|
|
79
|
+
label: `${status} Response`,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
// Try simple arrow pattern
|
|
85
|
+
const simpleMatch = trimmed.match(simplePattern);
|
|
86
|
+
if (simpleMatch) {
|
|
87
|
+
const [, from = "Client", to, message = "Request"] = simpleMatch;
|
|
88
|
+
actors.add(from);
|
|
89
|
+
actors.add(to);
|
|
90
|
+
steps.push({ from, to, label: message });
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Try response pattern (just status code)
|
|
94
|
+
const responseMatch = trimmed.match(responsePattern);
|
|
95
|
+
if (responseMatch && steps.length > 0) {
|
|
96
|
+
const lastStep = steps[steps.length - 1];
|
|
97
|
+
steps.push({
|
|
98
|
+
from: lastStep.to,
|
|
99
|
+
to: lastStep.from,
|
|
100
|
+
label: `${responseMatch[1]} ${responseMatch[2]}`,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// If no steps parsed, create a placeholder
|
|
105
|
+
if (steps.length === 0) {
|
|
106
|
+
return {
|
|
107
|
+
code: `client {\n # Client\n n1: circle label:"No parseable requests found"\n}`,
|
|
108
|
+
view: "sequence",
|
|
109
|
+
notes: "Could not parse HTTP log format. Try a simpler format like 'GET /api/users 200' or 'Client -> Server: Request'",
|
|
110
|
+
actors: ["Client"],
|
|
111
|
+
stepCount: 0,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Generate FlowZap Code
|
|
115
|
+
const actorList = Array.from(actors);
|
|
116
|
+
const laneNodes = new Map();
|
|
117
|
+
const allEdges = [];
|
|
118
|
+
// Initialize lanes
|
|
119
|
+
for (const actor of actorList) {
|
|
120
|
+
laneNodes.set(actor, []);
|
|
121
|
+
}
|
|
122
|
+
// Create nodes and edges
|
|
123
|
+
for (const step of steps) {
|
|
124
|
+
const fromLane = step.from;
|
|
125
|
+
const toLane = step.to;
|
|
126
|
+
// Create source node if this is first action from this actor
|
|
127
|
+
const fromNodes = laneNodes.get(fromLane) || [];
|
|
128
|
+
let fromNodeId;
|
|
129
|
+
if (fromNodes.length === 0) {
|
|
130
|
+
fromNodeId = `n${nodeId++}`;
|
|
131
|
+
fromNodes.push(` ${fromNodeId}: rectangle label:"${escapeLabel(step.label)}"`);
|
|
132
|
+
laneNodes.set(fromLane, fromNodes);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// Use last node as source
|
|
136
|
+
const lastNode = fromNodes[fromNodes.length - 1];
|
|
137
|
+
const match = lastNode.match(/^\s*(n\d+):/);
|
|
138
|
+
fromNodeId = match ? match[1] : `n${nodeId++}`;
|
|
139
|
+
}
|
|
140
|
+
// Create target node
|
|
141
|
+
const toNodes = laneNodes.get(toLane) || [];
|
|
142
|
+
const toNodeId = `n${nodeId++}`;
|
|
143
|
+
toNodes.push(` ${toNodeId}: rectangle label:"${escapeLabel(step.label)}"`);
|
|
144
|
+
laneNodes.set(toLane, toNodes);
|
|
145
|
+
// Create edge
|
|
146
|
+
if (fromLane === toLane) {
|
|
147
|
+
allEdges.push(` ${fromNodeId}.handle(right) -> ${toNodeId}.handle(left)`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
allEdges.push(` ${fromNodeId}.handle(bottom) -> ${toLane.toLowerCase().replace(/\s+/g, "")}.${toNodeId}.handle(top) [label="${escapeLabel(step.label)}"]`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Build code
|
|
154
|
+
let code = "";
|
|
155
|
+
for (const [actor, nodes] of laneNodes) {
|
|
156
|
+
const laneId = actor.toLowerCase().replace(/\s+/g, "");
|
|
157
|
+
code += `${laneId} {\n # ${actor}\n`;
|
|
158
|
+
code += nodes.join("\n") + "\n";
|
|
159
|
+
// Add edges that originate from this lane
|
|
160
|
+
const laneEdges = allEdges.filter((e) => e.includes(`${laneId}.`) || e.match(new RegExp(`^\\s*n\\d+\\.handle`)));
|
|
161
|
+
if (laneEdges.length > 0) {
|
|
162
|
+
code += laneEdges.join("\n") + "\n";
|
|
163
|
+
}
|
|
164
|
+
code += "}\n\n";
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
code: code.trim(),
|
|
168
|
+
view: "sequence",
|
|
169
|
+
notes: `Inferred ${actorList.length} actors and ${steps.length} steps from HTTP logs`,
|
|
170
|
+
actors: actorList,
|
|
171
|
+
stepCount: steps.length,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Parse OpenAPI spec into FlowZap Code
|
|
176
|
+
*/
|
|
177
|
+
function parseOpenAPI(content) {
|
|
178
|
+
let spec;
|
|
179
|
+
try {
|
|
180
|
+
spec = JSON.parse(content);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Try YAML-like parsing (basic)
|
|
184
|
+
try {
|
|
185
|
+
// Very basic YAML parsing for common patterns
|
|
186
|
+
const lines = content.split("\n");
|
|
187
|
+
spec = { paths: {}, info: { title: "API" } };
|
|
188
|
+
let currentPath = "";
|
|
189
|
+
let currentMethod = "";
|
|
190
|
+
for (const line of lines) {
|
|
191
|
+
const pathMatch = line.match(/^\/[\w\-\/{}]+:/);
|
|
192
|
+
if (pathMatch) {
|
|
193
|
+
currentPath = pathMatch[0].replace(":", "");
|
|
194
|
+
spec.paths[currentPath] = {};
|
|
195
|
+
}
|
|
196
|
+
const methodMatch = line.match(/^\s+(get|post|put|delete|patch):/i);
|
|
197
|
+
if (methodMatch && currentPath) {
|
|
198
|
+
currentMethod = methodMatch[1].toLowerCase();
|
|
199
|
+
spec.paths[currentPath][currentMethod] = { summary: "" };
|
|
200
|
+
}
|
|
201
|
+
const summaryMatch = line.match(/^\s+summary:\s*(.+)/);
|
|
202
|
+
if (summaryMatch && currentPath && currentMethod) {
|
|
203
|
+
spec.paths[currentPath][currentMethod].summary = summaryMatch[1].trim().replace(/^["']|["']$/g, "");
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return {
|
|
209
|
+
code: `api {\n # API\n n1: circle label:"Could not parse OpenAPI spec"\n}`,
|
|
210
|
+
view: "workflow",
|
|
211
|
+
notes: "Failed to parse OpenAPI content. Ensure it's valid JSON or YAML.",
|
|
212
|
+
actors: ["API"],
|
|
213
|
+
stepCount: 0,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const paths = spec.paths || {};
|
|
218
|
+
const title = spec.info?.title || "API";
|
|
219
|
+
const actors = new Set(["Client", title]);
|
|
220
|
+
const steps = [];
|
|
221
|
+
// Extract endpoints
|
|
222
|
+
for (const [path, methods] of Object.entries(paths)) {
|
|
223
|
+
if (typeof methods !== "object" || methods === null)
|
|
224
|
+
continue;
|
|
225
|
+
for (const [method, details] of Object.entries(methods)) {
|
|
226
|
+
if (!["get", "post", "put", "delete", "patch"].includes(method.toLowerCase()))
|
|
227
|
+
continue;
|
|
228
|
+
const summary = details?.summary || details?.operationId || `${method.toUpperCase()} ${path}`;
|
|
229
|
+
steps.push({
|
|
230
|
+
method: method.toUpperCase(),
|
|
231
|
+
path,
|
|
232
|
+
summary: String(summary),
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (steps.length === 0) {
|
|
237
|
+
return {
|
|
238
|
+
code: `api {\n # ${title}\n n1: circle label:"No endpoints found"\n}`,
|
|
239
|
+
view: "workflow",
|
|
240
|
+
notes: "No API endpoints found in the OpenAPI spec.",
|
|
241
|
+
actors: [title],
|
|
242
|
+
stepCount: 0,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
// Generate workflow diagram
|
|
246
|
+
const apiLaneId = title.toLowerCase().replace(/\s+/g, "").replace(/[^a-z0-9]/g, "");
|
|
247
|
+
let code = `client {\n # Client\n n1: circle label:"Start"\n}\n\n`;
|
|
248
|
+
code += `${apiLaneId} {\n # ${title}\n`;
|
|
249
|
+
let nodeId = 2;
|
|
250
|
+
const nodeIds = [];
|
|
251
|
+
for (const step of steps) {
|
|
252
|
+
const label = step.summary.length > 40 ? step.summary.substring(0, 40) + "..." : step.summary;
|
|
253
|
+
code += ` n${nodeId}: rectangle label:"${escapeLabel(label)}"\n`;
|
|
254
|
+
nodeIds.push(`n${nodeId}`);
|
|
255
|
+
nodeId++;
|
|
256
|
+
}
|
|
257
|
+
// Add edges between consecutive endpoints
|
|
258
|
+
for (let i = 0; i < nodeIds.length - 1; i++) {
|
|
259
|
+
code += ` ${nodeIds[i]}.handle(right) -> ${nodeIds[i + 1]}.handle(left)\n`;
|
|
260
|
+
}
|
|
261
|
+
// Add end node
|
|
262
|
+
code += ` n${nodeId}: circle label:"End"\n`;
|
|
263
|
+
if (nodeIds.length > 0) {
|
|
264
|
+
code += ` ${nodeIds[nodeIds.length - 1]}.handle(right) -> n${nodeId}.handle(left)\n`;
|
|
265
|
+
}
|
|
266
|
+
code += "}\n";
|
|
267
|
+
// Add cross-lane edge from client to first API node
|
|
268
|
+
code = code.replace("n1: circle label:\"Start\"\n}", `n1: circle label:"Start"\n n1.handle(bottom) -> ${apiLaneId}.n2.handle(top)\n}`);
|
|
269
|
+
return {
|
|
270
|
+
code,
|
|
271
|
+
view: "workflow",
|
|
272
|
+
notes: `Extracted ${steps.length} endpoints from OpenAPI spec "${title}"`,
|
|
273
|
+
actors: Array.from(actors),
|
|
274
|
+
stepCount: steps.length,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Parse code snippets into FlowZap Code (function call trace)
|
|
279
|
+
*/
|
|
280
|
+
function parseCode(content) {
|
|
281
|
+
const lines = content.split("\n").filter((l) => l.trim());
|
|
282
|
+
const actors = new Set();
|
|
283
|
+
const calls = [];
|
|
284
|
+
// Patterns for function calls
|
|
285
|
+
const patterns = [
|
|
286
|
+
// JavaScript/TypeScript: object.method() or await object.method()
|
|
287
|
+
/(?:await\s+)?(\w+)\.(\w+)\s*\(/g,
|
|
288
|
+
// Python: object.method() or Class.method()
|
|
289
|
+
/(\w+)\.(\w+)\s*\(/g,
|
|
290
|
+
// Function definition: function name() or def name():
|
|
291
|
+
/(?:function|def|async\s+function)\s+(\w+)/g,
|
|
292
|
+
// Class method: class.method or self.method
|
|
293
|
+
/(?:this|self)\.(\w+)\s*\(/g,
|
|
294
|
+
];
|
|
295
|
+
let currentModule = "Main";
|
|
296
|
+
for (const line of lines) {
|
|
297
|
+
const trimmed = line.trim();
|
|
298
|
+
// Detect class/module definitions
|
|
299
|
+
const classMatch = trimmed.match(/^(?:class|module|namespace)\s+(\w+)/);
|
|
300
|
+
if (classMatch) {
|
|
301
|
+
currentModule = classMatch[1];
|
|
302
|
+
actors.add(currentModule);
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
// Detect function definitions
|
|
306
|
+
const funcMatch = trimmed.match(/^(?:function|def|async\s+function|async\s+def)\s+(\w+)/);
|
|
307
|
+
if (funcMatch) {
|
|
308
|
+
actors.add(currentModule);
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
// Detect method calls
|
|
312
|
+
const callMatch = trimmed.match(/(?:await\s+)?(\w+)\.(\w+)\s*\(/);
|
|
313
|
+
if (callMatch) {
|
|
314
|
+
const [, obj, method] = callMatch;
|
|
315
|
+
// Skip common non-actor objects
|
|
316
|
+
if (["console", "Math", "JSON", "Object", "Array", "String", "this", "self"].includes(obj)) {
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
actors.add(obj);
|
|
320
|
+
calls.push({
|
|
321
|
+
caller: currentModule,
|
|
322
|
+
callee: obj,
|
|
323
|
+
method,
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
if (calls.length === 0) {
|
|
328
|
+
return {
|
|
329
|
+
code: `main {\n # Main\n n1: circle label:"No function calls detected"\n}`,
|
|
330
|
+
view: "sequence",
|
|
331
|
+
notes: "Could not detect function call patterns in the code.",
|
|
332
|
+
actors: ["Main"],
|
|
333
|
+
stepCount: 0,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
// Generate sequence diagram
|
|
337
|
+
const actorList = Array.from(actors);
|
|
338
|
+
if (!actorList.includes("Main")) {
|
|
339
|
+
actorList.unshift("Main");
|
|
340
|
+
}
|
|
341
|
+
let code = "";
|
|
342
|
+
const laneNodes = new Map();
|
|
343
|
+
let nodeId = 1;
|
|
344
|
+
// Initialize lanes
|
|
345
|
+
for (const actor of actorList) {
|
|
346
|
+
const laneId = actor.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
347
|
+
code += `${laneId} {\n # ${actor}\n`;
|
|
348
|
+
laneNodes.set(actor, 0);
|
|
349
|
+
code += "}\n\n";
|
|
350
|
+
}
|
|
351
|
+
// We'll rebuild with nodes and edges
|
|
352
|
+
code = "";
|
|
353
|
+
const allNodes = [];
|
|
354
|
+
const allEdges = [];
|
|
355
|
+
for (const call of calls) {
|
|
356
|
+
const fromLane = call.caller.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
357
|
+
const toLane = call.callee.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
358
|
+
const fromNodeId = `n${nodeId++}`;
|
|
359
|
+
const toNodeId = `n${nodeId++}`;
|
|
360
|
+
allNodes.push({ lane: fromLane, id: fromNodeId, label: `Call ${call.method}` });
|
|
361
|
+
allNodes.push({ lane: toLane, id: toNodeId, label: call.method });
|
|
362
|
+
if (fromLane === toLane) {
|
|
363
|
+
allEdges.push({ lane: fromLane, edge: ` ${fromNodeId}.handle(right) -> ${toNodeId}.handle(left)` });
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
allEdges.push({ lane: fromLane, edge: ` ${fromNodeId}.handle(bottom) -> ${toLane}.${toNodeId}.handle(top) [label="${call.method}"]` });
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// Group nodes by lane
|
|
370
|
+
const nodesByLane = new Map();
|
|
371
|
+
for (const node of allNodes) {
|
|
372
|
+
const existing = nodesByLane.get(node.lane) || [];
|
|
373
|
+
existing.push(node);
|
|
374
|
+
nodesByLane.set(node.lane, existing);
|
|
375
|
+
}
|
|
376
|
+
// Build code
|
|
377
|
+
for (const actor of actorList) {
|
|
378
|
+
const laneId = actor.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
379
|
+
code += `${laneId} {\n # ${actor}\n`;
|
|
380
|
+
const nodes = nodesByLane.get(laneId) || [];
|
|
381
|
+
for (const node of nodes) {
|
|
382
|
+
code += ` ${node.id}: rectangle label:"${escapeLabel(node.label)}"\n`;
|
|
383
|
+
}
|
|
384
|
+
const edges = allEdges.filter((e) => e.lane === laneId);
|
|
385
|
+
for (const e of edges) {
|
|
386
|
+
code += e.edge + "\n";
|
|
387
|
+
}
|
|
388
|
+
code += "}\n\n";
|
|
389
|
+
}
|
|
390
|
+
return {
|
|
391
|
+
code: code.trim(),
|
|
392
|
+
view: "sequence",
|
|
393
|
+
notes: `Detected ${calls.length} function calls across ${actorList.length} modules`,
|
|
394
|
+
actors: actorList,
|
|
395
|
+
stepCount: calls.length,
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Escape label text for FlowZap Code
|
|
400
|
+
*/
|
|
401
|
+
function escapeLabel(text) {
|
|
402
|
+
return text
|
|
403
|
+
.replace(/\\/g, "\\\\")
|
|
404
|
+
.replace(/"/g, '\\"')
|
|
405
|
+
.replace(/\n/g, " ")
|
|
406
|
+
.trim();
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Main handler for artifact_to_diagram tool
|
|
410
|
+
*/
|
|
411
|
+
export async function handleArtifactToDiagram(artifactType, content, view) {
|
|
412
|
+
// Validate inputs
|
|
413
|
+
if (typeof artifactType !== "string") {
|
|
414
|
+
return JSON.stringify({
|
|
415
|
+
success: false,
|
|
416
|
+
error: "artifactType must be a string",
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
if (!["http_logs", "openapi", "code"].includes(artifactType)) {
|
|
420
|
+
return JSON.stringify({
|
|
421
|
+
success: false,
|
|
422
|
+
error: `Invalid artifactType "${artifactType}". Must be one of: http_logs, openapi, code`,
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
if (typeof content !== "string") {
|
|
426
|
+
return JSON.stringify({
|
|
427
|
+
success: false,
|
|
428
|
+
error: "content must be a string",
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
if (content.trim().length === 0) {
|
|
432
|
+
return JSON.stringify({
|
|
433
|
+
success: false,
|
|
434
|
+
error: "content cannot be empty",
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
if (content.length > 100000) {
|
|
438
|
+
return JSON.stringify({
|
|
439
|
+
success: false,
|
|
440
|
+
error: "content exceeds maximum length of 100,000 characters",
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
try {
|
|
444
|
+
let result;
|
|
445
|
+
switch (artifactType) {
|
|
446
|
+
case "http_logs":
|
|
447
|
+
result = parseHttpLogs(content);
|
|
448
|
+
break;
|
|
449
|
+
case "openapi":
|
|
450
|
+
result = parseOpenAPI(content);
|
|
451
|
+
break;
|
|
452
|
+
case "code":
|
|
453
|
+
result = parseCode(content);
|
|
454
|
+
break;
|
|
455
|
+
default:
|
|
456
|
+
return JSON.stringify({
|
|
457
|
+
success: false,
|
|
458
|
+
error: `Unsupported artifact type: ${artifactType}`,
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
// Override view if specified
|
|
462
|
+
if (view === "workflow" || view === "sequence") {
|
|
463
|
+
result.view = view;
|
|
464
|
+
}
|
|
465
|
+
// Auto-create playground URL
|
|
466
|
+
const playground = await createPlaygroundUrl(result.code);
|
|
467
|
+
return JSON.stringify({
|
|
468
|
+
success: true,
|
|
469
|
+
code: result.code,
|
|
470
|
+
url: playground.url || null,
|
|
471
|
+
view: result.view,
|
|
472
|
+
notes: result.notes,
|
|
473
|
+
stats: {
|
|
474
|
+
actors: result.actors,
|
|
475
|
+
stepCount: result.stepCount,
|
|
476
|
+
},
|
|
477
|
+
...(playground.error && { playgroundError: playground.error }),
|
|
478
|
+
}, null, 2);
|
|
479
|
+
}
|
|
480
|
+
catch (error) {
|
|
481
|
+
return JSON.stringify({
|
|
482
|
+
success: false,
|
|
483
|
+
error: `Failed to parse artifact: ${error instanceof Error ? error.message : String(error)}`,
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
//# sourceMappingURL=artifactToDiagram.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* flowzap_compliance_check — automated SOC2 / GDPR / PIPL compliance analysis
|
|
3
|
+
*
|
|
4
|
+
* Calls the public FlowZap compliance endpoint and renders the result as
|
|
5
|
+
* Markdown text suitable for an MCP `text` content block.
|
|
6
|
+
*
|
|
7
|
+
* Strict server-side rate limits apply (3/day per IP, 1/hour burst, global
|
|
8
|
+
* 5-minute circuit breaker). This tool surfaces those limits cleanly to the
|
|
9
|
+
* agent without leaking internal details.
|
|
10
|
+
*/
|
|
11
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
12
|
+
export declare const complianceCheckTool: Tool;
|
|
13
|
+
export declare function handleComplianceCheck(rawCode: unknown, rawLng: unknown): Promise<string>;
|
|
14
|
+
//# sourceMappingURL=complianceCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complianceCheck.d.ts","sourceRoot":"","sources":["../../src/tools/complianceCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAmB/D,eAAO,MAAM,mBAAmB,EAAE,IAmBjC,CAAC;AAgFF,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,CAAC,CA6DjB"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* flowzap_compliance_check — automated SOC2 / GDPR / PIPL compliance analysis
|
|
3
|
+
*
|
|
4
|
+
* Calls the public FlowZap compliance endpoint and renders the result as
|
|
5
|
+
* Markdown text suitable for an MCP `text` content block.
|
|
6
|
+
*
|
|
7
|
+
* Strict server-side rate limits apply (3/day per IP, 1/hour burst, global
|
|
8
|
+
* 5-minute circuit breaker). This tool surfaces those limits cleanly to the
|
|
9
|
+
* agent without leaking internal details.
|
|
10
|
+
*/
|
|
11
|
+
const FLOWZAP_API_BASE = "https://flowzap.xyz";
|
|
12
|
+
const REQUEST_TIMEOUT_MS = 30_000;
|
|
13
|
+
const ALLOWED_LNG = ["en", "fr", "zh"];
|
|
14
|
+
const STATUS_ICON = {
|
|
15
|
+
present: "✅",
|
|
16
|
+
partial: "⚠️",
|
|
17
|
+
missing: "❌",
|
|
18
|
+
};
|
|
19
|
+
const FRAMEWORK_LABELS = {
|
|
20
|
+
gdpr: "GDPR",
|
|
21
|
+
soc2: "SOC2",
|
|
22
|
+
pipl: "PIPL",
|
|
23
|
+
};
|
|
24
|
+
export const complianceCheckTool = {
|
|
25
|
+
name: "flowzap_compliance_check",
|
|
26
|
+
description: "Run automated SOC2, GDPR, and PIPL compliance analysis on a FlowZap Code data-flow diagram. Returns a Markdown audit report with risks, recommendations, and a link to the manual checker. Backed by Deepseek LLM with strict rate limits (3/day per IP, 1/hour burst, global 5-min circuit breaker). Use when the user asks for a privacy, security, or regulatory review of a data-flow diagram.",
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: "object",
|
|
29
|
+
properties: {
|
|
30
|
+
code: {
|
|
31
|
+
type: "string",
|
|
32
|
+
description: "FlowZap Code data-flow diagram to analyze (max 50,000 chars)",
|
|
33
|
+
},
|
|
34
|
+
lng: {
|
|
35
|
+
type: "string",
|
|
36
|
+
enum: ["en", "fr", "zh"],
|
|
37
|
+
description: "Response language (default: en)",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
required: ["code"],
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
const ALLOWED_RESULT_HOST = "flowzap.xyz";
|
|
44
|
+
function isSafeResultUrl(url) {
|
|
45
|
+
if (!url || typeof url !== "string")
|
|
46
|
+
return false;
|
|
47
|
+
try {
|
|
48
|
+
const u = new URL(url);
|
|
49
|
+
if (u.protocol !== "https:")
|
|
50
|
+
return false;
|
|
51
|
+
// Allow only the production host (and subdomains) to prevent open-redirect-style leaks.
|
|
52
|
+
return u.hostname === ALLOWED_RESULT_HOST || u.hostname.endsWith(`.${ALLOWED_RESULT_HOST}`);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function renderFindings(findings) {
|
|
59
|
+
if (!findings || findings.length === 0) {
|
|
60
|
+
return "_No specific findings flagged for this framework._";
|
|
61
|
+
}
|
|
62
|
+
return findings
|
|
63
|
+
.slice(0, 8)
|
|
64
|
+
.map((f) => {
|
|
65
|
+
const icon = STATUS_ICON[f.status] || "•";
|
|
66
|
+
const rec = f.recommendation ? `\n - **Recommendation:** ${f.recommendation}` : "";
|
|
67
|
+
return `- ${icon} **${f.control}** (${f.status}): ${f.detail}${rec}`;
|
|
68
|
+
})
|
|
69
|
+
.join("\n");
|
|
70
|
+
}
|
|
71
|
+
function renderMarkdown(payload) {
|
|
72
|
+
const fw = payload.frameworks || {};
|
|
73
|
+
const sections = [];
|
|
74
|
+
// Lead with the shareable rendered-result URL when available so agents (and end users)
|
|
75
|
+
// can deep-link directly to a styled audit page instead of relying on inline markdown.
|
|
76
|
+
if (isSafeResultUrl(payload.resultUrl)) {
|
|
77
|
+
sections.push(`A compliance check to SOC2, PIPL and GDPR is ready and is available here: ${payload.resultUrl}`);
|
|
78
|
+
sections.push("");
|
|
79
|
+
}
|
|
80
|
+
sections.push("# Compliance Check Results (SOC2 · GDPR · PIPL)\n");
|
|
81
|
+
for (const key of ["gdpr", "soc2", "pipl"]) {
|
|
82
|
+
const findings = fw[key]?.findings || [];
|
|
83
|
+
sections.push(`## ${FRAMEWORK_LABELS[key]} (${findings.length} finding${findings.length === 1 ? "" : "s"})`);
|
|
84
|
+
sections.push(renderFindings(findings));
|
|
85
|
+
sections.push("");
|
|
86
|
+
}
|
|
87
|
+
if (payload.disclaimer) {
|
|
88
|
+
sections.push(`---\n${payload.disclaimer}`);
|
|
89
|
+
}
|
|
90
|
+
sections.push("\nFor a full interactive audit, visit https://flowzap.xyz/soc2-gdpr-pipl-compliance-checker");
|
|
91
|
+
return sections.join("\n");
|
|
92
|
+
}
|
|
93
|
+
export async function handleComplianceCheck(rawCode, rawLng) {
|
|
94
|
+
if (typeof rawCode !== "string") {
|
|
95
|
+
return "❌ Compliance check failed: `code` must be a string.";
|
|
96
|
+
}
|
|
97
|
+
if (rawCode.trim().length === 0) {
|
|
98
|
+
return "❌ Compliance check failed: `code` cannot be empty.";
|
|
99
|
+
}
|
|
100
|
+
if (rawCode.length > 50_000) {
|
|
101
|
+
return "❌ Compliance check failed: `code` exceeds 50,000 characters.";
|
|
102
|
+
}
|
|
103
|
+
const lng = typeof rawLng === "string" && ALLOWED_LNG.includes(rawLng)
|
|
104
|
+
? rawLng
|
|
105
|
+
: "en";
|
|
106
|
+
const sanitizedCode = rawCode
|
|
107
|
+
.replace(/\0/g, "")
|
|
108
|
+
.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, "");
|
|
109
|
+
const controller = new AbortController();
|
|
110
|
+
const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
111
|
+
try {
|
|
112
|
+
const response = await fetch(`${FLOWZAP_API_BASE}/api/compliance-check`, {
|
|
113
|
+
method: "POST",
|
|
114
|
+
headers: {
|
|
115
|
+
"Content-Type": "application/json",
|
|
116
|
+
"User-Agent": "flowzap-mcp/1.4.1",
|
|
117
|
+
"X-MCP-Client": "flowzap-mcp",
|
|
118
|
+
},
|
|
119
|
+
body: JSON.stringify({ code: sanitizedCode, lng }),
|
|
120
|
+
signal: controller.signal,
|
|
121
|
+
});
|
|
122
|
+
let payload = null;
|
|
123
|
+
try {
|
|
124
|
+
payload = (await response.json());
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
payload = null;
|
|
128
|
+
}
|
|
129
|
+
if (response.status === 429) {
|
|
130
|
+
const retryAfter = payload?.retryAfter ? ` Retry in ~${payload.retryAfter}s.` : "";
|
|
131
|
+
return `❌ Compliance check rate limit exceeded.${retryAfter} Limits: 3 successful checks/day per IP, 1/hour burst, global 5-min circuit breaker. Try the manual checker at https://flowzap.xyz/soc2-gdpr-pipl-compliance-checker.`;
|
|
132
|
+
}
|
|
133
|
+
if (!response.ok || !payload || payload.error) {
|
|
134
|
+
const message = payload?.error || `API error: ${response.status}`;
|
|
135
|
+
return `❌ Compliance check failed: ${message}`;
|
|
136
|
+
}
|
|
137
|
+
return renderMarkdown(payload);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
141
|
+
return "❌ Compliance check timed out after 30 seconds. Please try again.";
|
|
142
|
+
}
|
|
143
|
+
return "❌ Compliance check failed. Please try again.";
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
clearTimeout(timeoutId);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=complianceCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complianceCheck.js","sourceRoot":"","sources":["../../src/tools/complianceCheck.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -10,4 +10,5 @@ export type { ArtifactType, ParsedArtifact } from "./artifactToDiagram.js";
|
|
|
10
10
|
export { diffTool, applyChangeTool, handleDiff, handleApplyChange, diffCode, applyChanges } from "./diffAndApply.js";
|
|
11
11
|
export type { DiffResult, PatchOperation } from "./diffAndApply.js";
|
|
12
12
|
export { createPlaygroundUrl } from "./playgroundApi.js";
|
|
13
|
+
export { complianceCheckTool, handleComplianceCheck } from "./complianceCheck.js";
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpF,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElF,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACxF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrH,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpF,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElF,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACxF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrH,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -7,4 +7,5 @@ export { exportGraphTool, handleExportGraph, parseToGraph } from "./exportGraph.
|
|
|
7
7
|
export { artifactToDiagramTool, handleArtifactToDiagram } from "./artifactToDiagram.js";
|
|
8
8
|
export { diffTool, applyChangeTool, handleDiff, handleApplyChange, diffCode, applyChanges } from "./diffAndApply.js";
|
|
9
9
|
export { createPlaygroundUrl } from "./playgroundApi.js";
|
|
10
|
+
export { complianceCheckTool, handleComplianceCheck } from "./complianceCheck.js";
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGpF,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGxF,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGpF,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGxF,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -16,7 +16,7 @@ export async function createPlaygroundUrl(code) {
|
|
|
16
16
|
method: "POST",
|
|
17
17
|
headers: {
|
|
18
18
|
"Content-Type": "application/json",
|
|
19
|
-
"User-Agent": "flowzap-mcp/1.
|
|
19
|
+
"User-Agent": "flowzap-mcp/1.4.1",
|
|
20
20
|
"X-MCP-Client": "flowzap-mcp",
|
|
21
21
|
},
|
|
22
22
|
body: JSON.stringify({ code, source: 'mcp' }),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flowzap-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"mcpName": "io.github.flowzap-xyz/flowzap",
|
|
5
5
|
"description": "MCP server for FlowZap - Create workflow, sequence, and architecture diagrams via AI assistants. Works with Claude Desktop, Claude Code, Cursor, Windsurf, OpenAI Codex, Warp, Zed, Cline, Roo Code, Continue.dev, and Sourcegraph Cody.",
|
|
6
6
|
"main": "dist/index.js",
|