open-mcp-cad
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPEN_MCP_CAD_DOC | No | Document name (or part of it) to select the correct CAD instance via the registry. Example: OPEN_MCP_CAD_DOC=Seeblick. | |
| OPEN_MCP_CAD_PORT | No | Fixed port for the bridge connection (e.g. 53128). Use this to select a specific CAD instance when multiple are running. | |
| OPEN_MCP_CAD_KNOWLEDGE | No | Semicolon-separated list of folders containing additional domain knowledge (rules.md, known_issues.json, working_examples.json, detail_catalog.json). | |
| OPEN_MCP_CAD_EXPECT_DOC | No | Part of the filename that must be open before any command is executed. Enables document protection against executing code in the wrong instance. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_document_infoB | Liefert Informationen zum aktuell in Cadwork geöffneten Dokument. Schneller Status-Check: Dokumentname und Anzahl der identifizierbaren Elemente. Delegiert über die TCP-Bridge an das McpBridge-Plugin. |
| get_connection_statusA | Zustand der Open-MCP-CAD-Verbindung zu Cadwork. Antwortet auch dann, wenn Cadwork gerade minutenlang zeichnet — die Abfrage läuft NICHT über die Auftrags-Warteschlange des Plugins. Genau dafür gedacht, wenn execute_cadwork_command in ein Timeout gelaufen ist: Hier steht, ob der Auftrag noch läuft (dann warten, NICHT wiederholen), ob die Verbindung pausiert ist oder ob der Cadwork-Hauptthread hängt. Liefert unter anderem: instanz (A-D), port, pid, dokument, zustand + zustand_text (Aus / Wird gestartet / Bereit / Liest Modell / Bearbeitet Modell / Pausiert / Wird nach dem Auftrag beendet / Störung), laufender Auftrag mit Beschreibung und Laufzeit, wartende Aufträge, Schreiblizenz, letzter Fehler und ein Klartext-Hinweis. |
| report_check_noteA | Meldet einen Prüfhinweis ins Fenster „Open MCP CAD" in Cadwork. Dafür gedacht, dem Menschen etwas mitzuteilen, das er sich anschauen soll — eine Annahme, eine Unsicherheit, eine fehlende Angabe, eine Builder-Warnung. Der Hinweis erscheint sofort im Register „Hinweise"; sind Element-IDs dabei, kann der Nutzer ihn anklicken und „Im Modell zeigen" aktiviert und zoomt genau diese Bauteile. Benutze das, statt Unsicherheiten nur im Chat zu erwähnen: im Chat gehen sie unter, hier stehen sie neben dem Modell und lassen sich abhaken. KEINE Kollisionssuche — Cadwork hat eine eigene. Hier landet nur, was ausdrücklich gemeldet wird. Args: titel: Eine Zeile, das Wichtigste zuerst ("Ständerabstand über dem Fenster unklar"). text: Ausführlicher, wenn nötig — was angenommen wurde und warum. element_ids: Betroffene Bauteile. Damit wird der Hinweis anklickbar. schweregrad: "hinweis" (Standard) · "warnung" · "fehler" · "frage". dringlichkeit: 1 bis 5, wird als Balken angezeigt. 0 = aus dem Schweregrad ableiten (fehler 5, warnung/frage 4, hinweis 2). BEWUSST getrennt vom Schweregrad: eine Frage kann dringend sein und ein Fehler unwichtig. |
| clear_check_notesA | Räumt Prüfhinweise weg, die abgearbeitet sind. Abhaken allein genügt nicht: erledigte Hinweise bleiben in der Liste stehen und verdecken die neuen (2026-08-06). Wer einen Hinweis umgesetzt hat, soll ihn auch entfernen können. Args:
nr: Nummer eines einzelnen Hinweises. 0 = nicht einzeln löschen.
nur_erledigte: Ohne |
| get_pending_messagesA | Holt Nachrichten ab, die der Nutzer in Cadwork in den Briefkasten gelegt hat. Der Briefkasten im Fenster „Open MCP CAD" ist bewusst kein Chat: Es gibt keinen Weg, dich von aussen anzustupsen. Die Nachricht liegt dort, bis DU sie hier abholst. Deshalb: Während einer Zeichensitzung regelmässig aufrufen — etwa zwischen zwei Batches. Sonst wartet eine Korrektur unbemerkt, während weiter in die falsche Richtung gebaut wird. Jede Nachricht bringt den Modell-Kontext mit, den sie beim Absenden hatte: die in Cadwork aktiven Element-IDs samt Name, Gruppe und Abmessungen, bei wenigen Elementen zusätzlich deren Facetten. Damit sind Anweisungen wie „strecke diese Facette um 15 mm" auflösbar. Abgeholte Nachrichten werden als gelesen markiert, damit dieselbe Anweisung nicht zweimal umgesetzt wird. Args: alle: True liefert auch schon Gelesenes und ändert nichts am Zustand (zum Nachschlagen, was vorhin gewünscht war). |
| set_fast_drawA | Schaltet das Schnellzeichnen ein oder aus. Ist es an, schaltet die Bridge Cadworks automatische Bildschirm- Auffrischung ab, solange ein Zeichenauftrag läuft, und danach wieder ein — auch wenn der Auftrag fehlschlägt. Bei langen Zeichenläufen mit vielen Elementen spart das spürbar Zeit, weil Cadwork nicht nach jedem Bauteil neu zeichnet. Der Schalter ist auch im Fenster „Open MCP CAD" in Cadwork zu finden. |
| execute_cadwork_commandA | Führt cwapi3d-Python-Code in Cadwork aus und liefert das Ergebnis. Du (Claude) generierst den Python-Code als String und übergibst ihn hier. Der Code wird im Cadwork-Prozess ausgeführt, wo alle cwapi3d-Module verfügbar sind. Konvention: Weise das Endergebnis der Variable Bei Multi-Bridge-Betrieb (mehrere Cadwork-Instanzen parallel): vor Arbeitsbeginn get_document_info aufrufen und den Dokumentnamen prüfen, damit Code nicht in der falschen Datei landet. Ist serverseitig OPEN_MCP_CAD_EXPECT_DOC gesetzt, wird diese Prüfung automatisch erzwungen. Verfügbare Module (Voll-Namen + Aliase): element_controller (ec) utility_controller (uc) attribute_controller (ac) geometry_controller (gc) file_controller (fc) visualization_controller (vc) material_controller (mc) bim_controller (bc) scene_controller (sc) list_controller (lc) cadwork (cw, Typen) ... weitere via get_cadwork_api_help() Sicherheit: Imports von os, subprocess, shutil, socket, urllib, requests sowie import sind blockiert (Best-Effort). Datei-Operationen sollten ausschließlich über cwapi3d-Funktionen laufen. Verifizierte Code-Beispiele liefert get_working_examples() — bei Holzbau- Operationen zuerst dort nachschauen statt zu raten. Für komplette Konstruktionsdetails (AW-Decken-Anschluss, Ecken, IW-Stoss usw.) gibt es get_detail(): zuerst get_detail(list_types=True) für die Übersicht, dann get_detail(type=..., variant=...) für Code + Detail-Regeln. Achtung Klassiker: Panels: Bei Timeout NICHT blind wiederholen: get_connection_status() sagt, ob der Auftrag noch läuft (dann warten), ob die Verbindung pausiert ist oder ob der Cadwork-Hauptthread hängt. Ein Timeout heisst nicht "nicht ausgeführt". Args:
code: cwapi3d-Python-Code. Endergebnis bitte in Liefert: {"ok": True, "result": , "stdout": , "vars": [...]} oder Fehlerobjekt mit "error", "message", "details". === BEKANNTE PROBLEME + WORKAROUNDS ===
|
| get_cadwork_api_helpA | Listet verfügbare cwapi3d-Module bzw. -Funktionen. Liest Type-Stubs (.pyi) lokal aus dem cwapi3d-Paket. Funktioniert auch, wenn Cadwork nicht läuft (kein Bridge-Aufruf nötig). Aufrufmuster: get_cadwork_api_help() -> Liste aller bekannten Controller-Module + Aliase. get_cadwork_api_help(module="element_controller") -> Alle Funktionen mit Signatur und Kurzbeschreibung. get_cadwork_api_help(module="element_controller", function="get_all_identifiable_element_ids") -> Volle Docstring der Funktion. Args: module: Optional, Modulname (z.B. "element_controller"). function: Optional, Funktionsname innerhalb des Moduls. |
| get_working_examplesA | Gibt verifizierte Code-Beispiele für Cadwork-Operationen zurück. Liefert Snippets, die in Cadwork 2025/437 nachweislich funktionieren — damit Claude bei Holzbau-Operationen nicht raten muss. Quelle: knowledge/working_examples.json. Args: category: Optional. Filter nach Kategorie, z.B. 'beam', 'panel', 'gehrung', 'mirror', 'collision', 'material', 'duplikat', 'bodenplatte'. Leer = alle Beispiele. |
| get_detailA | Liefert Konstruktionsdetails für den Holzrahmenbau (Detail-Katalog). Ein Detail ist eine wiederkehrende konstruktive Lösung mit mehreren Varianten, z.B. "AW-Decken-Anschluss" (platform / setzschwelle / durchlaufend) oder "AW-Ecke" (stumpf / l_staender). Jedes Detail bringt eigene, DETAIL-spezifische Regeln und parametrischen cwapi3d-Code mit. Universelle Regeln stehen weiterhin in den Holzrahmenbau-Regeln. Quelle: knowledge/detail_catalog.json. Nur on-demand abrufen, wenn ein konkretes Detail gebaut werden soll — das Tool ist NICHT in die Beschreibung von execute_cadwork_command eingebettet. Aufrufmuster: get_detail(list_types=True) -> Übersicht: alle Typen und ihre Varianten. get_detail(type="aw_decke") -> Alle Varianten dieses Typs (Kurzform, ohne Code). get_detail(type="aw_decke", variant="platform") -> Komplettes Detail: Code, Regeln, Parameter, Status. Args: type: Hauptkategorie, z.B. 'aw_decke', 'aw_ecke', 'aw_iw'. variant: Variante innerhalb des Typs, z.B. 'platform', 'stumpf'. list_types: True = nur Typen/Varianten-Übersicht zurückgeben. Hinweis: validated=false bedeutet, dass das Detail noch nicht in Cadwork visuell geprüft wurde — Code ggf. erst als Platzhalter vorhanden. |
| list_stored_keysA | Zeigt alle gespeicherten Namen im Session-Speicher der Bridge. Nützlich zum Debuggen: zeigt welche Element-ID-Listen aktuell im Session-Speicher vorhanden sind. Speicher wird beim Plugin-Neustart automatisch geleert. Beispiel-Ausgabe: {"ok": True, "keys": ["staender_sued", "osb_aw"], "count": 2} |
| clear_storeA | Leert den Session-Speicher der Bridge komplett. Nützlich am Anfang einer neuen Aufgabe oder nach Bridge-Timeouts um sauber neu zu starten. Gibt zurück wie viele Einträge gelöscht wurden. |
| create_from_initA | Legt eine NEUE Cadwork-Datei als Kopie einer vorhandenen Init-/ Vorlagendatei an. Schritt 1 des Datei-Bootstraps. Beide Pfade absolut, beide auf .3d. Die Init-Datei muss existieren und darf nicht leer sein; die Zieldatei darf NICHT existieren (es wird nie ueberschrieben), ihr Ordner muss existieren. Welche Init-Datei, sagt der Aufrufer — es wird keine geraten. Danach: open_document(ziel_datei). |
| open_documentA | Oeffnet eine vorhandene .3d-Datei ueber die Windows-Dateiverknuepfung (startet Cadwork bzw. ci_start.exe). Schritt 2 des Datei-Bootstraps. Wartet NICHT auf Cadwork. Danach muss im Cadwork-Fenster dieser Datei EINMAL das Plugin "Open MCP CAD" geklickt werden — per Computer Use des Agent-Hosts oder vom Nutzer; der Klick verbindet von selbst. Dann wait_for_bridge(ziel_datei). Lehnt ab, wenn eine verbundene Instanz schon eine Datei gleichen Namens offen hat (sonst waere die Bridge danach nicht eindeutig). |
| wait_for_bridgeA | Wartet, bis genau EINE Cadwork-Instanz
Nichts wird gebunden bei: Zeitablauf, mehreren Treffern, fremdem Port oder Ordner, oder wenn OPEN_MCP_CAD_EXPECT_DOC nicht zum Dokument passt. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
Each tool has a clearly distinct purpose: document info, code execution, connection status, note reporting/clearing, message retrieval, drawing toggle, API help, examples, details, session storage, and file bootstrap operations. There is no functional overlap or ambiguity between any pair.
All 15 tools follow a consistent verb_noun snake_case pattern (e.g., get_document_info, execute_cadwork_command, clear_check_notes, set_fast_draw). Verbs are clear and descriptive, and the naming convention is uniform throughout.
The 15 tools are well-scoped for the CAD integration domain, covering file management, connection handling, execution, knowledge retrieval, and user feedback. Each tool earns its place, and the count sits at the upper bound of the ideal range without feeling bloated.
The tool surface covers the full lifecycle: file bootstrap (create, open, wait), generic execution via execute_cadwork_command, connection status, session storage, user notes/messages, and knowledge support. The generic executor handles any missing specific operation, and no obvious gaps cause dead ends.