====== 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-pro%%'' mám k dispozici ''%%npx%%'' (Node.js).
* Pro variantu ''%%ultimate-gemini-mcp%%'' mám k dispozici ''%%uv%%''/''%%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: [[https://github.com/anand-92/ultimate-image-gen-mcp|anand-92/ultimate-image-gen-mcp]]
===== C) Instalace uv a spuštění ultimate-gemini-mcp =====
Zdrojový kód MCP serveru: [[https://github.com/anand-92/ultimate-image-gen-mcp|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_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.
===== Troubleshooting =====
* ''%%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ě).
* 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.key%%'' leží vedle ''%%opencode.json%%'' a 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ů.