Image to SVG
Converta imagens raster (PNG, JPG, WEBP, TIFF) para gráficos vetoriais SVG escaláveis localmente, sem chave de API, através de uma única ferramenta convert_image_to_svg.
Documentação
image2svg-mcp
Um servidor MCP que converte imagens rasterizadas (PNG, JPG, WEBP) em gráficos vetoriais SVG escaláveis.
Recursos
- Aceita imagens como dados codificados em base64 ou URL
- Suporta PNG, JPG, JPEG, WEBP, TIFF e outros formatos rasterizados comuns
- Controle total sobre os parâmetros de vetorização (precisão de cor, filtro de ruído, modo de rastreamento, etc.)
- Lida com prefixos de URI
data:image/...;base64,automaticamente - Faz streaming de downloads de URL com limite de tamanho de 5 MB
- Suporte opcional a URL
file://para imagens locais (opt-in via--allow-local-files-path)
Uso
Para ver em ação, confira conversão de imagem para svg online.
Claude Code e Claude Desktop
Adicione ao seu settings.json:
{
"mcpServers": {
"image2svg": {
"command": "uvx",
"args": ["image2svg-mcp"]
}
}
}
para Claude Code, adicione usando a linha de comando:
claude mcp add image2svg --scope user -- uvx image2svg-mcp
com acesso a arquivos locais:
claude mcp add image2svg --scope user -- uvx image2svg-mcp --allow-local-files-path /home/user/images
Docker
Execute como um servidor HTTP:
docker run -p 8000:8000 ghcr.io/botmonster/image2svg-mcp
Com acesso a arquivos locais:
docker run -p 8000:8000 -v /home/user/images:/images ghcr.io/botmonster/image2svg-mcp --allow-local-files-path /images
claude mcp add image2svg --transport http --scope user http://localhost:8000/mcp
Isso permite prompts como:
Converta este arquivo local para SVG: file://logo.png
Somente arquivos dentro do diretório especificado (e seus subdiretórios) são acessíveis. Os caminhos são normalizados para evitar travessia de diretórios. Sem esta flag, URLs file:// são rejeitadas.
Exemplos de Prompts
Aqui estão alguns exemplos do que você pode pedir a um LLM para fazer com esta ferramenta:
1. Conversão simples de imagem para SVG
Gere uma imagem de um pôr do sol sobre montanhas e depois converta-a para SVG.
O LLM gerará uma imagem rasterizada e usará a ferramenta convert_image_to_svg com configurações padrão para produzir uma versão vetorial limpa.
2. Conversão ajustada com parâmetros específicos
Crie um logotipo com um círculo azul e uma estrela branca dentro. Agora converta-o para SVG usando colormode binário para bordas nítidas e defina filter_speckle para 10 para remover ruído.
Isso usa colormode: "binary" para um estilo de arte de linha preto/branco, que funciona muito bem para logotipos e ícones. O valor mais alto de filter_speckle remove pequenos artefatos.
3. Conversão de URL com estilo minimalista
Converta esta imagem para um SVG simplificado com baixa precisão de cor para um visual de pôster minimalista: https://example.com/photo.png
Usar color_precision: 3 reduz drasticamente o número de cores, produzindo um efeito vetorial posterizado artístico. Ótimo para ilustrações estilizadas.
4. Converta uma imagem base64 diretamente
Converta esta imagem base64 para SVG: iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAO0lEQVR4nGP8z8Dwn4EIwESMIqwKGRn+MzBisYQJXRE2NopCbKYgi5Huxv8MjBiSyGJMuCTQNTJSPRwBCjYOD5JU5rIAAAAASUVORK5CYII=
Este é um quadrado vermelho de 10x10 com um círculo azul no meio. Útil para testar a ferramenta com dados de imagem inline — sem necessidade de URL.
Parâmetros da Ferramenta
| Parâmetro | Tipo | Padrão | Intervalo | Descrição |
|---|---|---|---|---|
image_base64 | string | - | - | Dados de imagem codificados em base64. Forneça isto OU image_url. |
image_url | string | - | - | URL para buscar a imagem (http://, https:// ou file:// quando habilitado). Forneça isto OU image_base64. |
colormode | string | "color" | color, binary | Cor completa ou arte de linha preto/branco |
mode | string | "spline" | spline, polygon, none | Modo de rastreamento: curvas suaves, bordas retas ou pixel-perfeito |
filter_speckle | int | 4 | 0-128 | Remove ruídos de N pixels ou menos |
color_precision | int | 6 | 1-12 | Bits de quantização de cor. Menor = menos cores, SVG mais simples |
layer_difference | int | 16 | 0-128 | Diferença de cor para mesclar camadas |
corner_threshold | int | 60 | 0-180 | Limiar de ângulo para detecção de cantos (graus) |
length_threshold | float | 4.0 | 3.5-10.0 | Comprimento mínimo do segmento de caminho |
splice_threshold | int | 45 | 0-180 | Limiar de ângulo para emendar splines |
path_precision | int | 8 | 1-12 | Precisão decimal para coordenadas SVG |
hierarchical | string | "stacked" | stacked, cutout | Modo de disposição de camadas |
max_iterations | int | 10 | 1-100 | Máximo de iterações de ajuste de curva |
Desenvolvimento
Instalação
git clone https://github.com/botmonster/image2svg-mcp.git
cd image2svg-mcp
uv sync
Executar testes
uv run pytest tests/ -v
Executar o MCP Inspector
uv run fastmcp dev inspector src/image2svg_mcp/server.py:mcp
Licença
Apache 2.0 - veja LICENSE