Skip to main content

pac-vector

Local stdio MCP server: an SVG editor over in-memory virtual documents (one per "window", like Inkscape), with a live browser preview of every edit.

  • Content goes in as SVG markup; structure (layers, groups, masks, z-order) has typed tools.
  • Layers are real Inkscape layers, so exported files open in Inkscape with layers intact.
  • Every edit is atomic (a failed call changes nothing) and one undo step.
  • render returns a PNG the agent can look at; rendering is resvg (no browser, no Cairo).

Install

Same shape as pac-pincers: a pip package, run as a module by whatever Python it was installed into.

python -m pip install --upgrade pac-vector
claude mcp add pac-vector --scope user -- python -m pac_vector

As a plugin .mcp.json entry (mirrors the datatopia plugin's pac-pincers entry):

"pac-vector": {
  "type": "stdio",
  "command": "${PAC_VECTOR_PYTHON:-python}",
  "args": ["-m", "pac_vector"],
  "env": {}
}

Development:

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"
.\.venv\Scripts\python.exe run_tests.py -q
.\.venv\Scripts\python.exe -m build          # dist/pac_vector-<ver>.tar.gz + .whl

Tools (17)

Group Tools
Documents doc_create (blank or import), doc_list, doc_set (size, units, viewBox, background, fit), doc_export (svg/png, page/drawing/ids, plain), doc_close
Reading inspect (outline or xml), render (PNG, optional crop to ids + bbox)
Editing add (markup → layer/group, defs auto-routed), update (attrs/style/text/transform/label/hidden/locked on many ids), replace (one element or the whole drawing), remove, arrange (z-order, move between layers, duplicate, offset)
Structure group (also new layers), ungroup, mask (mask or clip from id or markup), unmask
History undo

Preview

doc_create / doc_list / inspect print preview: http://127.0.0.1:<port>/#<doc>. The page has a tab per document, outlines the elements each edit touched, and shows (and copies) the id of anything you click. The server lives inside the MCP process: it starts on the first doc_create and dies with the session.

Environment

Variable Default Meaning
PAC_VECTOR_PORT 0 (random) Pin the preview port (falls back to random if busy)
PAC_VECTOR_OPEN_BROWSER off 1 opens the preview in the default browser on first start
PAC_VECTOR_ROOT server cwd Base directory for relative export/import paths
PAC_VECTOR_LOG WARNING Log level (stderr only)

Notes

  • stdout is the JSON-RPC pipe: nothing may print to it. tests/test_stdout_safety.py scans the package for print() / sys.stdout, and tests/test_stdio.py runs a real session.
  • Native modules are loaded before the stdio loop starts (render.warm): on Windows a first native load from inside the FastMCP loop can hang (see pac-pincers' _excel.py).
  • Bounding boxes are measured from pixels (two-pass render), so they include strokes and filters and work for text and curves; content further than two page-widths off-canvas isn't found.
  • Version lives only in pyproject.toml; a release is a commit named after the version.

Metadata

Release files for pac-vector 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pac-vector 0.1.0
File Size Uploaded Provenance Actions
pac_vector-0.1.0.tar.gz 36.9 kB Without provenance Details for pac_vector-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pac-vector 0.1.0
File Interpreter ABI Platform Actions
pac_vector-0.1.0-py3-none-any.whl Python 3 none any Details for pac_vector-0.1.0-py3-none-any.whl

Total release size: 72.2 kB

Release files / pac_vector-0.1.0.tar.gz

Download URL pac_vector-0.1.0.tar.gz
Size 36.9 kB
Tags Source
SHA-256 checksum
How to use checksums
29af3a981314be3e795c07549b86301c4537a6ea35f1113b879c463bee438129
BLAKE2b-256 checksum
How to use checksums
87a7640f599c6e65f7379bd5fe6ec774405ab1859f0153891920c02724d8aaf4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.0

Release files / pac_vector-0.1.0-py3-none-any.whl

Download URL pac_vector-0.1.0-py3-none-any.whl
Size 35.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d8b747af381df330efa4ae56f3d9bbadc47fccf6b2eb16c885bd946dc507d479
BLAKE2b-256 checksum
How to use checksums
441d5c9dba792df68232ff3ea41267746f5d62c9bdae8f155f85a1bf2eb0509f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.0

Security for pac-vector 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page