Jinero
AI-agent design tools: fonts, font recognition, palettes, color naming, contrast, code, SVG, CSS.
Should I use this
Quality & Safety
Findings (1)
- LOWin get_font_download_url
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"jinero": {
"url": "https://jinero.online/mcp"
}
}
}Remote endpoints
https://jinero.online/mcpstreamable-httpWhat it can do
Tool inventory
Tools (15)
π’search_fonts(name, category, langs, style, variable, ...)
Search the free font catalog by name, category, style tags, language coverage, variable/monospace flags and style count. Returns a paginated list of families.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Fuzzy name match.",
"type": "string"
},
"category": {
"description": "Comma-separated categories, e.g. 'serif,sans'.",
"type": "string"
},
"langs": {
"description": "Comma-separated language codes, e.g. 'latin,cyrillic' β ALL must be supported.",
"type": "string"
},
"style": {
"description": "Comma-separated style tags, e.g. 'handwriting,condensed' β ALL must match. One of: handwriting, script, display, slab, rounded, condensed, expanded, stencil, pixel, blackletter, outline, retro.",
"type": "string"
},
"variable": {
"description": "Only variable fonts.",
"type": "boolean"
},
"monospace": {
"description": "Only monospace fonts.",
"type": "boolean"
},
"styles_min": {
"description": "Minimum number of styles.",
"type": "integer"
},
"styles_max": {
"description": "Maximum number of styles.",
"type": "integer"
},
"order": {
"description": "Sort field, default 'likes'.",
"enum": [
"likes",
"downloads",
"views",
"name",
"created_at"
],
"type": "string"
},
"sort": {
"description": "Sort direction.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"per_page": {
"description": "Results per page (default 24).",
"minimum": 1,
"maximum": 100,
"type": "integer"
},
"page": {
"description": "Page number.",
"minimum": 1,
"type": "integer"
}
}
}π’recognize_font(image_url, image_base64, top_k)
Identify which font is used in an image. Powered by our OWN CNN embedding model, trained on the jinero font catalog β it matches fonts by visual shape/style, so it needs NO OCR and NO text (works for Latin and Cyrillic). Send a tight crop of one line of text as either image_url (public URL) or image_base64 (base64/data-URI, e.g. a local screenshot). The image is processed in memory and deleted immediately β never stored. Returns the most visually similar font families with scores. Typically 0.3-1.7 s (an OCR-assisted rerank of top candidates engages when retrieval is uncertain). Rate limit: 5 calls/min per IP (model inference is compute-heavy).
Input Schema
{
"type": "object",
"properties": {
"image_url": {
"description": "Public URL of an image β a tight crop of one line of text. Provide either this or image_base64. Recognition is by visual shape (no OCR/text needed); Latin & Cyrillic supported.",
"type": "string"
},
"image_base64": {
"description": "Base64-encoded image (raw base64 or a data:image/...;base64 URI), max 8 MB decoded β use this to send a local file/screenshot without hosting it. Provide either this or image_url.",
"type": "string"
},
"top_k": {
"description": "Number of font matches to return (3β20, default 8).",
"minimum": 3,
"maximum": 20,
"type": "integer"
}
}
}π’get_font(slug)
Get full metadata for one font family by slug: styles, weights, axes, license, subsets and download/CSS URLs.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"description": "Family slug, e.g. 'inter', 'playfair-display'.",
"type": "string"
}
},
"required": [
"slug"
]
}π’get_font_files(slug)
List every font file (weight/italic/format + direct woff2/ttf URL) for a family β handy for building custom @font-face rules.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"description": "Family slug, e.g. 'inter'.",
"type": "string"
}
},
"required": [
"slug"
]
}π’get_fonts_css(family, display)
Generate ready-to-use @font-face CSS for a family spec (Google-Fonts-compatible), e.g. "inter:wght@400,700" or a variable range "inter:[email protected]". Returns CSS text.
Input Schema
{
"type": "object",
"properties": {
"family": {
"description": "Family spec, e.g. \"inter:wght@400,700\" or \"inter:[email protected]\".",
"type": "string"
},
"display": {
"description": "font-display value (default swap).",
"enum": [
"swap",
"auto",
"block",
"fallback",
"optional"
],
"type": "string"
}
},
"required": [
"family"
]
}π’get_font_download_url(slug)
Return the direct ZIP download URL for a font family (all styles + a ready fonts.css). Does NOT download β hand the URL to the user or fetch it separately.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"description": "Family slug, e.g. 'inter'.",
"type": "string"
}
},
"required": [
"slug"
]
}π’check_contrast(fg, bg)
Check the WCAG contrast ratio between a foreground and background color, with AA/AAA pass/fail for normal and large text.
Input Schema
{
"type": "object",
"properties": {
"fg": {
"description": "Foreground color (hex, rgb(), or hsl()).",
"type": "string"
},
"bg": {
"description": "Background color (hex, rgb(), or hsl()).",
"type": "string"
}
},
"required": [
"fg",
"bg"
]
}π’get_color_shades(hex, step, limit)
Generate tints and shades for a base color (lighter/darker steps) with hex values.
Input Schema
{
"type": "object",
"properties": {
"hex": {
"description": "Base color in hex, rgb(), or hsl().",
"type": "string"
},
"step": {
"description": "Step percentage (default 10).",
"enum": [
"5",
"10",
"20",
"25"
],
"type": "string"
},
"limit": {
"description": "Cap on tints/shades (default fills to ~100%).",
"minimum": 1,
"maximum": 20,
"type": "integer"
}
},
"required": [
"hex"
]
}π’name_color(hex)
Get the closest human-readable name for one or more colors. Pass a single hex or several comma-separated (e.g. "#3b82f6,#000,#ff7f50"); returns each input with its nearest color name, the reference hex, an exact-match flag and the perceptual distance.
Input Schema
{
"type": "object",
"properties": {
"hex": {
"description": "A hex color, or several comma-separated (e.g. \"#3b82f6,#000,#ff7f50\"). Up to 100 at once.",
"type": "string"
}
},
"required": [
"hex"
]
}π’extract_colors(image_url, image_base64, count, mode)
Extract a dominant-color palette from an image. Send either a public image_url or image_base64 (base64/data-URI, e.g. a local screenshot). The image is processed in memory and never stored. Each color comes back with its hex, rgb, hsl, share of the image, and the closest human color name β a named palette in one call. Rate limit: 10 calls/min per IP.
Input Schema
{
"type": "object",
"properties": {
"image_url": {
"description": "Public URL of the image to pull the palette from. Provide either this or image_base64.",
"type": "string"
},
"image_base64": {
"description": "Base64-encoded image (raw base64 or a data:image/...;base64 URI), max 10 MB decoded β use this to send a local file/screenshot without hosting it. Provide either this or image_url.",
"type": "string"
},
"count": {
"description": "How many colors to return (2β16, default 8).",
"type": "integer"
},
"mode": {
"description": "Palette mode: \"balanced\" (default), \"vibrant\", or \"muted\".",
"type": "string"
}
}
}π’search_palettes(name, tone, temperature, mood, harmony, ...)
Search the color-palette catalog by name, tone, temperature, mood, harmony, exact color count and tags. Returns a paginated list.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Fuzzy name match.",
"type": "string"
},
"tone": {
"description": "Overall tone.",
"enum": [
"light",
"dark",
"mixed"
],
"type": "string"
},
"temperature": {
"description": "Color temperature.",
"enum": [
"warm",
"cool",
"neutral"
],
"type": "string"
},
"mood": {
"description": "e.g. pastel, muted, earthy, vibrant, monochrome.",
"type": "string"
},
"harmony": {
"description": "e.g. analogous, complementary, triadic, monochromatic, split-complementary, tetradic.",
"type": "string"
},
"color_count": {
"description": "Exact number of colors.",
"minimum": 2,
"maximum": 10,
"type": "integer"
},
"tags": {
"description": "Tag slugs β ALL must match (AND).",
"type": "array"
},
"order": {
"description": "Sort order (default newest).",
"enum": [
"newest",
"popular",
"name"
],
"type": "string"
},
"per_page": {
"description": "Results per page (default 24).",
"minimum": 1,
"maximum": 100,
"type": "integer"
},
"page": {
"description": "Page number.",
"minimum": 1,
"type": "integer"
}
}
}π’get_palette(id)
Get one color palette by id: its colors (hex), name/derived title, mood, harmony, temperature and tags.
Input Schema
{
"type": "object",
"properties": {
"id": {
"description": "Palette id.",
"type": "integer"
}
},
"required": [
"id"
]
}π’minify_code(code, type, mode, keep_license)
Minify or beautify JS, CSS, HTML, SVG, JSON or XML text. Set type=auto to sniff the language. The code is only parsed and re-printed β never executed and never stored. Rate limit: 30 calls/min per IP.
Input Schema
{
"type": "object",
"properties": {
"code": {
"description": "Source code to transform.",
"type": "string"
},
"type": {
"description": "Source language, or 'auto' to sniff.",
"enum": [
"js",
"css",
"html",
"svg",
"json",
"xml",
"auto"
],
"type": "string"
},
"mode": {
"description": "Default minify.",
"enum": [
"minify",
"beautify"
],
"type": "string"
},
"keep_license": {
"description": "Preserve /*! ... */ license comments when minifying.",
"type": "boolean"
}
},
"required": [
"code",
"type"
]
}π’detect_code(code)
Detect the language/format of a code snippet. Static analysis only β the snippet is never executed and never stored.
Input Schema
{
"type": "object",
"properties": {
"code": {
"description": "Snippet to inspect. Max 200,000 chars.",
"type": "string"
}
},
"required": [
"code"
]
}π’convert_code(code, from, to, options)
Convert code between text formats (e.g. JSONβYAML, CSSβSCSS). Pure text transformation: the source is parsed and re-serialized, never executed and never stored. Use list_code_converters for valid from/to ids and per-converter options. Rate limit: 30 calls/min per IP.
Input Schema
{
"type": "object",
"properties": {
"code": {
"description": "Source code to convert.",
"type": "string"
},
"from": {
"description": "Source format id (see list_code_converters).",
"type": "string"
},
"to": {
"description": "Target format id.",
"type": "string"
},
"options": {
"description": "Per-converter options (see optionsSchema in list_code_converters).",
"type": "object"
}
},
"required": [
"code",
"from",
"to"
]
}Recommended Prompts
search_fontssearch_fontsget_fontget_fontsearch_fontsget_fontCommunity
Evidence