Skip to main content
Glama
aka-kika

hig-mcp

by aka-kika

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: GDS 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, FastMCP). 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.

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 today, verified macOS type ramp included; values track the current HIG (last verified July 2026, post-WWDC26).

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: button | navigation_bar | tab_bar | list | 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.7/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable context beyond annotations: stable APIs are confident, Liquid-Glass-era modifiers are flagged verify:true, and names shift between betas requiring confirmation. This is a meaningful behavioral disclosure, not a repetition of 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 brief but important stability caveat, then Args and Returns sections. Every sentence earns its place, and the most critical information is front-loaded.

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-parameter, read-only, idempotent tool with an output schema, the description covers purpose, parameter usage, return key names, and verification caveats. Nothing essential is missing for an agent to select and invoke the tool correctly.

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?

Although the schema contains some description for the component field, the context signal indicates 0% schema description coverage at the top level. The tool description compensates by listing concrete accepted values (button, navigation_bar, tab_bar, list, sheet) and explicitly stating the omit-to-list-all behavior.

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: 'Map a HIG component to its SwiftUI API plus the token references to apply.' It clearly differentiates from sibling tools by targeting the component-to-SwiftUI mapping and mentions the verify flags tied to Liquid-Glass modifiers.

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 gives direct usage context: the accepted component values and the 'omit to list all' behavior. It also points to hig_fetch as a verification alternative for unstable APIs, but it does not explicitly contrast this tool with hig_get_tokens or 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

A4/5.0

Scored across 4 tools

Disambiguation4/5

The tools are largely distinct: tokens, Liquid Glass guardrails, SwiftUI mappings, and prose fetching each serve different needs. Minor overlap exists between `hig_get_tokens` categories like `materials`/`swiftui` and the more specialized `hig_check_liquid_glass`/`hig_swiftui`, but descriptions clarify the boundary.

Naming Consistency3/5

All tools share the `hig_` prefix and snake_case style, which provides a recognizable pattern. However, only two names follow a clear verb_noun structure (`get_tokens`, `check_liquid_glass`); `hig_swiftui` is noun-only and `hig_fetch` is verb-only, making the set slightly inconsistent.

Tool Count5/5

Four tools is a well-scoped size for a focused HIG reference server. Each tool covers a meaningful subdomain—tokens, Liquid Glass, SwiftUI mapping, and documentation retrieval—with no redundancy or bloat.

Completeness4/5

The server covers the main HIG query needs: design tokens, Liquid Glass budgets, SwiftUI component mappings, and prose lookup. The main gap is the limited component list for `hig_swiftui` and lack of a general HIG search tool, but `hig_fetch` can fill many documentation gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers