Skip to main content
Glama

Upload a custom font (TTF/OTF) from a URL

upload_font

Downloads a font file from a public URL and registers it under the font-family, weight and style you give; code templates then use exactly that in CSS. Only for fonts that are not on Google Fonts (those load by name). One file per weight and style. TTF or OTF up to 5 MB, static only: WOFF/WOFF2 and variable fonts are refused (the renderer cannot read them; download the static instance, e.g. Google Fonts "static" folder). Google Drive and Dropbox share links work. Shares the upload limits with upload_image.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "url": "<url>",
      "family": "<family>"
    },
    "name": "upload_font"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlYesPublic http(s) URL of the .ttf/.otf file, or a Google Drive / Dropbox share link.
styleNonormal
familyYesThe font-family name CSS will use, e.g. "Brand Sans".
weightNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the annotations, the description discloses format restrictions (TTF/OTF only), a 5 MB cap, refusal of WOFF/WOFF2 and variable fonts with the reason (renderer limitation), share-link acceptance, and a shared quota with upload_image. What it doesn't cover is the outcome of re-uploading the same family/weight/style, though idempotentHint=false already hints at that.

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?

A single dense paragraph that front-loads the action and the output, then packs constraints into short parenthetical clauses. Every sentence carries actionable information; nothing is redundant with the title.

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 4-parameter ingestion tool with no output schema this covers formats, size, failure modes, and quota. The one missing piece is the return value or side effect an agent can verify (e.g., whether it lands in list_uploads or returns a font identifier).

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 documents only url and family (50% coverage), and the description compensates by tying family, weight and style to the CSS the code templates will emit, plus the one-file-per-combination constraint. It doesn't explain that weight is a numeric 100-900 value, leaving that to the schema's minimum/maximum.

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 ('Downloads a font file from a public URL and registers it under the font-family, weight and style you give') and explicitly separates itself from the Google Fonts path used by other template tools. An agent can tell upload_font apart from upload_image and create_code_template without opening a schema.

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 when-to-use ('Only for fonts that are not on Google Fonts'), the alternative for the excluded case ('those load by name'), and a correction path for rejected variable fonts ('download the static instance'). It also states the one-file-per-weight-and-style rule, which prevents a common misuse.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources