MCP.Market

Font Lab MCP server

by jmg698·io.github.jmg698/font-lab·v1.0.0·4 stars

A decision surface for typography: curate font directions on your real site, ship next/font code.

B80/100grade B
What users say
No reviews yet
Be the first
Safety scan
B80/100

full report

Adoption
Growing

4 stars38 downloads/wk

Reviews

Write one

Nobody has reviewed Font Lab yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Font Lab tools (26)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • font_lab_analyze

    Audit ANY web project's CURRENT typography before changing it: framework (Next/Vite/Astro/Remix/SvelteKit/TanStack/…), router, Tailwind version, the current display/body/mono fonts, how they're wired, and coverage warnings (e.g. a font that's declared but not actually rendered). The result's `capabilities` + `shipNote` name the right path for THIS stack — live panel on Next App Router, portable pr

  • font_lab_apply

    Ship the human's pick, idempotently and reversibly (backup-first). On Next.js App Router it writes next/font + Tailwind — Google faces via next/font/google, open-foundry faces via next/font/local with the woff2 self-hosted into the source tree (every family is verified buildable BEFORE any file is written; unverifiable families refuse with the reason). On ANY OTHER framework (TanStack/Vite/Astro/R

  • font_lab_check_fonts

    Check whether specific fonts can ship with Font Lab's preview==ship guarantee — use this to REACH BEYOND the built-in catalog. Pass family names (any of ~1,500 Google fonts like 'Hedvig Letters Serif', or a curated open-foundry face like 'Cabinet Grotesk' / 'General Sans'). Each returns a verdict: 'guaranteed' (full WYSIWYG), 'best-effort' (shippable, but the preview may not be byte-for-byte — sho

  • font_lab_compose_directions

    The PRIMARY way to build the menu: assemble tailored font directions for the user's brief (from font_lab_start's intake answers). Pass the user's stated direction as `brief` — if you omit it, the result is INFERRED rather than tailored, and you'll get a warning telling you to ask first. Reach PAST the overexposed defaults — give each direction a distinctive face and a one-line rationale tying it t

  • font_lab_curate

    FALLBACK menu — ~5 font directions (display+body+mono pairings) that move off the project's current fonts, no LLM. Seeded to THIS project (its name + palette + copy), so the spread differs from project to project instead of being the same five everywhere — but it is still a generic starting point, NOT tailored to the user's brief. Use it only when you have NO brief. When you DO have a brief (from

  • font_lab_finish

    THE FINISHING MOVE — run this when the human is done choosing (they clicked *done ✓* in the panel, said so in chat, or a pendingCleanup note rode a tool result). One call: strips the dev-panel scaffolding (uninit — applied fonts and copy edits are untouched), clears the panel's done signal, and returns the git-verified `commitPlan`: the SHIP pile (the human's copy edits + font apply, cross-checked

  • font_lab_healthcheck

    VERIFY THE SETUP BEFORE INVITING THE HUMAN — run this after font_lab_init (and again after any dev-server restart or CSP/config change), and act on it: a white page or a missing panel is an AGENT failure to catch here, not a human setup step. One read-only pass checks: VERSION ALIGNMENT (this process vs the project's installed font-lab vs the panel stamp vs the :7777 endpoint — the npx-cache skew

  • font_lab_init

    SET UP the live preview panel in the project, built from the directions YOU composed for the user's brief — self-hosts the bundles, installs the dev panel, mounts it (dev-only). NEXT.JS APP ROUTER ONLY (the panel mounts in layout.tsx): on any other framework (Vite/Astro/Remix/SvelteKit/TanStack/…) SKIP this and use font_lab_preview instead — the pick still ships via font_lab_apply. Pass the `direc

  • font_lab_list_catalog

    Browse Font Lab's curated catalog of ship-ready variable Google fonts (each verified for capsize/CLS-safe parity). Filter by role ('display'|'body'|'mono') or vibe tag (e.g. 'editorial','geometric','serif','technical'). Use this to compose your OWN font directions when the default curation isn't what the user asked for.

  • font_lab_live_instructions

    Get ready-to-run commands to launch the FULL live editor (flip / mix / compare directions in a real browser) — for when the headless screenshots aren't enough and the human wants to drive it themselves. Detects the project's dev command. In a LOCAL session these run in the agent's/human's terminal here; in a REMOTE/container session the result reframes them as commands for the human's OWN machine

  • font_lab_more_directions

    Add MORE options to the live panel — when the human wants to keep exploring beyond the current set. Compose additional tailored directions first (font_lab_compose_directions), then pass them here; they're admitted and APPENDED to the panel (existing options are kept), and the panel updates live. Use this whenever the user asks 'what else?' / 'show me more' — the menu is never capped. This ALSO ful

  • font_lab_prepare_preview

    Rebuild the LIVE preview bundle for the directions YOU composed for the user's brief (self-hosted woff2 + exact next/font fallbacks), so the HUMAN can flip through them and pick. Pass the `directions` from compose_directions. REFUSES without directions (don't rebuild the generic default menu without asking the user) — only pass allowFallback:true if they explicitly want the default. Use font_lab_i

  • font_lab_preview

    LAST-RESORT specimen sheet — a self-contained HTML file of GENERIC CARDS (one per direction, parity fonts embedded, opens offline), rendered on the project's palette and copy. These are NOT the human's pages, so this tool is LOCKED until the real-site path has actually been tried: it REFUSES unless a font_lab_screenshot_directions attempt failed on infrastructure (no Chromium could launch, the dev

  • font_lab_preview_screenshots

    Headless captures of the LAST-RESORT specimen sheet (font_lab_preview) — one render-checked PNG per generic card. Same lock as font_lab_preview: REFUSES until a real font_lab_screenshot_directions attempt has failed on infrastructure (recorded automatically), or force:true because the human explicitly wants the offline sheet — on every framework the real-site captures are the choosing surface, and

  • font_lab_read_pick

    One-shot read of the human's pick (.font-lab/selection.json); null until they've chosen. Prefer font_lab_wait_for_pick (it blocks and shows the human 'agent listening') — use read_pick for a quick non-blocking check.

  • font_lab_rewire_dead_roles

    Fix a role that font_lab_analyze flags as DEAD — declared but not actually rendered (common with Tailwind v4 @theme inline + a hand-written `font-family: var(--font-display)`, which resolves to nothing). Points those raw usages at the published leaf variable so the font renders, making the swap visible. Reversible via font_lab_undo. Offer this when analyze reports dead roles and the user wants tha

  • font_lab_screenshot_directions

    Screenshot the human's REAL RUNNING SITE in each curated direction — THE choosing moment on every framework (and the ONLY sanctioned preview surface off Next until it has actually failed: the generic font_lab_preview sheet stays locked behind a failed attempt here). On Next.js with the panel init'd it drives the panel; on every other stack (Vite / Astro / Remix / SvelteKit / TanStack / plain CSS)

  • font_lab_select

    Record the human's pick by direction id — the HEADLESS counterpart to clicking Pick in the panel. Use AFTER the human has chosen from the screenshots (you must still let the HUMAN make the call — never auto-select). The id resolves against the SAME set the human was shown: explicit `directions` if passed, else the composed set persisted by font_lab_compose_directions. Writes the same selection.jso

  • font_lab_start

    START HERE when a user wants to choose, change, or improve fonts — on ANY framework (Next.js, Vite, Astro, Remix, SvelteKit, TanStack, …). Returns the project analysis (including `capabilities` + `shipNote` — the preview/ship path for THIS stack, so a non-Next project is a different route, never a dead end), an `environment` block (local vs remote/container session — with the workflow consequences

  • font_lab_status

    One snapshot of the whole handoff: the current pick (if any), whether it's been shipped (applied), whether an agent is waiting, whether the pick endpoint is up, the environment (local vs remote/container — with the workflow consequences), and the latest backup. Call this when resuming a session, before apply, or whenever you need to know where the loop stands. Its `devServer` field health-checks t

  • font_lab_undo

    Revert Font Lab's last apply or rewire, restoring the edited files byte-for-byte from the backup.

  • font_lab_uninit

    Strip ONLY the dev-panel scaffolding (the layout.tsx mount, app/_fontlab/, public/fontlab/ preview fonts) — any applied font change and copy edits are left intact. PREFER font_lab_finish: it runs this AND returns the git-verified commit plan in one call, which is what the end of a session actually needs. Reach for bare uninit only when you want the scaffolding gone mid-session (e.g. the human want

  • font_lab_verify

    THE SHIP RECEIPT — after font_lab_apply (and any rewires or hand edits), re-render the RUNNING site headlessly and MEASURE whether the pick actually reached the pixels: per route, the % of heading/body/label text whose computed font now matches the picked families. Files written is not the same as fonts changed — never declare a font ship done without a converged receipt. If no dev server is reach

  • font_lab_wait

    BLOCK until the human picks a direction, asks for more options, OR clicks *done ✓* in the panel — whichever comes first. This is the unified event loop: one call covers every panel event, so you never miss one because you were waiting for the wrong kind. While blocked, the panel shows 'agent listening' and the human's clicks reach you instead of the copy-a-prompt off-ramp. Returns one of: { event:

  • font_lab_wait_for_pick

    BLOCK until the human picks in the live panel (or timeoutSec elapses). Prefer font_lab_wait (unified) — it covers both picks AND 'more options' requests in one call. This single-event variant is still useful when you ONLY want picks (e.g. after the panel is fully stocked and no more rounds are expected). Returns { picked: true, selection } or { picked: false, timedOut: true } — on timeout, call it

  • font_lab_wait_for_request

    BLOCK until the human clicks 'more options / none of these' in the live panel (or timeoutSec elapses). Prefer font_lab_wait (unified) — it covers both picks AND requests in one call. This single-event variant is still useful when you specifically want to wait ONLY for a request. Returns { requested: true, request } — where request.brief is the mini-brief (feeling / departure / brand / note) and re

Public scan report

scanner v0.1.9 · 2026-09-24 · same rubric, same numbers if you re-run it

1 medium
  • Code scan72 source files scanned20/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 57 days ago12/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10

Findings (1)

  • mediumeval / new Function usedexec.eval
    m6-test.mjs: …t click = (sel) => page.evaluate((s) => eval(s.host).querySelector(s.sel).click(), { …
Overall 80/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Font Lab compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
80/100
higher than 60% of 48,255 servers
Tools
26
the typical server has 7
Tools that change things
0%
typical: 0%. Fewer write tools means less an agent can break
GitHub stars
4
more than 82% of 28,688 servers
Downloads a week
38
more than 29% of 12,191 servers with a package

What its tools let an agent do: 26 read

Install Font Lab in Claude Code, Cursor or VS Code

Runs npx -y font-lab on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add font-lab -- npx -y font-lab
Add to Cursor

What the publisher says

From the Font Lab repository's README, as published. We do not edit it. Read it on GitHub

Font Lab

Pick the fonts. Fix the words. Your agent does the work.

Watch the full demo →

Font Lab is a real-time typography and text editor for AI-built sites. Your agent installs it, composes curated font directions Google fonts and distinctive open-foundry faces, and renders them live on your real site. You can toggle between the fonts and pick the one you like. The agent then finishes it up— next/font + Tailwind on Next.js, self-hosted @font-face everywhere else — reversibly.

Most AI-built sites ends up with generic fonts, like Inter or Geist, because the agent just uses defaults. Font Lab brings the human choose from options the agents curates based on some intake questions. It also allows you to edit text to make it sound like you wrote it.

copy-able prompt here: https://www.jack-mcgovern.com/fontlab

Install

Inside your project — use this prompt:

Install font-lab (npx font-lab install) and set it up for me — start whatever needs to run; I shouldn't have to touch the terminal. Ask me a couple of questions, compose font directions for this project, and show them on my real pages: the live panel if you're on my machine, screenshots if you're not. Before you tell me to look, make sure it actually worked — the panel really loaded, or the screenshots really came out. I make the call. Don't pick for me. Then write the code for the one I choose, and stick around — I'll have text fixes as I go.

Works with: Claude Code · Cursor · VS Code · Codex · Windsurf · Gemini CLI For: any framework with a CSS seam — Next.js gets the full live-panel experience; everything else ships through the same engine (see the matrix below).

Install auto-detects which agents you have and wires them all — skill, MCP server, config, each in the right format. On a stack with no seam at all, Font Lab refuses to half-apply and hands you the generated code with a clear reason instead.

Newly registered MCP tools load on the next session reload — but the agent never has to wait: every tool also runs as a one-shot CLI, npx font-lab run '' (same tool table, same JSON out), so the loop starts the moment install finishes. That's also the fallback whenever an MCP server drops mid-session.

Frameworks — what ships where

The taste engine, shippability gate, portable preview, and screenshots work on every stack. What varies is the preview surface and how the pick lands in your code — font-lab analyze prints the exact verdict for your project:

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Font Lab: common questions

Is Font Lab MCP server safe?
Mostly: it is graded B (80/100). Read the Font Lab safety report
How do I install Font Lab?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Font Lab need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is Font Lab maintained?
The last commit was 98 days ago (2026-07-29). The latest release is v1.0.0.
How does Font Lab compare with other MCP servers?
safety score 80/100 (higher than 60% of 48,255 servers); tools 26 (the typical server has 7); tools that change things 0% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.