MCP server for font discovery, analysis, and configuration. Provides expert font recommendations, website font detection, project vibe analysis, and font setup generation.
font-mcp has significant gaps in schema completeness, parameter documentation, and output structure definition. While tool names are reasonably action-oriented and descriptions exist, they lack the precision needed for reliable LLM execution. Most critically: (1) No documented output schemas for any tool, LLMs cannot predict what fields will be returned, breaking downstream tool composition and response parsing. (2) Parameter descriptions are present but generic; many lack constraints, formats, or validation rules. (3) The ListToolsRequestSchema response hardcodes simplified descriptions that differ from the Zod-defined tool definitions, creating inconsistency. (4) Error handling is minimal, most tools return generic text responses without structured error classification. (5) The 'analyze_website' tool lacks input validation (no URL format check in handler, though schema declares .url()). (6) 'setup_font_config' claims to download font files but provides no guidance on licensing, safety, or failure modes. Tool names are moderately good (consult_font_expert, analyze_project_and_recommend, analyze_website, setup_font_config all start with verbs), but descriptions are inconsistent between Zod definitions and ListTools responses.
Scans the project directory (package.json, config) to automatically detect the 'vibe' and recommend suitable fonts.
Analyze a live website URL to identify which fonts they are using ('Steal this look').
Get expert font recommendations based on a vibe, project type, or visual description. Uses live research from Reddit, Typewolf, and FontsInUse.
Generate CSS/Tailwind configuration and setup instructions for a specific font. It will automatically attempt to download the font files for testing purposes, assuming you have a valid license.
No documented output schemas for any tool. LLMs cannot predict response structure, breaking downstream composition and forcing parse-time inference.
Tool definitions are duplicated and inconsistent between Zod schema and ListToolsRequestSchema response. Zod definitions have detailed descriptions; ListTools response has abbreviated descriptions. This creates ambiguity for LLMs about the true interface.
Parameter constraints and formats not documented in descriptions. E.g., 'project_path' says 'Absolute path to the project root' but doesn't specify: must exist? must be readable? must be local or can be remote? 'vibe' examples in description ('luxury', 'tech start-up') create false impression these are the only valid inputs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Error handling is unstructured. All errors return plain-text responses without categorization (retryable, user-fixable, fatal) or actionable recovery guidance. E.g., 'Research failed' provides no hint for LLM to retry, check network, or refine query.
setup_font_config claims to download font files without documenting licensing, safety, or failure modes. No description of where files are stored, whether user has legal license, or how to handle download failures. Potential for unintended side effects.
Missing pagination support. All tools return unstructured text or unbounded arrays. 'analyze_website' returns a list of fonts but no limit, next_cursor, or pagination params. A site with 100+ font variants could blow context window.
Tool composition is fragile. 'analyze_website' returns fonts but doesn't clearly document format of font_name field needed by setup_font_config. If analyze_website returns 'Roboto Serif' but setup_font_config expects 'Roboto', no guidance for LLM to transform.
No idempotency declarations. setup_font_config downloads files, if called twice with same input, does it overwrite? Create duplicates? No guidance for LLM on retry safety.