QCAD 2D CAD automation: DXF/DWG floor plans to SVG and STL, via MCP tools and REST
Runs on your machine from its package; the steps are below.
At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Distributed as an MCP bundle (`https://github.com/sandraschi/qcad-mcp/releases/download/v0.5.0/qcad-mcp-v0.5.0.mcpb`) — download it and import the bundle in your MCP client.
AI-driven 2D CAD automation — DXF/DWG parsing, 3D extrusion, persistent file depot, room analysis, and full CRUD management. 12 MCP tools (8 portmanteaus + 4 Prefab cards) for DXF processing. Your AI assistant becomes a QCAD Pro operator.
| You might use this if… | You want your AI to process floor plans programmatically, convert DXF to 3D for Resonite/Unity3D, maintain a persistent CAD file depot, or automate drafting workflows. |
| What it connects to | ezdxf (free Python engine) for all parsing + rendering + extrusion + analysis |
| Ports | Backend 11966, Dashboard 11967 |
| Start | just bootstrap then start.ps1 |
v0.5.0 portmanteau surface: each tool takes an op discriminator plus the op's
parameters (old per-op names survive only as webapp-internal aliases).
| Tool | Access | Purpose |
|---|---|---|
plan | READ/MUTATE | Core ezdxf ops: info, to_svg, extrude, stack, obj, glb, drawings, export, analyse, create, depot |
plan_edit | MUTATE | convert (DWG↔DXF via QCAD Pro), modify (layers/entities) |
plan_annotate | READ/MUTATE | dimension, measure, text, hatch, block_insert, array, wall_data, beam_analysis |
plan_pro | MUTATE | QCAD Pro: script, render, exec (ECMAScript) |
plan_library | READ/MUTATE | blocks, blocks_download, scripts_search, scripts_download |
plan_ai | MUTATE | generate (NL floor plan), agentic (NL workflow), transpile (AutoLISP), sampling (host LLM reason) |
plan_bim | READ/MUTATE | auto_dimension, building_meta, to_ifc_data (BIM handoff) |
qcad | READ | status (QCAD Pro install), help (live catalog), shutdown (orderly exit) |
show_qcad_status_card | READ | Prefab card: QCAD Pro status |
show_depot_card | READ | Prefab card: depot files |
show_beam_analysis_card | READ | Prefab card: beam FEA results |
show_building_meta_card | READ | Prefab card: building metadata |
qcad-mcp works completely standalone. You can optionally connect it with companion servers in the sandraschi fleet to unlock extended features:
| Companion Server | Feature Unlocked | Status | Setup |
|---|---|---|---|
blender-mcp | 3d-scene-extrusion, render-dxf-layouts | Optional | Install Guide |
freecad-mcp | 2d-draft-to-parametric-3d | Optional | Install Guide |
Self-Contained Companions: Fleet companions operate independently. Installing companions does not trigger transitive dependency chains.
All CAD files are stored in a persistent depot at %LOCALAPPDATA%\qcad-mcp\depot — survives server restarts and system reboots. Configurable via QCAD_MCP_DEPOT env var.
Depot CRUD via REST API:
| Endpoint | Method | Description |
|---|---|---|
/api/v1/depot | GET | List all files with metadata (size, dates, description, tags) |
/api/v1/depot/{name} | GET | Download a DXF file |
/api/v1/depot/{name} | PUT | Rename or update description/tags |
/api/v1/depot/{name} | DELETE | Remove file + metadata sidecar |
/api/v1/depot/create | POST | Create DXF from JSON entity spec (line, rect, circle, text, polyline) |
/api/v1/depot/upload | POST | Upload DXF/DWG directly to depot |
| Endpoint | Method | Description |
|---|---|---|
/api/v1/status | GET | Server health, ezdxf version, QCAD Pro status |
/api/v1/upload | POST | Upload DXF/DWG (also saved to depot) |
/api/v1/download/{name} | GET | Download SVG/STL/PDF/PNG outputs |
/api/v1/files | GET | List all files (depot + outputs) |
/api/v1/depot/* | GET/PUT/DELETE | Full CRUD on the persistent CAD depot |
/api/v1/control/tool | POST | Execute any MCP tool |
/api/v1/logs/stream | GET | SSE live log stream |
/api/v1/chat | POST | Chat with CAD expert via Ollama |
/api/v1/settings | GET/PUT | LLM + extrusion defaults + QCAD Pro path |
| Route | Page | Description |
|---|---|---|
/ | Dashboard | Hero banner, QCAD Pro status panel, depot stats, ezdxf version |
/demo | AI CAD Demo | NL → floor plan → SVG → 3D STL. Preset cards, pipeline stepper, tabbed results |
/chat | Chat | Streaming LLM chat, skill-first, 6 personalities, history, export |
/inbox | Inbox | New-file review queue with inline preview and Viewer links |
/tools | Tools | Portmanteau catalog with op chips + Playground deep-links |
/skills | Skills | Skill browser (same files the Chat uses as system prompt) |
/depot | Depot | Full CRUD file browser with SVG preview, create DXF wizard, upload, rename, delete |
/viewer | Viewer | DXF upload + SVG preview with per-layer toggle |
/extrude | Extrude | DXF → STL with wall height/thickness/wall-layer controls |
/analyse | Analyse | Room detection, area table, door/window list |
/layers | Layers | Layer visibility, freeze/lock, rename, bulk operations |
/blocks | Blocks | Search 4800+ CAD blocks from library with download |
/scripts | Scripts | Browse QCAD ECMAScript scripts gallery + save local scripts |
/agentic | AI Agent | Autonomous multi-step CAD workflow (QCAD Pro) |
/batch | Batch | Run info/analysis/extrude across all depot files. STL batch extrude with gallery |
/pipeline | Pipeline | 5-step wizard: describe → SVG → analyse → STL → FreeCAD wall data export |
/playground | Playground | Tool API tester: select any tool, edit JSON args, execute, view raw response |
/models | Models | Uploads vs outputs listing with download |
/logs | Logs | Live SSE log viewer with filter/export/pause |
/settings | Settings | LLM provider/model, extrusion defaults, QCAD Pro path |
/help | Help | 10-tabbed reference: QCAD, ezdxf, tools, pipeline, formats, fleet |
docs/floorplan-sources.md | — | Free, paid, and historic floorplan sources + raster→DXF pipeline |
just bootstrap # uv sync + bun install
start.ps1 # kills zombies, starts backend + frontend, opens browser
irm https://github.com/sandraschi/qcad-mcp/releases/latest/download/install.ps1 | iex
Installs the stable qcad-mcp.mcpb bundle into Claude Desktop. Other
clients (Cursor, VS Code, OpenCode): use uvx with the stdio entry:
{
"mcpServers": {
"qcad-mcp": {
"command": "uv",
"args": ["run", "--directory", "D:\\Dev\\repos\\qcad-mcp", "run_server.py"]
}
}
}
{
"mcpServers": {
"qcad": {
"url": "http://localhost:11966/sse",
"transport": "sse"
}
}
}
Scanning a floorplan print into a working DXF is straightforward:
Book/magazine page → scanner (300-600 DPI) inkscape-mcp
↓ (Trace Bitmap)
Potrace / Inkscape ↓
↓ QCAD MCP
Raw vector DXF (plan_edit(op="modify"))
↓
Clean up in QCAD / plan_edit(op="modify")
| Step | Tool | What it does |
|---|---|---|
| Scan | Any scanner | 300-600 DPI, grayscale or B&W, save as PNG/TIFF |
| Vectorize | inkscape-mcp trace_bitmap() or potrace CLI | Converts raster lines to SVG paths |
| Convert | SVG → DXF (via potrace or ezdxf) | Opens in any CAD program |
| Clean | qcad-mcp plan_edit(op="modify") | Merge short segments, delete stray marks, re-layer, re-dimension |
Two approaches:
trace_bitmap() tool, get back SVG with proper path geometry. The SVG imports cleanly into QCAD as workable entities.plan_raster_to_dxf(file_name) tool that wraps potrace + ezdxf. Self-contained, no external server needed.Either way, the result goes through plan_edit(op="modify") for cleanup (delete noise, merge wall segments, re-assign layers, re-add dimensions). The baroque church preset in the Demo page proves the parametric geometry works — scanning would let you capture actual existing buildings.
QCAD Professional sells for €50.40 for a single-user license — lifetime, no subscription. That looks absurd next to AutoCAD at $2,000+/year, but RibbonSoft's revenue model is more nuanced:
| Product | Price | Market |
|---|---|---|
| Community Edition | Free (GPLv3) | Hobbyists, students, tinkerers |
| QCAD Professional | €50.40 | Individual professionals, small firms |
| QCAD Pro Site License | €440.40 | Companies (unlimited seats, single site) |
| QCAD Pro Server License | €583.20 | Self-hosted deployment |
| QCAD Pro Scalable Server | €1,771.20 | Enterprise-scale |
| QCAD/CAM (CNC add-on) | €132.00 | Manufacturing |
| QCAD/CAM Site License | €1,173.60 | CNC shops |
| Books / E-Books | €40–42 each | Documentation, passive income |
The strategy is open-core freemium with enterprise site-license extraction:
RibbonSoft is a Swiss GmbH (limited company) based in Sarnen, not retirees. 100% of their office energy is from Swiss hydropower (they're proud enough to put it in the footer). They've been doing this since 1999 — 26+ years of sustainable bootstrapping.
Who pays? Ganesh in Bangalore runs the Community Edition for his residential projects — it handles DXF perfectly for Indian building code drawings. When a client demands DWG or PDF export, he drops €50 on Pro — one job pays for it. As his practice scales past 5 seats, he graduates to a site license. Meanwhile a European architecture firm pays €440 for compliance reasons and never thinks twice. The Bay Area Autodesk tax ($2,500+/year) only makes sense when someone else is paying.
€50 clears every threshold, everywhere. No PO approval, no vendor negotiation, no subscription clock. You buy it once and own it.
src/ + run_server.pytsc --noEmit + bun lockfile — 22 TypeScript pages/mcp) + 40 REST routesMIT — see LICENSE.