Obsah

OpenCode: MCP server pro generování obrázků přes Gemini

Úvodní Kontext

Potřeboval jsem v OpenCode zprovoznit MCP server, který umí generovat obrázky přes Gemini, a chtěl jsem to mít reprodukovatelné v projektech bez úniku API klíče do gitu. Začal jsem s nano-banana-pro MCP serverem, ale kvůli limitacím se zdrojovými obrázky jsem přešel na ultimate-gemini-mcp.

Předpoklady

Klíčové Kroky / Konfigurace

A) Konfigurace nano-banana-pro MCP v opencode.json

Konfigurace MCP serveru

Takto jsem měl nakonfigurovaný MCP server v opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
      "nano-banana-pro": {
        "type": "local",
        "command": ["npx", "-y", "@rafarafarafa/nano-banana-pro-mcp@latest"],
        "environment": {
          "GEMINI_API_KEY": "{file:./gemini.key}"
        }
      }
    }
}

Uložení GEMINI_API_KEY přes {file:./gemini.key}

Konfiguraci si zálohuji přes git, proto jsem nechtěl, aby byl klíč přímo v opencode.json. Použil jsem referenci na soubor: - "GEMINI_API_KEY": "{file:./gemini.key}"

Tím držím tajemství mimo repozitář a v gitu zůstává jen reprodukovatelná konfigurace.

Kam umístit gemini.key a co obsahuje

Soubor gemini.key musí být umístěn ve stejném adresáři jako konfigurační soubor a musí obsahovat čistě API klíč.

Co přesně se spouští

Volání MCP serveru funguje tak, že se zavolá příkaz npx -y @rafarafarafa/nano-banana-pro-mcp@latest a zároveň se provede případná aktualizace MCP serveru.

Ověření připojení

Takto ověřím, zda OpenCode přijal konfiguraci MCP serveru:

opencode mcp list
 
┌  MCP Servers
│
●  ✓ nano-banana-pro connected
│      npx -y @rafarafarafa/nano-banana-pro-mcp@latest
│
└  1 server(s)

Poznámka k lokální konfiguraci

Pokud server není globálně, musím spouštět příkaz v projektové složce, ve které mám konfiguraci.

B) Proč jsem měnil server (limitace se zdrojovými obrázky / base64)

Protože jsem MCP serveru nemohl dávat zdrojové obrázky, spoléhal na base64 na vstupu a to by musel LLM poslat textově nesmyslně dlouhý řetězec, zvolil jsem jiný MCP server: anand-92/ultimate-image-gen-mcp

C) Instalace uv a spuštění ultimate-gemini-mcp

Zdrojový kód MCP serveru: github.com/anand-92/ultimate-image-gen-mcp

Pro instalaci jsem musel nainstalovat nejdříve uvw a pak nainstalovat MCP server:

# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
 
# Install and run the server
uvx ultimate-gemini-mcp

D) Konfigurace ultimate-gemini-mcp v opencode.json

Takto vypadá moje konfigurace opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
      "ultimate-gemini-mcp": {
        "type": "local",
        "command": ["uvx", "ultimate-gemini-mcp@latest"],
        "environment": {
          "GEMINI_API_KEY": "{file:./gemini.key}",
          "OUTPUT_DIR": "/home/ubuntu/gemini_images"
        }
      }
  },
  "tools": {
    "ultimate-gemini-mcp_*": false
  }
}

OUTPUT_DIR (proč ho nastavuji a proč volím absolutní cestu)

Musel jsem nastavit výstupní složku. Je nastavena na defaultní ~/gemini_images, ale raději jsem ji dal do absolutní cesty a dal jsem informace i agentovi.

Prakticky mi to zjednodušuje práci napříč projekty: absolutní cesta neřeší, odkud OpenCode/MCP server běží, a výsledky ukládám konzistentně na jedno místo.

@latest a automatická aktualizace

Tím, že je na konci latest, tak by se měl MCP server automaticky aktualizovat.

E) Omezení přístupu k MCP nástrojům jen pro vybraného agenta

Protože mám agenta přímo na psaní promptů pro nano banana, rozhodl jsem se MCP server zpřístupnit jenom jemu.

Udělám to ve dvou krocích: - Globálně zakážu přístup všem agentům přes tools v opencode.json (pattern ultimate-gemini-mcp_*). - V konfiguraci konkrétního agenta přístup explicitně povolím (poslední pravidlo přebíjí).

Tady je konfigurace agenta:

---
description: Orchestrates the complete website creation workflow from initial inputs to final HTML, managing 5 specialized subagents through a structured pipeline. Supports both single-page and multi-page websites with shared design system.
mode: primary
permission:
  task:
    "*": "deny"
    "01-strategicky-analytik": "allow"
    "02-informacni-architekt": "allow"
    "03-web-design-director": "allow"
    "04-konverzni-copywriter": "allow"
    "05-frontend-developer": "allow"
permission:
  external_directory:
    "/home/ubuntu/gemini_images": "allow"
    "/home/ubuntu/gemini_images/*": "allow"
---

Agenta budu volat z různých projektů, tak jsem mu dal i právo přístupu do složky gemini_images, aby se mě pořád neptal na svolení.

Bezpečnost a doporučení

Troubleshooting

Závěr / Výstupy

Zprovoznil jsem MCP generování obrázků v OpenCode nejdřív přes nano-banana-pro a po narážení na limitace se vstupními obrázky jsem přešel na ultimate-gemini-mcp s explicitním OUTPUT_DIR a kontrolou přístupů na úrovni agentů.