Skip to main content

Omni-Image-Tools MCP

Um servidor MCP que dá visão computacional para modelos de IA. Ele permite que a IA "veja" imagens: descrever, comparar, extrair texto, recortar objetos e muito mais.

11 ferramentas · 4 provedores · Funciona com Opencode, Claude, Cursor


🤔 Qual provedor usar?

Se você tem GPU (placa de vídeo) → Ollama

O modelo roda no seu computador, usando sua placa de vídeo. Grátis, privado, sem depender de internet.

Limite: sua GPU tem memória finita — por isso só 1 imagem por vez e modelos menores.

Se você não tem GPU ou quer mais qualidade → Nuvem

O modelo roda na nuvem (OpenAI, OpenRouter). Pago por uso, precisa de API key, sem limites de imagem.


Escolha seu modelo

Para quem... Use Tamanho Onde roda
PC fraco ou só testar qwen3-vl:2b 1.9GB 🟢 Seu computador (Ollama)
PC mediano qwen3-vl:4b 3.3GB 🟡 Seu computador (Ollama)
Qualidade profissional gpt-5.4-mini ☁️ Nuvem (OpenAI, pago)
Melhor custo-benefício qwen/qwen3-vl-32b-instruct ☁️ Nuvem (OpenRouter, barato)

⚠️ Memória importa: Se você tem 4GB de VRAM, use qwen3-vl:2b. Com 6GB+, pode usar qwen3-vl:4b. Os modelos de nuvem não usam sua GPU.


🚀 Início Rápido

# 1. Baixar e instalar (requer uv: https://docs.astral.sh/uv/)
git clone https://github.com/alexlivre/omni-image-tools-mcp
cd omni-image-tools-mcp
uv sync
uv sync --extra dev

# 2. Se for usar Ollama (grátis, local):
set OMNI_VISION_PROVIDER=ollama
set OMNI_VISION_DEFAULT_MODEL=qwen3-vl:2b

# 3. Testar
uv run python scripts/cli.py analyze --image foto.jpg --prompt "O que tem nesta imagem?"

💡 Dica: Se quiser usar nuvem, veja a seção Como configurar cada provedor mais abaixo.


🧰 Ferramentas

👁️ Visão (usam inteligência artificial)

Ferramenta Pra que serve Com Ollama Com Nuvem
analyze_image Analisar imagem com prompt livre 1 imagem por vez Várias imagens
identify_objects Detectar objetos na imagem 1 imagem por vez Várias imagens
read_text Extrair texto (OCR) 1 imagem por vez Várias imagens
compare_images Comparar 2 a 10 imagens Processa uma por uma Processa tudo junto

Por que o Ollama tem limite de 1 imagem? Porque a memória da GPU é limitada. Enviar várias imagens de uma vez pode estourar a memória e travar tudo. O sistema automaticamente gerencia isso — na nuvem não tem esse problema.

🛠️ Processamento (não usam IA, são rápidas)

Ferramenta Pra que serve
prepare_image Redimensionar e otimizar foto
get_image_info Ver dados da foto (tamanho, formato, etc)
crop_image Recortar uma parte da foto
convert_image_format Mudar formato (JPEG, PNG, WEBP...)
download_image Baixar foto da internet
extract_object Achar e recortar um objeto automaticamente

⚙️ Sistema

Ferramenta Pra que serve
get_provider_info Mostra qual provedor está ativo e seus limites

🌟 Ferramenta Destaque: extract_object

Essa ferramenta é inteligente: você diz o que quer recortar e ela acha sozinha.

uv run python scripts/cli.py extract --image carro.jpg --object "license plate"

O que acontece por dentro:

  1. A IA localiza o objeto na imagem → coordenadas
  2. O sistema recorta automaticamente a região
  3. Salva o recorte em outputs/ (ou o diretório definido por OMNI_OUTPUT_DIR)

Útil para: placas de carro, rostos, logotipos, textos específicos, qualquer objeto visível.


⚙️ Como configurar cada provedor

Opção A: Ollama (gratuito, local)

Requer: Ollama instalado e o modelo baixado (ollama pull qwen3-vl:2b)

set OMNI_VISION_PROVIDER=ollama
set OMNI_VISION_DEFAULT_MODEL=qwen3-vl:2b

Opção B: OpenAI (nuvem, pago)

Requer: API key da OpenAI

set OMNI_VISION_PROVIDER=openai
set OMNI_VISION_API_KEY=sk-proj-sua-chave-aqui
set OMNI_VISION_DEFAULT_MODEL=gpt-5.4-mini

Opção C: OpenRouter (nuvem, barato)

Requer: API key do OpenRouter

set OMNI_VISION_PROVIDER=openrouter
set OMNI_VISION_API_KEY=sk-or-v1-sua-chave-aqui
set OMNI_VISION_DEFAULT_MODEL=qwen/qwen3-vl-32b-instruct

Opção D: MiniMax (nuvem, MiniMax-M3 multimodal)

Requer: API key da MiniMax. Suporta as duas plataformas:

  • Internacional (minimax.io) — padrão, sem config extra
  • China (minimaxi.com) — defina MINIMAX_BASE_URL=https://api.minimaxi.com/v1
# Internacional (padrão)
set OMNI_VISION_PROVIDER=minimax
set MINIMAX_API_KEY=sua-chave-aqui

# China (opcional)
set MINIMAX_BASE_URL=https://api.minimaxi.com/v1

💡 A chave pode vir de OMNI_VISION_API_KEY ou MINIMAX_API_KEY (esta última é usada como fallback, útil se já estiver nas variáveis de ambiente do sistema).

Todas as opções

Variável Obrigatório Padrão O que faz
OMNI_VISION_PROVIDER ✅ Sim ollama, openrouter, openai, lmstudio ou minimax
OMNI_VISION_API_KEY Só nuvem Sua chave do provedor
MINIMAX_API_KEY Fallback do MiniMax Chave MiniMax usada se OMNI_VISION_API_KEY não existir
MINIMAX_BASE_URL ❌ Não https://api.minimax.io/v1 Endpoint MiniMax (China: https://api.minimaxi.com/v1)
OMNI_VISION_DEFAULT_MODEL ❌ Não Varia Qual modelo usar
OMNI_VISION_TIMEOUT ❌ Não 120s Tempo máximo de espera
OLLAMA_ALLOWED_MODELS ❌ Não qwen3-vl:4b,qwen3-vl:2b Modelos permitidos no Ollama (CSV)
OMNI_OUTPUT_DIR ❌ Não ./outputs Onde extract_object/download_image gravam arquivos
OMNI_ALLOWED_DIRS ❌ Não (vazio = sem sandbox) Lista de diretórios permitidos para image_path (separados por ;) — proteção contra path traversal

🔒 Segurança embutida

  • SSRF: download_image bloqueia IPs privados/loopback/link-local (ex.: 169.254.169.254), hosts que resolvam para eles, e revalida cada redirect.
  • Path traversal: todos os image_path são resolvidos (resolve() segue symlinks); com OMNI_ALLOWED_DIRS configurado, caminhos fora do sandbox são rejeitados.
  • Downloads limitados: download é em streaming com teto de 20 MB (Content-Length + contador de bytes).
  • Privacidade: get_image_info retorna EXIF desligado por padrão (include_exif); se ativado e houver GPS, um aviso é adicionado.

🔌 Integração com Opencode

Nota: o servidor agora roda sobre o FastMCP, o que adiciona relatório de progresso e timeouts por ferramenta. O console script omni-image-tools usa o novo entry point src.server_fastmcp:main. O antigo src/server.py permanece como fallback (python -m src.server) por uma release (é ele que emite structuredContent/outputSchema).

Adicione no arquivo ~/.config/opencode/opencode.json:

{
  "mcp": {
    "omni-image-tools": {
      "type": "local",
      "command": ["C:\\caminho\\omni-image-tools-mcp\\.venv\\Scripts\\python.exe", "-m", "src.server"],
      "cwd": "C:\\caminho\\omni-image-tools-mcp",
      "environment": {
        "OMNI_VISION_PROVIDER": "ollama",
        "OMNI_VISION_DEFAULT_MODEL": "qwen3-vl:2b"
      },
      "enabled": true
    }
  }
}

Ollama (local, gratuito)

"environment": {
  "OMNI_VISION_PROVIDER": "ollama",
  "OMNI_VISION_DEFAULT_MODEL": "qwen3-vl:2b"
}

OpenAI (nuvem, pago)

Requer API key.

"environment": {
  "OMNI_VISION_PROVIDER": "openai",
  "OMNI_VISION_API_KEY": "sk-proj-sua-chave-aqui",
  "OMNI_VISION_DEFAULT_MODEL": "gpt-5.4-mini"
}

OpenRouter (nuvem, barato)

Requer API key.

"environment": {
  "OMNI_VISION_PROVIDER": "openrouter",
  "OMNI_VISION_API_KEY": "sk-or-v1-sua-chave-aqui",
  "OMNI_VISION_DEFAULT_MODEL": "qwen/qwen3-vl-32b-instruct"
}

MiniMax (nuvem, MiniMax-M3)

Requer API key da MiniMax.

"environment": {
  "OMNI_VISION_PROVIDER": "minimax",
  "MINIMAX_API_KEY": "{env:MINIMAX_API_KEY}",
  "OMNI_VISION_DEFAULT_MODEL": "MiniMax-M3"
}

Para a plataforma China, adicione "MINIMAX_BASE_URL": "https://api.minimaxi.com/v1".

Lembrete: O command deve apontar para o python.exe da pasta .venv do projeto. Depois de alterar, reinicie o opencode.

Também funciona no Claude Desktop e Cursor IDE.


🖥️ Gerenciamento de Memória GPU

Só se aplica se você usa Ollama (local).

Quando você usa Ollama, o modelo fica carregado na memória da placa de vídeo. Se você pedir para carregar outro modelo, o sistema automaticamente descarrega o anterior antes de carregar o novo — evitando que a memória estoure.

uv run python scripts/cli.py gpu-status                    # Ver o que está carregado
uv run python scripts/cli.py gpu-status --unload-ollama modelo  # Forçar descarregar

Isso tudo acontece automagicamente — você não precisa se preocupar.


❓ Problemas Comuns

Problema Por que acontece Como resolver
"Provider não encontrado" Você não configurou o provedor Configure OMNI_VISION_PROVIDER
"API Key requerida" Provider de nuvem sem chave Adicione OMNI_VISION_API_KEY
Demora muito para responder Modelo grande em PC fraco Aumente OMNI_VISION_TIMEOUT ou use modelo menor
"Request timed out" Primeira vez usando o modelo O modelo precisa carregar na GPU (só na primeira vez)
GPU sem memória Muitos modelos carregados O sistema gerencia automaticamente

📁 Estrutura do Projeto

src/
├── server.py              # Servidor que se comunica com a IA
├── config.py              # Configurações
├── providers/
│   ├── ollama.py          # Conexão com Ollama (local)
│   ├── openrouter.py      # Conexão com OpenRouter (nuvem)
│   ├── openai.py          # Conexão com OpenAI (nuvem)
│   └── minimax.py         # Conexão com MiniMax (nuvem, M3)
├── tools/
│   ├── vision/            # Ferramentas de visão (IA)
│   └── processing/        # Ferramentas de processamento (PIL)
└── utils/
    └── gpu_memory.py      # Controle de memória da GPU

📄 Licença

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

omni_image_tools_mcp-0.6.1.tar.gz (83.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

omni_image_tools_mcp-0.6.1-py3-none-any.whl (49.0 kB view details)

Uploaded Python 3

File details

Details for the file omni_image_tools_mcp-0.6.1.tar.gz.

File metadata

  • Download URL: omni_image_tools_mcp-0.6.1.tar.gz
  • Upload date:
  • Size: 83.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for omni_image_tools_mcp-0.6.1.tar.gz
Algorithm Hash digest
SHA256 2e7e482b9af88e48bfabd023a0da233097c7af6b2fcdfdcbdf11e4684c248865
MD5 ed1ee0e660bc76ce62e93fd2aec95140
BLAKE2b-256 837cdf30597762d89cda6ce2a61b6a78e926549839db2f065455602cb2e13938

See more details on using hashes here.

Provenance

The following attestation bundles were made for omni_image_tools_mcp-0.6.1.tar.gz:

Publisher: publish.yml on alexlivre/omni-image-tools-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omni_image_tools_mcp-0.6.1-py3-none-any.whl.

File metadata

File hashes

Hashes for omni_image_tools_mcp-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 75cf47678603efd4811d3eaf0aaf95459bb74226eccdaf5fea23fc7dddd774a1
MD5 d30a0fbed3ced73f66bcbbae3c71c4a2
BLAKE2b-256 1b4cb8d9121405729db426ecef9801f316355fc48afbe357bb64c8ff71d514ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for omni_image_tools_mcp-0.6.1-py3-none-any.whl:

Publisher: publish.yml on alexlivre/omni-image-tools-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page