Yes, a Git repository on GitHub can be the most suitable option.
Hey Jeremy (@tribby),
Thanks for sharing Petr van Blokland’s talk, “Combining ML & rule-based digital assistants to create short design cycles for type design projects.” It’s exactly the direction I’m exploring.
Are you in touch with Petr? I saw his project is semi-open-source—do you have any more details?
I’ll create a new repository on GitHub. In its early stages, it might be a good idea to temporarily make it ‘semi-open’?
Who would like to be invited? @GeorgSeifert
I’ll add TODO.md file this week to summarize what I’ve collected so far.
I’m very interested in the project.
Do you have a github account ?
I’ve added a README.md file to the project on GitHub.
Here’s the link: https://github.com/thierryc/Glyphs-mcp (Private repo for now)
Please send me your GitHub account page, and I’ll add you to the project.
@GeorgSeifert @tribby, you should have received an invitation from GitHub.
Title: Minimal MCP-Server Plugin (FastMCP) – Start/Stop from Edit Menu
Hi everyone,
I’ve put together a very small Glyphs plugin that lets you spin up (or shut down) a local FastMCP server straight from the Edit menu:
What it does
- Boots a FastMCP SSE endpoint (http://127.0.0.1:3845/sse) so external agents (Claude, ChatGPT, etc.) can talk to Glyphs via the MCP protocol.
- Keeps all server code inside the plugin bundle—no global installs or extra CLI steps.
- Cleanly tears everything down when you choose Stop or quit Glyphs.
Tech notes
- Written in Python 3.11 (works with any 3.10+ interpreter you point Glyphs at).
- Uses **fastmcp >= 2.0 under the hood.
If anyone wants to:
- review the structure,
- test on Intel vs. Apple-silicon setups,
I push it to GitHub.
Thanks!
— Thierry
The server still advertises zero tools, so agents have nothing to call.
Let’s choose a starter set—compact “actions” like getSelection or applyKerning, a few status reads, maybe batch ops—drop them into the manifest.
Starter tool list:
Tool | Purpose |
---|---|
getFonts() | List all open fonts |
getFont(fontId) | JSON: metadata, masters, instances… |
getSelection() | IDs/names of selected glyphs |
applyKerning(pairs) | Batch-apply kerning values |
saveFont(fontId) | Force-save a font |
Feel free to toss more ideas into Jeremy’s “demo” issue on GitHub (semi-open) so we can hash them out there.
https://github.com/thierryc/Glyphs-mcp/issues/1
GitHub (semi-open) who want an access?
Heads-up: an easy trap is crafting tools that hard-code one workflow. Aim for flexible, low-level primitives instead—agents will mix and match them in ways we can’t predict.
Hey there—great to hear you’re interested!
Just send me your GitHub handle (the link to your GitHub page) and I’ll add you as a collaborator.
Let me know if you run into any issues or have questions. Happy hacking!
Working with the Continuous Integration plugin in Visual Studio Code.
There’s a list of available tools for a proof of concept.
Glyphs MCP Server started successfully!
• Port: 9680
• SSE endpoint: http://127.0.0.1:9680/sse
• Available tools: 6 tools
• Tools available:
- list_open_fonts
- get_font_glyphs
- get_font_masters
- get_font_instances
- get_glyph_details
- get_font_kerning
• Server running in background (daemon thread)
In the branch https://github.com/thierryc/Glyphs-mcp/tree/feat/add-initial-mcp-tool
This branch is currently undergoing a heavy development process. For the moment, only the list of open fonts has been tested.
A very minimal MCP server is now starting to work!
I’ve tested it successfully using Continue and Claude Sonnet via the Anthropic API.
It should also be compatible with other tools that support the MCP protocol like Claude App, Cursor, Windsurf, or the OpenAI ChatGPT API.
It’s still early, but we’re starting to see real progress!
Tools available:
- list_open_fonts
- get_font_glyphs
- get_font_masters
- get_font_instances
- get_glyph_details
- get_font_kerning
- create_glyph
- delete_glyph
- update_glyph_properties
- copy_glyph
- update_glyph_metrics
- add_component_to_glyph
- add_anchor_to_glyph
- set_kerning_pair
- get_selected_glyphs
- get_selected_font_and_master
- save_font
Hello everyone,
I wanted to share an update regarding the tools currently available:
- list_open_fonts
- get_font_glyphs
- get_font_masters
- get_font_instances
- get_glyph_details
- get_font_kerning
- create_glyph
- delete_glyph
- update_glyph_properties
- copy_glyph
- update_glyph_metrics
- add_component_to_glyph
- add_anchor_to_glyph
- set_kerning_pair
- get_selected_glyphs
- get_selected_font_and_master
- save_font
This week, I plan to expand the toolset by adding functions related to shape and glyph path manipulation.
I’d greatly appreciate any suggestions or feedback you might have. Feel free to share your thoughts here or contribute directly on our semi-public GitHub repository.
Looking forward to your ideas and input!
I add 2 new tools
“get_glyph_paths”,
Get the path data for a glyph in a simple JSON format suitable for LLM editing.
Args:
font_index (int): Index of the font (0-based). Defaults to 0.
glyph_name (str): Name of the glyph. Required.
master_id (str): Master ID. If None, uses the current selected master. Optional.
Returns:
str: JSON-encoded path data containing:
paths (list): List of paths, each containing:
nodes (list): List of nodes with x, y, type, smooth properties
closed (bool): Whether the path is closed
width (int): Glyph width
leftSideBearing (int): Left side bearing
rightSideBearing (int): Right side bearing
“set_glyph_paths”,
Set the path data for a glyph from JSON, replacing existing paths.
Args:
font_index (int): Index of the font (0-based). Defaults to 0.
glyph_name (str): Name of the glyph. Required.
master_id (str): Master ID. If None, uses the current selected master. Optional.
paths_data (str): JSON string containing path data in the format returned by get_glyph_paths. Required.
Returns:
str: JSON-encoded result with success status.