{
  "markdown": "# QCAD MCP\n\n<p align=\"center\">\n  <a href=\"https://github.com/casey/just\"><img src=\"https://img.shields.io/badge/just-ready_to_go-7c5cfc?style=flat-square&logo=just&logoColor=white\" alt=\"Just\"></a>\n  <a href=\"https://github.com/astral-sh/ruff\"><img src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\" alt=\"Ruff\"></a>\n  <a href=\"https://python.org\"><img src=\"https://img.shields.io/badge/Python-3.13+-3776AB?style=flat-square&logo=python&logoColor=white\" alt=\"Python\"></a>\n  <a href=\"https://biomejs.dev\"><img src=\"https://img.shields.io/badge/Linted_with-Biome-60a5fa?style=flat-square&logo=biome&logoColor=white\" alt=\"Biome\"></a>\n  <a href=\"https://github.com/PrefectHQ/fastmcp\"><img src=\"https://img.shields.io/badge/FastMCP-3.2-7c5cfc?style=flat-square\" alt=\"FastMCP\"></a>\n</p>\n\n**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.\n\n| | |\n|--:|--|\n| **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. |\n| **What it connects to** | `ezdxf` (free Python engine) for all parsing + rendering + extrusion + analysis |\n| **Ports** | Backend **11966**, Dashboard **11967** |\n| **Start** | `just bootstrap` then `start.ps1` |\n\n## MCP Tools\n\n| Tool | Access | Purpose |\n|------|--------|---------|\n| `plan_depot` | READ | List files in the persistent CAD depot with metadata |\n| `plan_info` | READ | DXF metadata: layers, entity counts, bounding box, blocks |\n| `plan_create` | MUTATE | Create DXF from primitives (line, rect, circle, text, polyline) |\n| `plan_to_svg` | MUTATE | DXF → SVG preview with layer filtering |\n| `plan_extrude` | MUTATE | DXF walls → 3D STL mesh (configurable height/thickness) |\n| `plan_export` | MUTATE | DXF → SVG/PNG/PDF (ezdxf or QCAD Pro) |\n| `plan_analyse` | READ | Room detection, area calculation, door/window identification |\n| `plan_measure` | READ | Measure distances and lengths in a DXF |\n| `plan_wall_data` | READ | Extract wall segments as BIM-ready JSON (QCAD Pro) |\n| `plan_beam_analysis` | READ | 2D beam FEM analysis (numpy, no QCAD needed) |\n| `plan_dimension` | MUTATE | Add aligned/linear/angular/radial dimensions (QCAD Pro) |\n| `plan_text` | MUTATE | Add text annotations (QCAD Pro) |\n| `plan_hatch` | MUTATE | Add hatch patterns (QCAD Pro) |\n| `plan_block_insert` | MUTATE | Insert CAD blocks from library (QCAD Pro) |\n| `plan_array` | MUTATE | Rectangular/polar array patterns (QCAD Pro) |\n| `plan_convert` | MUTATE | Convert between DXF and DWG (QCAD Pro) |\n| `plan_modify` | MUTATE | Delete/offset/rename/freeze layers |\n| `plan_script` | MUTATE | Execute arbitrary ECMAScript in QCAD Pro |\n| `plan_render` | MUTATE | High-fidelity SVG/PDF/BMP render via QCAD Pro |\n| `plan_exec` | MUTATE | Quick ECMAScript snippet execution |\n| `plan_blocks` | READ | Search 4800+ CAD blocks from part library |\n| `plan_blocks_download` | MUTATE | Download a block DXF from library |\n| `plan_scripts_search` | READ | Search QCAD ECMAScript scripts gallery |\n| `plan_scripts_download` | MUTATE | Download a script from gallery/Gist |\n| `qcad_status` | READ | QCAD Pro install/running/version report |\n| `plan_agentic` | MUTATE | NL → ECMAScript via AI sampling (MCP only, needs QCAD Pro) |\n| `plan_transpile` | MUTATE | AutoLISP → QCAD ECMAScript translation (MCP only, needs QCAD Pro) |\n\n## CAD Depot (Persistent File Storage)\n\nAll 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.\n\n**Depot CRUD via REST API:**\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/api/v1/depot` | GET | List all files with metadata (size, dates, description, tags) |\n| `/api/v1/depot/{name}` | GET | Download a DXF file |\n| `/api/v1/depot/{name}` | PUT | Rename or update description/tags |\n| `/api/v1/depot/{name}` | DELETE | Remove file + metadata sidecar |\n| `/api/v1/depot/create` | POST | Create DXF from JSON entity spec (line, rect, circle, text, polyline) |\n| `/api/v1/depot/upload` | POST | Upload DXF/DWG directly to depot |\n\n## REST API\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/api/v1/status` | GET | Server health, ezdxf version, QCAD Pro status |\n| `/api/v1/upload` | POST | Upload DXF/DWG (also saved to depot) |\n| `/api/v1/download/{name}` | GET | Download SVG/STL/PDF/PNG outputs |\n| `/api/v1/files` | GET | List all files (depot + outputs) |\n| `/api/v1/depot/*` | GET/PUT/DELETE | Full CRUD on the persistent CAD depot |\n| `/api/v1/control/tool` | POST | Execute any MCP tool |\n| `/api/v1/logs/stream` | GET | SSE live log stream |\n| `/api/v1/chat` | POST | Chat with CAD expert via Ollama |\n| `/api/v1/settings` | GET/PUT | LLM + extrusion defaults + QCAD Pro path |\n\n## Webapp Pages\n\n| Route | Page | Description |\n|-------|------|-------------|\n| `/` | Dashboard | Hero banner, QCAD Pro status panel, depot stats, ezdxf version |\n| `/demo` | AI CAD Demo | NL → floor plan → SVG → 3D STL. Baroque church, mob compound, art museum presets |\n| `/depot` | Depot | Full CRUD file browser with SVG preview, create DXF wizard, upload, rename, delete |\n| `/viewer` | Viewer | DXF upload + SVG preview with per-layer toggle |\n| `/extrude` | Extrude | DXF → STL with wall height/thickness/wall-layer controls |\n| `/analyse` | Analyse | Room detection, area table, door/window list |\n| `/layers` | Layers | Layer visibility, freeze/lock, rename, bulk operations |\n| `/blocks` | Blocks | Search 4800+ CAD blocks from library with download |\n| `/scripts` | Scripts | Browse QCAD ECMAScript scripts gallery + save local scripts |\n| `/agentic` | AI Agent | Autonomous multi-step CAD workflow (QCAD Pro) |\n| `/batch` | Batch | Run info/analysis/extrude across all depot files. STL batch extrude with gallery |\n| `/pipeline` | Pipeline | 5-step wizard: describe → SVG → analyse → STL → FreeCAD wall data export |\n| `/playground` | Playground | Tool API tester: select any tool, edit JSON args, execute, view raw response |\n| `/models` | Models | Uploads vs outputs listing with download |\n| `/logs` | Logs | Live SSE log viewer with filter/export/pause |\n| `/settings` | Settings | LLM provider/model, extrusion defaults, QCAD Pro path |\n| `/help` | Help | 10-tabbed reference: QCAD, ezdxf, tools, pipeline, formats, fleet |\n| `docs/floorplan-sources.md` | — | Free, paid, and historic floorplan sources + raster→DXF pipeline |\n\n## Quick Start\n\n```powershell\njust bootstrap   # uv sync + npm install\nstart.ps1        # kills zombies, starts backend + frontend, opens browser\n```\n\n## MCP Client Config\n\n```json\n{\n  \"mcpServers\": {\n    \"qcad\": {\n      \"url\": \"http://localhost:11966/sse\",\n      \"transport\": \"sse\"\n    }\n  }\n}\n```\n\n## Raster → DXF Pipeline (Planned)\n\nScanning a floorplan print into a working DXF is straightforward:\n\n```\nBook/magazine page → scanner (300-600 DPI)          inkscape-mcp\n                         ↓                          (Trace Bitmap)\n                    Potrace / Inkscape                    ↓\n                         ↓                          QCAD MCP\n                    Raw vector DXF                    (plan_modify)\n                         ↓\n                    Clean up in QCAD / plan_modify\n```\n\n| Step | Tool | What it does |\n|------|------|-------------|\n| Scan | Any scanner | 300-600 DPI, grayscale or B&W, save as PNG/TIFF |\n| Vectorize | **inkscape-mcp** `trace_bitmap()` or potrace CLI | Converts raster lines to SVG paths |\n| Convert | SVG → DXF (via potrace or ezdxf) | Opens in any CAD program |\n| Clean | **qcad-mcp** `plan_modify` | Merge short segments, delete stray marks, re-layer, re-dimension |\n\nTwo approaches:\n1. **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.\n2. **potrace in qcad-mcp** — add a `plan_raster_to_dxf(file_name)` tool that wraps potrace + ezdxf. Self-contained, no external server needed.\n\nEither 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.\n\n## QCAD Pro Pricing — €50? Really?\n\nQCAD 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:\n\n| Product | Price | Market |\n|---------|-------|--------|\n| **Community Edition** | **Free** (GPLv3) | Hobbyists, students, tinkerers |\n| **QCAD Professional** | €50.40 | Individual professionals, small firms |\n| **QCAD Pro Site License** | €440.40 | Companies (unlimited seats, single site) |\n| **QCAD Pro Server License** | €583.20 | Self-hosted deployment |\n| **QCAD Pro Scalable Server** | €1,771.20 | Enterprise-scale |\n| **QCAD/CAM** (CNC add-on) | €132.00 | Manufacturing |\n| **QCAD/CAM Site License** | €1,173.60 | CNC shops |\n| **Books / E-Books** | €40–42 each | Documentation, passive income |\n\nThe strategy is open-core freemium with **enterprise site-license extraction**:\n\n1. **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.\n2. **€50 individual** is friction-free \"impulse buy\" pricing — no PO approval needed, no vendor negotiation. You just buy it.\n3. **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.\n4. **QCAD/CAM at €132** captures the CNC/manufacturing niche — a separate, higher-value market.\n5. **Books at €40** are pure margin — the manual is already written, printing costs are negligible.\n\nRibbonSoft 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.\n\n**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.\n\n€50 clears every threshold, everywhere. No PO approval, no vendor negotiation, no subscription clock. You buy it once and own it.\n\n## Quality Stack\n\n- **Python**: [Ruff](https://astral.sh/ruff) linter — zero errors across 5 MCP tools + depot CRUD\n- **Frontend**: [Biome](https://biomejs.dev/) + `tsc` — zero errors across 9 TypeScript pages\n- **Protocol**: FastMCP 3.2 SSE transport + 10 REST endpoints\n- **Automation**: [Justfile](./justfile) recipes for all fleet operations\n- **AI Protocol**: FastMCP 3.2 with SSE transport\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n",
  "bytes": 11525,
  "sha": "2f99863509c7d6f8e7e7be7e76e050e85ed7714becd16589635046ff1a0d9c90",
  "repo_slug": "sandraschi/qcad-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sandraschi_qcad_mcp_8284e50d/readme"
}