Glyphs mcp outlines docs
Use this skill when the task is to inspect or edit outlines, components, anchors, selected nodes, cubic Bezier geometry, Tunni balance, signed curvature, curve quality, native candidate-session review, or curvature/candidate Reporter workflows in Glyphs while also using the bundled docs lookup tools to stay grounded.From its SKILL.md
npx -y skills add thierryc/Glyphs-mcp --skill glyphs-mcp-outlines-docsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
10.6 KB, as published. Nobody here has run it
Glyphs MCP outlines and docs
Use this skill for path editing, component or anchor work, selected-node workflows, cubic curve geometry and quality review, and bundled Glyphs docs lookup.
Core rules
- Prefer dedicated tools first.
- Use
execute_code_with_contextonly for multi-step glyph-scoped work that is awkward with the dedicated tools. - Keep any fallback script minimal, validate targets first, and bound output if needed.
- Use
docs_searchanddocs_getinstead of broad docs loading. - Treat curve-quality results as measurements and conservative warnings, never as an artistic score or automatic pass/fail verdict.
- Use
update_glyph_node_positionsfor explicit coordinate-only micro-edits on one glyph layer. Keepgrid_policy="font"so the effective Glyphs grid, including subdivision or disabled rounding, is authoritative; usecontinuousonly when the user explicitly requests off-grid precision. - Before and after a node mutation, compare position, type, connection, smoothness, orientation, and name; only explicitly targeted fields may change.
- Treat a missing node
nameinset_glyph_pathsas preserve and JSONnullor""as unnamed. In fallback Python, never assignNoneto a Glyphs string property such asGSNode.name; use""when clearing it. - The complete verified read-back from
update_glyph_node_positionssatisfies post-mutation verification. For other tools, re-read affected glyph state and stop if any non-target field changed. - Never auto-save the font.
Workflow
- Read the current state first with the smallest useful set:
get_selected_font_and_masterget_selected_nodesget_glyph_pathsreview_tunni_geometryreview_curve_qualityreview_curve_quality_across_mastersget_outline_candidate_stateget_glyph_componentsget_glyph_details
- Prefer dedicated tools for the actual change:
update_glyph_node_positionsset_glyph_pathsadd_component_to_glyphadd_anchor_to_glyphapply_collinear_handles_smoothreview_tunni_geometryapply_tunni_balancereview_curve_qualityset_curve_review_overlaypreview_tunni_balance_candidatepreview_collinear_handles_candidatepreview_italic_first_pass_candidatepreview_compensated_tuning_candidateset_outline_candidate_overlayget_outline_candidate_statereview_start_node_alignmentapply_start_node_alignmentmaterialize_outline_candidate_sessionreview_outline_candidate_sessionaccept_outline_candidate_sessiondiscard_outline_candidate_sessionpreview_compensated_tuning_candidateonly when that workflow is explicitly requested
- Use candidate sessions for geometry-changing multi-master or multi-glyph batches. For start-node-only cyclic rotation, use the typed joint-alignment workflow below; never generate an
execute_code_with_contextrotation script. For Tunni work, pass explicit master/path/curve-end targets topreview_tunni_balance_candidate; keepgrid_policy="font"unless the user explicitly requests continuous coordinates. Directapply_tunni_balanceremains compatible for one explicit target only. - Enable native Edit View review with
set_curve_review_overlay(enabled=true, overlays=["curvature", "curve_events"])after curve proposals and before mutation when visual judgment matters. Tell the user to inspect View > Show Glyphs MCP Curvature in Glyphs. Teal is positive signed curvature and pink is negative; curvature magnitude is placed along the path right normal, so correctly wound counters draw into their white interior. Event markers show extrema, inflections, cusps, and continuity warnings. Native comb defaults are 51 samples per cubic, a0.010scale, and a0.12emnormal clamp at0.65alpha. Use the control result to confirm activation; the Reporter measures raw editable paths only. - Review the difference-only Candidate Reporter before mutation. It leaves the normal Glyphs outline unobscured, draws only warm-yellow source/candidate difference regions, and turns those regions coral red when stale. If no manual edit is needed, call
review_outline_candidate_session, dry-run acceptance, stop for approval, then confirm with the exact one-time token. If manual editing is wanted, dry-run and confirmmaterialize_outline_candidate_session, let the user edit the native layer, then re-review it. Never rely on LLM context to identify or delete candidate layers; use the persisted session metadata anddiscard_outline_candidate_session. - Only use
execute_code_with_contextwhen the edit spans several glyph-scoped steps and the dedicated tools would be less reliable or less clear. - When docs are needed, search first with
docs_search, then fetch only the relevant page withdocs_get. - After every mutation, compare all node fields listed above against the pre-mutation snapshot and report intended changes plus any unexpected difference. Use the node-position tool's complete verified read-back; otherwise re-read the affected glyph or layer. Treat an unexpected difference as a failed mutation even when the tool otherwise reports success.
Start-node alignment
Treat start-node placement across any number of compatible masters as one joint cyclic-alignment task.
- Process one corresponding closed-path set at a time. Never rotate open paths. Snapshot each path's coordinates, node fields, contour direction, path and shape order, open/closed state, and compatibility before planning.
- Establish one intended semantic landmark from an explicitly selected
on-curve node or an explicitly designated reference master with one
unambiguous on-curve landmark. Do not use
correctPathDirection()as the start-node oracle, and do not infer the landmark fromnodes[0]orfindStartNode()alone. - In every master, generate landmark candidates independently from geometric meaning: extremum or corner class, normalized position, neighboring segments, tangents, and curvature. Raw node indices and absolute coordinates are not matching evidence.
- Resolve those candidates jointly. Anchor the canonical cyclic node-type sequence to the intended landmark in the selected node or reference master. Consider only rotations that preserve that complete sequence across every compatible master, and choose one shared topology phase. Never accept independent choices that produce different phases.
- Require exactly one unambiguous matching candidate in every master. Stop for manual review if any master has no match, multiple matches, incompatible topology, or a conflicting semantic result.
- Call
review_start_node_alignmentwith the selected reference master, path, node, and every explicit target master. Stop on any reported missing, ambiguous, incompatible, or conflicting landmark. Retain the exactplanFingerprint. - Call
apply_start_node_alignmentwithdry_run=trueand that fingerprint. Stop if the live snapshot is stale. Present the exact joint rotation plan and obtain explicit approval before mutation, then repeat the same call withconfirm=true. Never substitute generated code for either typed call. - Re-read every affected master. Verify that coordinates, all node fields, contour direction, path and shape order, open paths, and compatibility remain unchanged, then report the resulting start in every master.
Curve geometry workflow
- Resolve and report the exact
font_index,glyph_name,master_id, and path-orderpath_index. Read the path first and preserve the reported Glyphs 4shapeIndexonly as additional context. - Call
review_tunni_geometryfor the explicit target. Omitsegment_end_node_indicesonly when intentionally scanning every cubic; otherwise pass genuine integer curve end-node indices. - Call
review_curve_qualitywith its defaultanalysis_mode="adaptive"for the same explicit target. Start withinclude_samples=false; request detailed samples only for a narrowed selection. Report signed and normalized curvature, parameterized events, arc length, turning angle, bounded self-intersections, G0/G1/G2 joins, warnings, and omitted components without converting them into an artistic verdict. Usesampled_v1only for a reproducible 1.7 comparison. For compatible multi-master work, callreview_curve_quality_across_mastersinstead of looping and guessing segment mappings. - Call
set_curve_review_overlay(enabled=true, overlays=["curvature", "curve_events"])when visual judgment matters, direct the user to View > Show Glyphs MCP Curvature, and explain the independent comb and event markers. The overlay remains available when the MCP server is stopped. - If balancing is requested, create a candidate with the approved integer indices. Report
idealProposed, authoritative grid-alignedproposed, post-grid imbalance, tangent drift, and anyno_safe_grid_candidateresult. JSON integer coordinates are expected on integral font grids. - Ask the user to inspect View > Show Glyphs MCP Candidate. Warm golden yellow marks only the symmetric difference; coral red plus
STALEmeans the source changed. Identical geometry draws nothing over the glyph. Curvature is reviewed separately through View > Show Glyphs MCP Curvature. Materialize only when the user wants normal Glyphs editing. - Call
review_outline_candidate_session; stop if it reports stale, topology, off-grid, or operation-external changes. Dry-runaccept_outline_candidate_sessionwith the issued token, then stop for explicit approval beforeconfirm=true. - Re-read the affected path after confirmation. Verify only intended fields changed, candidate cleanup and any required backup succeeded, rollback did not fail, and the font was not saved.
For the compatible direct single-target path, dry-run apply_tunni_balance
with the same reviewed indices. Stop for explicit approval before confirm=true;
never use that shortcut for multi-master or multi-glyph work.