AI Access MCP: Ať se tvůj AI asistent zeptá Gemini a GPT
Každý model je dobrý v něčem jiném: Gemini přečte pár set stran naráz a přepíše text tak, aby se dobře četl, GPT kreslí obrázky a tvůj asistent zná tvůj kód. AI Access MCP dovolí tvému AI asistentovi předat každou úlohu modelu, který ji umí nejlíp, a ty přitom nenapíšeš ani řádek PHP.
K čemu to je
AI asistenti jako Cursor, Gemini CLI nebo Claude Code umějí používat nástroje. Nástroj je cokoli, co asistent smí zavolat, zatímco pro tebe pracuje: přečíst soubor, spustit testy, podívat se do databáze. Nástroje se k asistentovi dostávají přes MCP (Model Context Protocol), společný způsob, jak je připojit, takže jednou napsaný nástroj funguje v každém asistentovi, který MCP umí.
AI Access MCP je takový nástroj postavený na téhle knihovně. Dá tvému asistentovi dvě schopnosti, které sám nemá:
generate_textse zeptá jiného modelu. Gemini nebo GPT přečte soubory, odpoví, přepíše, přeloží nebo dá druhý názor.generate_imagenakreslí obrázek modelem od OpenAI a uloží ho do souboru, který asistent určí.
S asistentem dál mluvíš, jak jsi zvyklý, a jen mu řekneš, koho se má zeptat:
Ať Gemini přepíše text v
docs/install.mdtak, aby ho pochopil začátečník, a návrh ulož vedle.
Instalace
Server je samostatný PHP projekt. Ulož ho kamkoli na svém počítači:
composer create-project ai-access/mcp ai-access-mcp
Potřebuje PHP 8.4 nebo novější s rozšířeními curl a gd a klíč z Google AI Studia pro Gemini, od OpenAI pro GPT a obrázky, nebo oba.
Připojení k asistentovi
Server si asistent spouští sám, ty mu jen řekneš jak. V Claude Code k tomu slouží soubor .mcp.json
v kořeni projektu:
{
"mcpServers": {
"ai-access": {
"command": "php",
"args": ["/path/to/ai-access-mcp/server.php"],
"env": {
"GEMINI_API_KEY_FILE": "/home/me/keys/gemini.txt",
"OPENAI_API_KEY_FILE": "/home/me/keys/openai.txt",
"AI_ACCESS_READ_ROOTS": "/home/me/projects",
"AI_ACCESS_WRITE_ROOTS": "/home/me/projects"
}
}
}
}
Všimni si, že samotné klíče v souboru nejsou. Každá proměnná obsahuje jen cestu k souboru s klíčem, takže
konfiguraci můžeš sdílet i commitnout, aniž bys klíče prozradil. Nástroj se objeví, jen když má jeho provider klíč:
se samotným klíčem od Gemini dostaneš generate_text, s klíčem od OpenAI oba nástroje.
Kořeny říkají, ve kterých adresářích smějí nástroje číst a zapisovat; na Windows se oddělují ;,
jinde :. Dokud je nenastavíš, server nesáhne na žádný soubor. Víc o tom níže.
Ostatní asistenti berou stejný blok, jen z jiného souboru:
| Asistent | Kam |
|---|---|
| Claude Code | .mcp.json v projektu, nebo pro všechny projekty claude mcp add --scope user |
| Claude Desktop | claude_desktop_config.json ve složce s nastavením aplikace |
| Cursor | .cursor/mcp.json v projektu, nebo ~/.cursor/mcp.json |
| Gemini CLI | .gemini/settings.json v projektu, nebo ~/.gemini/settings.json |
Výchozí modely jsou gemini-3.8-flash pro text a gpt-image-2 pro obrázky. Proměnné
AI_ACCESS_TEXT_MODEL a AI_ACCESS_IMAGE_MODEL je změní a asistent si model může zvolit i pro jedno
volání.
Dotaz na jiný model
Když asistenta požádáš, ať přes Gemini přepíše docs/install.md, zavolá generate_text
takhle:
{
"prompt": "Rewrite the prose of docs/install.md so a beginner can follow it. Keep code blocks and links as they are.",
"files": ["/home/me/projects/app/docs/install.md"],
"effort": "high",
"outputFile": "/home/me/projects/app/docs/install.proposal.md"
}
Soubor se předává cestou, ne obsahem. Server si ho přečte sám a model ho dostane označený cestou, jak byla zapsaná, takže se na něj prompt může odvolat:
<file path="/home/me/projects/app/docs/install.md">
...obsah souboru beze změny...
</file>
Proč na tom záleží? Dlouhý text, který by šel přes asistenta, by mu zaplnil kontext a zaplatil bys ho dvakrát, jednou
asistentovi a jednou Gemini. Takhle putuje rovnou z disku do Gemini. S outputFile jde do nového souboru
i odpověď a asistent dostane zpátky jen krátkou zprávu: model, tokeny, kolik volání stálo, a v problem
cokoli, co se pokazilo, třeba odpověď, kterou model nedokončil.
Odpověď se může řídit JSON schématem v responseSchema a server zkontroluje, že to opravdu dělá. Každý
výsledek nese conversation, a když ho asistent pošle zpátky, pokračuje stejný rozhovor: „tyhle tři řádky
jsou pořád špatně, oprav je“. Model, instrukce i všechno dříve poslané v něm zůstávají.
Dlouhé vstupy a cache Gemini
Některá práce přichází v dávkách s velkým společným vstupem. Přepisuješ manuál stránku po stránce a Gemini
má pokaždé vidět stránky, které už jsou hotové, aby držel stejná slova a tón. Na to je context: soubory
společné voláním dávky.
U Gemini server uloží kontext spolu s instrukcemi do explicitní cache. Každé další volání se stejným modelem,
instrukcemi a kontextem ji čte za desetinu ceny vstupu a výsledek ti řekne, jestli cache vznikla (created), nebo
se použila (reused), a kolik tokenů z ní šlo. Jiný kontext cache nahradí a kontext příliš krátký na cache
se pošle obyčejně. Uložení cache se platí po hodinách; výsledek to hlásí jako storageCostPerHour.
Generování obrázků
generate_image dostane prompt a absolutní cestu k novému souboru. Jeho přípona .png,
.jpg nebo .webp určí formát a size, quality a background
znamenají totéž, co u generování obrázků od OpenAI. S
referenceImages model obrázek upraví nebo z něj vychází.
Vedle obrázku server zapíše prompt do souboru .txt se stejným jménem, takže vždycky víš, z čeho
obrázek vznikl. Výsledek nese malý náhled, takže asistent vidí, co vyšlo, a může ti to říct.
Před čím tě chrání
Model, který předává práci jinému, utrácí skutečné peníze, a dělá to v rozhovoru, ve kterém může být text z webu nebo z e-mailu. Server s tím počítá:
- Ptá se na tvůj souhlas. Jeho instrukce asistentovi říkají, že každé volání stojí peníze a běží jen s tvým výslovným souhlasem a že obrázek posuzuješ jen ty.
- Nikdy nezaplatí jednu odpověď dvakrát. Požadavek, který se mohl k providerovi dostat, se po vypršení času ani po spadlém spojení neopakuje, ani když to po cestě vzdá brána. Postará se o to RetryClient z této knihovny.
- Nikdy nepřepíše soubor. Jméno výstupu si zarezervuje ještě před placeným voláním, takže dva asistenti pracující naráz nikdy nezapíšou tentýž soubor a obsazené jméno nic nestojí.
- Čte a zapisuje jen tam, kde dovolíš. Mimo kořeny na nic nesáhne a adresář se souborem klíče a soubory
.envodmítne i uvnitř nich. Textové odpovědi zapíše jen jako.txt,.md,.jsona podobné, nikdy jako skript.
Kolik to stojí
Každý výsledek nese cost, cenu volání v USD, a sessionCost, součet od spuštění serveru,
takže přímo v rozhovoru vidíš, kam peníze jdou. Ceny pocházejí z ceníku v balíčku, který zná i data, kdy je
provideři mění; u modelu, který v něm chybí, je cena null.