Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
| ai:mcp:nastroje:mcpc [05.05.2026 09:47] – Nový článek: mcpc – univerzální CLI klient pro MCP Petr Nosek | ai:mcp:nastroje:mcpc [10.05.2026 20:06] (aktuální) – Uprava instalace mcpc pres Bun bez sudo Petr Nosek | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| - | ====== mcpc – univerzální CLI klient pro MCP ====== | + | ====== mcpc — univerzální CLI klient pro MCP ====== |
| // | // | ||
| - | [[https:// | + | [[https:// |
| - | ===== Proč mcpc vznikl | + | ===== TL;DR ===== |
| - | Kolem MCP a CLI nástrojů existuje staré pnutí: AI agenti někdy preferují CLI, protože ho znají „nazpaměť", | + | < |
| + | ~/ | ||
| + | ├── mcp.json | ||
| + | ├── secrets.env | ||
| + | └── README.md # lokální dokumentace | ||
| - | Autoři projektu toto dilema pojmenovali přesně: problém není v MCP samotném, ale v tom, jak ho klienti implementují. Většina MCP klientů načítá všechny nástroje i jejich výsledky do kontextu najednou, což zbytečně zvyšuje cenu a způsobuje context rot. mcpc navrhuje jiný přístup: **kombinovat silné stránky obou světů** – MCP pro standardizovaný vzdálený přístup, CLI pro lokální rozhraní agenta. | + | ~/.bashrc |
| + | ~/ | ||
| + | </ | ||
| - | Projekt byl představen na Vibecoding Talks v dubnu 2026 Janem Curnem z Apify. Apify zároveň deklarovalo záměr darovat | + | Volání '' |
| - | ===== Cíle projektu | + | ===== Proč mcpc existuje |
| - | | + | Klasické MCP klienty (Claude Code, OpenCode, Cursor) načtou při startu |
| - | * **Lehký a minimálně závislý** – žádné LLM, funguje | + | |
| - | * **Přátelský pro agenty i lidi** – jeden nástroj, dvě perspektivy použití | + | - **Context bloat** — pokud máš 5 MCP serverů, AI startuje s desítkami až stovkami definic nástrojů, které nikdy nepoužije. Token spotřeba a context rot. |
| - | * **Code mode s --json** – výstup lze skládat v shellu | + | - **Duplicita instancí** — každý AI nástroj si pro každý projekt spawnuje vlastní instanci MCP serveru. Tři projekty = tři běžící Playwright Chromium instance navíc. |
| + | |||
| + | mcpc řeší oboje: | ||
| + | |||
| + | * **Lazy loading**: AI volá '' | ||
| + | | ||
| + | |||
| + | Apify projekt představil na Vibecoding Talks 20. 4. 2026 (Jan Curn) s tezí, | ||
| + | |||
| + | ===== Architektura ===== | ||
| + | |||
| + | < | ||
| + | ┌──────────────┐ | ||
| + | │ AI agent │ ─────────────────▶ │ mcpc CLI │ ────────────────▶ │ bridge │ ────────▶ │ MCP server │ | ||
| + | │ (CC/ | ||
| + | └──────────────┘ | ||
| + | 1 na server) | ||
| + | </code> | ||
| + | |||
| + | * **mcpc CLI** — krátkodobý proces, který volá AI nebo uživatel | ||
| + | * **Bridge** — daemon, který drží MCP připojení živé. Jeden bridge na pojmenovanou session (např. | ||
| + | * **MCP server** — pro HTTP servery vzdálená URL, pro stdio servery child proces bridge | ||
| + | |||
| + | Bridge přežívá mezi voláními — žádný timeout po nečinnosti. Žije, dokud ho explicitně nezavřeš ('' | ||
| ===== Instalace ===== | ===== Instalace ===== | ||
| + | |||
| + | ==== Předpoklad: | ||
| + | |||
| + | mcpc je distribuovaný jako npm balíček, ale globálně ho lze instalovat přes Bun bez '' | ||
| + | |||
| + | ==== Instalace mcpc ==== | ||
| <code bash> | <code bash> | ||
| - | npm install -g @apify/mcpc | ||
| - | # nebo přes Bun | ||
| bun install -g @apify/mcpc | bun install -g @apify/mcpc | ||
| + | |||
| + | # Ověření | ||
| + | mcpc --version | ||
| + | which mcpc | ||
| </ | </ | ||
| - | Na Linuxu bez grafického | + | ==== Headless |
| - | ===== Základní použití ===== | + | mcpc ukládá tajnosti (OAuth tokeny, bearer tokeny) do **OS keychainu** přes Secret Service API. Na desktopu (GNOME, KDE) to funguje automaticky. **Na headless systémech mcpc bezproblémově fallbackuje na file-based credential store** v '' |
| - | ==== Připojení a sessions ==== | + | To znamená: **na Dockeru/ |
| - | mcpc pracuje s pojmenovanými sessions prefixovanými '' | + | Pokud chceš plnohodnotný OS keychain i v headless (ne nutné): |
| <code bash> | <code bash> | ||
| - | # Přihlášení a připojení k serveru | + | # Ubuntu |
| - | mcpc login mcp.apify.com | + | sudo apt install -y libsecret-1-0 gnome-keyring dbus |
| - | mcpc connect mcp.apify.com @apify | + | |
| - | # Výpis dostupných nástrojů | + | # Alpine |
| - | mcpc @apify tools-list | + | sudo apk add libsecret gnome-keyring dbus |
| - | # Volání nástroje | + | # Pak pouštět |
| - | mcpc @apify tools-call search-actors keywords:="website crawler" | + | dbus-run-session -- bash -c "echo -n ' |
| + | </ | ||
| - | # Interaktivní shell | + | V drtivé většině případů to není potřeba. |
| - | mcpc @apify shell | + | |
| + | ===== Centralizovaný hub config ===== | ||
| + | |||
| + | Nyní k praktické části — jak nakonfigurovat mcpc tak, aby ho mohl AI agent využívat z více nástrojů, byly tajnosti izolované a přidávání nových serverů bylo triviální. | ||
| + | |||
| + | ==== Filozofie ==== | ||
| + | |||
| + | * **Jeden soubor pro všechny servery** ('' | ||
| + | * **Jeden soubor pro všechny tajnosti** ('' | ||
| + | * **Bash funkce v '' | ||
| + | * **Registr serverů v '' | ||
| + | |||
| + | ==== Struktura ==== | ||
| + | |||
| + | < | ||
| + | ~/ | ||
| + | ├── README.md | ||
| + | ├── mcp.json | ||
| + | └── secrets.env | ||
| + | |||
| + | ~/ | ||
| + | ~/ | ||
| + | ~/ | ||
| + | ~/ | ||
| </ | </ | ||
| - | Stav session může být: 🟢 live, 🟡 connecting / reconnecting / disconnected / crashed, 🔴 unauthorized / expired. | + | ==== Nastavení krok za krokem ==== |
| + | |||
| + | === 1. Vytvoř hub adresář a config === | ||
| <code bash> | <code bash> | ||
| - | mcpc @apify restart | + | mkdir -p ~/.config/mcpc |
| - | mcpc @apify close | + | cat > ~/.config/mcpc/mcp.json <<' |
| + | { | ||
| + | " | ||
| + | } | ||
| + | EOF | ||
| </ | </ | ||
| - | ==== Hledání nástrojů napříč sessions ==== | + | === 2. Vytvoř '' |
| <code bash> | <code bash> | ||
| - | # Hledání napříč všemi sessions | + | touch ~/ |
| + | chmod 600 ~/ | ||
| + | </ | ||
| + | |||
| + | === 3. Přidej bash funkci do '' | ||
| + | |||
| + | <code bash> | ||
| + | cat >> ~/.bashrc <<' | ||
| + | |||
| + | # mcpc — load secrets only into mcpc subshell, not the interactive shell | ||
| + | mcpc() { | ||
| + | if [ -f " | ||
| + | ( set -a; . " | ||
| + | else | ||
| + | command mcpc " | ||
| + | fi | ||
| + | } | ||
| + | EOF | ||
| + | |||
| + | source ~/.bashrc | ||
| + | type mcpc # mcpc is a function | ||
| + | </ | ||
| + | |||
| + | **Jak to funguje: | ||
| + | |||
| + | * Závorky '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * Subshell skončí → tajnosti zaniknou, parent shell je nedotčený | ||
| + | |||
| + | **Ověření izolace: | ||
| + | |||
| + | <code bash> | ||
| + | echo " | ||
| + | mcpc @ctx tools-list | ||
| + | echo " | ||
| + | </ | ||
| + | |||
| + | === 4. Přidej sekci do '' | ||
| + | |||
| + | V Claude Code je globální konfigurace v '' | ||
| + | |||
| + | <code bash> | ||
| + | mkdir -p ~/.claude | ||
| + | ln -s ~/ | ||
| + | </ | ||
| + | |||
| + | (Pokud '' | ||
| + | |||
| + | Do '' | ||
| + | |||
| + | <code markdown> | ||
| + | # MCP servery přes mcpc | ||
| + | |||
| + | MCP servery se nepřipojují nativně v Claude Code/ | ||
| + | |||
| + | ## Dostupné servery | ||
| + | |||
| + | | Entry | Session | Popis | Pozn. | | ||
| + | |---|---|---|---| | ||
| + | | (přidávej řádky podle reálně nakonfigurovaných serverů) | | | | | ||
| + | |||
| + | ## Quick start (platí pro libovolný entry z tabulky) | ||
| + | |||
| + | ```bash | ||
| + | HUB=~/ | ||
| + | mcpc connect $HUB:< | ||
| + | mcpc @< | ||
| + | mcpc @< | ||
| + | mcpc @< | ||
| + | mcpc --json @< | ||
| + | ``` | ||
| + | |||
| + | **Sessions jsou warm pool — nezavírej je po dokončení úkolu.** Drží se v paměti záměrně kvůli rychlosti dalších volání. `mcpc @< | ||
| + | |||
| + | **Servery s API klíčem:** hodnota patří do `~/ | ||
| + | </ | ||
| + | |||
| + | ===== Recept: přidat nový MCP server ===== | ||
| + | |||
| + | Tři varianty podle typu serveru. | ||
| + | |||
| + | ==== A. HTTP server s API klíčem (např. context7, Apify, GitHub MCP) ==== | ||
| + | |||
| + | **1. Přidej klíč do '' | ||
| + | |||
| + | <code bash> | ||
| + | echo ' | ||
| + | </ | ||
| + | |||
| + | (Žádné mezery kolem '' | ||
| + | |||
| + | **2. Přidej entry do '' | ||
| + | |||
| + | <code json> | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Některé servery chtějí standardní '' | ||
| + | |||
| + | <code json> | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | mcpc umí libovolný název headeru. | ||
| + | |||
| + | **3. Otestuj: | ||
| + | |||
| + | <code bash> | ||
| + | mcpc connect ~/ | ||
| + | mcpc @ctx tools-list | ||
| + | </ | ||
| + | |||
| + | **4. Aktualizuj tabulku v '' | ||
| + | |||
| + | < | ||
| + | | `context7` | `@ctx` | Aktuální dokumentace knihoven, frameworků, | ||
| + | </ | ||
| + | |||
| + | ==== B. stdio server (lokální proces, většinou bez klíče) ==== | ||
| + | |||
| + | **1. Entry v '' | ||
| + | |||
| + | <code json> | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ], | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | **Pozor:** stdio podproces dědí z prostředí jen whitelist ('' | ||
| + | |||
| + | **2. Otestuj a aktualizuj AGENTS.md** (stejně jako varianta A). | ||
| + | |||
| + | ==== C. HTTP server bez autentizace ==== | ||
| + | |||
| + | **1. Entry s jen '' | ||
| + | |||
| + | <code json> | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | **2. Otestuj a aktualizuj AGENTS.md.** | ||
| + | |||
| + | ===== Použití ===== | ||
| + | |||
| + | ==== Základní příkazy ==== | ||
| + | |||
| + | <code bash> | ||
| + | # Přehled aktivních sessions a OAuth profilů | ||
| + | mcpc | ||
| + | |||
| + | # Připojit (idempotentní — když session už existuje, jen potvrdí) | ||
| + | mcpc connect ~/ | ||
| + | |||
| + | # Detail serveru, capabilities, | ||
| + | mcpc @< | ||
| + | |||
| + | # Seznam toolů | ||
| + | mcpc @< | ||
| + | mcpc @< | ||
| + | |||
| + | # Plné schéma jednoho toolu | ||
| + | mcpc @< | ||
| + | |||
| + | # Zavolat tool | ||
| + | mcpc @< | ||
| + | |||
| + | # Hledání napříč | ||
| mcpc grep " | mcpc grep " | ||
| - | # Hledání jen v konkrétní | + | # Interaktivní shell |
| - | mcpc @apify grep " | + | mcpc @< |
| + | |||
| + | # Restart bridge (ztratí state, ale obnoví spojení) | ||
| + | mcpc @< | ||
| + | |||
| + | # Zavřít | ||
| + | mcpc @< | ||
| + | |||
| + | # Úklid (live sessions zachová, smaže staré logy a zombie sockety) | ||
| + | mcpc clean | ||
| + | |||
| + | # Nuclear option — všechno | ||
| + | mcpc clean all | ||
| </ | </ | ||
| - | ==== Code mode (--json) | + | ==== Argumenty toolů |
| - | Pro použití v AI agentech nebo shellových skriptech | + | <code bash> |
| + | # String, number, bool — auto-parsing JSON | ||
| + | mcpc @s tools-call search query: | ||
| + | |||
| + | # Force string z čísla | ||
| + | mcpc @s tools-call get-by-id id:='" | ||
| + | |||
| + | # Inline JSON object (první arg začíná { nebo [) | ||
| + | mcpc @s tools-call create | ||
| + | |||
| + | # Z stdin | ||
| + | echo ' | ||
| + | </ | ||
| + | |||
| + | ==== Code mode (JSON pipelines) ==== | ||
| <code bash> | <code bash> | ||
| + | # Strojový JSON výstup | ||
| mcpc --json @apify tools-call search-actors keywords: | mcpc --json @apify tools-call search-actors keywords: | ||
| - | | jq ' | + | | jq -r ' |
| + | |||
| + | # Skládání přes pipe | ||
| + | mcpc --json @s1 tools-call get-data \ | ||
| + | | ||
| + | | xargs -I {} mcpc @s2 tools-call process id: | ||
| </ | </ | ||
| - | Tento přístup je klíčový pro efektivní integraci s AI agenty: agent nepotřebuje znát celou definici MCP serveru dopředu, ale může nástroje postupně objevovat přes '' | + | ===== Operační charakteristiky ===== |
| - | ===== Klíčové funkce ===== | + | ==== Cold start ==== |
| - | ==== Persistentní sessions a auth profily ==== | + | * **První '' |
| + | * **Další '' | ||
| + | * **Tool call přes existující session**: sub-sekundový režijní overhead, samotný call záleží na serveru | ||
| - | Přihlašovací údaje jsou uloženy | + | Pro AI workflow je proto idiomatické **vždy začít '' |
| - | Podporované metody autentizace: | + | ==== Warm pool memory ==== |
| - | * Anonymní přístup (veřejné servery) | + | Bridge proces drží spojení a typicky i podproces serveru |
| - | * Bearer tokeny (přes flag '' | + | |
| - | * OAuth 2.1 s plnou registrací klienta | + | |
| - | * x402 platby (viz níže) | + | |
| - | ==== Postupné objevování nástrojů ==== | + | ^ Stav ^ Typický RSS ^ |
| + | | Bridge bez spuštěného podprocesu | ~95 MB (node) | | ||
| + | | Bridge + lehký HTTP server (context7) | ~95 MB | | ||
| + | | Bridge + stdio server bez browseru (typický playwright neaktivní) | ~285 MB | | ||
| + | | Bridge + stdio server s otevřeným headless Chromium (playwright aktivní, perplexity) | 1.2–2.0 GB | | ||
| - | Místo načtení všech nástrojů do kontextu najednou může agent použít '' | + | Memory **nestoupá nekontrolovatelně** — pool má fixní velikost. Po opakovaných voláních RSS osciluje kolem stabilní hodnoty (±50 MB). |
| - | ==== Asynchronní úlohy | + | ==== Sessions persistence |
| - | mcpc podporuje MCP async tasks – dlouhotrvající operace, které server spustí na pozadí. Klient může sledovat jejich průběh a výsledky | + | * Sessions přežívají mezi Claude Code/ |
| + | * Bridge zemře jen na: explicitní '' | ||
| + | * '' | ||
| - | ==== MCP proxy pro sandboxované agenty | + | ===== Troubleshooting |
| + | |||
| + | ==== „Bridge failed to start: socket file not created within timeout" | ||
| + | |||
| + | Bridge se spustil, ale rychle umřel a parent CLI to interpretoval jako timeout. **Skutečnou příčinu hledej v bridge logu**: | ||
| <code bash> | <code bash> | ||
| - | mcpc connect | + | cat ~/.mcpc/ |
| </ | </ | ||
| - | Proxy režim izoluje přihlašovací údaje před AI agentem. Agent komunikuje přes proxy, ale k samotným credentials nemá přístup – důležité pro bezpečné nasazení v sandboxovaných prostředích, | + | Časté |
| - | ==== x402 platby ==== | + | * **Auth chyba** (HTTP 401) — server vyžaduje klíč, ale '' |
| + | * **Stdio command nenalezen** — chybí '' | ||
| + | * **Stdio podproces napsal na stderr** — bridge log ti tail stderr ukáže (řádky s '' | ||
| - | mcpc implementuje protokol [[https://x402.org|x402]] | + | ==== „Page not initialized" |
| + | |||
| + | Cold-start race: první '' | ||
| + | |||
| + | <code bash> | ||
| + | mcpc connect ~/ | ||
| + | sleep 8 # dej serveru čas na inicializaci | ||
| + | mcpc @px tools-call search query: | ||
| + | </code> | ||
| + | |||
| + | ==== „401 Unauthorized" | ||
| + | |||
| + | Server odmítl klíč: | ||
| + | |||
| + | - Zkontroluj, že hodnota v '' | ||
| + | - Restartuj session, ať mcpc znovu načte resolved config: | ||
| + | |||
| + | <code bash> | ||
| + | mcpc @< | ||
| + | mcpc connect ~/ | ||
| + | </ | ||
| + | |||
| + | ==== Memory roste neúměrně ==== | ||
| + | |||
| + | mcpc samo nemá memory leak. Pokud RSS roste: | ||
| + | |||
| + | - Spusť '' | ||
| + | - '' | ||
| + | - Pro restart konkrétního serveru: '' | ||
| + | - Pro všeobecný úklid: '' | ||
| + | |||
| + | ==== Bash funkce se neuplatňuje ==== | ||
| + | |||
| + | <code bash> | ||
| + | type mcpc | ||
| + | # Pokud výstup je "/ | ||
| + | source ~/.bashrc | ||
| + | type mcpc | ||
| + | # Teď musí být "is a function" | ||
| + | </ | ||
| + | |||
| + | V neinteraktivních shellech (CI, některé hooks) se '' | ||
| + | |||
| + | ===== Bezpečnost a izolace ===== | ||
| + | |||
| + | ==== Subshell isolation pattern ==== | ||
| + | |||
| + | Bash funkce '' | ||
| + | |||
| + | ^ Co ^ S auto-source v '' | ||
| + | | '' | ||
| + | | Jiný proces čte ''/ | ||
| + | | Náhodný npm balíček spuštěný uživatelem | vidí klíč ⚠️ | bez klíče ✅ | | ||
| + | | '' | ||
| + | |||
| + | ==== Co AI agent vidí vs. nevidí ==== | ||
| + | |||
| + | < | ||
| + | ✅ AI vidí: | ||
| + | ✅ AI vidí: | ||
| + | ❌ AI nevidí: | ||
| + | ❌ AI nevidí: | ||
| + | ❌ AI nevidí: | ||
| + | </ | ||
| + | |||
| + | ==== MCP proxy pro hard sandbox ==== | ||
| + | |||
| + | Pro nedůvěryhodný kód můžeš spustit mcpc v proxy režimu: | ||
| + | |||
| + | <code bash> | ||
| + | # Ty jako uživatel: vytvoř autentizovanou session s proxy serverem | ||
| + | mcpc connect ~/ | ||
| + | |||
| + | # AI v sandboxu: připojí se na proxy bez znalosti původních credentials | ||
| + | mcpc connect localhost: | ||
| + | mcpc @sandboxed tools-call search-actors keywords: | ||
| + | </ | ||
| + | |||
| + | AI vidí jen rozhraní proxy, ne původní OAuth tokeny ani API klíče. | ||
| + | |||
| + | ===== Dokumentační workflow pro fresh stroj ===== | ||
| + | |||
| + | Pro nasazení na nový stroj (např. Docker image, nový server): | ||
| + | |||
| + | - **Instalace mcpc** — viz sekce „Instalace" | ||
| + | - **Vytvoř hub config** — '' | ||
| + | - **Vytvoř '' | ||
| + | - **Přidej bash funkci** do '' | ||
| + | - **Vytvoř '' | ||
| + | - **Přidej sekci do '' | ||
| + | - **Postupně přidávej servery** dle Receptu výše | ||
| + | |||
| + | Šablonu hub '' | ||
| ===== Podpora MCP funkcí ===== | ===== Podpora MCP funkcí ===== | ||
| Řádek 119: | Řádek 507: | ||
| | Stránkování výsledků | ✅ automatické | | | Stránkování výsledků | ✅ automatické | | ||
| | Asynchronní úlohy | ✅ | | | Asynchronní úlohy | ✅ | | ||
| + | | OAuth 2.1 + PKCE + DCR + CIMD | ✅ | | ||
| + | | x402 platby | ✅ (experimentální) | | ||
| | Roots / Elicitation / Completion | 🚧 plánováno | | | Roots / Elicitation / Completion | 🚧 plánováno | | ||
| - | | Sampling | ❌ neaplikovatelné | + | | Sampling | ❌ neaplikovatelné |
| - | + | ||
| - | ===== Bezpečnost ===== | + | |
| - | + | ||
| - | * OAuth tokeny uloženy výhradně v OS keychain, nikdy na disk | + | |
| - | * Credentials předávány přes Unix socket IPC, ne přes prostředí | + | |
| - | * HTTPS vynuceno pro vzdálené servery | + | |
| - | * OAuth callback vázán pouze na localhost | + | |
| - | * x402 wallet klíče s oprávněním '' | + | |
| - | * Credentials nejsou logovány ani ve verbose režimu | + | |
| - | + | ||
| - | ===== Kontext vzniku ===== | + | |
| - | + | ||
| - | Jan Curn z Apify projekt představil na Vibecoding Talks 20. dubna 2026 s tezí: „CLI is better than MCP" je falešná dichotomie. Správná odpověď je MCP + CLI – využít standardizovaný protokol pro vzdálený přístup a shell jako lokální rozhraní agenta. Apify chce mcpc darovat Agentic AI Foundation jako zárodek oficiálního SDK pro shell, které dosud v MCP ekosystému chybí. | + | |
| ===== Zdroje ===== | ===== Zdroje ===== | ||
| * [[https:// | * [[https:// | ||
| - | * [[https://apify.com|Apify]] – autoři projektu | + | * [[https://github.com/ |
| + | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| - | * Vibecoding Talks, 20. 4. 2026 – Jan Curn (@jancurn), Apify | + | |
| + | | ||