The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Aspicio listing page.
Drawing understanding for people, applications, and AI agents — DXF and vector PDF.
Aspicio (Latin: "I look at")
Aspicio is an open-source (MIT), TypeScript-first drawing engine: one
framework-free parse → tessellate pipeline that runs in the browser, in
Node, and in serverless runtimes. It reads DXF and the vector content of
PDF — the kind of PDF that carries artwork and dielines rather than a
scan. A person gets an interactive WebGL viewer of a CAD drawing; an AI
agent gets structured JSON facts and a rendered PNG of the same file.
Every surface — the browser viewer, the web components and their React,
Vue, and Svelte bindings, the headless renderer, the HTTP API, and the MCP
server — is a thin adapter over the same engine, so a drawing is equally
readable everywhere.
How it's built: docs/architecture.md · behavior specs: docs/product-specs/
One embed, every flavor — and every path below renders the same web components, so the result is pixel-identical no matter which you pick.
One tag gives you the layer panel plus an interactive preview; no bindings needed:
Formats are opted into by import: the package brings the components, the
formats/* entry brings the parser. That is what keeps a DXF app from
shipping every other format's code — and every flavor below does the same.
The same embed with idiomatic props and a ref exposing the full
viewer, via @aspicio/react:
Typed props and emits with unwrapped payloads, via
@aspicio/vue:
The same components as raw Svelte 5 source with typed callback props,
via @aspicio/svelte:
Skip the ready-made UI and drive the viewer directly from
@aspicio/core — bring your own chrome:
Parse, describe, and render with no browser at all (server-side previews, thumbnails, pipelines):
What you get: WebGL rendering batched to one draw call per layer (large drawings stay interactive), broad entity coverage (lines, arcs, circles, ellipses, polylines with bulges, splines, TEXT/MTEXT, DIMENSION, SOLID/HATCH fills, nested INSERT blocks — anything unsupported is counted and reported, never fatal), a layer list with the colors that are actually drawn (per-entity overrides included, not just the layer table), measure with object snap, entity picking, paper-space layouts, SVG/PNG export, and first-class touch. Out of scope: editing and 3D.
The same engine speaks MCP and HTTP, so an agent can read a drawing instead of guessing at it:
describe_dxf — units, bounds, size, layers with effective colors,
entity counts, and the drawing's text content. An agent reads a title
block or a dimension value directly — no OCR, no vision round-trip.render_dxf — a PNG of the drawing the model can look at.view_dxf (hosted server) — an interactive in-chat viewer for the
person in the conversation, via the open MCP Apps
extension:
pan, zoom, layer toggles, fullscreen, host light/dark theming. The
widget is locked to the drawing the tool call delivered and makes no
network requests; hosts without MCP Apps still get the structured
facts.
| Surface | Local files | URLs | Inline DXF |
|---|---|---|---|
stdio MCP — npx -y @aspicio/mcp | ✅ | ✅ | ✅ |
Hosted MCP — aspicio-api.frontsail.app/mcp | — | ✅ | ✅ |
HTTP API — /describe, /render | POST body | ✅ | ✅ |
Connect:
aspicio-inspect-dxf, aspicio-embed):
/plugin marketplace add frontsail-ai/aspicio then /plugin install aspicio@aspiciocodex plugin marketplace add https://github.com/frontsail-ai/aspicio,
codex plugin add aspicio@aspicio, then
codex mcp add aspicio -- npx -y @aspicio/mcpnpx -y @aspicio/mcphttps://aspicio-api.frontsail.app/mcp (no install;
speaks MCP, not a browser page)GET /describe?src=<dxf-url>,
GET /render?src=<dxf-url>&format=png|svg; the API self-describes at
/openapi.jsonURL fetches are guarded (private-network blocking, size caps, redirect validation, timeouts). The stdio server reads local files in-process and never uploads the DXF to any Aspicio service — though, as with any tool result, your MCP client passes the returned summary or image to its model provider. Full details: privacy policy · terms.
Everything above is shipped and live: viewer + demo, core, web components, React, Vue, and Svelte packages, headless describe/render, stdio and hosted MCP, the in-chat MCP Apps viewer, the HTTP API with OpenAPI, and plugin packaging for Claude Code and Codex.
Direction (intent, not commitments — see issues): MCP registry listings, structured entity queries and focused rendering, and an upload flow so remote surfaces can handle local files.
| Package | Description |
|---|---|
@aspicio/core | The viewer library: parsing, tessellation, rendering, camera, input |
@aspicio/elements | Web components: <aspicio-embed>, <aspicio-preview>, <aspicio-layer-panel> — plain HTML, Svelte, any framework |
@aspicio/react | React bindings: <AspicioEmbed>, <AspicioPreview>, <AspicioLayerPanel> |
@aspicio/vue | Vue 3 bindings: the same three components with typed props and emits |
@aspicio/svelte | Svelte 5 bindings: the same three components as raw .svelte source |
@aspicio/mcp | MCP server for AI agents: describe_dxf + render_dxf |
@aspicio/api | DXF HTTP API server (private): /describe, /render, /mcp |
@aspicio/widget | MCP Apps in-chat viewer widget (private), served by the api server |
@aspicio/demo | Standalone demo app (private) — also the reference integration |
How the viewer packages fit together: every framework path funnels into the same Lit web components — one implementation of the embed UI — which sit on the framework-free core. React, Vue, and Svelte get thin veneers with idiomatic props; plain HTML consumes the elements directly.
Toolchain: Vite+ (vp) on top of bun.
Testing, CI/deploy, releasing, and contribution guidance: CONTRIBUTING.md.
Aspicio is developed and maintained by FrontSail AI.