aspicio-dxf-viewer
Aspicio is an open-source (MIT), TypeScript-first DXF engine: one
framework-free parse → tessellate pipeline that runs in the browser, in
Node, and in Cloudflare Workers. 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 React
components, 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.
DXF bytes ──parse──▶ DxfDocument ──tessellate──▶ Tessellation ──┬─▶ WebGL renderer (viewer)
(normalized model) (batched geometry) ├─▶ SVG string (export / API / MCP)
└─▶ DrawingSummary (describe)How it's built: docs/architecture.md · behavior specs: docs/product-specs/
Embed it
React — one component gives you the layer panel plus an interactive preview:
import { DxfEmbed } from "@aspicio/react";
<DxfEmbed src={file} style={{ height: 480 }} />;Vanilla TypeScript:
import { DxfViewer } from "@aspicio/core";
const viewer = new DxfViewer(document.querySelector("#preview")!);
await viewer.load(file); // File | Blob | ArrayBuffer | DXF text (ASCII or binary)Headless — parse, describe, and render with no browser at all (Node or Workers; server-side previews, thumbnails, pipelines):
import { parseDxfBytes, tessellate, describeDrawing, tessellationToSvg } from "@aspicio/core";
const doc = parseDxfBytes(bytes); // ASCII or binary DXF
const drawing = tessellate(doc);
const summary = describeDrawing(doc, drawing); // units, bounds, layers, texts…
const svg = tessellationToSvg(drawing);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.
Hand it to an agent
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 — | ✅ | ✅ | ✅ |
Hosted MCP — | — | ✅ | ✅ |
HTTP API — | POST body | ✅ | ✅ |
Connect:
Claude Code — one step installs the MCP server plus the bundled skills (
aspicio-inspect-dxf,aspicio-embed):/plugin marketplace add frontsail-ai/aspiciothen/plugin install aspicio@aspicioCodex — the same repo doubles as a Codex marketplace:
codex plugin marketplace add https://github.com/frontsail-ai/aspicio,codex plugin add aspicio@aspicio, thencodex mcp add aspicio -- npx -y @aspicio/mcpAny client that launches stdio MCP servers — register
npx -y @aspicio/mcpAny client that supports remote MCP (Streamable HTTP) — point it at
https://aspicio-api.dmitri-66a.workers.dev/mcp(no install; speaks MCP, not a browser page)Plain HTTP —
GET /describe?src=<dxf-url>,GET /render?src=<dxf-url>&format=png|svg; the API self-describes at/openapi.json
URL 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.
Available today · direction
Everything above is shipped and live: viewer + demo, React and core 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.
Packages
Package | Description |
The viewer library: parsing, tessellation, rendering, camera, input | |
React bindings: | |
MCP server for AI agents: | |
DXF HTTP API Worker (private): | |
MCP Apps in-chat viewer widget (private), served by the api Worker | |
Standalone demo app (private) — also the reference integration |
Development
Toolchain: Vite+ (vp) on top of bun.
vp install # install dependencies
vp run dev # start the demo app
vp run ready # check + test + build everything (the repo gate)Testing, CI/deploy, releasing, and contribution guidance: CONTRIBUTING.md.
Aspicio is developed and maintained by FrontSail AI.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/frontsail-ai/aspicio'
If you have feedback or need assistance with the MCP directory API, please join our Discord server