MCP server a Model Context Protocol — návod
Co je Model Context Protocol
Model Context Protocol (MCP) je otevřený standard pro propojení AI asistentů s externími nástroji a daty. Klient (Claude Code, Claude Desktop, IDE, vlastní agent) se připojí k MCP serveru, zjistí, co server nabízí, a model pak tyto schopnosti volá. Jeden server tak slouží všem klientům, kteří protokol podporují. Pro širší koncepty vývoje AI viz Vývoj AI .
Kdy ho použít
- Model má pracovat s vlastním systémem — databází, CMS, ticketovacím systémem, interním API
- Stejnou integraci má používat víc klientů nebo agentů
- Ladíte spojení mezi MCP klientem a serverem
- Rozhodujete, zda má být nová schopnost nástroj, zdroj, nebo prompt
Architektura
- Host — aplikace, ve které běží model (Claude Code, IDE, chatovací aplikace).
- Klient — část hostu, která drží spojení s jedním serverem. Na každý server jeden klient.
- Server — program, který nabízí schopnosti. Zprávy jsou JSON-RPC 2.0.
Server nabízí tři druhy schopností:
| Schopnost | Kdo ji řídí | K čemu je | Příklad |
|---|---|---|---|
| Nástroje (tools) | model | akce a dotazy s parametry | create_issue, search_docs |
| Zdroje (resources) | aplikace / uživatel | obsah ke čtení, adresovaný URI | file:///README.md, db://orders/42 |
| Prompty (prompts) | uživatel | připravené šablony zadání | /review-pr |
Klient může serveru naopak nabídnout sampling (server požádá o vygenerování textu modelem), roots (adresáře, se kterými smí pracovat) a elicitation (dotaz na uživatele).
Transporty
- stdio — klient spustí server jako podproces a komunikuje přes standardní vstup a výstup. Pro lokální nástroje; žádná síť ani autentizace.
- Streamable HTTP — server běží samostatně na URL a obslouží víc klientů. Pro vzdálené a sdílené servery; patří k němu autentizace (OAuth nebo token v hlavičce).
Starší transport HTTP+SSE je ve specifikaci nahrazen Streamable HTTP; u nových serverů ho nepoužívejte.
Vlastní MCP server v Pythonu
pip install "mcp[cli]"
# server.py
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Sečte dvě celá čísla."""
return a + b
@mcp.resource("note://{name}")
def note(name: str) -> str:
"""Vrátí poznámku podle názvu."""
return f"Obsah poznámky {name}"
@mcp.prompt()
def review(code: str) -> str:
"""Zadání pro revizi kódu."""
return f"Zkontroluj tento kód a vypiš chyby:\n\n{code}"
if __name__ == "__main__":
mcp.run() # výchozí transport: stdio
Typové anotace a docstring nejsou ozdoba: SDK z nich sestaví JSON schéma a popis nástroje, podle kterých se model rozhoduje, kdy a jak nástroj zavolat. Pro HTTP stačí mcp.run(transport="streamable-http").
Připojení ke klientovi
# Claude Code — lokální server přes stdio
claude mcp add demo -- python /abs/cesta/server.py
# Claude Code — vzdálený server přes HTTP
claude mcp add --transport http notes https://example.com/mcp
claude mcp list # připojené servery a jejich stav
Konfigurace sdílená s týmem patří do souboru .mcp.json v kořeni projektu:
{
"mcpServers": {
"demo": {
"command": "python",
"args": ["/abs/cesta/server.py"],
"env": { "API_TOKEN": "${API_TOKEN}" }
}
}
}
Ladění
npx @modelcontextprotocol/inspector python server.py
MCP Inspector otevře webové rozhraní, kde jde vypsat nástroje, zdroje a prompty serveru a zavolat je ručně — bez modelu a bez klienta. Je to nejrychlejší způsob, jak zjistit, zda je chyba v serveru, nebo v konfiguraci klienta.
Přehled metod protokolu
| Oblast | Metody |
|---|---|
| Životní cyklus | initialize, notifications/initialized, ping |
| Nástroje | tools/list, tools/call, notifications/tools/list_changed |
| Zdroje | resources/list, resources/templates/list, resources/read, resources/subscribe, resources/unsubscribe, notifications/resources/updated, notifications/resources/list_changed |
| Prompty | prompts/list, prompts/get, notifications/prompts/list_changed |
| Logování | logging/setLevel, notifications/message |
| Schopnosti klienta | sampling/createMessage, roots/list, elicitation/create |
| Pomocné | completion/complete, notifications/progress, notifications/cancelled |
Spojení vždy začíná initialize: obě strany si vymění verzi protokolu a capabilities — seznam toho, co která podporuje. Metodu, kterou druhá strana neohlásila, nevolejte.
Časté chyby
| Chyba | Projev | Řešení |
|---|---|---|
print() ve stdio serveru | Klient hlásí chybu parsování nebo se spojení rozpadne — stdout patří JSON-RPC zprávám | Logovat na stderr nebo přes notifications/message |
| Relativní cesty v konfiguraci | Server se nespustí, protože klient má jiný pracovní adresář | Absolutní cesty k interpretu i skriptu |
| Chybějící proměnné prostředí | Server běží, ale volání API selhávají | Předat je v env konfigurace; klient shell profil nenačítá |
| Vágní popis nástroje | Model nástroj nevolá, nebo ho volá ve špatnou chvíli | Popsat, co nástroj dělá, kdy ho použít a co vrací |
| Desítky nástrojů na jednom serveru | Popisy zaplní kontext a model si mezi nimi vybírá hůř | Méně nástrojů s jasným účelem, servery dělit podle domény |
| Obří výstup nástroje | Kontext se zaplní jedním voláním | Stránkovat, filtrovat a vracet jen potřebná pole |
| Vzdálený server bez autentizace | Kdokoli s URL může volat nástroje | OAuth nebo token, nejmenší nutná oprávnění |
| Důvěra ve výstup nástroje | Text z webu nebo ticketu obsahuje instrukce, které model provede | Brát výstup jako data, viz Útoky na LLM |
Časté otázky
Co je MCP?
MCP (Model Context Protocol) je otevřený protokol, kterým se AI asistent připojuje k externím nástrojům a datům. Místo zvláštní integrace pro každou aplikaci stačí jeden MCP server, který umí použít každý klient s podporou MCP.
Co je MCP server?
MCP server je program, který přes protokol nabízí nástroje (funkce, které model může zavolat), zdroje (data ke čtení) a prompty (připravené šablony). Běží buď lokálně jako podproces klienta, nebo vzdáleně přes HTTP.
Jaký je rozdíl mezi MCP a běžným REST API?
REST API je psané pro programátora, který zná jeho dokumentaci. MCP server své schopnosti popisuje strojově — názvem, popisem a JSON schématem vstupu — takže je model objeví přes tools/list a zavolá sám. MCP server bývá tenká vrstva nad existujícím API.
Jaký je rozdíl mezi nástrojem a zdrojem v MCP?
Nástroj (tool) je akce, kterou volá model a která může něco změnit: vytvořit ticket, spustit dotaz. Zdroj (resource) je obsah určený ke čtení a identifikovaný URI, který do kontextu obvykle vybírá aplikace nebo uživatel.
Je MCP bezpečný?
Protokol sám bezpečnost neřeší za vás. Server běží s oprávněními, která mu dáte, a výstup nástroje může obsahovat podvržené instrukce. Připojujte jen servery, kterým věříte, dávejte jim nejmenší nutná oprávnění a vzdálené servery chraňte autentizací.