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.
opencode.json.GEMINI_API_KEY).nano-banana-pro mám k dispozici npx (Node.js).ultimate-gemini-mcp mám k dispozici uv/uvx.
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}"
}
}
}
}
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.
Soubor gemini.key musí být umístěn ve stejném adresáři jako konfigurační soubor a musí obsahovat čistě API klíč.
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.
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)
Pokud server není globálně, musím spouštět příkaz v projektové složce, ve které mám konfiguraci.
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
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
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
}
}
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.
Tím, že je na konci latest, tak by se měl MCP server automaticky aktualizovat.
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í.
GEMINI_API_KEY do opencode.json; používám {file:./gemini.key}.gemini.key nepř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_DIR držím mimo repozitář a beru ho jako pracovní výstupní složku.opencode mcp list neukazuje server: spouštím příkaz v projektové složce, kde mám opencode.json (pokud konfiguraci nemám globálně).OUTPUT_DIR.gemini.key leží vedle opencode.json a obsahuje pouze samotný API klíč bez dalších znaků.
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ů.