Glyphs Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Glyphs Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<p align="center"> <img src="assets/glyphs-mcp.png" alt="GlyphsMCP" width="400"> </p>
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 PluginFrom 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:
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.
MIT — Nicolas Massi www.nico.works
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.