Skip to main content
Glama

hig-mcp — Apple HIG design tokens for AI coding agents

hig-mcp — Apple Human Interface Guidelines as structured MCP tokens

An MCP server that gives Claude Code, Cursor, and any MCP client the Apple Human Interface Guidelines as structured data — real system color values, the type ramp, Liquid Glass constraints, and SwiftUI mappings — instead of prose to misread or stale hex to hallucinate.

The problem every Apple dev (and their agent) has right now

At WWDC25 Apple didn't just ship Liquid Glass — it quietly refreshed the system color palette (HIG changelog, June 9, 2025). systemBlue is not #007AFF anymore. It's #0088FF.

Which means:

  • Every LLM's training data is wrong. Ask an agent for iOS colors and it confidently hardcodes the pre-2025 palette.

  • The HIG is prose, not data. Apple publishes guidelines as web pages; an agent burns thousands of tokens fetching one, then still guesses the numbers.

  • Liquid Glass has rules nobody wrote down in one place — blur budgets, compositing layer caps, contrast measured after blur, the mandatory Reduce Transparency fallback. Agents violate all of them by default.

You end up reviewing generated SwiftUI that looks plausible and is subtly off-spec everywhere.

Related MCP server: web-stylebook-mcp

How hig-mcp solves it

Curated, verified token files live inside the server — offline, deterministic, near-zero tokens — and prose is fetched live from sosumi.ai so guidance is never stale. Ask for color and you get the current post-WWDC25 spec table, not a 2023 memory.

Tool

What it returns

Network

hig_get_tokens

Design tokens by category: color, typography, materials, layout, swiftui, sf_symbols

no

hig_check_liquid_glass

Liquid Glass guardrails + a concrete checklist for your context and platform

no

hig_swiftui

HIG component → the right SwiftUI API + which tokens to apply

no

hig_fetch

Current HIG page as clean Markdown (via sosumi.ai)

yes

How it works

Four tools over stdio (Python, the official mcp SDK 2.x). The structured half is plain JSON you own and extend (src/hig_mcp/data/); the prose half is delegated to sosumi.ai's DocC-to-Markdown rendering rather than rebuilt. Every value is provenance-tagged:

  • apple-system / apple-hig — Apple-published facts (system colors, type ramp, 44pt hit targets).

  • wcag-aa — the 4.5:1 contrast rule.

  • figma-effect / community-bestpractice — useful numbers Apple never published, flagged so you know to confirm.

  • verify: true — beta-era API names that shift; confirm via hig_fetch or Xcode before shipping.

Each data file also carries a checked date in its _meta: the day its values were last compared with Apple's live pages.

Honest data beats confident data.

Quick start

pipx install hig-mcp
claude mcp add hig -- hig-mcp

Any MCP client, config form:

{ "mcpServers": { "hig": { "command": "hig-mcp" } } }

hig_fetch targets https://sosumi.ai by default; override with HIG_SOSUMI_BASE.

Built-in call counter

Every tool call appends one JSONL line — timestamp, tool, calling client (from the MCP handshake's clientInfo) — to $XDG_STATE_HOME/hig-mcp/calls.jsonl (override with HIG_MCP_CALL_LOG). So you always know which of your agents actually uses it:

jq -r .client ~/.local/state/hig-mcp/calls.jsonl | sort | uniq -c

FAQ

Why not just fetch developer.apple.com? Prose costs tokens and still doesn't contain machine-usable values. Tokens here are instant, offline, and current.

Does it replace sosumi.ai / apple-docs-mcp? No — it deliberately delegates prose to them and owns only the structured layer they don't serve.

What platforms? iOS / iPadOS first, with the macOS type ramp and per-platform control sizes (iOS, macOS, tvOS, visionOS, watchOS). Values were last checked on 2026-10-17 against the live HIG and Apple's SwiftUI docs for OS 26 (shipping) and the OS 27 betas.

Limits

Plain words on what this server is and is not:

  • Curated project data, not an Apple SDK. The values are copied by hand from Apple's public HIG pages and docs, then checked. Apple does not publish them as data, and this project is not Apple's. If a value matters, confirm it in Xcode or the Apple Design Resources.

  • Beta-era names are checked as of 2026-10-17. Liquid Glass and other OS 26 APIs were checked against Apple's docs on that date; anything marked 27.0+ comes from the OS 27 betas and can still be renamed before release. Those entries carry verify: true.

  • Some numbers are not Apple's. The Liquid Glass blur and layer budgets, the spacing grid and the corner radii are community or Figma conventions. Each one says so in its src tag.

  • Prose needs the network. hig_fetch downloads pages live from sosumi.ai (or your HIG_SOSUMI_BASE). Offline, or if sosumi.ai is down, the three token tools still work and hig_fetch returns an error.

  • It does not review your app. It hands an agent the rules and the values; it does not look at your code or screenshots.

A good pairing: a full Apple docs server for API reference (for example apple-docs-mcp or sosumi.ai's own MCP), plus a HIG review tool that checks SwiftUI code and screenshots against the guidelines (for example hig-review).

Development

uv run --with pytest pytest -q

Changes per release are in CHANGELOG.md.

Apple, the Apple Human Interface Guidelines, SF Symbols, SwiftUI, and Liquid Glass are trademarks of Apple Inc. This project is not affiliated with or endorsed by Apple. No HIG prose is redistributed — hig_fetch retrieves pages live at runtime, and the bundled data files contain factual design values with original commentary. The MIT license covers this repository's code and data files only.


Keywords: Apple HIG MCP server · Human Interface Guidelines · design tokens · Liquid Glass · SwiftUI · iOS 26 · macOS Tahoe · Model Context Protocol · Claude Code · Cursor · AI coding agents

Available Tools

4 tools
hig_check_liquid_glassA
Read-onlyIdempotent

Return the Liquid Glass guardrails for a given usage context.

Surfaces the budgets agents routinely get wrong — blur radius cap, max compositing layers, contrast-after-blur, depth/frost ranges, and the required reduced-transparency fallback — with provenance so you know which numbers are Apple's vs. community/Figma-derived.

Args: params.context: where the material is applied (free text) params.platform: 'iphone' or 'ipad_mac' (selects blur budget)

Returns: dict: applicable rules, the platform blur cap, and a checklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the risk profile is covered. The description adds useful behavioral context beyond annotations: the result is provenance-aware ('Apple's vs. community/Figma-derived') and includes a checklist. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a one-sentence purpose, then a dense but non-redundant list of covered guardrails, and clear Args/Returns sections. Every sentence earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-purpose lookup tool, the description covers inputs, selection semantics, and return contents. An example input/output would be a small enhancement, but the output schema and annotations already provide enough structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage at top level, the description compensates by explaining both params.context ('where the material is applied') and params.platform ('selects blur budget') with valid values. It adds selection semantics that are not obvious from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Return') and resource ('Liquid Glass guardrails'), then names the exact constraint categories it covers. It is clearly distinct from sibling tools like hig_get_tokens, hig_swiftui, and hig_fetch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when checking Liquid Glass design budgets and mentions 'agents routinely get wrong', but it never explicitly says when to choose this tool over alternatives or when not to use it. Sibling differentiation is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hig_fetchA
Read-onlyIdempotent

Fetch current HIG prose as clean Markdown via sosumi.ai.

Thin convenience wrapper so this one server covers both tokens and prose. sosumi.ai renders Apple's DocC pages to AI-friendly Markdown. Returned text is for grounding only: summarize and cite the canonical Apple URL, do not reproduce it wholesale. Override the backend with HIG_SOSUMI_BASE.

Args: params.path: HIG slug, /design/... path, or full developer.apple.com URL.

Returns: dict: markdown content, the sosumi source, and the canonical Apple URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and nondestructive behavior; the description adds meaningful behavioral context beyond that: the returned text is for grounding only, the backend is overridable via HIG_SOSUMI_BASE, and the return value includes source and canonical URL details. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a clear purpose sentence, a short context sentence, a licensing restriction, an environment override, then Args and Returns sections. Every sentence earns its place, and the structure is scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-read-only-parameter tool with annotations covering safety and a schema covering the input, the description supplies everything else needed: return shape, source behavior, and licensing constraints. There is no significant invocation-relevant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents path with examples such as 'materials' and '/design/human-interface-guidelines/color'. The description's Args line restates the same meaning ('HIG slug, /design/... path, or full developer.apple.com URL') with little additional semantic value, so the baseline schema coverage is doing the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Fetch current HIG prose as clean Markdown via sosumi.ai.' It also distinguishes the prose-fetching role from token retrieval with 'so this one server covers both tokens and prose', making sibling differentiation clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for HIG prose, not tokens, and gives explicit handling guidance: 'summarize and cite the canonical Apple URL, do not reproduce it wholesale.' It does not explicitly name sibling alternatives as exclusions, but the 'tokens and prose' contrast gives practical selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hig_get_tokensA
Read-onlyIdempotent

Return curated Apple HIG design tokens for a category.

Tokens carry provenance: 'src' tags each value (apple-system, apple-hig, figma-effect, community-bestpractice, convention, wcag-aa) and 'verify':true flags values to confirm against the current OS. Semantic colors are dynamic — reference by name, never hardcode hex.

Args: params.category: one of color | typography | materials | layout | swiftui | sf_symbols | all

Returns: dict: the requested token category (or all categories), as structured data.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and idempotentHint annotations, the description discloses useful behavioral details: tokens carry provenance via 'src' tags, 'verify':true flags mark values needing OS confirmation, and semantic colors are dynamic and should be referenced by name rather than hardcoded as hex. This adds meaningful context for how the returned data should be interpreted and used, without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a clear one-line purpose, a short behavioral/provenance paragraph, and a concise Args/Returns block. Every sentence contributes substantive information, and the most important statement is front-loaded. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent getter with a single enum parameter and an output schema, the description is nearly complete. It covers the return type, provenance behavior, dynamic color caution, and category options. It could be slightly more explicit about what 'all' returns, but the presence of an output schema and annotation hints makes this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is already well-defined by the schema's enum and description, and the tool description repeats the allowed values without adding deeper meaning about what each category encompasses. It does not explain nuances like what 'typography' or 'materials' includes, but the param is self-explanatory and the schema provides enough information for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: "Return curated Apple HIG design tokens for a category." This clearly states what the tool does and the category parameter makes the scope explicit. It does not explicitly contrast itself with sibling tools, but the resource (design tokens) is distinct enough from hig_check_liquid_glass, hig_swiftui, and hig_fetch to avoid confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to choose this tool over alternatives, nor does it mention exclusions or prerequisites. It only documents the category argument and return value. Usage context is implied by the tool name and description, but there is no explicit routing or comparison to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hig_swiftuiA
Read-onlyIdempotent

Map a HIG component to its SwiftUI API plus the token references to apply.

Stable APIs are confident; Liquid-Glass-era modifiers are flagged verify:true because names shift between betas — confirm via hig_fetch or Xcode before shipping.

Args: params.component: one of the 14 mapped components, e.g. button, tab_bar, sheet (omit to list all)

Returns: dict: mapping with swiftui API, token refs, hig_path, and verify flags.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, non-open-world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: unstable Liquid-Glass-era modifiers are flagged verify:true because names shift between betas. This discloses uncertainty semantics not present in structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then uses clean Args/Returns structure. The Liquid-Glass caveat earns its place as it changes how the agent treats output. Slightly verbose but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the Returns line is surplus but harmless, and annotations cover the safety profile. The only real gap is the full set of 14 component names, which would remove trial-and-error for the single parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is reported at 0%, so the description must carry the parameter meaning, and it largely does: names the parameter, gives example values (button, tab_bar, sheet), states the count (14), and explains that omitting it lists all. It stops short of enumerating all 14 valid values, leaving some guesswork.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: map a HIG component to its SwiftUI API and token references. Clear and specific, but differentiation from the overlapping sibling hig_get_tokens (also token-oriented) is only implicit — the description names hig_fetch as a verification path, not as the distinct alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use guidance: verify:true entries should be confirmed via hig_fetch or Xcode before shipping, and omitting component lists all. Names an alternative tool and the condition selecting it, though it does not cover exclusions against hig_get_tokens/hig_check_liquid_glass.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.2.0
    • First observedhig_check_liquid_glass
    • First observedhig_fetch
    • First observedhig_get_tokens
    • First observedhig_swiftui

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation4/5

Each tool has a distinct focal point: prose fetching, SwiftUI component-to-API mapping, Liquid Glass material guardrails, and design tokens. However, hig_fetch and hig_get_tokens both retrieve HIG reference data, and hig_swiftui returns token refs too, so an agent could occasionally conflate them when a request spans prose and tokens.

Naming Consistency4/5

All tools share a clean 'hig_' prefix, and three use verb_noun style (fetch, check_liquid_glass, get_tokens). hig_swiftui deviates as a noun-only label, and fetch/get are near-synonyms, but overall the pattern is predictable and readable.

Tool Count4/5

Four tools map cleanly onto four distinct concerns (prose, SwiftUI mapping, materials, tokens), so each earns its place with no redundancy. It sits slightly on the lean side for a design-system reference server but is well-scoped for its purpose.

Completeness3/5

The surface covers prose, tokens, SwiftUI, and Liquid Glass guidance, which is solid core coverage. But it lacks UIKit/AppKit component mappings, only 14 components are mapped, and there is no search or version-scoped lookup, leaving notable gaps for broader design-guideline queries.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides deterministic, read-only design knowledge for AI coding agents to help them choose visual directions, plan UI states, and compose design tokens, all without network access.
    6
    30 npm
    4
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides comprehensive UI design assistance tools for LLMs, generating color palettes, typography, spacing systems, shadows, design tokens, and more via the MCP protocol.
    28
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to search, retrieve, and navigate Apple's Human Interface Guidelines as live Markdown content across all Apple platforms.
    4
    -