Glyphs MCP

A Machine-Control-Protocol server for Glyphs that exposes font-specific tools to AI and LLM agents.


What is an MCP server?

A Model Context Protocol server is a lightweight process that:

  1. Registers tools (JSON-RPC methods) written in the host language (Python here).
  2. Streams JSON output back to the calling agent.

Bridging Glyphs with MCP makes it possible for assistants to read, inspect, and manipulate Glyphs documents in the same way a human operator would.


Table of contents


Start the Glyphs MCP server

Launch Glyphs, then choose Edit → Start MCP Server.

To stop the server, simply quit Glyphs.

Command set (v0.3)

ToolDescription
list_open_fontsList all open fonts and basic metadata.
get_font_glyphsReturn glyph list and key attributes for a font.
get_font_mastersDetailed master information for a font.
get_font_instancesList instances and their interpolation data.
get_glyph_detailsFull glyph data including layers, paths, components.
get_font_kerningAll kerning pairs for a given master.
create_glyphAdd a new glyph to the font.
delete_glyphRemove a glyph from the font.
update_glyph_propertiesChange unicode, category, export flags, etc.
copy_glyphDuplicate outlines or components from one glyph to another.
update_glyph_metricsAdjust width and side-bearings.
get_glyph_componentsInspect components used in a glyph.
add_component_to_glyphAppend a component to a glyph layer.
add_anchor_to_glyphAdd an anchor to a glyph layer.
set_kerning_pairSet or remove a kerning value.
get_selected_glyphsInfo about glyphs currently selected in UI.
get_selected_font_and_masterCurrent font + master and selection snapshot.
get_glyph_pathsExport paths in a JSON format suitable for LLM editing.
set_glyph_pathsReplace glyph paths from JSON.
execute_codeExecute arbitrary Python in the Glyphs context.
execute_code_with_contextExecute Python with injected helper objects.
save_fontSave the active font (optionally to a new path).

Client setup

Configure your preferred AI client to speak the Streamable HTTP endpoint. Below are quick-start snippets for common tools.

OpenAI Codex CLI

Codex understands MCP servers via codex mcp helpers. The mcp-remote transport is the preferred option, but it requires Node 20 or newer on your system. Add the configuration to ~/.codex/config.toml, then restart any active Codex sessions.

TOML
[mcp_servers.glyphs-app-mcp]
command = "npx"
args = ["mcp-remote", "http://127.0.0.1:9680/mcp/", "--header"]

You can run codex config path to verify the location if you've customised the CLI setup.

Claude Desktop

Claude Desktop reads configuration from /Users/<userName>/Library/Application Support/Claude/claude_desktop_config.json. Append the server definition and restart the app:

JSON
{
  "globalShortcut": "Alt+Ctrl+Cmd+*",
  "mcpServers": {
    "glyphs-mcp-server": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://127.0.0.1:9680/mcp/"
      ],
      "env": {
        "PATH": "/Users/yourUserName/.nvm/versions/node/v22.19.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
      }
    }
  }
}

Claude Desktop spawns MCP servers without your interactive shell profile, and its bundled Node runtime is typically older than v20. Because mcp-remote itself targets Node 20+, the explicit PATH entry forces npx to resolve to your local Node 22 installation so the CLI boots successfully.

Prefer invoking the all-in-one helper? Swap in @modelcontextprotocol/server-everything or the dedicated SSE client:

JSON
{
  "globalShortcut": "Alt+Ctrl+Cmd+*",
  "mcpServers": {
    "glyphs-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-everything"
      ],
      "env": {
        "SSE_URL": "http://127.0.0.1:9680/mcp/"
      }
    }
  }
}

Cursor IDE

Cursor stores its MCP registry in ~/.cursor/mcp.json. Drop in the JSON below to wire up the Glyphs server—the PATH override makes sure npx resolves to your Node 20+ install so mcp-remote can launch:

JSON
{
  "mcpServers": {
    "glyphs-mcp-server": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://127.0.0.1:9680/mcp/"
      ],
      "env": {
        "PATH": "/Users/yourUserName/.nvm/versions/node/v22.19.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
      }
    }
  }
}

Cursor still honours the legacy YAML file if you prefer that format:

YAML
mcpServers:
  - name: glyphs-mcp
    type: streamable-http
    url: http://127.0.0.1:9680/mcp/

Windsurf

Windsurf reads MCP configuration from ~/.codeium/windsurf/mcp_config.json. Use the streamlined serverUrl format:

JSON
{
  "mcpServers": {
    "glyphs-mcp-server": {
      "serverUrl": "http://127.0.0.1:9680/mcp/"
    }
  }
}

Claude Code (VS Code)

Use the Claude CLI to register the MCP server directly. The VS Code extension will discover it automatically:

BASH
claude mcp add --transport http glyphs-mcp-server http://127.0.0.1:9680/mcp/

After adding, reload VS Code (or the Claude extension) if it’s already running.

Continue (VS Code / JetBrains)

Continue supports MCP through YAML configuration. Drop the snippet below into ~/.continue/config.yaml (or a workspace override):

YAML
mcpServers:
  - name: Glyphs MCP
    # Local MCP server using Streamable HTTP transport
    type: streamable-http
    url: http://127.0.0.1:9680/mcp/

To scope the server to a single project, create a workspace override at ./.continue/config.yaml in your repository:

YAML
name: New MCP server
version: 0.0.1
schema: v1
mcpServers:
  - name: Glyphs MCP
    # Local MCP server using Streamable HTTP transport
    type: streamable-http
    url: http://127.0.0.1:9680/mcp/

If you start Continue before launching Glyphs, open the MCP submenu inside the Continue sidebar and click Reload so the editor picks up the freshly started server.

VS Code discovery shortcut

If you prefer to let VS Code auto-discover MCP servers registered by Claude Desktop, Cursor, or other tools, flip on the built-in discovery toggle via vscode://settings/chat.mcp.discovery.enabled. Once the setting is enabled, restart the chat session and the glyphs-mcp-server entry should appear without manual YAML edits.


Access & contributing

PRs, test reports, and ideas are always welcome. The semi-private repository lives at github.com/thierryc/Glyphs-mcp. Send a direct message on the Glyphs Forum to unlock access: Exploring the role of AI in typeface design.

Questions? Say hello at thierry@anotherplanet.io or @anotherplanet_io. When you are done, head back home for the full portfolio.


Build the Glyphs plug-in

BASH
# from the project root
source glyphs-build-env/bin/activate

# pull vendored libs & build the bundle
src/glyphs-mcp/scripts/vendor_deps.sh

The script updates the plug-in site-packages located in src/glyphs-mcp/Glyphs MCP.glyphsPlugin. Copy or symlink that bundle into ~/Library/Application Support/Glyphs 3/Plugins/, then restart Glyphs.

If you regenerate the ObjectWrapper documentation, refresh the bundled copy with:

BASH
python src/glyphs-mcp/scripts/copy_documentation.py

Once installed, open Glyphs and choose Edit → Start MCP Server. The service listens on http://127.0.0.1:9680/ using the MCP Streamable HTTP transport. Open the Macro Panel to monitor console output.