Jinero

AI-agent design tools: fonts, font recognition, palettes, color naming, contrast, code, SVG, CSS.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
97%
Naming quality
95%
Poisoning risk
100%
Permission match
90%
Protocol compliance
100%

Findings (1)

  • LOWTool 'get_font_download_url' suggests web access but openWorldHint=falsein get_font_download_url

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,646Tokens (tool definitions)
~1.1 KBTypical response size
Significant attention impact (2.07% of 128k context)

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-http

What it can do

Tool inventory

Tools (15)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒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_research
Search for information about [topic] using Jinero
Expected tools: search_fonts
find_specific
Find [specific item] using Jinero
Expected tools: search_fonts
retrieve_data
Get details about [item] from Jinero
Expected tools: get_font
fetch_info
Fetch [information type] using Jinero
Expected tools: get_font
research_workflow
Search for [topic], then get detailed information about the top results using Jinero
Expected tools: search_fontsget_font

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools
verifiedversion not recorded15 tools