Odel
qcad mcp

qcad mcp

Local
@sandraschi12PythonMITUpdated 1w ago

QCAD MCP server - DXF/DWG floor plans to SVG preview + STL extrusion via MCP tools and REST API

QCAD MCP

Just Ruff Python Biome FastMCP

AI-driven 2D CAD automation — DXF/DWG parsing, 3D extrusion, persistent file depot, room analysis, and full CRUD management. 7 MCP tools 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 toezdxf (free Python engine) for all parsing + rendering + extrusion + analysis
PortsBackend 10966, Dashboard 10967
Startjust bootstrap then start.ps1

MCP Tools

ToolAccessPurpose
plan_depotREADList files in the persistent CAD depot with metadata
plan_infoREADDXF metadata: layers, entity counts, bounding box, blocks
plan_createMUTATECreate DXF from primitives (line, rect, circle, text, polyline)
plan_to_svgMUTATEDXF → SVG preview with layer filtering
plan_extrudeMUTATEDXF walls → 3D STL mesh (configurable height/thickness)
plan_exportMUTATEDXF → SVG/PNG/PDF (ezdxf or QCAD Pro)
plan_analyseREADRoom detection, area calculation, door/window identification
plan_measureREADMeasure distances and lengths in a DXF
plan_wall_dataREADExtract wall segments as BIM-ready JSON (QCAD Pro)
plan_beam_analysisREAD2D beam FEM analysis (numpy, no QCAD needed)
plan_dimensionMUTATEAdd aligned/linear/angular/radial dimensions (QCAD Pro)
plan_textMUTATEAdd text annotations (QCAD Pro)
plan_hatchMUTATEAdd hatch patterns (QCAD Pro)
plan_block_insertMUTATEInsert CAD blocks from library (QCAD Pro)
plan_arrayMUTATERectangular/polar array patterns (QCAD Pro)
plan_convertMUTATEConvert between DXF and DWG (QCAD Pro)
plan_modifyMUTATEDelete/offset/rename/freeze layers
plan_scriptMUTATEExecute arbitrary ECMAScript in QCAD Pro
plan_renderMUTATEHigh-fidelity SVG/PDF/BMP render via QCAD Pro
plan_execMUTATEQuick ECMAScript snippet execution
plan_blocksREADSearch 4800+ CAD blocks from part library
plan_blocks_downloadMUTATEDownload a block DXF from library
plan_scripts_searchREADSearch QCAD ECMAScript scripts gallery
plan_scripts_downloadMUTATEDownload a script from gallery/Gist
qcad_statusREADQCAD Pro install/running/version report
plan_agenticMUTATENL → ECMAScript via AI sampling (MCP only, needs QCAD Pro)
plan_transpileMUTATEAutoLISP → QCAD ECMAScript translation (MCP only, needs QCAD Pro)

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:

EndpointMethodDescription
/api/v1/depotGETList all files with metadata (size, dates, description, tags)
/api/v1/depot/{name}GETDownload a DXF file
/api/v1/depot/{name}PUTRename or update description/tags
/api/v1/depot/{name}DELETERemove file + metadata sidecar
/api/v1/depot/createPOSTCreate DXF from JSON entity spec (line, rect, circle, text, polyline)
/api/v1/depot/uploadPOSTUpload DXF/DWG directly to depot

REST API

EndpointMethodDescription
/api/v1/statusGETServer health, ezdxf version, QCAD Pro status
/api/v1/uploadPOSTUpload DXF/DWG (also saved to depot)
/api/v1/download/{name}GETDownload SVG/STL/PDF/PNG outputs
/api/v1/filesGETList all files (depot + outputs)
/api/v1/depot/*GET/PUT/DELETEFull CRUD on the persistent CAD depot
/api/v1/control/toolPOSTExecute any MCP tool
/api/v1/logs/streamGETSSE live log stream
/api/v1/chatPOSTChat with CAD expert via Ollama
/api/v1/settingsGET/PUTLLM + extrusion defaults + QCAD Pro path

Webapp Pages

RoutePageDescription
/DashboardHero banner, QCAD Pro status panel, depot stats, ezdxf version
/demoAI CAD DemoNL → floor plan → SVG → 3D STL. Baroque church, mob compound, art museum presets
/depotDepotFull CRUD file browser with SVG preview, create DXF wizard, upload, rename, delete
/viewerViewerDXF upload + SVG preview with per-layer toggle
/extrudeExtrudeDXF → STL with wall height/thickness/wall-layer controls
/analyseAnalyseRoom detection, area table, door/window list
/layersLayersLayer visibility, freeze/lock, rename, bulk operations
/blocksBlocksSearch 4800+ CAD blocks from library with download
/scriptsScriptsBrowse QCAD ECMAScript scripts gallery + save local scripts
/agenticAI AgentAutonomous multi-step CAD workflow (QCAD Pro)
/batchBatchRun info/analysis/extrude across all depot files. STL batch extrude with gallery
/pipelinePipeline5-step wizard: describe → SVG → analyse → STL → FreeCAD wall data export
/playgroundPlaygroundTool API tester: select any tool, edit JSON args, execute, view raw response
/modelsModelsUploads vs outputs listing with download
/logsLogsLive SSE log viewer with filter/export/pause
/settingsSettingsLLM provider/model, extrusion defaults, QCAD Pro path
/helpHelp10-tabbed reference: QCAD, ezdxf, tools, pipeline, formats, fleet
docs/floorplan-sources.mdFree, paid, and historic floorplan sources + raster→DXF pipeline

Quick Start

just bootstrap   # uv sync + npm install
start.ps1        # kills zombies, starts backend + frontend, opens browser

MCP Client Config

{
  "mcpServers": {
    "qcad": {
      "url": "http://localhost:10966/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_modify)
                         ↓
                    Clean up in QCAD / plan_modify
StepToolWhat it does
ScanAny scanner300-600 DPI, grayscale or B&W, save as PNG/TIFF
Vectorizeinkscape-mcp trace_bitmap() or potrace CLIConverts raster lines to SVG paths
ConvertSVG → DXF (via potrace or ezdxf)Opens in any CAD program
Cleanqcad-mcp plan_modifyMerge short segments, delete stray marks, re-layer, re-dimension

Two approaches:

  1. 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.
  2. 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_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:

ProductPriceMarket
Community EditionFree (GPLv3)Hobbyists, students, tinkerers
QCAD Professional€50.40Individual professionals, small firms
QCAD Pro Site License€440.40Companies (unlimited seats, single site)
QCAD Pro Server License€583.20Self-hosted deployment
QCAD Pro Scalable Server€1,771.20Enterprise-scale
QCAD/CAM (CNC add-on)€132.00Manufacturing
QCAD/CAM Site License€1,173.60CNC shops
Books / E-Books€40–42 eachDocumentation, passive income

The strategy is open-core freemium with enterprise site-license extraction:

  1. 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.
  2. €50 individual is friction-free "impulse buy" pricing — no PO approval needed, no vendor negotiation. You just buy it.
  3. 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.
  4. QCAD/CAM at €132 captures the CNC/manufacturing niche — a separate, higher-value market.
  5. 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 — zero errors across 5 MCP tools + depot CRUD
  • Frontend: Biome + tsc — zero errors across 9 TypeScript pages
  • Protocol: FastMCP 3.2 SSE transport + 10 REST endpoints
  • Automation: Justfile recipes for all fleet operations
  • AI Protocol: FastMCP 3.2 with SSE transport

License

MIT — see LICENSE.