Jinero MCP Server

MCP serverMedia

jinero adds design tools to your AI, focused on color and type. Once it is added, your AI can recognize fonts, build color palettes, name colors, check contrast, and turn the results into SVG, CSS, and code.

Use Jinero MCP Server in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add Jinero MCP Server and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use Jinero MCP Server to search fonts

Details

Available today. Use it from your connected AI after setup.

Add jinero and ask your AI to identify a font or put together a palette. It can return the results as SVG, CSS, or code you can use in your project.

Jinero MCP ServerStart free

What your AI can do with it

  • Recognize fonts
  • Build color palettes
  • Name colors
  • Check color contrast
  • Generate SVG, CSS, and code

Install Jinero MCP Server

The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.

  • Claude Code

    claude mcp add --transport http --scope user jinero-mcp-server 'https://jinero.online/mcp'

    Run it once in your project, then open /mcp to approve any sign-in the server asks for.

  • Claude Desktop

    https://jinero.online/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=jinero-mcp-server&config=eyJ1cmwiOiJodHRwczovL2ppbmVyby5vbmxpbmUvbWNwIn0=

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://jinero.online/mcp

    In Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.

  • Codex

    codex mcp add jinero-mcp-server --url 'https://jinero.online/mcp'

    Run it once, then sign in with codex mcp login jinero-mcp-server if the server asks for an account.

From the project's README

As published by jinero-online/jinero-mcp in README.md.

online.jinero/jinero — a hosted, remote Model Context Protocol server that gives AI agents (Claude, Cursor, Cline, Zed, Gemini CLI…) the design tools of jinero.online: 22 read-only tools for fonts (search, CSS, files, recognition from an image), color math (WCAG contrast, shades, naming, palette extraction), curated palettes, code minify/convert/detect, SVG optimization and SCSS helpers.

Connect

Claude Code (CLI):

claude mcp add --transport http jinero https://jinero.online/mcp

Claude Desktop / Cursor / Cline (config):

{
  "mcpServers": {
    "jinero": { "type": "http", "url": "https://jinero.online/mcp" }
  }
}

Older stdio-only clients can bridge with npx mcp-remote https://jinero.online/mcp.

Trust & safety

Every tool declares MCP annotations, verifiable in tools/list:

  • all 22 tools are readOnlyHint: true and idempotentHint: true;
  • submitted code/SVG is parsed and transformed as text — never executed, never stored;
  • uploaded images (font recognition, color extraction) are processed in memory and deleted immediately;
  • only three tools fetch a user-supplied URL (recognize_font, extract_colors, svg_to_datauri) — marked openWorldHint: true, with SSRF-guarded, size-capped fetches.

A note for automated risk scanners: some directories classify minify_code, convert_code, generate_clamp or recognize_font as "write" tools based on their verbs. They are pure functions — text/math in, text out; nothing on the server or the caller's side is modified. The authoritative signal is the readOnlyHint: true annotation each of the 22 tools declares in tools/list (snapshotted in tools.json).

Rate limits

The whole endpoint is capped at 60 requests/min per IP. On top of that, compute-heavy tools enforce their own per-tool per-IP caps (server v1.4.0+), returned as a clean tool error with a retry hint when exceeded — each cap is also stated in the tool's description:

ToolCapWhy
recognize_font5/minCNN model inference
extract_colors10/minimage analysis subprocess
minify_code, convert_code, optimize_svg30/minparser subprocesses
svg_to_datauri30/minmay fetch external URLs

Tests & CI

tests/tools.test.mjs exercises every declared tool against the live endpoint (zero dependencies, Node 20+):

npm test

CI runs the suite on every push and weekly (workflow), and tools.json is a committed snapshot of the live tools/list — schemas and annotations included (npm run update-snapshot to refresh).

Try it without a client

# List all tools
curl -s -X POST https://jinero.online/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

More runnable examples in examples/.

Tool reference

Generated from the live tools/list of the current server version.

Fonts

search_fonts

Search the free font catalog by name, category, style tags, language coverage, variable/monospace flags and style count. Returns a paginated list of families.

read-only · idempotent

ParameterTypeDescription
namestringFuzzy name match.
categorystringComma-separated categories, e.g. 'serif,sans'.
langsstringComma-separated language codes, e.g. 'latin,cyrillic' — ALL must be supported.
stylestringComma-separated style tags, e.g. 'handwriting,condensed' — ALL must match. One of: handwriting, script, display, slab, rounded, condensed, expanded, stencil, pixel, blackletter, outline, retro.
variablebooleanOnly variable fonts.
monospacebooleanOnly monospace fonts.
styles_minintegerMinimum number of styles.
styles_maxintegerMaximum number of styles.
orderstring: likes | downloads | views | name | created_atSort field, default 'likes'.
sortstring: asc | descSort direction.
per_pageintegerResults per page (default 24).
pageintegerPage number.
recognize_font

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. Fast (~200 ms).

read-only · idempotent · fetches external URLs

ParameterTypeDescription
image_urlstringPublic 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.
image_base64stringBase64-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.
top_kintegerNumber of font matches to return (3–20, default 8).
get_font

Get full metadata for one font family by slug: styles, weights, axes, license, subsets and download/CSS URLs.

read-only · idempotent

ParameterTypeDescription
slug (required)stringFamily slug, e.g. 'inter', 'playfair-display'.
get_font_files

List every font file (weight/italic/format + direct woff2/ttf URL) for a family — handy for building custom @font-face rules.

read-only · idempotent

ParameterTypeDescription
slug (required)stringFamily slug, e.g. 'inter'.
get_fonts_css

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:wght@300..900". Returns CSS text.

read-only · idempotent

ParameterTypeDescription
family (required)stringFamily spec, e.g. "inter:wght@400,700" or "inter:wght@300..900".
displaystring: swap | auto | block | fallback | optionalfont-display value (default swap).
get_font_download_url

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.

read-only · idempotent

ParameterTypeDescription
slug (required)stringFamily slug, e.g. 'inter'.

Colors

check_contrast

Check the WCAG contrast ratio between a foreground and background color, with AA/AAA pass/fail for normal and large text.

read-only · idempotent

ParameterTypeDescription
fg (required)stringForeground color (hex, rgb(), or hsl()).
bg (required)stringBackground color (hex, rgb(), or hsl()).
get_color_shades

Generate tints and shades for a base color (lighter/darker steps) with hex values.

read-only · idempotent

ParameterTypeDescription
hex (required)stringBase color in hex, rgb(), or hsl().
stepstring: 5 | 10 | 20 | 25Step percentage (default 10).
limitintegerCap on tints/shades (default fills to ~100%).
name_color

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.

read-only · idempotent

ParameterTypeDescription
hex (required)stringA hex color, or several comma-separated (e.g. "#3b82f6,#000,#ff7f50"). Up to 100 at once.
extract_colors

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.

read-only · idempotent · fetches external URLs

ParameterTypeDescription
image_urlstringPublic URL of the image to pull the palette from. Provide either this or image_base64.
image_base64stringBase64-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.
countintegerHow many colors to return (2–16, default 8).
modestringPalette mode: "balanced" (default), "vibrant", or "muted".

Palettes

search_palettes

Search the color-palette catalog by name, tone, temperature, mood, harmony, exact color count and tags. Returns a paginated list.

read-only · idempotent

ParameterTypeDescription
namestringFuzzy name match.
tonestring: light | dark | mixedOverall tone.
temperaturestring: warm | cool | neutralColor temperature.
moodstringe.g. pastel, muted, earthy, vibrant, monochrome.
harmonystringe.g. analogous, complementary, triadic, monochromatic, split-complementary, tetradic.
color_countintegerExact number of colors.
tagsarrayTag slugs — ALL must match (AND).
orderstring: newest | popular | nameSort order (default newest).
per_pageintegerResults per page (default 24).
pageintegerPage number.
get_palette

Get one color palette by id: its colors (hex), name/derived title, mood, harmony, temperature and tags.

read-only · idempotent

ParameterTypeDescription
id (required)integerPalette id.

Code

minify_code

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.

read-only · idempotent

ParameterTypeDescription
code (required)stringSource code to transform.
type (required)string: js | css | html | svg | json | xml | autoSource language, or 'auto' to sniff.
modestring: minify | beautifyDefault minify.
keep_licensebooleanPreserve /*! ... */ license comments when minifying.
detect_code

Detect the language/format of a code snippet. Static analysis only — the snippet is never executed and never stored.

read-only · idempotent

ParameterTypeDescription
code (required)stringSnippet to inspect. Max 200,000 chars.
convert_code

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.

read-only · idempotent

ParameterTypeDescription
code (required)stringSource code to convert.
from (required)stringSource format id (see list_code_converters).
to (required)stringTarget format id.
optionsobjectPer-converter options (see optionsSchema in list_code_converters).
list_code_converters

List available code converters with their from/to ids and per-converter option schemas.

read-only · idempotent

No parameters.

SVG

optimize_svg

Optimize/clean SVG markup (SVGO). Pure markup transformation — nothing is executed or stored. Returns minified SVG plus before/after sizes.

read-only · idempotent

ParameterTypeDescription
svg (required)stringSVG source. Max 500,000 chars.
presetstring: safe | balanced | aggressiveOptimization preset (default balanced).
svg_to_datauri

Encode an SVG (or fetched image) as a CSS-ready data: URI. Provide either raw svg or a url.

read-only · idempotent · fetches external URLs

ParameterTypeDescription
svgstringRaw SVG markup. Mutually exclusive with url.
urlstringPublic image URL the server will fetch.
encodingstring: utf8 | base64Defaults: utf8 for SVG, base64 for raster.
quotesstring: single | doubleQuote style for the data URI (default double).
list_svg_presets

List the available SVG optimization presets and what each one does.

read-only · idempotent

No parameters.

Dev

list_scss_mixins

List the SCSS mixin catalog (id, title, short description), optionally filtered by group or search.

read-only · idempotent

ParameterTypeDescription
groupstringe.g. Bootstrap, Project, Pattern, Placeholder.
searchstringFuzzy substring across id/title/short/desc.
fieldsstring: summary | fullDetail level (default summary).
get_scss_mixin

Get one SCSS mixin by id: full source, parameters and usage example.

read-only · idempotent

ParameterTypeDescription
id (required)stringMixin id (kebab-case), e.g. 'centerer', 'media-breakpoint-up'.
generate_clamp

Calculate a fluid CSS clamp() expression for responsive sizing between two viewport widths. Pure calculation — returns a CSS snippet, writes and stores nothing.

read-only · idempotent

ParameterTypeDescription
min_fs (required)numberMinimum size in px.
max_fs (required)numberMaximum size in px.
min_vwnumberViewport width at min_fs (default 320).
max_vwnumberViewport width at max_fs (default 1440).
unitstring: px | rem | bothOutput unit (default rem).
rootnumberRoot font-size in px for rem conversion (default 16).

About

Built and operated by jinero.online — free design tools for fonts, icons, colors and code. The MCP server is a thin wrapper over the same public REST API: one contract, identical behavior.

This repository holds the public documentation and examples for the server. Issues and feature requests for the tools are welcome here.

Tools it offers (15)

What this server listed when Ahel dialed its public endpoint in Oct 2026, with no key and no account of yours. The names are the server’s own.

  • search_fonts
  • recognize_font
  • get_font
  • get_font_files
  • get_fonts_css
  • get_font_download_url
  • check_contrast
  • get_color_shades
  • name_color
  • extract_colors
  • search_palettes
  • get_palette
  • minify_code
  • detect_code
  • convert_code

Signals

GitHub stars
1
Last commit
Aug 2026
Advanced
Delivery
jinero MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
Item type
mcp-server
Key
online-jinero-jinero
Source
github.com/jinero-online/jinero-mcp
Hosted endpoint
https://jinero.online/mcp