@next-ai-drawio/mcp-server
v0.1.16MCP server for Next AI Draw.io - AI-powered diagram generation with real-time browser preview
53
Total
3
Critical
29
High
21
Medium
Findings
unknownEnvironment file access
Detected by automated pattern matching (rule DE-002) with medium confidence. May be a false positive.
7: import { log } from "./logger.js";
8: // Configurable draw.io embed URL for private deployments
>>> 9: const DRAWIO_BASE_URL = process.env.DRAWIO_BASE_URL || "https://embed.diagrams.net";
10: // Extract origin (scheme + host + port) from URL for postMessage security check
11: function getOrigin(url) {Report false positiveEnvironment file access
Detected by automated pattern matching (rule DE-002) with medium confidence. May be a false positive.
14: },
15: debug: (msg, ...args) => {
>>> 16: if (process.env.DEBUG === "true") {
17: console.error(`[MCP-DrawIO] [DEBUG] ${msg}`, ...args);
18: }Report false positiveEnvironment file access
Detected by automated pattern matching (rule DE-002) with medium confidence. May be a false positive.
36: // Server configuration
37: const config = {
>>> 38: port: parseInt(process.env.PORT || "6002", 10),
39: };
40: // Session state (single session for simplicity)Report false positiveDecoded base64 content: {kh)h�)�N�^���
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: ��Z��ڲ���+�+�
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: ����r1�Rz�"�r
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: ����r1�Rz�"�r
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: ��Z��ڲ���+�+�
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: J�b�'���ӭ�즊�
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: J�b�'���ӭ�즊�
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
56: const tag = xml.substring(tagStart, tagEnd + 1);
57: i = tagEnd + 1;
>>> 58: const tagMatch = /^<(\/?)([a-zA-Z][a-zA-Z0-9:_-]*)/.exec(tag);
59: if (!tagMatch)
60: continue;Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
78: const tagPattern = /<[^>]+>/g;
79: let tagMatch;
>>> 80: while ((tagMatch = tagPattern.exec(xml)) !== null) {
81: const tag = tagMatch[0];
82: const attrPattern = /\s([a-zA-Z_:][a-zA-Z0-9_:.-]*)\s*=/g;Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
83: const attributes = new Map();
84: let attrMatch;
>>> 85: while ((attrMatch = attrPattern.exec(tag)) !== null) {
86: const attrName = attrMatch[1];
87: attributes.set(attrName, (attributes.get(attrName) || 0) + 1);Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
101: const ids = new Map();
102: let idMatch;
>>> 103: while ((idMatch = idPattern.exec(xml)) !== null) {
104: const id = idMatch[1];
105: ids.set(id, (ids.get(id) || 0) + 1);Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
141: const charRefPattern = /&#x?[^;]+;?/g;
142: let charMatch;
>>> 143: while ((charMatch = charRefPattern.exec(xml)) !== null) {
144: const ref = charMatch[0];
145: if (ref.startsWith("&#x")) {Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
173: const invalidEntityPattern = /&([a-zA-Z][a-zA-Z0-9]*);/g;
174: let entityMatch;
>>> 175: while ((entityMatch = invalidEntityPattern.exec(xmlWithoutComments)) !== null) {
176: if (!VALID_ENTITIES.has(entityMatch[1])) {
177: return `Invalid XML: Invalid entity reference: &${entityMatch[1]}; - use only valid XML entities (lt, gt, amp, quot, apos)`;Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
185: const cellStack = [];
186: let cellMatch;
>>> 187: while ((cellMatch = cellTagPattern.exec(xml)) !== null) {
188: const tag = cellMatch[0];
189: if (tag.startsWith("</mxCell>")) {Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
249: const attrValuePattern = /=\s*"([^"]*)"/g;
250: let attrValMatch;
>>> 251: while ((attrValMatch = attrValuePattern.exec(xml)) !== null) {
252: const value = attrValMatch[1];
253: if (/</.test(value) && !/</.test(value)) {Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
273: const commentPattern = /<!--([\s\S]*?)-->/g;
274: let commentMatch;
>>> 275: while ((commentMatch = commentPattern.exec(xml)) !== null) {
276: if (/--/.test(commentMatch[1])) {
277: return "Invalid XML: Comment contains -- (double hyphen) which is not allowed";Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
395: let attrMatch;
396: let hasUnescapedLt = false;
>>> 397: while ((attrMatch = attrPattern.exec(fixed)) !== null) {
398: if (!attrMatch[3].startsWith("<")) {
399: hasUnescapedLt = true;Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
491: let foreignMatch;
492: const foreignTags = new Set();
>>> 493: while ((foreignMatch = foreignTagPattern.exec(fixed)) !== null) {
494: const tagName = foreignMatch[1];
495: if (!validDrawioTags.has(tagName)) {Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
537: const fullTagPattern = /<(\/?[a-zA-Z][a-zA-Z0-9]*)[^>]*>/g;
538: let tagCountMatch;
>>> 539: while ((tagCountMatch = fullTagPattern.exec(fixed)) !== null) {
540: const fullMatch = tagCountMatch[0];
541: const tagPart = tagCountMatch[1];Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
579: let lastValidTagEnd = -1;
580: let closingMatch;
>>> 581: while ((closingMatch = closingTagPattern.exec(fixed)) !== null) {
582: lastValidTagEnd = closingMatch.index + closingMatch[0].length;
583: }Report false positiveDynamic code execution via exec()
Detected by automated pattern matching (rule SC-003) with medium confidence. May be a false positive.
663: const idPattern = /\bid\s*=\s*["']([^"']+)["']/gi;
664: let idMatch;
>>> 665: while ((idMatch = idPattern.exec(fixed)) !== null) {
666: const id = idMatch[1];
667: seenIds.set(id, (seenIds.get(id) || 0) + 1);Report false positiveDecoded base64 content: r��;��'��-����
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: r��(Z��-z�^}�ޝǬ
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: �{ږ'D�ح������
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: �{ږ'D�ح������
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: r��;��'��-����
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: r��(Z��-z�^}�ޝǬ
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: {kh)h�)�N�^���
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveDecoded base64 content: {kh)h�)�N�^���
Detected by automated pattern matching (rule DO-BAS) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.6 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.7 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (5.0 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.6 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.8 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.8 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.7 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveJavaScript fetch() call
Detected by automated pattern matching (rule NS-003) with medium confidence. May be a false positive.
605: if (isPng || isSvg) {
606: pendingMcpExport = null;
>>> 607: fetch('/api/state', {
608: method: 'POST',
609: headers: { 'Content-Type': 'application/json' },Report false positiveJavaScript fetch() call
Detected by automated pattern matching (rule NS-003) with medium confidence. May be a false positive.
645: } else if (pendingAiSvg) {
646: pendingAiSvg = false;
>>> 647: fetch('/api/history-svg', {
648: method: 'POST',
649: headers: { 'Content-Type': 'application/json' },Report false positiveJavaScript fetch() call
Detected by automated pattern matching (rule NS-003) with medium confidence. May be a false positive.
670: if (!sessionId) return;
671: try {
>>> 672: const r = await fetch('/api/state', {
673: method: 'POST',
674: headers: { 'Content-Type': 'application/json' },Report false positiveJavaScript fetch() call
Detected by automated pattern matching (rule NS-003) with medium confidence. May be a false positive.
684: if (!sessionId) return;
685: try {
>>> 686: const r = await fetch('/api/state?sessionId=' + encodeURIComponent(sessionId));
687: if (!r.ok) return;
688: const s = await r.json();Report false positiveJavaScript fetch() call
Detected by automated pattern matching (rule NS-003) with medium confidence. May be a false positive.
782: if (!sessionId) return;
783: try {
>>> 784: const r = await fetch('/api/history?sessionId=' + encodeURIComponent(sessionId));
785: if (r.ok) {
786: const d = await r.json();Report false positiveJavaScript fetch() call
Detected by automated pattern matching (rule NS-003) with medium confidence. May be a false positive.
824: restoreBtn.textContent = 'Restoring...';
825: try {
>>> 826: const r = await fetch('/api/restore', {
827: method: 'POST',
828: headers: { 'Content-Type': 'application/json' },Report false positiveHigh-entropy string (4.8 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (5.0 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.6 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.5 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.8 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.5 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.7 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveHigh-entropy string (4.8 bits/char) — possible encoded payload
Detected by automated pattern matching (rule EN-001) with medium confidence. May be a false positive.
Report false positiveScan History
| Date | Risk | Findings | Files | Duration |
|---|---|---|---|---|
| Feb 27, 2026 | critical | 53 | 27 | 0.00s |
| Feb 25, 2026 | critical | 53 | 27 | 0.00s |
| Feb 23, 2026 | critical | 53 | 27 | 0.00s |
| Feb 22, 2026 | critical | 53 | 27 | 0.00s |