Skip to main content

Command set

This is the tool surface exposed by the server shipped in this repo (FastMCP version="1.0.17").

Note: the server can be configured with a tool profile (in Edit → Glyphs MCP Server Status…) that hides tools you don't need for a given workflow. When a profile is active, tools/list will return a subset of the full tool surface. For a token-aware explanation and a “which profile should I pick?” guide, see Settings & tool profiles.

Most used tools (start here)

  • list_open_fonts: pick your font_index quickly.
  • get_font_masters: find master_id and basic master metadata.
  • review_spacing / apply_spacing: spacing workflow (review → dry run → confirm).
  • generate_kerning_tab: open a relevance-based worklist proof tab.
  • review_kerning_bumper: collision/near-miss audit (no mutation).
  • review_compensated_tuning: preview compensated tuning for one glyph (no mutation).

Tools by category

Discovery

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_glyph_componentsInspect components used in a glyph.
get_selected_glyphsInfo about glyphs currently selected in UI.
get_selected_font_and_masterCurrent font + master and selection snapshot.
get_selected_nodesDetailed selected nodes with per-master mapping for edits.
get_glyph_pathsExport paths in a JSON format suitable for LLM editing.
review_collinear_handlesReview a single path for curve nodes that should be smooth based on handle collinearity (no mutation).

Kerning

ToolDescription
get_font_kerningAll kerning pairs for a given master.
generate_kerning_tabGenerate a kerning review proof tab (missing relevant pairs + outliers) and open it.
review_kerning_bumperReview kerning collisions / near-misses and compute deterministic “bumper” suggestions (no mutation).
apply_kerning_bumperApply “bumper” suggestions as glyph–glyph kerning exceptions (supports dry_run; requires confirm=true to mutate).
set_kerning_pairSet or remove a kerning value.
add_corner_to_all_mastersAdd a _corner.* corner hint at selected nodes (and intersection handles) across all masters.

Spacing

ToolDescription
review_spacingReview spacing and suggest sidebearings/width (area-based; no mutation).
apply_spacingApply spacing suggestions (supports dry_run; requires confirm=true to mutate).
set_spacing_paramsSet spacing parameters as font/master custom parameters (no auto-save).
set_spacing_guidesAdd or clear glyph-level guides visualizing the spacing measurement band (no auto-save).

Compensated tuning

These tools help you generate and apply compensated tuning transforms across two compatible masters. They are for compensated scaling, not for single-master lighten/darken edits. See also: Compensated tuning tools.

ToolDescription
measure_stem_ratioMeasure the stem ratio b between two masters (ref/base) for compensated tuning (no mutation).
review_compensated_tuningCompute compensated-tuned outlines for one glyph from a base master plus a different compatible reference master, and return set_glyph_paths-compatible JSON (no mutation).
apply_compensated_tuningApply the same two-master compensated scaling transform across glyphs (supports dry_run; requires confirm=true to mutate; can back up layers).

Editing

ToolDescription
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.
add_component_to_glyphAppend a component to a glyph layer.
add_anchor_to_glyphAdd an anchor to a glyph layer.
set_glyph_pathsReplace glyph paths from JSON.
apply_collinear_handles_smoothApply smooth=True for collinear-handle curve nodes in a single path (supports dry_run; requires confirm=true to mutate).

Docs helpers

ToolDescription
docs_searchSearch bundled Glyphs SDK/ObjectWrapper docs by title/summary.
docs_getFetch a bundled docs page by id/path (supports paging via offset/max_chars).
docs_enable_page_resourcesRegister each documentation page as its own MCP resource (optional; can flood resources/list).

Export / execution

ToolDescription
ExportDesignspaceAndUFOExport designspace/UFO bundles with structured logs and errors.
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).

Notes for execute_code*:

  • Use capture_output=false for large loops.
  • Use max_output_chars / max_error_chars to cap returned output.
  • Use snippet_only=true to return a ready-to-paste Macro Panel snippet (no execution) when you want manual control.
  • Prefer execute_code_with_context for glyph-scoped mutations so the script gets font, glyph, and layer.
  • Large glyph edits should still call glyph.beginUndo()/endUndo() or layer.beginChanges()/endChanges() inside the script.
  • Glyphs undo is glyph-scoped, so master/global edits are not guaranteed undoable.

Recipes (copy/paste prompts)

1) List open fonts + pick font_index

List my open fonts.
Call list_open_fonts and tell me which font_index to use next.

2) Generate a kerning worklist proof tab

Open a kerning worklist proof tab for my current font/master.
Call generate_kerning_tab with {"font_index":0,"rendering":"hybrid","relevant_limit":2000,"missing_limit":800,"audit_limit":200,"per_line":12}
Then summarize what the sections mean and what to kern first (class-first).

3) Review kerning collisions (no mutation)

Review kerning collisions/near-misses in my current font/master.
Rules: do not mutate anything.

Call review_kerning_bumper with {"font_index":0,"min_gap":5,"relevant_limit":2000,"include_existing":true,"scan_mode":"two_pass","dense_step":10,"bands":8,"result_limit":200}
Then list the 20 worst collisions and what to do next.

4) Review spacing + dry run apply

Review spacing for my current selection, then propose conservative changes.
Rules: never auto-save; never mutate without a dry run first.

1) Call review_spacing with {"font_index":0}
2) Call apply_spacing with {"font_index":0,"dry_run":true,"clamp":{"maxDeltaLSB":80,"maxDeltaRSB":80,"minLSB":-50,"minRSB":-50}}
3) Wait for me to reply “apply” before calling apply_spacing again with confirm=true.

5) Review/apply smooth flags for a single path (dry run → confirm)

I want to mark curve nodes as smooth when their adjacent handles are nearly collinear.
Rules: only operate on the one path I specify; do not mutate without a dry run first.

1) Call review_collinear_handles with {"font_index":0,"glyph_name":"A","master_id":"m01","path_index":0,"threshold_deg":3.0,"min_handle_len":5.0}
2) Call apply_collinear_handles_smooth with {"font_index":0,"glyph_name":"A","master_id":"m01","path_index":0,"threshold_deg":3.0,"min_handle_len":5.0,"dry_run":true}
3) Wait for me to reply “apply” before calling apply_collinear_handles_smooth again with confirm=true.

6) Search bundled docs (docs_searchdocs_get)

Search the bundled Glyphs docs for “GSLayer bounds”.
1) Call docs_search with {"query":"GSLayer bounds"}
2) Pick the best match and call docs_get for that page.
3) Summarize the key parts I need.

7) Get a Macro Panel snippet instead of executing

Write a Python Macro Panel snippet to do X, but do not run it automatically.
Return a snippet I can paste into Glyphs → Window → Macro Panel.

Call execute_code with {"snippet_only":true,"code":"...your python here..."}.