28MCP-Server für Coding-Agents
zplcore-mcp ist ein Model-Context-Protocol-Server: Coding-Agents wie Claude Code, Claude Desktop, VS Code/GitHub Copilot oder Cursor rendern, prüfen und korrigieren damit ZPL-Etiketten offline in einer Schleife – ZPL schreiben, PNG ansehen, Diagnosen lesen, verbessern. 26 Werkzeuge: render, lint, format, diff, fill_template, convert_epl, comply, verify, import_label, extract, redact, gs1_link_build/_parse, gs1_migrate, rfid_encode/_decode/_check, printer_profiles, printer_check, print_estimate, cut_plan, lift_svg, list_symbologies, describe_symbology, explain_command, get_limits.
dotnet pack tools/ZplCore.Mcp -c Release -o nupkg dotnet tool install -g ZplCore.Mcp --add-source nupkg # Befehl "zplcore-mcp", braucht die .NET-10-Runtime claude mcp add zplcore -- zplcore-mcp # Claude Code (aktuelles Projekt; --scope user für alle)
Claude Code (.mcp.json im Repository)
{ "mcpServers": { "zplcore": { "type": "stdio", "command": "zplcore-mcp", "args": [] } } }Claude Desktop (claude_desktop_config.json)
{ "mcpServers": { "zplcore": { "command": "/Users/you/.dotnet/tools/zplcore-mcp", "args": [] } } }GUI-Apps kennen ~/.dotnet/tools oft nicht im PATH – absoluten Pfad angeben.
VS Code / GitHub Copilot (.vscode/mcp.json)
{ "servers": { "zplcore": { "type": "stdio", "command": "zplcore-mcp", "args": [] } } }Cursor (.cursor/mcp.json)
{ "mcpServers": { "zplcore": { "command": "zplcore-mcp", "args": [] } } }Beispiellauf (gekürzt)
Auftrag: „Erstelle ein GS1-Versandlabel 100 × 150 mm für diese Sendung und prüfe es gegen die GS1-Logistikregeln.“
lint– 0 Diagnosencomply gs1-logistic– 2 Fehler: ZPL3104 SSCC-Modulbreite 0,375 mm < 0,495 mm, ZPL3105 Balkenhöhe 13 mm < 31,75 mm- Agent: SSCC-Barcode auf
^BY4und 270 Dots Höhe, Text ab 3 mm, Layout angepasst comply gs1-logistic– 0 Fehler ·verify– 3 von 3 Barcodes gelesen, Note A ·render– PNG, 100 × 150 mm, 203 dpi
Label, Befunde und Noten sind echte Ergebnisse der Engine; eine Vorprüfung, keine Zertifizierung.
Sicherheitsmodell
Isoliert
- Nur stdio: kein HTTP/SSE, kein lauschender Socket; Logs nur auf stderr, nie die Eingaben
- Werkzeuge nehmen Etikettentext und liefern Ergebnisse – kein Zugriff auf Dateien, Netzwerk, Drucker, Prozesse oder Umgebungsvariablen; Druckerspeicher-Befehle arbeiten auf einem Speicher, der nur einen Aufruf lebt
- Jeder Aufruf läuft in einem eigenen Worker-Prozess mit leerer Umgebung (keine Tokens des Clients), Zeit- und Speicherlimit; macOS zusätzlich unter
sandbox-exec(kein Netzwerk, keine Schreibzugriffe außerhalb des Arbeitsordners, Home-Verzeichnis nicht lesbar) - Kein PDF:
lift_svgnimmt nur SVG-Text, PDFium wird nicht mitgeliefert
Begrenzt
- Strikte Schemas: unbekannte Argumente, falsche Typen, Werte außerhalb des Bereichs und doppelte Schlüssel werden abgelehnt
- Jeder Aufruf im
ZplLimits-Bereich (siehe unten): 10 Etiketten, 12 Mio. Dots, 4 MiB Grafik, 16 MiB Druckerspeicher, 64 Ki Zeichen Felddaten - 20 s und 1536 MB pro Aufruf (einstellbar:
--timeout-seconds,--memory-mb,--workers) - SVG: 2 Mi Zeichen, kein DOCTYPE/keine Entities, keine externen Referenzen, ≤ 256 Ebenen, ≤ 200.000 Elemente
- Texte aus dem Etikett sind im Ergebnis als nicht vertrauenswürdige Daten markiert

