Skip to main content
Glama
nightious

fontsource-mcp

by nightious

Server Quality Checklist

58%
Profile completionA complete profile improves this server's visibility in search results.
  • Latest release: v0.1.1

  • Disambiguation5/5

    Each tool targets a clearly distinct part of the workflow: search_fonts finds fonts, get_font provides metadata, get_font_css generates CSS, download_font downloads files, index_fonts provides catalog-level facets/dumps, and get_axis_registry covers variable-axis definitions. Even the catalog-level pair search_fonts/index_fonts is separated by search results versus facet counts and full dumps.

    Naming Consistency5/5

    All tools follow a consistent verb_object snake_case convention: search_fonts, get_font, get_font_css, download_font, index_fonts, get_axis_registry. The pluralization varies only where semantically appropriate, and there is no mixing of styles or vague generic verbs.

    Tool Count5/5

    Six tools is well-scoped for a font catalog server: search, metadata, CSS generation, file download, catalog indexing, and axis registry each cover a distinct need. No tool feels redundant or missing from the core surface.

    Completeness5/5

    The tool set covers the full read-only font catalog workflow: discovering fonts, inspecting available subsets/weights/styles, generating embeddable CSS, downloading files, exporting the full catalog, and understanding variable-font axes. There are no obvious dead ends; get_font informs get_font_css and download_font, and index_fonts handles bulk catalog access.

  • Average 4.5/5 across 6 of 6 tools scored.

    See the Tool Scores section below for per-tool breakdowns.

    • No community issues in the last 6 months
    • 2 commits in the last 12 weeks
    • Last stable release on
    • No critical vulnerability alerts
    • No high-severity vulnerability alerts
    • No code scanning findings
    • CI is passing
  • Add a LICENSE file by following GitHub's guide. Once GitHub recognizes the license, the system will automatically detect it within a few hours.

    If the license does not appear after some time, you can manually trigger a new scan using the MCP server admin interface.

    MCP servers without a LICENSE cannot be installed.

  • This repository includes a README.md file.

  • No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.

    Tip: use the "Try in Browser" feature on the server page to seed initial usage.

  • Add a glama.json file to provide metadata about your server.

  • If you are the author, simply .

    If the server belongs to an organization, first add glama.json to the root of your repository:

    {
      "$schema": "https://glama.ai/mcp/schemas/server.json",
      "maintainers": [
        "your-github-username"
      ]
    }

    Then . Browse examples.

  • Add related servers to improve discoverability.

How to sync the server with GitHub?

Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.

To manually sync the server, click the "Sync Server" button in the MCP server admin interface.

How is the quality score calculated?

The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).

Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.

Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).

Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.

Tool Scores

  • Behavior4/5

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

    Annotations already declare readOnlyHint=true, and the description adds behavior beyond that: it reveals the return contents and the optional-filter semantics of the tag parameter. 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?

    Two sentences with no fluff: the resource and its contents are front-loaded, and the parameter behavior is stated in one imperative sentence. 'And the rest' is a minor fuzziness but does not waste words.

    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 simple one-optional-parameter lookup tool with a readOnly annotation, the description covers the resource contents and filtering behavior. It does not explicitly state what happens when tag is omitted, but the phrasing implies a full registry return, which is sufficient.

    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, the description carries the param burden. It explains that 'tag' selects a single entry and gives concrete valid examples (wght, wdth, opsz, slnt, ital, GRAD), adding real meaning over the bare 'string' schema.

    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?

    States a specific resource (variable-font axis registry) and its contents (name, description, min, max, default per axis tag). The example tags distinguish it clearly from sibling font-search/font-download tools.

    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?

    Usage is implied: call this when you need axis-tag metadata, and pass a tag to narrow to one entry. But it never explicitly contrasts with siblings like get_font or search_fonts, nor states when not to use it.

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

  • Behavior5/5

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

    Beyond the sparse annotations, the description reveals important behavior: it writes to disk, explains default destination resolution with the current resolved path, details how variable mode ignores weights/format, and notes that zip mode saves without extracting. It also states the return value. This is rich, honest behavioral disclosure.

    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 yet information-dense, organized around destination first then the three modes. Every sentence adds functional value with 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 complex tool with 9 parameters and no output schema, the description covers the destination, default path, mode-specific behavior, and return value. It could additionally clarify overwrite behavior or explicitly route to siblings, but the essential invocation context is well covered.

    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 coverage is high at 89%, so the baseline is 3. The description adds meaning beyond the schema by explaining the dest default resolution, variable/zip parameter interactions, and static mode filtering behavior, which improves parameter understanding.

    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 clearly states the core action — 'Download font files to disk under <dest>/<id>/' — and specifies the exact output destination. This distinguishes it from siblings like get_font and get_font_css, which retrieve content rather than write files to disk.

    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 gives strong guidance on the three execution modes (static, variable, zip) and how they affect parameters, which is useful for invocation. However, it never explicitly says when to prefer download_font over sibling tools, so the selection guidance is implied rather than stated.

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

  • Behavior5/5

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

    Beyond the readOnlyHint annotation, the description discloses meaningful behavior: defaults to weight 400 normal, each extra weight/style adding about 1.5KB of CSS, and the variable package changing the font-family to '<Family> Variable'. The 'absolute URLs, safe to inline' note also clarifies the returned CSS is directly usable. Nothing contradicts the readOnly annotation.

    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?

    Four short sentences front-load the artifact list, then add defaults, size impact, and variable behavior in increasing order of specificity. Every sentence earns its place, with no filler or repetition of schema details.

    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?

    There is no output schema, so the description must communicate return content; the artifact enumeration and 'safe to inline' cover that well. Defaults and the variable-package caveat address the most consequential choices. It is slightly vague about the container format of the returned snippets, but the schema fully documents the parameters.

    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 coverage is 100%, so the baseline is 3, but the description adds real value by explaining the weight/style default and the size tradeoff for extra combinations. It also clarifies what variable:true does to the font-family value. It does not discuss subsets or variableFile, but those are already documented in the schema.

    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 'Font embedding snippets' and enumerates exact artifacts: CDN link tags, @import lines, npm install/import lines, the font-family rule, and @font-face CSS. This makes the tool's resource and output unmistakable and clearly distinguishes it from siblings like search_fonts, get_font, and download_font.

    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 'embedding snippets' framing implies the use case, but the description never names sibling tools or states when to prefer get_font_css over get_font or download_font. There are no explicit exclusions or when-to-use/when-not-to-use instructions, so usage guidance is only implied.

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

  • Behavior4/5

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

    The description goes beyond the readOnlyHint annotation by disclosing the full scope of returned metadata, including variable axes, unicode ranges, license, package names, and CDN URL templates. It is clearly a read operation and no contradictory behavior is stated.

    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?

    Two sentences with no filler: the first lists the return contents, the second gives essential usage sequencing. The most actionable guidance is front-loaded and every clause earns its place.

    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 tool, the description fully covers what the agent needs: how to get the id, what metadata will be returned, and when to call this tool relative to siblings. No output schema is needed since the return contents are enumerated directly.

    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?

    Schema coverage is 100% and the id parameter description is already rich, with examples, a source instruction, and a warning that it is not the display name. The tool description itself adds no parameter-specific meaning, so the baseline of 3 applies.

    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?

    States a specific verb and resource: retrieving metadata for one font, and enumerates the exact fields returned. It clearly distinguishes itself from sibling tools by positioning get_font as the metadata lookup before get_font_css or download_font.

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

    Usage Guidelines5/5

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

    Explicitly tells the agent when to call it: before get_font_css or download_font, to learn which subsets and weights exist. This provides concrete sequencing guidance and names the downstream tools it supports.

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

  • Behavior5/5

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

    Beyond the readOnlyHint annotation, the description discloses non-obvious behavior: fuzzy query matching order (exact, prefix, substring, all words), AND-combined filters, compact rows, id-bearing output, and browse-without-query semantics. This gives an agent a realistic model of how the tool behaves before invoking it.

    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?

    Three sentences, each earning its place. The description is front-loaded with the core purpose, then gives query semantics, filter behavior, output note, and the no-query browsing alternative. There is no redundancy or 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 tool with 10 optional parameters and no output schema, the description is fairly complete: it explains query behavior, filtering, output purpose, and browsing mode. A small gap is that it does not describe the shape of the returned rows beyond 'compact' and carrying the id, and offset is left undocumented in the schema as well.

    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 high (80%), so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining how the query parameter is matched and that filters combine with AND logic. It does not explain the offset or category parameters further, but the schema already documents most parameters clearly.

    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 and resource: 'Search the Fontsource catalog of 2000+ open-source fonts.' It clearly differentiates this discovery tool from the sibling get/download/index tools by mentioning that its rows 'carry the id every other tool needs,' positioning it as the lookup step in the workflow.

    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 clear usage context: it is the tool to find fonts and their ids, which are then needed by other tools. It also explains a distinct browsing mode: 'Filters without a query browse a category.' However, it does not explicitly name when not to use it or directly contrast it with get_font or index_fonts by name.

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

  • Behavior4/5

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

    Annotations are minimal (readOnlyHint=false, destructiveHint=false), so the description carries the disclosure burden. It clearly reveals the outFile side effect, the exact catalog contents, and that omitting outFile yields facets only. It does not address overwrite behavior or any access/rate considerations, but those are minor for this tool.

    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?

    Two tight sentences with no filler. The facet behavior is front-loaded, and the outFile behavior and rationale follow immediately without redundancy.

    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?

    Complete for a tool with one optional parameter and no output schema. It explains the facet output, the optional file output, the contained fields, and the relationship to search_fonts. An agent has enough information to call it 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?

    The schema already fully documents outFile, so the baseline is 3. The description adds value beyond the schema by specifying the catalog's field list and the local grep/jq use case, making the parameter's purpose and benefit concrete.

    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?

    States a specific action ('Catalog facets') and a concrete resource (the font catalog), enumerating the facet dimensions (category, subset, license, type, variable/static). It also explicitly contrasts itself with search_fonts, so an agent can distinguish the two tools.

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

    Usage Guidelines5/5

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

    Gives explicit usage guidance: use this tool to get facet counts, and use outFile when you want the full 2000+ catalog locally for grep/jq. It also names the alternative (search_fonts) and explains why you would avoid paginating it.

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

GitHub Badge

Glama performs regular codebase and documentation scans to:

  • Confirm that the MCP server is working as expected.
  • Confirm that there are no obvious security issues.
  • Evaluate tool definition quality.

Our badge communicates server capabilities, safety, and installation instructions.

Card Badge

fontsource-mcp MCP server

Copy to your README.md:

Score Badge

fontsource-mcp MCP server

Copy to your README.md:

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nightious/fontsource-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server