Um servidor MCP remoto e hospedado que dá ao seu agente de IA as mesmas ferramentas de design que as pessoas usam no jinero.online: 22 ferramentas — fontes (busca, CSS, arquivos, identificação por imagem), cálculos de cor (contraste, tons, nomes, extração), paletas selecionadas, minificação, conversão e detecção de código, otimização de SVG e helpers de SCSS. Cada ferramenta é uma camada fina sobre a API REST pública — um contrato, um comportamento. Publicado no registro oficial de MCP como online.jinero/jinero; o manifesto fica em /.well-known/mcp/server.json.

# Remote endpoint (Streamable HTTP)
https://jinero.online/mcp

# Peek at the tool list without any client:
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"}'

Funciona com qualquer cliente MCP compatível com servidores remotos (Streamable HTTP): Claude Code, Claude Desktop, Cursor, Cline, Zed, Gemini CLI e outros. Clientes mais antigos, que só usam stdio, podem se conectar por uma ponte com npx mcp-remote https://jinero.online/mcp.

# Claude Code (CLI)
claude mcp add --transport http jinero https://jinero.online/mcp
// Claude Desktop / Cursor / Cline — mcpServers config
{
  "mcpServers": {
    "jinero": {
      "type": "http",
      "url": "https://jinero.online/mcp"
    }
  }
}

Cada ferramenta declara anotações MCP, para que clientes e scanners de segurança possam verificar o comportamento em vez de adivinhar: todas as 22 ferramentas são somente leitura e idempotentes. O código e o SVG enviados são lidos e transformados como texto — nunca são executados nem armazenados. As imagens enviadas (identificação de fontes, extração de cores) são processadas em memória e excluídas imediatamente. Só três ferramentas acessam uma URL informada pelo usuário (recognize_font, extract_colors, svg_to_datauri) — elas são marcadas como open-world, e os acessos têm proteção contra SSRF (só http(s) público, com limite de tamanho). Anônimo, sem chave de API, com limite geral de 60 req/min por IP; ferramentas que exigem mais processamento têm limites próprios mais rígidos (recognize_font 5/min, extract_colors 10/min, transformações de código/SVG 30/min), informados na descrição de cada ferramenta.

// Annotations served in tools/list for every tool
{
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": false   // true only on the 3 URL-fetching tools
}

Busca no catálogo de fontes gratuitas por nome, categoria, tags de estilo, suporte a idiomas, indicadores variable/monospace e número de estilos. Retorna uma lista paginada de famílias com URLs de prévia e metadados de cada estilo.

TOOL search_fonts somente leitura idempotente
ParâmetroTipoDescrição
name string Busca aproximada pelo nome.
category string Categorias separadas por vírgula, ex.: 'serif,sans'.
langs string Códigos de idioma separados por vírgula, ex.: 'latin,cyrillic' — TODOS devem ser suportados.
style string Tags de estilo separadas por vírgula (handwriting, script, display, slab, rounded, condensed, expanded, stencil, pixel, blackletter, outline, retro) — TODAS devem corresponder.
variable boolean Somente fontes variáveis.
monospace boolean Somente fontes monoespaçadas.
styles_min / styles_max integer Limites do número de estilos.
order string likes (padrão) · downloads · views · name · created_at.
sort string asc · desc.
per_page / page integer Paginação (per_page 1–100, padrão 24).
// tools/call arguments
{ "name": "inter", "category": "sans", "per_page": 2 }
Exemplo de resposta
{
  "current_page": 1,
  "data": [
    {
      "name": "Inter Tight",
      "slug": "inter-tight",
      "category": "sans",
      "variable": true,
      "monospace": false,
      "langs": ["latin", "cyrillic", "greek"],
      "style_tags": [],
      "styles_count": 18,
      "downloads": 2800,
      "likes_count": 1392,
      "regular_url": "https://jinero.online/storage/fonts/inter-tight/inter-tight-regular.woff2",
      "styles": [ { "weight": 100, "italic": false, "name": "Thin" }, "…" ]
    }
  ],
  "per_page": 2,
  "total": 4
}

Identifica qual fonte foi usada em uma imagem. Usa o nosso próprio modelo de embeddings CNN, treinado no catálogo do jinero — ele compara as fontes pela forma visual, então dispensa OCR e texto legível (caracteres latinos e cirílicos). Envie um recorte justo de uma linha de texto como image_url pública ou como image_base64 (base64 puro / data URI — perfeito para uma captura de tela local que o agente acabou de fazer). A imagem é processada em memória e excluída imediatamente. ~200 ms por chamada.

TOOL recognize_font somente leitura idempotente acessa URLs externas
ParâmetroTipoDescrição
image_url string URL http(s) pública da imagem. Informe esta ou image_base64.
image_base64 string Imagem codificada em Base64 (base64 puro ou URI data:image/…;base64), até 8 MB depois de decodificada. Informe esta ou image_url.
top_k integer Número de fontes correspondentes a retornar (3–20, padrão 8).
// tools/call arguments — URL variant
{ "image_url": "https://example.com/heading-crop.png", "top_k": 5 }

// …or send a local screenshot directly
{ "image_base64": "data:image/png;base64,iVBORw0KGgo…", "top_k": 5 }
Exemplo de resposta
{
  "matches": [
    { "slug": "lunasima", "name": "Lunasima", "category": "sans", "score": 0.8331,
      "family_url": "https://jinero.online/fonts/lunasima" },
    { "slug": "tajawal", "name": "Tajawal", "category": "sans", "score": 0.8213,
      "family_url": "https://jinero.online/fonts/tajawal" }
  ],
  "note": "Matched by a trained CNN embedding (visual shape), no OCR."
}

Metadados completos de uma família de fontes pelo slug: designer, licença, categoria, suporte a idiomas, eixos variáveis, todos os estilos, além de URLs prontas de download, CSS e arquivos.

TOOL get_font somente leitura idempotente
ParâmetroTipoDescrição
slug string Slug da família, ex.: 'inter', 'playfair-display'.
// tools/call arguments
{ "slug": "inter" }
Exemplo de resposta
{
  "name": "Inter",
  "slug": "inter",
  "category": "sans",
  "designer": "Rasmus Andersson",
  "license": "OFL",
  "license_url": "https://openfontlicense.org/open-font-license-official-text/",
  "variable": true,
  "monospace": false,
  "langs": ["latin", "cyrillic", "greek", "vietnamese"],
  "styles_count": 18,
  "download_url": "https://jinero.online/api/v1/fonts/inter/download",
  "files_url": "https://jinero.online/api/v1/fonts/inter/files",
  "css_url": "https://jinero.online/api/v1/fonts/css?family=inter",
  "fonts": [ { "weight": 400, "italic": false, "name": "Regular" }, "…" ]
}

Lista todos os arquivos de fonte de uma família — peso, indicador de itálico, nome do estilo, formato e URL direta do woff2/ttf com o tamanho do arquivo. Prático quando o agente está escrevendo regras @font-face próprias ou baixando pesos específicos.

TOOL get_font_files somente leitura idempotente
ParâmetroTipoDescrição
slug string Slug da família, ex.: 'inter'.
// tools/call arguments
{ "slug": "inter" }
Exemplo de resposta
{
  "family": "Inter",
  "slug": "inter",
  "files": [
    { "weight": 100, "italic": false, "style": "Thin", "format": "woff2",
      "url": "https://jinero.online/storage/fonts/inter/inter-thin.woff2", "size": 111816 },
    { "weight": 400, "italic": false, "style": "Regular", "format": "ttf",
      "url": "https://jinero.online/storage/fonts/inter/inter-regular.ttf", "size": 876576 }
  ]
}

Gera CSS @font-face pronto para colar a partir da especificação de uma família — sintaxe compatível com o Google Fonts, incluindo intervalos de fontes variáveis. Retorna CSS em texto puro, que o agente pode colocar direto em uma folha de estilos.

TOOL get_fonts_css somente leitura idempotente
ParâmetroTipoDescrição
family string Especificação da família, ex.: "inter:wght@400,700" ou um intervalo variável "inter:[email protected]".
display string Valor de font-display: swap (padrão) · auto · block · fallback · optional.
// tools/call arguments
{ "family": "inter:wght@400,700", "display": "swap" }
Exemplo de resposta
/* jinero.online Fonts API */

@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('https://jinero.online/storage/fonts/inter/inter-regular.woff2') format('woff2');
}
/* … one block per requested weight … */

Retorna a URL direta de download do ZIP de uma família de fontes (todos os estilos em TTF + WOFF2, além de um fonts.css pronto). A ferramenta não baixa nada sozinha — ela entrega a URL ao usuário ou ao agente.

TOOL get_font_download_url somente leitura idempotente
ParâmetroTipoDescrição
slug string Slug da família, ex.: 'inter'.
// tools/call arguments
{ "slug": "inter" }
Exemplo de resposta
{
  "slug": "inter",
  "download_url": "https://jinero.online/api/v1/fonts/inter/download"
}

Taxa de contraste WCAG 2.1 entre a cor do texto e a do fundo, com indicação de aprovação AA/AAA para texto normal e grande — o mesmo cálculo sRGB que o Lighthouse usa.

TOOL check_contrast somente leitura idempotente
ParâmetroTipoDescrição
fg string Cor do texto: hex, rgb() ou hsl().
bg string Cor de fundo, nos mesmos formatos.
// tools/call arguments
{ "fg": "#1d4ed8", "bg": "#ffffff" }
Exemplo de resposta
{
  "success": true,
  "ratio": 6.29,
  "ratio_string": "6.29:1",
  "aa":  { "normal": true,  "large": true },
  "aaa": { "normal": false, "large": true },
  "thresholds": { "aa_normal": 4.5, "aa_large": 3, "aaa_normal": 7, "aaa_large": 4.5 }
}

Um conjunto completo de design tokens a partir de uma cor base: tons claros, tons escuros e cinco relações harmônicas (complementar, análoga, triádica, complementar dividida, tetrádica). Cada cor traz strings hex/rgb/hsl, luminância e uma cor de texto recomendada.

TOOL get_color_shades somente leitura idempotente
ParâmetroTipoDescrição
hex string Cor base: hex, rgb() ou hsl().
step string Passo em porcentagem: 5, 10 (padrão), 20, 25.
limit integer Limite de tons claros/escuros (por padrão, preenche até ~100%).
// tools/call arguments
{ "hex": "#3b82f6", "step": "20", "limit": 2 }
Exemplo de resposta
{
  "success": true,
  "base": { "hex": "#3b82f6", "hsl_string": "hsl(217, 91%, 60%)", "luminance": 0.2355,
            "text_color": "#000000", "contrast_on_white": 3.68 },
  "tints":  [ { "percent": 20, "hex": "#629bf8", "…": "…" } ],
  "shades": [ { "percent": 20, "hex": "#2f68c5", "…": "…" } ],
  "harmonies": { "complementary": ["…"], "analogous": ["…"], "triadic": ["…"] }
}

O nome legível mais próximo para uma ou várias cores — a correspondência perceptual mais próxima em um conjunto de ~31.000 cores. Ótimo para nomear paletas extraídas ou amostras geradas.

TOOL name_color somente leitura idempotente
ParâmetroTipoDescrição
hex string Um hex ou vários separados por vírgula (até 100), ex.: "#3b82f6,#000,#ff7f50".
// tools/call arguments
{ "hex": "#3b82f6,#000,#ff7f50" }
Exemplo de resposta
{
  "success": true,
  "count": 3,
  "colors": [
    { "input": "#3B82F6", "name": "Dodger Blue", "hex": "#3E82FC", "exact": false, "distance": 10.91 },
    { "input": "#000000", "name": "Black",       "hex": "#000000", "exact": true,  "distance": 0 },
    { "input": "#FF7F50", "name": "Coral",       "hex": "#FF7F50", "exact": true,  "distance": 0 }
  ]
}

Extrai uma paleta de cores dominantes de uma imagem — clusterização k-means nos modos balanced / vibrant / muted. Envie uma image_url pública ou image_base64 (base64 puro / data URI — perfeito para uma captura de tela local). A imagem é processada em memória e nunca é armazenada. Cada cor volta com nome: uma paleta nomeada em uma só chamada.

TOOL extract_colors somente leitura idempotente acessa URLs externas
ParâmetroTipoDescrição
image_url string URL pública da imagem (baixada pelo servidor, até 10 MB, só image/*). Informe esta ou image_base64.
image_base64 string Imagem codificada em Base64 (base64 puro ou URI data:image/…;base64), até 10 MB depois de decodificada. Informe esta ou image_url.
count integer Quantas cores retornar: 2–16, padrão 8.
mode string balanced (padrão) · vibrant · muted.
// tools/call arguments — URL variant
{ "image_url": "https://example.com/cover.jpg", "count": 6, "mode": "vibrant" }

// …or send a local screenshot directly
{ "image_base64": "data:image/png;base64,iVBORw0KGgo…", "count": 6 }
Exemplo de resposta
{
  "success": true,
  "mode": "vibrant",
  "colors": [
    { "hex": "#f9f9f9", "percent": 90.8, "name": "White", "name_exact": false,
      "rgb": { "r": 249, "g": 249, "b": 249 }, "hsl": { "h": 0, "s": 0, "l": 97.6 } },
    { "hex": "#1d1c1b", "percent": 5.8, "name": "Cod Gray", "name_exact": false, "…": "…" }
  ]
}

Busca no catálogo de paletas de cores selecionadas por nome, tom, temperatura, clima, harmonia, número exato de cores e tags. Retorna uma lista paginada — cada paleta com as suas cores hex e a classificação.

TOOL search_palettes somente leitura idempotente
ParâmetroTipoDescrição
name string Busca aproximada pelo nome.
tone string light · dark · mixed.
temperature string warm · cool · neutral.
mood string ex.: pastel, muted, earthy, vibrant, monochrome.
harmony string ex.: analogous, complementary, triadic, monochromatic.
color_count integer Número exato de cores (2–10).
tags array Slugs das tags — TODAS devem corresponder.
order string newest (padrão) · popular · name.
per_page / page integer Paginação (per_page 1–100, padrão 24).
// tools/call arguments
{ "tone": "light", "mood": "pastel", "per_page": 1 }
Exemplo de resposta
{
  "current_page": 1,
  "data": [
    {
      "id": 6267,
      "name": "5-Color Darling Bud Palette",
      "colors": ["#ffffff", "#e7b7fb", "#b0cbfc", "#f98bf7", "#f7cefc"],
      "color_count": 5,
      "tone": "mixed",
      "temperature": "neutral"
    }
  ],
  "total": 6267
}

Uma paleta pelo id: cores hex, nome, tom, temperatura, clima, harmonia e tags.

TOOL get_palette somente leitura idempotente
ParâmetroTipoDescrição
id integer id da paleta (de search_palettes).
// tools/call arguments
{ "id": 6267 }
Exemplo de resposta
{
  "success": true,
  "palette": {
    "id": 6267,
    "name": "5-Color Darling Bud Palette",
    "colors": ["#ffffff", "#e7b7fb", "#b0cbfc", "#f98bf7", "#f7cefc"],
    "color_count": 5,
    "tone": "mixed",
    "temperature": "neutral",
    "tags": []
  }
}

Minifica ou formata JS, CSS, HTML, SVG, JSON ou XML. O código é apenas lido e reescrito como texto — nunca é executado nem armazenado. Use type=auto para o servidor detectar a linguagem.

TOOL minify_code somente leitura idempotente
ParâmetroTipoDescrição
code string Texto de origem a transformar.
type string js · css · html · svg · json · xml · auto.
mode string minify (padrão) · beautify.
keep_license boolean Manter os comentários de licença /*! … */ ao minificar.
// tools/call arguments
{ "code": ".a { color: #ffffff; margin: 0px; }", "type": "css" }
Exemplo de resposta
{
  "success": true,
  "type": "css",
  "mode": "minify",
  "output": ".a{color:#fff;margin:0}",
  "original_size": 47,
  "output_size": 23,
  "savings_percent": 51.1
}

Detecta a linguagem ou o formato de um trecho de código — só análise estática, o trecho nunca é executado. Também informa quais conversores aceitam o formato detectado como entrada.

TOOL detect_code somente leitura idempotente
ParâmetroTipoDescrição
code string Trecho a analisar. Até 200.000 caracteres.
// tools/call arguments
{ "code": "const x = () => 42;" }
Exemplo de resposta
{
  "success": true,
  "detected_type": "esm",
  "confidence": "medium",
  "available_targets": [ { "to": "cjs", "label": "ESM → CommonJS" } ]
}

Converte código entre formatos de texto — JSON↔YAML, JSON→TOML, CSS↔SCSS, ESM→CJS e outros. Transformação puramente textual: o código de origem é lido e serializado de novo, nunca executado nem armazenado. Use list_code_converters para ver a lista completa de pares from/to e as opções de cada conversor.

TOOL convert_code somente leitura idempotente
ParâmetroTipoDescrição
code string Código-fonte a converter.
from string id do formato de origem (veja list_code_converters).
to string id do formato de destino.
options object Opções de cada conversor (veja optionsSchema em list_code_converters).
// tools/call arguments
{ "code": "{\"name\":\"jinero\"}", "from": "json", "to": "yaml" }
Exemplo de resposta
{
  "success": true,
  "from": "json",
  "to": "yaml",
  "output": "name: jinero\n",
  "notes": null
}

O registro dos conversores disponíveis: ids from/to, nomes legíveis e o esquema de opções de cada conversor. Sem parâmetros.

TOOL list_code_converters somente leitura idempotente
// tools/call arguments
{ }
Exemplo de resposta
{
  "success": true,
  "converters": [
    { "id": "json_to_yaml", "from": "json", "to": "yaml", "label": "JSON → YAML",
      "optionsSchema": { "indent": [2, 4], "sortKeys": false } },
    { "id": "yaml_to_json", "from": "yaml", "to": "json", "label": "YAML → JSON", "…": "…" }
  ]
}

Otimiza e limpa código SVG com o SVGO — transformação pura do markup, nada é executado nem armazenado. Retorna o SVG minificado e os tamanhos antes/depois.

TOOL optimize_svg somente leitura idempotente
ParâmetroTipoDescrição
svg string Código SVG. Até 500.000 caracteres.
preset string safe · balanced (padrão) · aggressive.
// tools/call arguments
{ "svg": "<svg xmlns=\"…\" width=\"24\" height=\"24\"><rect …/></svg>", "preset": "balanced" }
Exemplo de resposta
{
  "success": true,
  "preset": "balanced",
  "output": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"><path fill=\"#f00\" d=\"M2 2h20v20H2z\"/></svg>",
  "original_size": 136,
  "optimized_size": 106,
  "savings_percent": 22.1
}

Codifica um SVG (ou uma imagem baixada) como URI data: pronto para CSS — variantes com URL encoding e base64, além de um trecho background-image pronto. Informe o código svg puro ou uma url pública.

TOOL svg_to_datauri somente leitura idempotente acessa URLs externas
ParâmetroTipoDescrição
svg string Código SVG puro. Não pode ser usado junto com url.
url string URL pública da imagem que o servidor vai baixar.
encoding string utf8 · base64. Padrão: utf8 para SVG, base64 para imagens rasterizadas.
quotes string single · double (padrão) — tipo de aspas no trecho de CSS.
// tools/call arguments
{ "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\"><circle r=\"4\"/></svg>" }
Exemplo de resposta
{
  "success": true,
  "mime_type": "image/svg+xml",
  "primary_label": "URL-encoded Data URI",
  "primary_output": "data:image/svg+xml,%3Csvg xmlns=%22http…%3E",
  "secondary_label": "Base64 Data URI",
  "secondary_output": "data:image/svg+xml;base64,PHN2ZyB4bWxu…",
  "css_output": "background-image: url(\"data:image/svg+xml,%3Csvg…%3E\");"
}

As predefinições de otimização de SVG disponíveis e o que cada uma faz. Sem parâmetros.

TOOL list_svg_presets somente leitura idempotente
// tools/call arguments
{ }
Exemplo de resposta
{
  "presets": [
    { "key": "safe",       "name": "Safe",       "description": "Minimal optimization, preserves most attributes" },
    { "key": "balanced",   "name": "Balanced",   "description": "Good compression with minimal visual changes" },
    { "key": "aggressive", "name": "Aggressive", "description": "Maximum compression, may affect some SVG features" }
  ]
}

Explora o catálogo de mixins SCSS — id, título e uma descrição curta de cada um, com filtro opcional por grupo ou busca aproximada. Use fields=full para incluir o código-fonte na listagem.

TOOL list_scss_mixins somente leitura idempotente
ParâmetroTipoDescrição
group string Bootstrap · Project · Pattern · Placeholder.
search string Busca aproximada de substring em id/title/description.
fields string summary (padrão) · full.
// tools/call arguments
{ "search": "centerer", "fields": "summary" }
Exemplo de resposta
{
  "success": true,
  "count": 1,
  "groups": ["Bootstrap", "Project", "Pattern", "Placeholder"],
  "items": [
    { "id": "centerer", "title": "centerer()", "group": "Project",
      "short": "Absolute centering helper with axis toggles." }
  ]
}

Um mixin SCSS pelo id — código-fonte completo em SCSS/Sass/Less, parâmetros e uma demonstração de uso.

TOOL get_scss_mixin somente leitura idempotente
ParâmetroTipoDescrição
id string id do mixin (kebab-case), ex.: 'centerer', 'media-breakpoint-up'.
// tools/call arguments
{ "id": "centerer" }
Exemplo de resposta
{
  "success": true,
  "mixin": {
    "id": "centerer",
    "title": "centerer()",
    "group": "Project",
    "short": "Absolute centering helper with axis toggles.",
    "scss": "@mixin centerer($horizontal: true, $vertical: true) { … }",
    "demo": "…",
    "url": "https://jinero.online/dev/scss-mixins#centerer"
  }
}

Calcula uma expressão CSS clamp() fluida para tamanhos responsivos entre duas larguras de viewport. Puro cálculo — retorna o trecho de CSS nas variantes px e rem, além da matemática por trás.

TOOL generate_clamp somente leitura idempotente
ParâmetroTipoDescrição
min_fs number Tamanho mínimo em px.
max_fs number Tamanho máximo em px.
min_vw number Largura do viewport em min_fs (padrão 320).
max_vw number Largura do viewport em max_fs (padrão 1440).
unit string px · rem (padrão) · both.
root number font-size da raiz em px para a conversão em rem (padrão 16).
// tools/call arguments
{ "min_fs": 16, "max_fs": 24 }
Exemplo de resposta
{
  "success": true,
  "css": "clamp(1rem, 0.8571rem + 0.7143vw, 1.5rem)",
  "variants": {
    "px":  "clamp(16px, 13.7143px + 0.7143vw, 24px)",
    "rem": "clamp(1rem, 0.8571rem + 0.7143vw, 1.5rem)"
  },
  "math": { "slope": 0.007143, "intercept_px": 13.7143, "vw_coefficient": 0.7143 }
}

Sobre o servidor MCP do jinero.online

Um servidor Model Context Protocol hospedado que coloca as ferramentas de fontes, cores, paletas, código e SVG do Jinero nas mãos de qualquer agente de IA — 22 ferramentas anotadas, somente leitura, em uma única URL.

Somente leitura por design

Todas as 22 ferramentas declaram as anotações MCP readOnlyHint + idempotentHint. O código e o SVG enviados são lidos como texto e nunca executados; as imagens são processadas em memória e nunca armazenadas.

Sem chave e sem instalação

Um servidor remoto hospedado via Streamable HTTP — adicione uma URL ao seu cliente MCP e pronto. Anônimo, com limite de 60 req/min por IP (ferramentas pesadas têm limites próprios mais rígidos).

Identificação de fontes integrada

recognize_font identifica fontes a partir de uma captura de tela com o nosso próprio modelo de embeddings CNN — pela forma visual, sem OCR, caracteres latinos e cirílicos — via URL ou base64.

Um só contrato com a API REST

Cada ferramenta MCP chama os mesmos controllers da API REST pública, então comportamento, limites e formato das respostas são idênticos nas duas interfaces.

Perguntas frequentes

Não. O servidor é anônimo e gratuito, com limite geral de 60 requisições/min por IP; ferramentas que exigem mais processamento têm limites mais rígidos (recognize_font 5/min, extract_colors 10/min, transformações de código/SVG 30/min). Ele está publicado no registro oficial de MCP como online.jinero/jinero.

Cada ferramenta é somente leitura e idempotente e declara isso por anotações MCP (readOnlyHint, idempotentHint) que o seu cliente pode verificar em tools/list. O código enviado para minificar, converter ou detectar é lido como texto e nunca executado. Só três ferramentas acessam uma URL informada por você (recognize_font, extract_colors, svg_to_datauri); esses acessos têm proteção contra SSRF e limite de tamanho, e as imagens enviadas nunca são armazenadas.

Com qualquer cliente MCP compatível com servidores remotos (Streamable HTTP): Claude Code, Claude Desktop, Cursor, Cline, Zed, Gemini CLI e outros. Clientes mais antigos, só com stdio, podem se conectar por uma ponte com npx mcp-remote https://jinero.online/mcp.

De duas formas: uma image_url pública ou image_base64 com base64 puro / data URI (até 8 MB depois de decodificado) — assim o agente pode enviar uma captura de tela local diretamente, sem hospedá-la em lugar nenhum. A identificação compara a forma visual das letras com o nosso próprio modelo CNN, então dispensa OCR e funciona com caracteres latinos e cirílicos.

Mesmo motor, transporte diferente. As ferramentas MCP chamam os mesmos controllers dos endpoints REST documentados, então parâmetros e formato das respostas são iguais. Use REST no seu próprio código e MCP para entregar as ferramentas a um agente de IA.

Em https://jinero.online/.well-known/mcp/server.json e no registro oficial de MCP (registry.modelcontextprotocol.io), com o nome online.jinero/jinero.