@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 +38 -61
- package/dist/http-server.d.ts +34 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +336 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -102
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
-
##
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
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
|
-
| `
|
|
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
|
-
###
|
|
82
|
+
### Port already in use
|
|
118
83
|
|
|
119
|
-
|
|
120
|
-
|
|
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
|
|
7
|
-
*
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
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
|
|
7
|
-
*
|
|
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
|
|
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
|
|
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
|
-
|
|
35
|
-
// Server configuration from environment
|
|
34
|
+
// Server configuration
|
|
36
35
|
const config = {
|
|
37
|
-
|
|
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.
|
|
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
|
-
"
|
|
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
|
-
//
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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 ${
|
|
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: ${
|
|
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
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
217
|
-
const browserState =
|
|
218
|
-
if (browserState
|
|
219
|
-
|
|
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 (!
|
|
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
|
|
235
|
-
const { result, errors } = applyDiagramOperations(
|
|
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
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
-
|
|
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 =
|
|
294
|
-
if (browserState
|
|
295
|
-
|
|
276
|
+
const browserState = getState(currentSession.id);
|
|
277
|
+
if (browserState?.xml) {
|
|
278
|
+
currentSession.xml = browserState.xml;
|
|
296
279
|
}
|
|
297
|
-
if (!
|
|
280
|
+
if (!currentSession.xml) {
|
|
298
281
|
return {
|
|
299
282
|
content: [
|
|
300
283
|
{
|
|
301
284
|
type: "text",
|
|
302
|
-
text: "No diagram exists yet. Use
|
|
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${
|
|
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
|
-
|
|
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
|
|
349
|
-
const browserState =
|
|
350
|
-
if (browserState
|
|
351
|
-
|
|
329
|
+
// Fetch latest state
|
|
330
|
+
const browserState = getState(currentSession.id);
|
|
331
|
+
if (browserState?.xml) {
|
|
332
|
+
currentSession.xml = browserState.xml;
|
|
352
333
|
}
|
|
353
|
-
if (!
|
|
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
|
-
|
|
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: ${
|
|
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":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED