Skip to main content
Glama
frontsail-ai

aspicio-dxf-viewer

by frontsail-ai

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 — npx -y @aspicio/mcp

Hosted MCP — aspicio-api.dmitri-66a.workers.dev/mcp

HTTP API — /describe, /render

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/aspicio then /plugin install aspicio@aspicio

  • Codex — the same repo doubles as a Codex marketplace: codex plugin marketplace add https://github.com/frontsail-ai/aspicio, codex plugin add aspicio@aspicio, then codex mcp add aspicio -- npx -y @aspicio/mcp

  • Any client that launches stdio MCP servers — register npx -y @aspicio/mcp

  • Any 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 HTTPGET /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

@aspicio/core

The viewer library: parsing, tessellation, rendering, camera, input

@aspicio/react

React bindings: <DxfEmbed>, <DxfPreview>, <DxfLayerPanel>

@aspicio/mcp

MCP server for AI agents: describe_dxf + render_dxf

@aspicio/api

DXF HTTP API Worker (private): /describe, /render, /mcp

@aspicio/widget

MCP Apps in-chat viewer widget (private), served by the api Worker

@aspicio/demo

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.

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
4hResponse time
2dRelease cycle
5Releases (12mo)
Commit activity

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

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