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
- Mám nainstalovaný OpenCode a používám konfiguraci
opencode.json. - Mám přístup ke Gemini API klíči (
GEMINI_API_KEY). - Pro variantu
nano-banana-promám k dispozicinpx(Node.js). - Pro variantu
ultimate-gemini-mcpmám k dispoziciuv/uvx.
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í
- Neukládám
GEMINI_API_KEYdoopencode.json; používám{file:./gemini.key}. gemini.keynepřidávám do gitu; typicky ho dávám do.gitignore(doporučení) a sdílím ho jen bezpečným kanálem.OUTPUT_DIRdržím mimo repozitář a beru ho jako pracovní výstupní složku.
Troubleshooting
opencode mcp listneukazuje server: spouštím příkaz v projektové složce, kde mámopencode.json(pokud konfiguraci nemám globálně).- Server je nakonfigurovaný, ale negeneruje výstupy: ověřím, že existuje a je zapisovatelný adresář nastavený v
OUTPUT_DIR. - Autentizace nefunguje: ověřím, že
gemini.keyleží vedleopencode.jsona obsahuje pouze samotný API klíč bez dalších znaků.
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ů.