About qcad-mcp
qcad-mcp is an MCP server and REST service for automating 2D CAD work on DXF and DWG files. It supports floor-plan analysis, editing, conversion, and extrusion, with a persistent file depot and web interface.
Key features
- 01Parse and render DXF/DWG
- 02Convert plans to SVG and STL
- 03Analyze rooms and building data
- 04Edit layers and entities
- 05Persistent CAD file depot
- 06REST API and web dashboard
Use cases
- 01Turn floor plans into 3D models
- 02Measure rooms and inspect openings
- 03Batch-process stored CAD files
- 04Create and manage DXF drawings
MCP support
Exposes CAD operations through 12 MCP tools, including file conversion, annotation, analysis, BIM handoff, and QCAD Pro operations. It supports stdio and HTTP MCP transports.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEQCAD MCP
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 |
MCP Tools
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 |
Fleet Crossconnects (Companions)
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.
CAD Depot (Persistent File Storage)
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 |
REST API
| 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 |
Webapp Pages
| 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 |
Quick Start
just bootstrap # uv sync + bun install
start.ps1 # kills zombies, starts backend + frontend, opens browser
Install (Claude Desktop, Windows)
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"]
}
}
}
MCP Client Config
{
"mcpServers": {
"qcad": {
"url": "http://localhost:11966/sse",
"transport": "sse"
}
}
}
Raster → DXF Pipeline (Planned)
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:
- inkscape-mcp route — send the scanned PNG to inkscape-mcp's
trace_bitmap()tool, get back SVG with proper path geometry. The SVG imports cleanly into QCAD as workable entities. - potrace in qcad-mcp — add a
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 Pro Pricing — €50? Really?
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:
- Community Edition is genuinely free and capable (GPLv3). It's a giant funnel — architects, makers, and students learn on it, recommend it, and eventually their employer buys a site license.
- €50 individual is friction-free "impulse buy" pricing — no PO approval needed, no vendor negotiation. You just buy it.
- Site & server licenses (€440–€1,771) are where the real revenue lives. An architecture firm with 20 seats paying €440 beats 200 individuals paying €50. And server licenses for SaaS/on-prem deployment scale further.
- QCAD/CAM at €132 captures the CNC/manufacturing niche — a separate, higher-value market.
- Books at €40 are pure margin — the manual is already written, printing costs are negligible.
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.
Quality Stack
- Python: Ruff linter + format, Pyright typecheck (0 errors) —
src/+run_server.py - Frontend: Biome +
tsc --noEmit+ bun lockfile — 22 TypeScript pages - Protocol: FastMCP 3.4 (stdio + HTTP
/mcp) + 40 REST routes - Tools: 12 MCP tools (8 portmanteaus + 4 Prefab cards) with READ_ONLY/MUTATING annotations
- Automation: Justfile recipes for all fleet operations
- Tests: pytest (78+) + Playwright e2e specs
License
MIT — see LICENSE.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.