The Model Context Protocol (MCP) server io.github.cadlens-co/cadlens-mcp wraps the Cadlens CAD parsing REST API so MCP-aware LLM clients can parse CAD files and reason over extracted entities. It supports common engineering formats including .dwg, .dxf, .dwf, .dwfx, .dgn V7, and .pdf with a max size of 100 MB.
๐ ๏ธ Key Features
Wraps the Cadlens CAD parsing API (REST)
MCP server for MCP-aware LLM clients
Parses CAD and related documents into extracted entities
A Model Context Protocol server that wraps the Cadlens CAD parsing API so MCP-aware LLM clients (Claude Desktop, Claude Code, Cursor, Zed, Windsurf) can parse CAD files (.dwg, .dxf, .dwf, .dwfx, .dgn V7, .pdf, max 100 MB) and reason over the extracted entity, layer, and metadata payloads.
Cadlens converts CAD drawings into structured JSON without requiring AutoCAD or any desktop software โ learn more at cadlens.co.
Install
Get an API key from the Cadlens dashboard first โ keys start with cadl_ and are created in the dashboard for free.
Claude Desktop / Cursor / Windsurf
Add to your MCP client config (e.g. ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
Re-fetch the 1h presigned PNG URL without re-downloading the full result.
cadlens_list_jobs
The 100 most recent jobs for the configured API key.
cadlens_delete_job
Delete a job and its S3 artifacts. Irreversible.
Configuration
Env var
Required
Default
Notes
CADLENS_API_KEY
yes
โ
Created in the CADLens dashboard.
CADLENS_API_BASE
no
https://api.cadlens.co/v1
Set to http://localhost:3001/v1 for local dev.
WEBHOOK_PORT
no
0 (random)
Port for the in-process webhook receiver.
WEBHOOK_PUBLIC_URL
no
unset
Set to a tunnel URL (ngrok/cloudflared) to let CADLens hit the local receiver. When set, parse calls auto-register the webhook and the poller short-circuits on receipt.
REQUEST_TIMEOUT_MS
no
30000
Per-HTTP-request timeout for CADLens calls.
Webhook short-circuit (optional)
If WEBHOOK_PUBLIC_URL is set, parse_file / parse_url register a per-process webhook URL alongside the upload. The webhook handler updates an in-memory job-state cache; the poller checks that cache before each HTTP GET and returns early when COMPLETED / FAILED arrives. This trims worst-case latency by up to one full poll tick (~1 s) without changing the tool surface.