{"name":"io.github.frontsail-ai/aspicio","slug":"frontsail-ai-aspicio","title":"Aspicio","description":"DXF and PDF/X-4 for AI agents: structured facts, PNG renders, an interactive in-chat viewer.","url":"https://mcp.market/server/frontsail-ai-aspicio","rating":null,"grade":"A","score":94,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":42,"stars":6,"forks":1,"downloads_week":146,"last_push_at":"2026-11-02T02:18:02.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T05:55:49.989Z","last_ok_at":"2026-11-04T05:55:49.989Z","latency_ms":418},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/frontsail-ai/aspicio","website":"https://aspicio.frontsail.app","version":"0.13.2","remotes":[{"type":"streamable-http","url":"https://aspicio-api.frontsail.app/mcp"}],"packages":[{"registryType":"npm","identifier":"@aspicio/mcp","version":"0.13.2","runtimeHint":"npx","transport":{"type":"stdio"}}],"tools":[{"name":"describe_doc","description":"Return a structured JSON summary of a drawing in any supported format (DXF or PDF), detected from its bytes rather than its name. Use this when you do not know which format you have; the reply names the format that was read. Covers the whole drawing by default, including every page of a multi-page PDF; pass `space` (a name from the reply's `spaces`) to scope it to one page or sheet. When the user wants to see or explore the drawing themselves, prefer view_dxf (interactive viewer) — if your platform gates it behind user approval, offer it and ask rather than substituting a static render.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"string","description":"A publicly reachable http(s) URL, or inline DXF text. A PDF is binary, so it must be a URL — inline PDF bytes are refused. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)"},"space":{"description":"Which space to work on: \"Model\" (a PDF's page 1, a DXF's model space) or a page/layout name as listed in a describe reply's \"spaces\". Describe omits it for the whole drawing; render defaults to the first space.","type":"string"}},"required":["source"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"describe_dxf","description":"Return a structured JSON summary of a DXF drawing — units, bounding box, layers (with the color actually drawn), per-type entity counts, and any skipped/unsupported types. Use this to answer structural questions (what layers exist, how many parts, what size, is it to scale) without rendering an image. For a PDF use describe_pdf; if you do not know the format, use describe_doc. Covers the whole drawing by default, including every page of a multi-page PDF; pass `space` (a name from the reply's `spaces`) to scope it to one page or sheet. When the user wants to see or explore the drawing themselves, prefer view_dxf (interactive viewer) — if your platform gates it behind user approval, offer it and ask rather than substituting a static render.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"string","description":"A publicly reachable http(s) URL, or inline DXF text. A PDF is binary, so it must be a URL — inline PDF bytes are refused. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)"},"space":{"description":"Which space to work on: \"Model\" (a PDF's page 1, a DXF's model space) or a page/layout name as listed in a describe reply's \"spaces\". Describe omits it for the whole drawing; render defaults to the first space.","type":"string"}},"required":["source"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"describe_pdf","description":"Return a structured JSON summary of a PDF drawing — units (points), bounding box, layers, per-type entity counts, the text it contains, and what was skipped (images, shadings, transparency). Use this for structural questions about a PDF without rendering it. For a DXF use describe_dxf; if you do not know the format, use describe_doc. Covers the whole drawing by default, including every page of a multi-page PDF; pass `space` (a name from the reply's `spaces`) to scope it to one page or sheet. When the user wants to see or explore the drawing themselves, prefer view_dxf (interactive viewer) — if your platform gates it behind user approval, offer it and ask rather than substituting a static render.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"string","description":"A publicly reachable http(s) URL, or inline DXF text. A PDF is binary, so it must be a URL — inline PDF bytes are refused. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)"},"space":{"description":"Which space to work on: \"Model\" (a PDF's page 1, a DXF's model space) or a page/layout name as listed in a describe reply's \"spaces\". Describe omits it for the whole drawing; render defaults to the first space.","type":"string"}},"required":["source"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"load_dxf_for_viewer","description":"Internal: returns DXF bytes (base64) for the in-chat viewer. Called by the widget, not the model.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"string","description":"http(s) URL of the drawing (same guards as the other tools)"},"offset":{"description":"Byte offset of the requested range","type":"integer","minimum":0,"maximum":9007199254740991},"length":{"description":"Byte length of the requested range","type":"integer","minimum":1,"maximum":4000000}},"required":["source"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"render_doc","description":"Render a drawing in any supported format (DXF or PDF) to a PNG you can look at, detected from its bytes rather than its name. Use this when you do not know which format you have. Renders the first page/sheet by default; pass `space` (a name from a describe reply's `spaces`) to render another one. Some chat UIs do not display the returned image to the user: for URL sources the result also includes a direct image link — show it (e.g. as a markdown image) when they need to see the render. When the user wants to see or explore the drawing themselves, prefer view_dxf (interactive viewer) — if your platform gates it behind user approval, offer it and ask rather than substituting a static render.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"string","description":"A publicly reachable http(s) URL, or inline DXF text. A PDF is binary, so it must be a URL — inline PDF bytes are refused. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)"},"width":{"description":"PNG width in pixels (default 1200)","type":"integer","minimum":64,"maximum":4000},"space":{"description":"Which space to work on: \"Model\" (a PDF's page 1, a DXF's model space) or a page/layout name as listed in a describe reply's \"spaces\". Describe omits it for the whole drawing; render defaults to the first space.","type":"string"}},"required":["source"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"render_dxf","description":"Render a DXF drawing to a PNG image you can look at. Use this to answer visual questions (what does it look like, where is a feature, does it look right) — it returns an image, not text. For structural facts, prefer describe_dxf. For a PDF use render_pdf; if you do not know the format, use render_doc. Renders the first page/sheet by default; pass `space` (a name from a describe reply's `spaces`) to render another one. Some chat UIs do not display the returned image to the user: for URL sources the result also includes a direct image link — show it (e.g. as a markdown image) when they need to see the render. When the user wants to see or explore the drawing themselves, prefer view_dxf (interactive viewer) — if your platform gates it behind user approval, offer it and ask rather than substituting a static render.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"string","description":"A publicly reachable http(s) URL, or inline DXF text. A PDF is binary, so it must be a URL — inline PDF bytes are refused. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)"},"width":{"description":"PNG width in pixels (default 1200)","type":"integer","minimum":64,"maximum":4000},"space":{"description":"Which space to work on: \"Model\" (a PDF's page 1, a DXF's model space) or a page/layout name as listed in a describe reply's \"spaces\". Describe omits it for the whole drawing; render defaults to the first space.","type":"string"}},"required":["source"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"render_pdf","description":"Render a PDF drawing's vector content to a PNG you can look at. Images, shadings, and transparency are not drawn — they are reported by describe_pdf — so this shows line work and text, not a page facsimile. For a DXF use render_dxf; if you do not know the format, use render_doc. Renders the first page/sheet by default; pass `space` (a name from a describe reply's `spaces`) to render another one. Some chat UIs do not display the returned image to the user: for URL sources the result also includes a direct image link — show it (e.g. as a markdown image) when they need to see the render. When the user wants to see or explore the drawing themselves, prefer view_dxf (interactive viewer) — if your platform gates it behind user approval, offer it and ask rather than substituting a static render.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"string","description":"A publicly reachable http(s) URL, or inline DXF text. A PDF is binary, so it must be a URL — inline PDF bytes are refused. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)"},"width":{"description":"PNG width in pixels (default 1200)","type":"integer","minimum":64,"maximum":4000},"space":{"description":"Which space to work on: \"Model\" (a PDF's page 1, a DXF's model space) or a page/layout name as listed in a describe reply's \"spaces\". Describe omits it for the whole drawing; render defaults to the first space.","type":"string"}},"required":["source"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"view_dxf","description":"Open an interactive viewer the user can pan, zoom, and toggle layers in (renders in-chat on MCP Apps-capable hosts). Reads DXF and vector PDF; for a PDF it shows line work and text rather than a page facsimile, so images, shadings, and transparency are absent by design. Use this when the user wants to see or explore the drawing themselves; for your own analysis use a describe_* tool (facts) or a render_* tool (image). The viewer shows only the drawing from this call. Delivery is handled by the widget itself: small drawings are embedded in the result and larger URL-sourced drawings are fetched by the widget through its own tool call — never re-fetch or inline the file for the viewer's sake, and don't blind-retry if the user reports an empty viewer (the viewer posts its actual status back to the conversation context).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"string","description":"A publicly reachable http(s) URL, or inline DXF text. A PDF is binary, so it must be a URL — inline PDF bytes are refused. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)"},"allow_file_open":{"description":"Show open-file controls in the viewer (default false: viewer is locked to this drawing)","type":"boolean"}},"required":["source"],"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":94,"grade":"A","scanned_at":"2026-11-04T06:35:08.042Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-04T06:35:07.939Z","components":{"code":{"score":25,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 744ms"]},"poisoning":{"score":15,"max":15,"notes":["8 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://aspicio-api.frontsail.app/mcp","reachable":true,"authRequired":false,"latencyMs":744,"serverInfo":{"name":"aspicio","version":"0.13.2"}}],"packages":[{"registryType":"npm","identifier":"@aspicio/mcp","version":"0.13.2","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-10-23T01:27:48.236Z","repositoryUrl":"git+https://github.com/frontsail-ai/aspicio.git","weeklyDownloads":146}],"repo":{"found":true,"owner":"frontsail-ai","repo":"aspicio","archived":false,"pushedAt":"2026-11-02T02:18:02Z","stars":6,"forks":1,"openIssues":31,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/216556971?v=4","ownerCreatedAt":"2025-06-16T14:18:48Z","license":"MIT"},"icon":{"url":"https://aspicio.frontsail.app/favicon.svg","source":"registry"},"presence":{"stars":6,"forks":1,"downloadsWeek":146,"license":"MIT","lastPushAt":"2026-11-02T02:18:02.000Z","score":42}}}},"grade_history":[],"reviews":[]}