Hermes-first MCP bridge for the Pencil design tool — proxies the bundled MCP server and adds .pen file utilities
Project description
hermes-pen-bridge
Unofficial. Community MCP bridge for the Pencil design tool, built primarily for Hermes but compatible with any MCP client. Not affiliated with or endorsed by High Agency, Inc. "Pencil" is their trademark; this project uses the name descriptively only.
A hybrid MCP server that spawns Pencil's bundled MCP binary and layers extra developer tools on top — file validation, design-token extraction, layer trees, structural diffs, and batch export.
Pencil already ships an MCP server out of the box. This project doesn't replace it — it proxies all 13 native tools through unchanged and adds 7 utility tools that are convenient when scripting against .pen files from outside the app.
Architecture
[MCP client] ─stdio MCP─► [hermes-pen-bridge] ─stdio MCP─► [Pencil's bundled binary] ─WS─► [Pencil app]
│
└── 7 custom local tools (file utils)
- Spawns Pencil's own MCP binary (
mcp-server-darwin-arm64) as a subprocess - Forwards all standard MCP tool calls (
batch_get,batch_design,get_editor_state, …) - Handles 7 custom tools locally
- Relies on Pencil's stored credentials — no extra auth setup
Why "for Hermes"?
Hermes (Nous Research's local agent) is the primary audience — it's where this was first used. The server itself is provider-agnostic standard MCP and works fine with Claude Desktop, Cursor, Claude Code, and any other MCP client. The "Hermes-first" framing is about who we're solving for, not a technical lock-in.
Native tools (proxied)
batch_design, batch_get, export_nodes, find_empty_space_on_canvas, get_editor_state, get_guidelines, get_screenshot, get_variables, open_document, replace_all_matching_properties, search_all_unique_properties, set_variables, snapshot_layout
Custom tools
| Tool | Purpose |
|---|---|
pencil_version |
Show binary path and server status |
pencil_list_recent_files |
List recent .pen files from Pencil's config |
pencil_validate_file |
Validate a .pen file's structure |
pencil_extract_design_tokens |
Extract colors, fonts, spacing, variables |
pencil_list_layers |
Hierarchical tree of all elements |
pencil_diff_files |
Structural diff between two .pen files |
pencil_batch_export |
Batch export to PNG/SVG |
(Tool names retain the pencil_ prefix because they operate on .pen files — descriptive, not a brand claim.)
Installation
Prerequisites
- macOS (Pencil ships an arm64 binary)
- Pencil installed at
/Applications/Pencil.appwith a valid account/license - Python 3.11+
Install
From PyPI:
pip install hermes-pen-bridge
Or zero-install with uv:
uvx hermes-pen-bridge --pencil-binary /Applications/Pencil.app/Contents/Resources/app.asar.unpacked/out/mcp-server-darwin-arm64
Or from source:
git clone https://github.com/devvgwardo/hermes-pen-bridge
cd hermes-pen-bridge
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
MCP client configs
Hermes (~/.hermes/config.yaml)
mcp_servers:
pen-bridge:
command: hermes-pen-bridge
args:
- --pencil-binary
- /Applications/Pencil.app/Contents/Resources/app.asar.unpacked/out/mcp-server-darwin-arm64
tools: all
Claude Desktop / Cursor / Claude Code
{
"mcpServers": {
"pen-bridge": {
"command": "hermes-pen-bridge",
"args": ["--pencil-binary", "/Applications/Pencil.app/Contents/Resources/app.asar.unpacked/out/mcp-server-darwin-arm64"]
}
}
}
Restart the client. All 20 tools (13 native + 7 custom) appear automatically.
Usage
pencil_version
pencil_list_recent_files
pencil_validate_file --path "/path/to/file.pen"
pencil_extract_design_tokens --path "/path/to/file.pen"
pencil_list_layers --path "/path/to/file.pen" --max_depth 10
pencil_diff_files --path_a "v1.pen" --path_b "v2.pen"
pencil_batch_export --paths '["a.pen","b.pen"]' --format png --scale 2
Open-source alternative
If you want a fully open-source design tool with built-in MCP (no closed-source binary in the loop), see OpenPencil or ZSeven-W/openpencil.
License & disclaimers
- Wrapper code: MIT (see
LICENSE) - Pencil's binary and
.penfile format: proprietary to High Agency, Inc. This project does not redistribute Pencil's binary, source, or assets. Users must install Pencil themselves and comply with pencil.dev's Terms of Use. - This is an independent community project. No affiliation with or endorsement by High Agency, Inc.
Related: the design pattern
The proxy approach used here is documented as a generic skill at desktop-app-mcp-proxy-pattern — applies to any Electron app that bundles its own MCP binary.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hermes_pen_bridge-0.1.1.tar.gz.
File metadata
- Download URL: hermes_pen_bridge-0.1.1.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9eea4fae823009a61e1e99e992865171f031e71d1605cccdf6625b0a0cbee347
|
|
| MD5 |
0232ee56c5341aba7b462be4799473c5
|
|
| BLAKE2b-256 |
c2ccd1c4d7a504394d3f8bfd5457ef8bb077ec54eea127d09ffe34a7c3be527b
|
File details
Details for the file hermes_pen_bridge-0.1.1-py3-none-any.whl.
File metadata
- Download URL: hermes_pen_bridge-0.1.1-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64be36c99c0e0409766593298cd073f9a17f7db1c4c5f2579f3959562877a36c
|
|
| MD5 |
7eaa62d817d28b27c19dc09220e900ad
|
|
| BLAKE2b-256 |
1b414a8ba080e9f5aa2505456efac5537a95b0d63dab753ac067bb60b1833de6
|