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.
Metadata
Release files for hermes-pen-bridge 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| hermes_pen_bridge-0.1.1.tar.gz | 12.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hermes_pen_bridge-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.7 kB
Release files / hermes_pen_bridge-0.1.1.tar.gz
| Download URL | hermes_pen_bridge-0.1.1.tar.gz |
|---|---|
| Size | 12.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9eea4fae823009a61e1e99e992865171f031e71d1605cccdf6625b0a0cbee347
|
|
BLAKE2b-256 checksum How to use checksums |
c2ccd1c4d7a504394d3f8bfd5457ef8bb077ec54eea127d09ffe34a7c3be527b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Release files / hermes_pen_bridge-0.1.1-py3-none-any.whl
| Download URL | hermes_pen_bridge-0.1.1-py3-none-any.whl |
|---|---|
| Size | 11.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
64be36c99c0e0409766593298cd073f9a17f7db1c4c5f2579f3959562877a36c
|
|
BLAKE2b-256 checksum How to use checksums |
1b414a8ba080e9f5aa2505456efac5537a95b0d63dab753ac067bb60b1833de6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Security for hermes-pen-bridge 0.1.1
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.