@next-ai-drawio/mcp-server 0.1.0 → 0.1.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 CHANGED
@@ -2,12 +2,15 @@
2
2
 
3
3
  MCP (Model Context Protocol) server that enables AI agents like Claude Desktop and Cursor to generate and edit draw.io diagrams with **real-time browser preview**.
4
4
 
5
+ **Self-contained** - includes an embedded HTTP server, no external dependencies required.
6
+
5
7
  ## Features
6
8
 
7
9
  - **Real-time Preview**: Diagrams appear and update in your browser as the AI creates them
8
10
  - **Natural Language**: Describe diagrams in plain text - flowcharts, architecture diagrams, etc.
9
11
  - **Edit Support**: Modify existing diagrams with natural language instructions
10
12
  - **Export**: Save diagrams as `.drawio` files
13
+ - **Self-contained**: Embedded server, works offline (except draw.io UI which loads from embed.diagrams.net)
11
14
 
12
15
  ## Quick Start
13
16
 
@@ -26,7 +29,7 @@ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_
26
29
  }
27
30
  ```
28
31
 
29
- That's it! The MCP server connects to the hosted app at `https://next-ai-drawio.jiang.jp`.
32
+ That's it! The MCP server runs its own embedded HTTP server.
30
33
 
31
34
  ### Use with Claude
32
35
 
@@ -35,45 +38,28 @@ That's it! The MCP server connects to the hosted app at `https://next-ai-drawio.
35
38
  > "Create a flowchart showing user authentication with login, MFA, and session management"
36
39
  3. The diagram appears in your browser in real-time!
37
40
 
38
- ## Local Deployment (Optional)
39
-
40
- If you want to run the app locally instead of using the hosted version:
41
-
42
- ### Option 1: Docker
41
+ ## How It Works
43
42
 
44
- ```bash
45
- docker run -p 6002:3000 ghcr.io/biki-dev/next-ai-draw-io
46
43
  ```
47
-
48
- Then configure Claude Desktop:
49
-
50
- ```json
51
- {
52
- "mcpServers": {
53
- "drawio": {
54
- "command": "npx",
55
- "args": ["-y", "@next-ai-drawio/mcp-server"],
56
- "env": {
57
- "NEXT_APP_URL": "http://localhost:6002"
58
- }
59
- }
60
- }
61
- }
62
- ```
63
-
64
- ### Option 2: From Source
65
-
66
- ```bash
67
- # Clone the repo
68
- git clone https://github.com/Biki-dev/next-ai-draw-io.git
69
- cd next-ai-draw-io
70
-
71
- # Install and run
72
- npm install
73
- npm run dev
44
+ ┌─────────────────┐ stdio ┌─────────────────┐
45
+ │ Claude Desktop <───────────> │ MCP Server │
46
+ │ (AI Agent) │ │ (this package) │
47
+ └─────────────────┘ └────────┬────────┘
48
+
49
+ ┌────────▼────────┐
50
+ Embedded HTTP │
51
+ │ Server (:6002) │
52
+ └────────┬────────┘
53
+
54
+ ┌────────▼────────┐
55
+ │ User's Browser │
56
+ │ (draw.io embed) │
57
+ └─────────────────┘
74
58
  ```
75
59
 
76
- Then configure with `NEXT_APP_URL=http://localhost:6002`.
60
+ 1. **MCP Server** receives tool calls from Claude via stdio
61
+ 2. **Embedded HTTP Server** serves the draw.io UI and handles state
62
+ 3. **Browser** shows real-time diagram updates via polling
77
63
 
78
64
  ## Available Tools
79
65
 
@@ -89,35 +75,26 @@ Then configure with `NEXT_APP_URL=http://localhost:6002`.
89
75
 
90
76
  | Variable | Default | Description |
91
77
  |----------|---------|-------------|
92
- | `NEXT_APP_URL` | `https://next-ai-drawio.jiang.jp` | URL of the Next.js app |
93
- | `ACCESS_CODE` | - | Optional access code if the app is protected |
94
-
95
- ## How It Works
96
-
97
- ```
98
- ┌─────────────────┐ stdio ┌─────────────────┐ HTTP ┌─────────────────┐
99
- │ Claude Desktop │ <───────────> │ MCP Server │ <───────────> │ Hosted App │
100
- │ (AI Agent) │ │ (this package) │ │ (or local) │
101
- └─────────────────┘ └─────────────────┘ └────────┬────────┘
102
- │ │
103
- │ POST state Poll state
104
- ▼ │
105
- ┌─────────────────┐ ┌────────▼────────┐
106
- │ State Store │◄──────────────│ User's Browser │
107
- │ (in-memory) │ │ (draw.io UI) │
108
- └─────────────────┘ └─────────────────┘
109
- ```
110
-
111
- 1. **MCP Server** receives tool calls from Claude via stdio
112
- 2. **MCP Server** pushes diagram state to the hosted app
113
- 3. **Browser** polls for state changes and loads new diagrams automatically
78
+ | `PORT` | `6002` | Port for the embedded HTTP server |
114
79
 
115
80
  ## Troubleshooting
116
81
 
117
- ### "Cannot connect to..."
82
+ ### Port already in use
118
83
 
119
- - Check your internet connection
120
- - If using a custom `NEXT_APP_URL`, ensure the server is running
84
+ If port 6002 is in use, the server will automatically try the next available port.
85
+
86
+ Or set a custom port:
87
+ ```json
88
+ {
89
+ "mcpServers": {
90
+ "drawio": {
91
+ "command": "npx",
92
+ "args": ["-y", "@next-ai-drawio/mcp-server"],
93
+ "env": { "PORT": "6003" }
94
+ }
95
+ }
96
+ }
97
+ ```
121
98
 
122
99
  ### "No active session"
123
100
 
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Embedded HTTP Server for MCP
3
+ *
4
+ * Serves a static HTML page with draw.io embed and handles state sync.
5
+ * This eliminates the need for an external Next.js app.
6
+ */
7
+ interface SessionState {
8
+ xml: string;
9
+ version: number;
10
+ lastUpdated: Date;
11
+ }
12
+ export declare const stateStore: Map<string, SessionState>;
13
+ /**
14
+ * Get state for a session
15
+ */
16
+ export declare function getState(sessionId: string): SessionState | undefined;
17
+ /**
18
+ * Set state for a session
19
+ */
20
+ export declare function setState(sessionId: string, xml: string): number;
21
+ /**
22
+ * Start the embedded HTTP server
23
+ */
24
+ export declare function startHttpServer(port?: number): Promise<number>;
25
+ /**
26
+ * Stop the HTTP server
27
+ */
28
+ export declare function stopHttpServer(): void;
29
+ /**
30
+ * Get the current server port
31
+ */
32
+ export declare function getServerPort(): number;
33
+ export {};
34
+ //# sourceMappingURL=http-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,UAAU,YAAY;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,IAAI,CAAA;CACpB;AAGD,eAAO,MAAM,UAAU,2BAAkC,CAAA;AAOzD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAY/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BpE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAkBD;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -0,0 +1,336 @@
1
+ /**
2
+ * Embedded HTTP Server for MCP
3
+ *
4
+ * Serves a static HTML page with draw.io embed and handles state sync.
5
+ * This eliminates the need for an external Next.js app.
6
+ */
7
+ import http from "node:http";
8
+ import { log } from "./logger.js";
9
+ // In-memory state store (shared with MCP server in same process)
10
+ export const stateStore = new Map();
11
+ let server = null;
12
+ let serverPort = 6002;
13
+ const MAX_PORT = 6020; // Don't retry beyond this port
14
+ const SESSION_TTL = 60 * 60 * 1000; // 1 hour
15
+ /**
16
+ * Get state for a session
17
+ */
18
+ export function getState(sessionId) {
19
+ return stateStore.get(sessionId);
20
+ }
21
+ /**
22
+ * Set state for a session
23
+ */
24
+ export function setState(sessionId, xml) {
25
+ const existing = stateStore.get(sessionId);
26
+ const newVersion = (existing?.version || 0) + 1;
27
+ stateStore.set(sessionId, {
28
+ xml,
29
+ version: newVersion,
30
+ lastUpdated: new Date(),
31
+ });
32
+ log.debug(`State updated: session=${sessionId}, version=${newVersion}`);
33
+ return newVersion;
34
+ }
35
+ /**
36
+ * Start the embedded HTTP server
37
+ */
38
+ export function startHttpServer(port = 6002) {
39
+ return new Promise((resolve, reject) => {
40
+ if (server) {
41
+ resolve(serverPort);
42
+ return;
43
+ }
44
+ serverPort = port;
45
+ server = http.createServer(handleRequest);
46
+ server.on("error", (err) => {
47
+ if (err.code === "EADDRINUSE") {
48
+ if (port >= MAX_PORT) {
49
+ reject(new Error(`No available ports in range 6002-${MAX_PORT}`));
50
+ return;
51
+ }
52
+ log.info(`Port ${port} in use, trying ${port + 1}`);
53
+ server = null;
54
+ startHttpServer(port + 1).then(resolve).catch(reject);
55
+ }
56
+ else {
57
+ reject(err);
58
+ }
59
+ });
60
+ server.listen(port, () => {
61
+ serverPort = port;
62
+ log.info(`Embedded HTTP server running on http://localhost:${port}`);
63
+ resolve(port);
64
+ });
65
+ });
66
+ }
67
+ /**
68
+ * Stop the HTTP server
69
+ */
70
+ export function stopHttpServer() {
71
+ if (server) {
72
+ server.close();
73
+ server = null;
74
+ }
75
+ }
76
+ /**
77
+ * Clean up expired sessions
78
+ */
79
+ function cleanupExpiredSessions() {
80
+ const now = Date.now();
81
+ for (const [sessionId, state] of stateStore) {
82
+ if (now - state.lastUpdated.getTime() > SESSION_TTL) {
83
+ stateStore.delete(sessionId);
84
+ log.info(`Cleaned up expired session: ${sessionId}`);
85
+ }
86
+ }
87
+ }
88
+ // Run cleanup every 5 minutes
89
+ setInterval(cleanupExpiredSessions, 5 * 60 * 1000);
90
+ /**
91
+ * Get the current server port
92
+ */
93
+ export function getServerPort() {
94
+ return serverPort;
95
+ }
96
+ /**
97
+ * Handle HTTP requests
98
+ */
99
+ function handleRequest(req, res) {
100
+ const url = new URL(req.url || "/", `http://localhost:${serverPort}`);
101
+ // CORS headers for local development
102
+ res.setHeader("Access-Control-Allow-Origin", "*");
103
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
104
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type");
105
+ if (req.method === "OPTIONS") {
106
+ res.writeHead(204);
107
+ res.end();
108
+ return;
109
+ }
110
+ // Route handling
111
+ if (url.pathname === "/" || url.pathname === "/index.html") {
112
+ serveHtml(req, res, url);
113
+ }
114
+ else if (url.pathname === "/api/state" || url.pathname === "/api/mcp/state") {
115
+ handleStateApi(req, res, url);
116
+ }
117
+ else if (url.pathname === "/api/health" || url.pathname === "/api/mcp/health") {
118
+ res.writeHead(200, { "Content-Type": "application/json" });
119
+ res.end(JSON.stringify({ status: "ok", mcp: true }));
120
+ }
121
+ else {
122
+ res.writeHead(404);
123
+ res.end("Not Found");
124
+ }
125
+ }
126
+ /**
127
+ * Serve the HTML page with draw.io embed
128
+ */
129
+ function serveHtml(req, res, url) {
130
+ const sessionId = url.searchParams.get("mcp") || "";
131
+ res.writeHead(200, { "Content-Type": "text/html" });
132
+ res.end(getHtmlPage(sessionId));
133
+ }
134
+ /**
135
+ * Handle state API requests
136
+ */
137
+ function handleStateApi(req, res, url) {
138
+ if (req.method === "GET") {
139
+ const sessionId = url.searchParams.get("sessionId");
140
+ if (!sessionId) {
141
+ res.writeHead(400, { "Content-Type": "application/json" });
142
+ res.end(JSON.stringify({ error: "sessionId required" }));
143
+ return;
144
+ }
145
+ const state = stateStore.get(sessionId);
146
+ res.writeHead(200, { "Content-Type": "application/json" });
147
+ res.end(JSON.stringify({
148
+ xml: state?.xml || null,
149
+ version: state?.version || 0,
150
+ lastUpdated: state?.lastUpdated?.toISOString() || null,
151
+ }));
152
+ }
153
+ else if (req.method === "POST") {
154
+ let body = "";
155
+ req.on("data", (chunk) => {
156
+ body += chunk;
157
+ });
158
+ req.on("end", () => {
159
+ try {
160
+ const { sessionId, xml } = JSON.parse(body);
161
+ if (!sessionId) {
162
+ res.writeHead(400, { "Content-Type": "application/json" });
163
+ res.end(JSON.stringify({ error: "sessionId required" }));
164
+ return;
165
+ }
166
+ const version = setState(sessionId, xml);
167
+ res.writeHead(200, { "Content-Type": "application/json" });
168
+ res.end(JSON.stringify({ success: true, version }));
169
+ }
170
+ catch {
171
+ res.writeHead(400, { "Content-Type": "application/json" });
172
+ res.end(JSON.stringify({ error: "Invalid JSON" }));
173
+ }
174
+ });
175
+ }
176
+ else {
177
+ res.writeHead(405);
178
+ res.end("Method Not Allowed");
179
+ }
180
+ }
181
+ /**
182
+ * Generate the HTML page with draw.io embed
183
+ */
184
+ function getHtmlPage(sessionId) {
185
+ return `<!DOCTYPE html>
186
+ <html lang="en">
187
+ <head>
188
+ <meta charset="UTF-8">
189
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
190
+ <title>Draw.io MCP - ${sessionId || "No Session"}</title>
191
+ <style>
192
+ * { margin: 0; padding: 0; box-sizing: border-box; }
193
+ html, body { width: 100%; height: 100%; overflow: hidden; }
194
+ #container { width: 100%; height: 100%; display: flex; flex-direction: column; }
195
+ #header {
196
+ padding: 8px 16px;
197
+ background: #1a1a2e;
198
+ color: #eee;
199
+ font-family: system-ui, sans-serif;
200
+ font-size: 14px;
201
+ display: flex;
202
+ justify-content: space-between;
203
+ align-items: center;
204
+ }
205
+ #header .session { color: #888; font-size: 12px; }
206
+ #header .status { font-size: 12px; }
207
+ #header .status.connected { color: #4ade80; }
208
+ #header .status.disconnected { color: #f87171; }
209
+ #drawio { flex: 1; border: none; }
210
+ </style>
211
+ </head>
212
+ <body>
213
+ <div id="container">
214
+ <div id="header">
215
+ <div>
216
+ <strong>Draw.io MCP</strong>
217
+ <span class="session">${sessionId ? `Session: ${sessionId}` : "No MCP session"}</span>
218
+ </div>
219
+ <div id="status" class="status disconnected">Connecting...</div>
220
+ </div>
221
+ <iframe id="drawio" src="https://embed.diagrams.net/?embed=1&proto=json&spin=1&libraries=1"></iframe>
222
+ </div>
223
+
224
+ <script>
225
+ const sessionId = "${sessionId}";
226
+ const iframe = document.getElementById('drawio');
227
+ const statusEl = document.getElementById('status');
228
+
229
+ let currentVersion = 0;
230
+ let isDrawioReady = false;
231
+ let pendingXml = null;
232
+ let lastLoadedXml = null;
233
+
234
+ // Listen for messages from draw.io
235
+ window.addEventListener('message', (event) => {
236
+ if (event.origin !== 'https://embed.diagrams.net') return;
237
+
238
+ try {
239
+ const msg = JSON.parse(event.data);
240
+ handleDrawioMessage(msg);
241
+ } catch (e) {
242
+ // Ignore non-JSON messages
243
+ }
244
+ });
245
+
246
+ function handleDrawioMessage(msg) {
247
+ if (msg.event === 'init') {
248
+ isDrawioReady = true;
249
+ statusEl.textContent = 'Ready';
250
+ statusEl.className = 'status connected';
251
+
252
+ // Load pending XML if any
253
+ if (pendingXml) {
254
+ loadDiagram(pendingXml);
255
+ pendingXml = null;
256
+ }
257
+ } else if (msg.event === 'save') {
258
+ // User saved - push to state
259
+ if (msg.xml && msg.xml !== lastLoadedXml) {
260
+ pushState(msg.xml);
261
+ }
262
+ } else if (msg.event === 'export') {
263
+ // Export completed
264
+ if (msg.data) {
265
+ pushState(msg.data);
266
+ }
267
+ } else if (msg.event === 'autosave') {
268
+ // Autosave - push to state
269
+ if (msg.xml && msg.xml !== lastLoadedXml) {
270
+ pushState(msg.xml);
271
+ }
272
+ }
273
+ }
274
+
275
+ function loadDiagram(xml) {
276
+ if (!isDrawioReady) {
277
+ pendingXml = xml;
278
+ return;
279
+ }
280
+
281
+ lastLoadedXml = xml;
282
+ iframe.contentWindow.postMessage(JSON.stringify({
283
+ action: 'load',
284
+ xml: xml,
285
+ autosave: 1
286
+ }), '*');
287
+ }
288
+
289
+ async function pushState(xml) {
290
+ if (!sessionId) return;
291
+
292
+ try {
293
+ const response = await fetch('/api/state', {
294
+ method: 'POST',
295
+ headers: { 'Content-Type': 'application/json' },
296
+ body: JSON.stringify({ sessionId, xml })
297
+ });
298
+
299
+ if (response.ok) {
300
+ const result = await response.json();
301
+ currentVersion = result.version;
302
+ lastLoadedXml = xml;
303
+ }
304
+ } catch (e) {
305
+ console.error('Failed to push state:', e);
306
+ }
307
+ }
308
+
309
+ async function pollState() {
310
+ if (!sessionId) return;
311
+
312
+ try {
313
+ const response = await fetch('/api/state?sessionId=' + encodeURIComponent(sessionId));
314
+ if (!response.ok) return;
315
+
316
+ const state = await response.json();
317
+
318
+ if (state.version && state.version > currentVersion && state.xml) {
319
+ currentVersion = state.version;
320
+ loadDiagram(state.xml);
321
+ }
322
+ } catch (e) {
323
+ console.error('Failed to poll state:', e);
324
+ }
325
+ }
326
+
327
+ // Start polling if we have a session
328
+ if (sessionId) {
329
+ pollState();
330
+ setInterval(pollState, 2000);
331
+ }
332
+ </script>
333
+ </body>
334
+ </html>`;
335
+ }
336
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,8 +3,9 @@
3
3
  * MCP Server for Next AI Draw.io
4
4
  *
5
5
  * Enables AI agents (Claude Desktop, Cursor, etc.) to generate and edit
6
- * draw.io diagrams through the Next AI Draw.io application with real-time
7
- * browser preview.
6
+ * draw.io diagrams with real-time browser preview.
7
+ *
8
+ * Uses an embedded HTTP server - no external dependencies required.
8
9
  */
9
10
  export {};
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
package/dist/index.js CHANGED
@@ -3,19 +3,19 @@
3
3
  * MCP Server for Next AI Draw.io
4
4
  *
5
5
  * Enables AI agents (Claude Desktop, Cursor, etc.) to generate and edit
6
- * draw.io diagrams through the Next AI Draw.io application with real-time
7
- * browser preview.
6
+ * draw.io diagrams with real-time browser preview.
7
+ *
8
+ * Uses an embedded HTTP server - no external dependencies required.
8
9
  */
9
- // Setup DOM polyfill for Node.js (required for lib/utils.ts XML functions)
10
+ // Setup DOM polyfill for Node.js (required for XML operations)
10
11
  import { DOMParser } from "linkedom";
11
12
  globalThis.DOMParser = DOMParser;
12
- // Create XMLSerializer polyfill using outerHTML (linkedom doesn't export XMLSerializer)
13
+ // Create XMLSerializer polyfill using outerHTML
13
14
  class XMLSerializerPolyfill {
14
15
  serializeToString(node) {
15
16
  if (node.outerHTML !== undefined) {
16
17
  return node.outerHTML;
17
18
  }
18
- // For document nodes, serialize the document element
19
19
  if (node.documentElement) {
20
20
  return node.documentElement.outerHTML;
21
21
  }
@@ -28,19 +28,19 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
28
28
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
29
29
  import open from "open";
30
30
  import { z } from "zod";
31
- import { apiClient } from "./api-client.js";
32
31
  import { applyDiagramOperations, } from "./diagram-operations.js";
32
+ import { startHttpServer, getState, setState, } from "./http-server.js";
33
33
  import { log } from "./logger.js";
34
- import { sessionManager } from "./session.js";
35
- // Server configuration from environment
34
+ // Server configuration
36
35
  const config = {
37
- nextAppUrl: process.env.NEXT_APP_URL || "https://next-ai-drawio.jiang.jp",
38
- accessCode: process.env.ACCESS_CODE,
36
+ port: parseInt(process.env.PORT || "6002"),
39
37
  };
38
+ // Session state (single session for simplicity)
39
+ let currentSession = null;
40
40
  // Create MCP server
41
41
  const server = new McpServer({
42
42
  name: "next-ai-drawio",
43
- version: "0.1.0",
43
+ version: "0.1.1",
44
44
  });
45
45
  // Register prompt with workflow guidance
46
46
  server.prompt("diagram-workflow", "Guidelines for creating and editing draw.io diagrams", () => ({
@@ -74,38 +74,31 @@ server.prompt("diagram-workflow", "Guidelines for creating and editing draw.io d
74
74
  ],
75
75
  }));
76
76
  // Tool: start_session
77
- // Opens browser with MCP session for real-time diagram preview
78
77
  server.registerTool("start_session", {
79
78
  description: "Start a new diagram session and open the browser for real-time preview. " +
80
- "Connects to the hosted Next AI Draw.io app. " +
79
+ "Starts an embedded server and opens a browser window with draw.io. " +
81
80
  "The browser will show diagram updates as they happen.",
82
81
  inputSchema: {},
83
82
  }, async () => {
84
83
  try {
85
- // Check if hosted app is reachable
86
- const isReady = await ensureServerReachable();
87
- if (!isReady) {
88
- return {
89
- content: [
90
- {
91
- type: "text",
92
- text: `Error: Cannot connect to ${config.nextAppUrl}. Check your internet connection or use NEXT_APP_URL env var for a custom server.`,
93
- },
94
- ],
95
- isError: true,
96
- };
97
- }
98
- // Create new session
99
- const session = sessionManager.createSession(config.nextAppUrl);
100
- // Open browser with session URL
101
- const browserUrl = `${config.nextAppUrl}?mcp=${session.id}`;
84
+ // Start embedded HTTP server
85
+ const port = await startHttpServer(config.port);
86
+ // Create session
87
+ const sessionId = `mcp-${Date.now().toString(36)}-${Math.random().toString(36).substring(2, 8)}`;
88
+ currentSession = {
89
+ id: sessionId,
90
+ xml: "",
91
+ version: 0,
92
+ };
93
+ // Open browser
94
+ const browserUrl = `http://localhost:${port}?mcp=${sessionId}`;
102
95
  await open(browserUrl);
103
- log.info(`Started session ${session.id}, opened browser at ${browserUrl}`);
96
+ log.info(`Started session ${sessionId}, browser at ${browserUrl}`);
104
97
  return {
105
98
  content: [
106
99
  {
107
100
  type: "text",
108
- text: `Session started successfully!\n\nSession ID: ${session.id}\nBrowser URL: ${browserUrl}\n\nThe browser will now show real-time diagram updates.`,
101
+ text: `Session started successfully!\n\nSession ID: ${sessionId}\nBrowser URL: ${browserUrl}\n\nThe browser will now show real-time diagram updates.`,
109
102
  },
110
103
  ],
111
104
  };
@@ -120,7 +113,6 @@ server.registerTool("start_session", {
120
113
  }
121
114
  });
122
115
  // Tool: display_diagram
123
- // Display a draw.io diagram from XML (same as Next.js API)
124
116
  server.registerTool("display_diagram", {
125
117
  description: "Display a NEW draw.io diagram from XML. REPLACES the entire diagram. " +
126
118
  "Use this for creating new diagrams from scratch. " +
@@ -133,8 +125,7 @@ server.registerTool("display_diagram", {
133
125
  },
134
126
  }, async ({ xml }) => {
135
127
  try {
136
- const session = sessionManager.getCurrentSession();
137
- if (!session) {
128
+ if (!currentSession) {
138
129
  return {
139
130
  content: [
140
131
  {
@@ -147,12 +138,10 @@ server.registerTool("display_diagram", {
147
138
  }
148
139
  log.info(`Displaying diagram, ${xml.length} chars`);
149
140
  // Update session state
150
- session.previousXml = session.xml;
151
- session.xml = xml;
152
- session.version++;
153
- session.lastUpdated = new Date();
154
- // Push state to Next.js for browser sync
155
- await apiClient.pushState(session.serverUrl, session.id, session.xml);
141
+ currentSession.xml = xml;
142
+ currentSession.version++;
143
+ // Push to embedded server state
144
+ setState(currentSession.id, xml);
156
145
  log.info(`Diagram displayed successfully`);
157
146
  return {
158
147
  content: [
@@ -173,10 +162,9 @@ server.registerTool("display_diagram", {
173
162
  }
174
163
  });
175
164
  // Tool: edit_diagram
176
- // Edit the diagram using ID-based operations (same as Next.js API)
177
165
  server.registerTool("edit_diagram", {
178
166
  description: "Edit the current diagram by ID-based operations (update/add/delete cells). " +
179
- "ALWAYS fetches the latest state from browser by using 'get_diagram' tool before 'edit_diagram', so user's manual changes are preserved.\n\n" +
167
+ "ALWAYS fetches the latest state from browser first, so user's manual changes are preserved.\n\n" +
180
168
  "IMPORTANT workflow:\n" +
181
169
  "- For ADD operations: Can use directly - just provide new unique cell_id and new_xml.\n" +
182
170
  "- For UPDATE/DELETE: Call get_diagram FIRST to see current cell IDs, then edit.\n\n" +
@@ -201,8 +189,7 @@ server.registerTool("edit_diagram", {
201
189
  },
202
190
  }, async ({ operations }) => {
203
191
  try {
204
- const session = sessionManager.getCurrentSession();
205
- if (!session) {
192
+ if (!currentSession) {
206
193
  return {
207
194
  content: [
208
195
  {
@@ -213,13 +200,13 @@ server.registerTool("edit_diagram", {
213
200
  isError: true,
214
201
  };
215
202
  }
216
- // Fetch latest state from browser (user may have modified diagram manually)
217
- const browserState = await apiClient.getState(session.serverUrl, session.id);
218
- if (browserState.xml) {
219
- session.xml = browserState.xml;
203
+ // Fetch latest state from browser
204
+ const browserState = getState(currentSession.id);
205
+ if (browserState?.xml) {
206
+ currentSession.xml = browserState.xml;
220
207
  log.info("Fetched latest diagram state from browser");
221
208
  }
222
- if (!session.xml) {
209
+ if (!currentSession.xml) {
223
210
  return {
224
211
  content: [
225
212
  {
@@ -231,21 +218,19 @@ server.registerTool("edit_diagram", {
231
218
  };
232
219
  }
233
220
  log.info(`Editing diagram with ${operations.length} operation(s)`);
234
- // Apply operations using shared utility
235
- const { result, errors } = applyDiagramOperations(session.xml, operations);
221
+ // Apply operations
222
+ const { result, errors } = applyDiagramOperations(currentSession.xml, operations);
236
223
  if (errors.length > 0) {
237
224
  const errorMessages = errors
238
225
  .map((e) => `${e.type} ${e.cellId}: ${e.message}`)
239
226
  .join("\n");
240
227
  log.warn(`Edit had ${errors.length} error(s): ${errorMessages}`);
241
228
  }
242
- // Update session state
243
- session.previousXml = session.xml;
244
- session.xml = result;
245
- session.version++;
246
- session.lastUpdated = new Date();
247
- // Push state to Next.js for browser sync
248
- await apiClient.pushState(session.serverUrl, session.id, session.xml);
229
+ // Update state
230
+ currentSession.xml = result;
231
+ currentSession.version++;
232
+ // Push to embedded server
233
+ setState(currentSession.id, result);
249
234
  log.info(`Diagram edited successfully`);
250
235
  const successMsg = `Diagram edited successfully!\n\nApplied ${operations.length} operation(s).`;
251
236
  const errorMsg = errors.length > 0
@@ -270,15 +255,13 @@ server.registerTool("edit_diagram", {
270
255
  }
271
256
  });
272
257
  // Tool: get_diagram
273
- // Get the current diagram XML state
274
258
  server.registerTool("get_diagram", {
275
259
  description: "Get the current diagram XML (fetches latest from browser, including user's manual edits). " +
276
260
  "Call this BEFORE edit_diagram if you need to update or delete existing elements, " +
277
261
  "so you can see the current cell IDs and structure.",
278
262
  }, async () => {
279
263
  try {
280
- const session = sessionManager.getCurrentSession();
281
- if (!session) {
264
+ if (!currentSession) {
282
265
  return {
283
266
  content: [
284
267
  {
@@ -290,16 +273,16 @@ server.registerTool("get_diagram", {
290
273
  };
291
274
  }
292
275
  // Fetch latest state from browser
293
- const browserState = await apiClient.getState(session.serverUrl, session.id);
294
- if (browserState.xml) {
295
- session.xml = browserState.xml;
276
+ const browserState = getState(currentSession.id);
277
+ if (browserState?.xml) {
278
+ currentSession.xml = browserState.xml;
296
279
  }
297
- if (!session.xml) {
280
+ if (!currentSession.xml) {
298
281
  return {
299
282
  content: [
300
283
  {
301
284
  type: "text",
302
- text: "No diagram exists yet. Use create_diagram to create one.",
285
+ text: "No diagram exists yet. Use display_diagram to create one.",
303
286
  },
304
287
  ],
305
288
  };
@@ -308,7 +291,7 @@ server.registerTool("get_diagram", {
308
291
  content: [
309
292
  {
310
293
  type: "text",
311
- text: `Current diagram XML:\n\n${session.xml}`,
294
+ text: `Current diagram XML:\n\n${currentSession.xml}`,
312
295
  },
313
296
  ],
314
297
  };
@@ -323,7 +306,6 @@ server.registerTool("get_diagram", {
323
306
  }
324
307
  });
325
308
  // Tool: export_diagram
326
- // Save the diagram to a file
327
309
  server.registerTool("export_diagram", {
328
310
  description: "Export the current diagram to a .drawio file.",
329
311
  inputSchema: {
@@ -333,8 +315,7 @@ server.registerTool("export_diagram", {
333
315
  },
334
316
  }, async ({ path }) => {
335
317
  try {
336
- const session = sessionManager.getCurrentSession();
337
- if (!session) {
318
+ if (!currentSession) {
338
319
  return {
339
320
  content: [
340
321
  {
@@ -345,12 +326,12 @@ server.registerTool("export_diagram", {
345
326
  isError: true,
346
327
  };
347
328
  }
348
- // Fetch latest state from browser
349
- const browserState = await apiClient.getState(session.serverUrl, session.id);
350
- if (browserState.xml) {
351
- session.xml = browserState.xml;
329
+ // Fetch latest state
330
+ const browserState = getState(currentSession.id);
331
+ if (browserState?.xml) {
332
+ currentSession.xml = browserState.xml;
352
333
  }
353
- if (!session.xml) {
334
+ if (!currentSession.xml) {
354
335
  return {
355
336
  content: [
356
337
  {
@@ -361,24 +342,20 @@ server.registerTool("export_diagram", {
361
342
  isError: true,
362
343
  };
363
344
  }
364
- // Import fs dynamically
365
345
  const fs = await import("node:fs/promises");
366
346
  const nodePath = await import("node:path");
367
- // Ensure path ends with .drawio
368
347
  let filePath = path;
369
348
  if (!filePath.endsWith(".drawio")) {
370
349
  filePath = `${filePath}.drawio`;
371
350
  }
372
- // Resolve to absolute path
373
351
  const absolutePath = nodePath.resolve(filePath);
374
- // Write the XML to file
375
- await fs.writeFile(absolutePath, session.xml, "utf-8");
352
+ await fs.writeFile(absolutePath, currentSession.xml, "utf-8");
376
353
  log.info(`Diagram exported to ${absolutePath}`);
377
354
  return {
378
355
  content: [
379
356
  {
380
357
  type: "text",
381
- text: `Diagram exported successfully!\n\nFile: ${absolutePath}\nSize: ${session.xml.length} characters`,
358
+ text: `Diagram exported successfully!\n\nFile: ${absolutePath}\nSize: ${currentSession.xml.length} characters`,
382
359
  },
383
360
  ],
384
361
  };
@@ -392,28 +369,9 @@ server.registerTool("export_diagram", {
392
369
  };
393
370
  }
394
371
  });
395
- // Track if server has been verified as reachable
396
- let serverReachable = false;
397
- /**
398
- * Check if the hosted app is reachable
399
- */
400
- async function ensureServerReachable() {
401
- if (serverReachable)
402
- return true;
403
- const isHealthy = await apiClient.checkHealth(config.nextAppUrl);
404
- if (isHealthy) {
405
- serverReachable = true;
406
- log.info(`Connected to ${config.nextAppUrl}`);
407
- }
408
- else {
409
- log.warn(`Cannot reach ${config.nextAppUrl}`);
410
- }
411
- return isHealthy;
412
- }
413
372
  // Start the MCP server
414
373
  async function main() {
415
- log.info("Starting MCP server for Next AI Draw.io...");
416
- log.info(`App URL: ${config.nextAppUrl}`);
374
+ log.info("Starting MCP server for Next AI Draw.io (embedded mode)...");
417
375
  const transport = new StdioServerTransport();
418
376
  await server.connect(transport);
419
377
  log.info("MCP server running on stdio");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,2EAA2E;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CACnC;AAAC,UAAkB,CAAC,SAAS,GAAG,SAAS,CAAA;AAE1C,wFAAwF;AACxF,MAAM,qBAAqB;IACvB,iBAAiB,CAAC,IAAS;QACvB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,SAAS,CAAA;QACzB,CAAC;QACD,qDAAqD;QACrD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAA;QACzC,CAAC;QACD,OAAO,EAAE,CAAA;IACb,CAAC;CACJ;AACD,CAAC;AAAC,UAAkB,CAAC,aAAa,GAAG,qBAAqB,CAAA;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EACH,sBAAsB,GAEzB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,wCAAwC;AACxC,MAAM,MAAM,GAAG;IACX,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,iCAAiC;IACzE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;CACtC,CAAA;AAED,oBAAoB;AACpB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IACzB,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,OAAO;CACnB,CAAC,CAAA;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,CACT,kBAAkB,EAClB,sDAAsD,EACtD,GAAG,EAAE,CAAC,CAAC;IACH,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;;;;;;;;;;;;;;;;;;;+EAmBqD;aAC9D;SACJ;KACJ;CACJ,CAAC,CACL,CAAA;AAED,sBAAsB;AACtB,+DAA+D;AAC/D,MAAM,CAAC,YAAY,CACf,eAAe,EACf;IACI,WAAW,EACP,0EAA0E;QAC1E,8CAA8C;QAC9C,uDAAuD;IAC3D,WAAW,EAAE,EAAE;CAClB,EACD,KAAK,IAAI,EAAE;IACP,IAAI,CAAC;QACD,mCAAmC;QACnC,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAA;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4BAA4B,MAAM,CAAC,UAAU,mFAAmF;qBACzI;iBACJ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAA;QACL,CAAC;QAED,qBAAqB;QACrB,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAE/D,gCAAgC;QAChC,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,UAAU,QAAQ,OAAO,CAAC,EAAE,EAAE,CAAA;QAC3D,MAAM,IAAI,CAAC,UAAU,CAAC,CAAA;QAEtB,GAAG,CAAC,IAAI,CACJ,mBAAmB,OAAO,CAAC,EAAE,uBAAuB,UAAU,EAAE,CACnE,CAAA;QAED,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gDAAgD,OAAO,CAAC,EAAE,kBAAkB,UAAU,0DAA0D;iBACzJ;aACJ;SACJ,CAAA;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1D,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAA;QAC3C,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;YACtD,OAAO,EAAE,IAAI;SAChB,CAAA;IACL,CAAC;AACL,CAAC,CACJ,CAAA;AAED,wBAAwB;AACxB,2DAA2D;AAC3D,MAAM,CAAC,YAAY,CACf,iBAAiB,EACjB;IACI,WAAW,EACP,uEAAuE;QACvE,mDAAmD;QACnD,yFAAyF;QACzF,uDAAuD;IAC3D,WAAW,EAAE;QACT,GAAG,EAAE,CAAC;aACD,MAAM,EAAE;aACR,QAAQ,CAAC,kDAAkD,CAAC;KACpE;CACJ,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IACd,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAA;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4DAA4D;qBACrE;iBACJ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAA;QACL,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAA;QAEnD,uBAAuB;QACvB,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAA;QACjC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAA;QACjB,OAAO,CAAC,OAAO,EAAE,CAAA;QACjB,OAAO,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAA;QAEhC,yCAAyC;QACzC,MAAM,SAAS,CAAC,SAAS,CACrB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,EAAE,EACV,OAAO,CAAC,GAAG,CACd,CAAA;QAED,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;QAE1C,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,iGAAiG,GAAG,CAAC,MAAM,aAAa;iBACjI;aACJ;SACJ,CAAA;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1D,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAA;QAC7C,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;YACtD,OAAO,EAAE,IAAI;SAChB,CAAA;IACL,CAAC;AACL,CAAC,CACJ,CAAA;AAED,qBAAqB;AACrB,mEAAmE;AACnE,MAAM,CAAC,YAAY,CACf,cAAc,EACd;IACI,WAAW,EACP,6EAA6E;QAC7E,6IAA6I;QAC7I,uBAAuB;QACvB,yFAAyF;QACzF,qFAAqF;QACrF,eAAe;QACf,uEAAuE;QACvE,uFAAuF;QACvF,gEAAgE;QAChE,iFAAiF;IACrF,WAAW,EAAE;QACT,UAAU,EAAE,CAAC;aACR,KAAK,CACF,CAAC,CAAC,MAAM,CAAC;YACL,IAAI,EAAE,CAAC;iBACF,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;iBACjC,QAAQ,CAAC,gBAAgB,CAAC;YAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACpD,OAAO,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACL,uDAAuD,CAC1D;SACR,CAAC,CACL;aACA,QAAQ,CAAC,8BAA8B,CAAC;KAChD;CACJ,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IACrB,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAA;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4DAA4D;qBACrE;iBACJ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAA;QACL,CAAC;QAED,4EAA4E;QAC5E,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,QAAQ,CACzC,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,EAAE,CACb,CAAA;QACD,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAA;YAC9B,GAAG,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;QACzD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACf,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,gFAAgF;qBACzF;iBACJ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAA;QACL,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,wBAAwB,UAAU,CAAC,MAAM,eAAe,CAAC,CAAA;QAElE,wCAAwC;QACxC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAC7C,OAAO,CAAC,GAAG,EACX,UAAgC,CACnC,CAAA;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,aAAa,GAAG,MAAM;iBACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBACjD,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,MAAM,cAAc,aAAa,EAAE,CAAC,CAAA;QACpE,CAAC;QAED,uBAAuB;QACvB,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAA;QACjC,OAAO,CAAC,GAAG,GAAG,MAAM,CAAA;QACpB,OAAO,CAAC,OAAO,EAAE,CAAA;QACjB,OAAO,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAA;QAEhC,yCAAyC;QACzC,MAAM,SAAS,CAAC,SAAS,CACrB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,EAAE,EACV,OAAO,CAAC,GAAG,CACd,CAAA;QAED,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QAEvC,MAAM,UAAU,GAAG,2CAA2C,UAAU,CAAC,MAAM,gBAAgB,CAAA;QAC/F,MAAM,QAAQ,GACV,MAAM,CAAC,MAAM,GAAG,CAAC;YACb,CAAC,CAAC,kBAAkB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3F,CAAC,CAAC,EAAE,CAAA;QAEZ,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU,GAAG,QAAQ;iBAC9B;aACJ;SACJ,CAAA;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1D,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAA;QAC1C,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;YACtD,OAAO,EAAE,IAAI;SAChB,CAAA;IACL,CAAC;AACL,CAAC,CACJ,CAAA;AAED,oBAAoB;AACpB,oCAAoC;AACpC,MAAM,CAAC,YAAY,CACf,aAAa,EACb;IACI,WAAW,EACP,4FAA4F;QAC5F,mFAAmF;QACnF,oDAAoD;CAC3D,EACD,KAAK,IAAI,EAAE;IACP,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAA;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4DAA4D;qBACrE;iBACJ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAA;QACL,CAAC;QAED,kCAAkC;QAClC,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,QAAQ,CACzC,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,EAAE,CACb,CAAA;QACD,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAA;QAClC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACf,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,0DAA0D;qBACnE;iBACJ;aACJ,CAAA;QACL,CAAC;QAED,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2BAA2B,OAAO,CAAC,GAAG,EAAE;iBACjD;aACJ;SACJ,CAAA;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1D,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAA;QACzC,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;YACtD,OAAO,EAAE,IAAI;SAChB,CAAA;IACL,CAAC;AACL,CAAC,CACJ,CAAA;AAED,uBAAuB;AACvB,6BAA6B;AAC7B,MAAM,CAAC,YAAY,CACf,gBAAgB,EAChB;IACI,WAAW,EAAE,+CAA+C;IAC5D,WAAW,EAAE;QACT,IAAI,EAAE,CAAC;aACF,MAAM,EAAE;aACR,QAAQ,CACL,wDAAwD,CAC3D;KACR;CACJ,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACf,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAA;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4DAA4D;qBACrE;iBACJ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAA;QACL,CAAC;QAED,kCAAkC;QAClC,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,QAAQ,CACzC,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,EAAE,CACb,CAAA;QACD,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAA;QAClC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACf,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,6DAA6D;qBACtE;iBACJ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAA;QACL,CAAC;QAED,wBAAwB;QACxB,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC3C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;QAE1C,gCAAgC;QAChC,IAAI,QAAQ,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,QAAQ,GAAG,GAAG,QAAQ,SAAS,CAAA;QACnC,CAAC;QAED,2BAA2B;QAC3B,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAE/C,wBAAwB;QACxB,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAEtD,GAAG,CAAC,IAAI,CAAC,uBAAuB,YAAY,EAAE,CAAC,CAAA;QAE/C,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2CAA2C,YAAY,WAAW,OAAO,CAAC,GAAG,CAAC,MAAM,aAAa;iBAC1G;aACJ;SACJ,CAAA;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1D,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAA;QAC5C,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;YACtD,OAAO,EAAE,IAAI;SAChB,CAAA;IACL,CAAC;AACL,CAAC,CACJ,CAAA;AAED,iDAAiD;AACjD,IAAI,eAAe,GAAG,KAAK,CAAA;AAE3B;;GAEG;AACH,KAAK,UAAU,qBAAqB;IAChC,IAAI,eAAe;QAAE,OAAO,IAAI,CAAA;IAEhC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAChE,IAAI,SAAS,EAAE,CAAC;QACZ,eAAe,GAAG,IAAI,CAAA;QACtB,GAAG,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;IACjD,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,SAAS,CAAA;AACpB,CAAC;AAED,uBAAuB;AACvB,KAAK,UAAU,IAAI;IACf,GAAG,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IACtD,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;IAEzC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAE/B,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;AAC3C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-ai-drawio/mcp-server",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "MCP server for Next AI Draw.io - AI-powered diagram generation with real-time browser preview",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",