MCP bridge for AI-assisted type design in GlyphsApp.
Lets Claude, Cursor, or any MCP client read and write font data directly in GlyphsApp — bidirectional, real-time, live in the editor.
MCP Client ←(stdio/MCP)→ MCP Server ←(HTTP/localhost)→ GlyphsApp Plugin
- GlyphsApp 3 (tested on 3.2+)
- An MCP client: Claude Code, Cursor, Windsurf, etc.
- Python 3.10+ with uv (recommended) or pip
From Plugin Manager (recommended): Open GlyphsApp, go to Window > Plugin Manager, search for MCP, and click Install.
Manual install: Download GlyphsMCP.glyphsPlugin.zip from the latest release, unzip, and double-click to install.
Restart GlyphsApp. You should see GlyphsMCP under the Window menu.
Claude Code:
claude mcp add glyphs-mcp -- uvx glyphs-mcpCursor / VS Code — add to your MCP config:
{
"mcpServers": {
"glyphs-mcp": {
"command": "uvx",
"args": ["glyphs-mcp"]
}
}
}That's it.
Open a font in GlyphsApp, then ask your AI assistant:
"Run a full color audit on my font and tell me which glyphs are inconsistent"
"Compare the stems across all my lowercase letters"
"Check if my figures are consistent with my letters"
"Make the R 20% wider and harmonize the curves"
"Analize metrics on lowercases"
| Tool | Description |
|---|---|
get_font_info |
Font family name, UPM, glyph count, masters, axes, metrics, instances |
list_glyphs |
All glyph names with unicode, category, layer count |
get_glyph |
Full glyph data: paths, components, anchors, sidebearings for all layers |
get_glyph_svg |
Glyph rendered as SVG markup |
get_selection |
Current editor selection: active glyph, layer, selected paths/nodes |
get_masters |
All masters with metrics and axis positions |
get_kerning |
All kerning pairs for a master |
get_features |
OpenType feature code |
| Tool | Description |
|---|---|
create_glyph |
Create a new glyph with optional width, unicode, and initial paths |
set_glyph_paths |
Replace all paths on a glyph's layer |
set_glyph_width |
Set advance width |
set_glyph_color |
Set color label (0-11) |
set_glyph_unicode |
Assign or clear a unicode value |
rename_glyph |
Rename a glyph |
duplicate_glyph |
Copy a glyph with all layers to a new name |
delete_glyph |
Delete a glyph |
set_kerning_pair |
Add or modify a kerning pair |
delete_kerning_pair |
Remove a kerning pair |
set_feature_code |
Create or update an OpenType feature |
| Tool | Description |
|---|---|
measure_stems |
Measure stem thicknesses via perpendicular ray-casting |
compare_stems |
Compare stems across glyphs using industry patterns |
get_stem_targets |
Designer's intended stem values from Dimensions palette |
measure_color |
Measure ink density for a single glyph |
compare_color |
Compare ink density across glyphs |
audit_font_color |
Full font color audit across all letters |
check_overshoots |
Overshoot consistency at baseline, x-height, cap-height |
compare_proportions |
Width ratios, related-form groups, ordering constraints |
check_diagonal_weights |
Diagonal stem thickness vs straight reference |
check_junctions |
Stem thinning at arch/bowl junctions |
check_related_forms |
Cross-validate figures and letters (0/O, 6/9, 8/S, 3/B) |
check_punctuation |
Mirrored pair widths, dash ratios, related punctuation |
check_compatibility |
Master compatibility: paths, nodes, components, anchors |
analyze_kerning |
Kerning quality: cross-master gaps, orphans, outliers |
analyze_spacing |
Spacing quality: sidebearing groups, symmetry, drift |
Analysis tools automatically mark glyphs in GlyphsApp: red = inconsistent, orange = unreliable, yellow = optical compensation, green = pass.
Requires RMX Tools for full functionality. Falls back to native transforms when RMX is unavailable.
| Tool | Description |
|---|---|
rmx_harmonize |
Optimize bezier curves |
rmx_scale |
Scale by percentage with stroke weight compensation |
rmx_tune |
Adjust weight, width, height, or slant |
rmx_monospace |
Adjust a glyph to a fixed advance width |
rmx_batch |
Apply any RMX filter to multiple glyphs |
| Tool | Description |
|---|---|
execute_in_glyphs |
Run arbitrary Python inside GlyphsApp (disabled by default) |
All tools accept an optional master_id parameter. When omitted, read/write tools use the first master. Analysis tools analyze all masters and return per-master results.
The plugin adds a GlyphsMCP submenu under Window in the menu bar:
- Start/Stop Server — toggle the HTTP server
- Connect — copy ready-to-paste MCP config for Claude Code or VS Code (and forks)
- Documentation — open this page in your browser
- Allow Execute Endpoint — enable
execute_in_glyphs(off by default for security)
| Key | Default | Description |
|---|---|---|
com.nico.glyphs-mcp.port |
7745 |
HTTP server port |
com.nico.glyphs-mcp.autostart |
true |
Start server on GlyphsApp launch |
com.nico.glyphs-mcp.allowExecute |
false |
Enable the execute endpoint |
The GlyphsApp plugin runs an HTTP server on 127.0.0.1:7745 inside GlyphsApp. All GlyphsApp API calls run on the main thread via a queue + NSTimer bridge for thread safety.
The MCP server is a thin translation layer — it receives MCP tool calls via stdio and forwards them as HTTP requests to the plugin.
- Font proofing — Generate proof strings for spacing/kerning evaluation
- Auto-update — Check for updates directly from the GlyphsMCP menu
- Analytics — Optional usage telemetry to guide development priorities
MIT — Nicolas Massi www.nico.works
