(Klikněte na obrázek výše pro zhlédnutí videa této lekce)
Model Context Protocol (MCP) je výkonný, standardizovaný rámec, který optimalizuje komunikaci mezi velkými jazykovými modely (LLMs) a externími nástroji, aplikacemi a datovými zdroji. Tento průvodce vás provede základními koncepty MCP. Naučíte se o jeho architektuře klient-server, klíčových komponentech, mechanismech komunikace a osvědčených postupech implementace.
-
Výslovný souhlas uživatele: Veškerý přístup k datům a operace vyžadují před provedením výslovné schválení uživatelem. Uživatelé musí jasně rozumět tomu, k jakým datům bude přistupováno a jaké akce budou provedeny, s možností detailního nastavení oprávnění a autorizací.
-
Ochrana soukromí dat: Uživatelská data jsou zpřístupněna pouze s výslovným souhlasem a musí být chráněna robustními kontrolami přístupu po celou dobu interakce. Implementace musí zabránit neoprávněnému přenosu dat a udržovat přísné hranice soukromí.
-
Bezpečnost spouštění nástrojů: Každé spuštění nástroje vyžaduje výslovný souhlas uživatele s jasným pochopením funkčnosti nástroje, parametrů a možného dopadu. Robustní bezpečnostní hranice musí zabránit neúmyslnému, nebezpečnému nebo škodlivému spuštění nástroje.
-
Zabezpečení transportní vrstvy: Všechny komunikační kanály by měly používat vhodné šifrovací a autentizační mechanismy. Vzdálená připojení by měla implementovat bezpečné transportní protokoly a správu přihlašovacích údajů.
- Správa oprávnění: Implementujte detailní systémy oprávnění, které umožní uživatelům kontrolovat, ke kterým serverům, nástrojům a zdrojům mají přístup.
- Autentizace a autorizace: Používejte bezpečné metody autentizace (OAuth, API klíče) s odpovídající správou tokenů a jejich expirací.
- Validace vstupů: Validujte všechny parametry a vstupy dat podle definovaných schémat, abyste předešli útokům typu injection.
- Auditní logování: Udržujte komplexní záznamy všech operací pro monitorování bezpečnosti a zajištění souladu.
Tato lekce zkoumá základní architekturu a komponenty, které tvoří ekosystém Model Context Protocol (MCP). Dozvíte se o architektuře klient-server, klíčových komponentech a komunikačních mechanismech, které pohánějí interakce MCP.
Na konci této lekce budete:
- Rozumět architektuře klient-server MCP.
- Identifikovat role a odpovědnosti Hostů, Klientů a Serverů.
- Analyzovat klíčové funkce, díky nimž je MCP flexibilní integrační vrstvou.
- Pochopit, jak informace proudí v ekosystému MCP.
- Získat praktické poznatky prostřednictvím ukázek kódu v .NET, Java, Python a JavaScript.
Ekosystém MCP je postaven na modelu klient-server. Tato modulární struktura umožňuje AI aplikacím efektivně interagovat s nástroji, databázemi, API a kontextovými zdroji. Pojďme si tuto architekturu rozdělit na její základní komponenty.
V jádru MCP následuje architekturu klient-server, kde hostitelská aplikace může být připojena k více serverům:
flowchart LR
subgraph "Your Computer"
Host["Host with MCP (Visual Studio, VS Code, IDEs, Tools)"]
S1["MCP Server A"]
S2["MCP Server B"]
S3["MCP Server C"]
Host <-->|"MCP Protocol"| S1
Host <-->|"MCP Protocol"| S2
Host <-->|"MCP Protocol"| S3
S1 <--> D1[("Local\Data Source A")]
S2 <--> D2[("Local\Data Source B")]
end
subgraph "Internet"
S3 <-->|"Web APIs"| D3[("Remote\Services")]
end
- Hostitelé MCP: Programy jako VSCode, Claude Desktop, IDE nebo AI nástroje, které chtějí přistupovat k datům prostřednictvím MCP.
- Klienti MCP: Protokoloví klienti, kteří udržují 1:1 připojení k serverům.
- Servery MCP: Lehkoprogramy, které poskytují specifické schopnosti prostřednictvím standardizovaného Model Context Protocol.
- Lokální datové zdroje: Soubory, databáze a služby na vašem počítači, ke kterým mohou servery MCP bezpečně přistupovat.
- Vzdálené služby: Externí systémy dostupné přes internet, ke kterým se servery MCP mohou připojit prostřednictvím API.
Protokol MCP je vyvíjející se standard používající verzování založené na datu (formát YYYY-MM-DD). Aktuální verze protokolu je 2025-06-18. Nejnovější aktualizace specifikace protokolu naleznete na protokolové specifikaci.
V Model Context Protocol (MCP) jsou Hostitelé AI aplikace, které slouží jako primární rozhraní, skrze které uživatelé interagují s protokolem. Hostitelé koordinují a spravují připojení k více serverům MCP vytvořením dedikovaných klientů MCP pro každé připojení k serveru. Příklady Hostitelů zahrnují:
- AI aplikace: Claude Desktop, Visual Studio Code, Claude Code.
- Vývojová prostředí: IDE a editory kódu s integrací MCP.
- Vlastní aplikace: Speciálně vytvoření AI agenti a nástroje.
Hostitelé jsou aplikace, které koordinují interakce AI modelů. Provádějí:
- Orchestrace AI modelů: Spouštění nebo interakce s LLM pro generování odpovědí a koordinaci AI pracovních toků.
- Správa připojení klientů: Vytváření a udržování jednoho klienta MCP na jedno připojení k serveru MCP.
- Ovládání uživatelského rozhraní: Řízení toku konverzace, uživatelských interakcí a prezentace odpovědí.
- Zajištění bezpečnosti: Kontrola oprávnění, bezpečnostních omezení a autentizace.
- Správa souhlasu uživatele: Řízení schválení uživatele pro sdílení dat a spouštění nástrojů.
Klienti jsou klíčové komponenty, které udržují dedikovaná spojení 1:1 mezi Hostiteli a servery MCP. Každý klient MCP je vytvořen Hostitelem pro připojení ke konkrétnímu serveru MCP, čímž je zajištěna organizovaná a bezpečná komunikační cesta. Více klientů umožňuje Hostitelům připojit se k více serverům současně.
Klienti jsou konektorové komponenty v hostitelské aplikaci. Provádějí:
- Komunikace protokolu: Odesílání JSON-RPC 2.0 požadavků na servery s výzvami a instrukcemi.
- Vyjednávání schopností: Vyjednávání podporovaných funkcí a verzí protokolu se servery během inicializace.
- Spouštění nástrojů: Správa požadavků na spouštění nástrojů od modelů a zpracování odpovědí.
- Aktualizace v reálném čase: Zpracování notifikací a aktualizací v reálném čase od serverů.
- Zpracování odpovědí: Zpracování a formátování odpovědí serverů pro zobrazení uživatelům.
Servery jsou programy, které poskytují kontext, nástroje a schopnosti klientům MCP. Mohou být spuštěny lokálně (na stejném zařízení jako Hostitel) nebo vzdáleně (na externích platformách) a jsou odpovědné za zpracování požadavků klientů a poskytování strukturovaných odpovědí. Servery zpřístupňují specifickou funkcionalitu prostřednictvím standardizovaného Model Context Protocol.
Servery jsou služby, které poskytují kontext a schopnosti. Provádějí:
- Registrace funkcí: Registrace a zpřístupnění dostupných primitiv (zdrojů, výzev, nástrojů) klientům.
- Zpracování požadavků: Přijímání a provádění výzev nástrojů, požadavků na zdroje a výzev od klientů.
- Poskytování kontextu: Poskytování kontextových informací a dat pro zlepšení odpovědí modelu.
- Správa stavu: Udržování stavu relace a zpracování stavových interakcí, pokud je to potřeba.
- Notifikace v reálném čase: Odesílání notifikací o změnách schopností a aktualizacích připojeným klientům.
Servery mohou být vyvíjeny kýmkoli, kdo chce rozšířit schopnosti modelu o specializovanou funkcionalitu, a podporují jak lokální, tak vzdálené scénáře nasazení.
- JSON-RPC 2.0 Protokol: Veškerá komunikace využívá standardizovaný formát zpráv JSON-RPC 2.0 pro volání metod, odpovědi a notifikace
- Správa životního cyklu: Zajišťuje inicializaci spojení, vyjednávání schopností a ukončení relace mezi klienty a servery
- Serverové primitivy: Umožňuje serverům poskytovat základní funkce prostřednictvím nástrojů, zdrojů a šablon
- Klientské primitivy: Umožňuje serverům požadovat vzorkování od LLM, získávat vstupy od uživatelů a odesílat logovací zprávy
- Notifikace v reálném čase: Podporuje asynchronní notifikace pro dynamické aktualizace bez nutnosti dotazování
- Vyjednávání verze protokolu: Používá verzování založené na datu (YYYY-MM-DD) pro zajištění kompatibility
- Objevování schopností: Klienti a servery si během inicializace vyměňují informace o podporovaných funkcích
- Stavové relace: Udržuje stav spojení napříč více interakcemi pro zachování kontextu
Transportní vrstva spravuje komunikační kanály, rámcování zpráv a autentizaci mezi účastníky MCP:
-
STDIO Transport:
- Používá standardní vstupní/výstupní proudy pro přímou komunikaci mezi procesy
- Optimální pro lokální procesy na stejném zařízení bez síťové režie
- Běžně používané pro lokální implementace MCP serverů
-
Streamovatelný HTTP Transport:
- Používá HTTP POST pro zprávy od klienta k serveru
- Volitelné Server-Sent Events (SSE) pro streamování od serveru ke klientovi
- Umožňuje vzdálenou komunikaci serverů přes sítě
- Podporuje standardní HTTP autentizaci (bearer tokeny, API klíče, vlastní hlavičky)
- MCP doporučuje OAuth pro bezpečnou autentizaci založenou na tokenech
Transportní vrstva abstrahuje detaily komunikace od datové vrstvy, což umožňuje použití stejného formátu zpráv JSON-RPC 2.0 napříč všemi transportními mechanismy. Tato abstrakce umožňuje aplikacím bezproblémově přepínat mezi lokálními a vzdálenými servery.
Implementace MCP musí dodržovat několik klíčových bezpečnostních principů, aby zajistily bezpečné, důvěryhodné a zabezpečené interakce napříč všemi operacemi protokolu:
-
Souhlas a kontrola uživatele: Uživatelé musí poskytnout výslovný souhlas před přístupem k jakýmkoli datům nebo provedením operací. Měli by mít jasnou kontrolu nad tím, jaká data jsou sdílena a jaké akce jsou autorizovány, podpořenou intuitivním uživatelským rozhraním pro kontrolu a schvalování aktivit.
-
Ochrana soukromí dat: Uživatelova data by měla být zpřístupněna pouze s výslovným souhlasem a musí být chráněna odpovídajícími přístupovými kontrolami. Implementace MCP musí zabránit neoprávněnému přenosu dat a zajistit ochranu soukromí během všech interakcí.
-
Bezpečnost nástrojů: Před použitím jakéhokoli nástroje je vyžadován výslovný souhlas uživatele. Uživatelé by měli mít jasné pochopení funkcionality každého nástroje a musí být zajištěny robustní bezpečnostní hranice, aby se předešlo neúmyslnému nebo nebezpečnému použití nástroje.
Dodržováním těchto bezpečnostních principů MCP zajišťuje důvěru uživatelů, ochranu soukromí a bezpečnost napříč všemi interakcemi protokolu a zároveň umožňuje výkonné integrace AI.
Níže jsou uvedeny příklady kódu v několika populárních programovacích jazycích, které ilustrují, jak implementovat klíčové komponenty a nástroje MCP serveru.
Zde je praktický příklad kódu v .NET, který ukazuje, jak implementovat jednoduchý MCP server s vlastními nástroji. Tento příklad demonstruje, jak definovat a registrovat nástroje, zpracovávat požadavky a připojit server pomocí Model Context Protocol.
using System;
using System.Threading.Tasks;
using ModelContextProtocol.Server;
using ModelContextProtocol.Server.Transport;
using ModelContextProtocol.Server.Tools;
public class WeatherServer
{
public static async Task Main(string[] args)
{
// Create an MCP server
var server = new McpServer(
name: "Weather MCP Server",
version: "1.0.0"
);
// Register our custom weather tool
server.AddTool<string, WeatherData>("weatherTool",
description: "Gets current weather for a location",
execute: async (location) => {
// Call weather API (simplified)
var weatherData = await GetWeatherDataAsync(location);
return weatherData;
});
// Connect the server using stdio transport
var transport = new StdioServerTransport();
await server.ConnectAsync(transport);
Console.WriteLine("Weather MCP Server started");
// Keep the server running until process is terminated
await Task.Delay(-1);
}
private static async Task<WeatherData> GetWeatherDataAsync(string location)
{
// This would normally call a weather API
// Simplified for demonstration
await Task.Delay(100); // Simulate API call
return new WeatherData {
Temperature = 72.5,
Conditions = "Sunny",
Location = location
};
}
}
public class WeatherData
{
public double Temperature { get; set; }
public string Conditions { get; set; }
public string Location { get; set; }
}Tento příklad demonstruje stejný MCP server a registraci nástrojů jako výše uvedený příklad v .NET, ale implementovaný v Javě.
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.McpToolDefinition;
import io.modelcontextprotocol.server.transport.StdioServerTransport;
import io.modelcontextprotocol.server.tool.ToolExecutionContext;
import io.modelcontextprotocol.server.tool.ToolResponse;
public class WeatherMcpServer {
public static void main(String[] args) throws Exception {
// Create an MCP server
McpServer server = McpServer.builder()
.name("Weather MCP Server")
.version("1.0.0")
.build();
// Register a weather tool
server.registerTool(McpToolDefinition.builder("weatherTool")
.description("Gets current weather for a location")
.parameter("location", String.class)
.execute((ToolExecutionContext ctx) -> {
String location = ctx.getParameter("location", String.class);
// Get weather data (simplified)
WeatherData data = getWeatherData(location);
// Return formatted response
return ToolResponse.content(
String.format("Temperature: %.1f°F, Conditions: %s, Location: %s",
data.getTemperature(),
data.getConditions(),
data.getLocation())
);
})
.build());
// Connect the server using stdio transport
try (StdioServerTransport transport = new StdioServerTransport()) {
server.connect(transport);
System.out.println("Weather MCP Server started");
// Keep server running until process is terminated
Thread.currentThread().join();
}
}
private static WeatherData getWeatherData(String location) {
// Implementation would call a weather API
// Simplified for example purposes
return new WeatherData(72.5, "Sunny", location);
}
}
class WeatherData {
private double temperature;
private String conditions;
private String location;
public WeatherData(double temperature, String conditions, String location) {
this.temperature = temperature;
this.conditions = conditions;
this.location = location;
}
public double getTemperature() {
return temperature;
}
public String getConditions() {
return conditions;
}
public String getLocation() {
return location;
}
}V tomto příkladu ukazujeme, jak vytvořit MCP server v Pythonu. Jsou zde také ukázány dva různé způsoby, jak vytvořit nástroje.
#!/usr/bin/env python3
import asyncio
from mcp.server.fastmcp import FastMCP
from mcp.server.transports.stdio import serve_stdio
# Create a FastMCP server
mcp = FastMCP(
name="Weather MCP Server",
version="1.0.0"
)
@mcp.tool()
def get_weather(location: str) -> dict:
"""Gets current weather for a location."""
# This would normally call a weather API
# Simplified for demonstration
return {
"temperature": 72.5,
"conditions": "Sunny",
"location": location
}
# Alternative approach using a class
class WeatherTools:
@mcp.tool()
def forecast(self, location: str, days: int = 1) -> dict:
"""Gets weather forecast for a location for the specified number of days."""
# This would normally call a weather API forecast endpoint
# Simplified for demonstration
return {
"location": location,
"forecast": [
{"day": i+1, "temperature": 70 + i, "conditions": "Partly Cloudy"}
for i in range(days)
]
}
# Instantiate the class to register its tools
weather_tools = WeatherTools()
# Start the server using stdio transport
if __name__ == "__main__":
asyncio.run(serve_stdio(mcp))Tento příklad ukazuje vytvoření MCP serveru v JavaScriptu a jak zaregistrovat dva nástroje související s počasím.
// Using the official Model Context Protocol SDK
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod"; // For parameter validation
// Create an MCP server
const server = new McpServer({
name: "Weather MCP Server",
version: "1.0.0"
});
// Define a weather tool
server.tool(
"weatherTool",
{
location: z.string().describe("The location to get weather for")
},
async ({ location }) => {
// This would normally call a weather API
// Simplified for demonstration
const weatherData = await getWeatherData(location);
return {
content: [
{
type: "text",
text: `Temperature: ${weatherData.temperature}°F, Conditions: ${weatherData.conditions}, Location: ${weatherData.location}`
}
]
};
}
);
// Define a forecast tool
server.tool(
"forecastTool",
{
location: z.string(),
days: z.number().default(3).describe("Number of days for forecast")
},
async ({ location, days }) => {
// This would normally call a weather API
// Simplified for demonstration
const forecast = await getForecastData(location, days);
return {
content: [
{
type: "text",
text: `${days}-day forecast for ${location}: ${JSON.stringify(forecast)}`
}
]
};
}
);
// Helper functions
async function getWeatherData(location) {
// Simulate API call
return {
temperature: 72.5,
conditions: "Sunny",
location: location
};
}
async function getForecastData(location, days) {
// Simulate API call
return Array.from({ length: days }, (_, i) => ({
day: i + 1,
temperature: 70 + Math.floor(Math.random() * 10),
conditions: i % 2 === 0 ? "Sunny" : "Partly Cloudy"
}));
}
// Connect the server using stdio transport
const transport = new StdioServerTransport();
server.connect(transport).catch(console.error);
console.log("Weather MCP Server started");Tento příklad v JavaScriptu demonstruje, jak vytvořit MCP klienta, který se připojí k serveru, odešle výzvu a zpracuje odpověď včetně jakýchkoli provedených volání nástrojů.
MCP zahrnuje několik vestavěných konceptů a mechanismů pro správu bezpečnosti a autorizace v rámci protokolu:
-
Kontrola oprávnění nástrojů:
Klienti mohou specifikovat, které nástroje může model během relace používat. To zajišťuje, že jsou přístupné pouze výslovně autorizované nástroje, čímž se snižuje riziko neúmyslných nebo nebezpečných operací. Oprávnění lze dynamicky konfigurovat na základě preferencí uživatele, organizačních politik nebo kontextu interakce. -
Autentizace:
Servery mohou vyžadovat autentizaci před udělením přístupu k nástrojům, zdrojům nebo citlivým operacím. To může zahrnovat API klíče, OAuth tokeny nebo jiné autentizační schémata. Správná autentizace zajišťuje, že přístup k serverovým schopnostem mají pouze důvěryhodní klienti a uživatelé. -
Validace:
Validace parametrů je vynucována pro všechny volání nástrojů. Každý nástroj definuje očekávané typy, formáty a omezení pro své parametry a server odpovídajícím způsobem validuje příchozí požadavky. To zabraňuje tomu, aby se k implementacím nástrojů dostaly chybné nebo škodlivé vstupy, a pomáhá udržovat integritu operací. -
Omezení rychlosti:
Aby se předešlo zneužití a zajistilo spravedlivé využití serverových zdrojů, mohou MCP servery implementovat omezení rychlosti pro volání nástrojů a přístup ke zdrojům. Omezení rychlosti lze aplikovat na uživatele, relace nebo globálně a pomáhají chránit před útoky typu denial-of-service nebo nadměrným využíváním zdrojů.
Kombinací těchto mechanismů poskytuje MCP bezpečný základ pro integraci jazykových modelů s externími nástroji a zdroji dat, přičemž uživatelům a vývojářům nabízí jemně odstupňovanou kontrolu nad přístupem a využitím.
Komunikace MCP využívá strukturované zprávy JSON-RPC 2.0 pro usnadnění jasných a spolehlivých interakcí mezi hostiteli, klienty a servery. Protokol definuje specifické vzory zpráv pro různé typy operací:
initializePožadavek: Navazuje spojení a vyjednává verzi protokolu a schopnostiinitializeOdpověď: Potvrzuje podporované funkce a informace o serverunotifications/initialized: Signalizuje, že inicializace je dokončena a relace je připravena
tools/listPožadavek: Zjišťuje dostupné nástroje ze serveruresources/listPožadavek: Vypisuje dostupné zdroje (datové zdroje)prompts/listPožadavek: Získává dostupné šablony výzev
tools/callPožadavek: Spouští konkrétní nástroj s poskytnutými parametryresources/readPožadavek: Získává obsah z konkrétního zdrojeprompts/getPožadavek: Načítá šablonu výzvy s volitelnými parametry
sampling/completePožadavek: Server požaduje dokončení LLM od klientaelicitation/request: Server požaduje uživatelský vstup prostřednictvím klientského rozhraní- Logovací zprávy: Server odesílá strukturované logovací zprávy klientovi
notifications/tools/list_changed: Server upozorňuje klienta na změny nástrojůnotifications/resources/list_changed: Server upozorňuje klienta na změny zdrojůnotifications/prompts/list_changed: Server upozorňuje klienta na změny šablon
Všechny zprávy MCP dodržují formát JSON-RPC 2.0 s:
- Požadavky: Obsahují
id,methoda volitelnéparams - Odpovědi: Obsahují
ida buďresult, neboerror - Notifikace: Obsahují
methoda volitelnéparams(bezidnebo očekávané odpovědi)
Tato strukturovaná komunikace zajišťuje spolehlivé, sledovatelné a rozšiřitelné interakce podporující pokročilé scénáře, jako jsou aktualizace v reálném čase, řetězení nástrojů a robustní zpracování chyb.
- Architektura: MCP využívá architekturu klient-server, kde hostitelé spravují více klientských připojení k serverům
- Účastníci: Ekosystém zahrnuje hostitele (AI aplikace), klienty (protokolové konektory) a servery (poskytovatele schopností)
- Transportní mechanismy: Komunikace podporuje STDIO (lokální) a Streamovatelný HTTP s volitelným SSE (vzdálený)
- Základní primitivy: Servery zpřístupňují nástroje (spustitelné funkce), zdroje (datové zdroje) a šablony (výzvy)
- Klientské primitivy: Servery mohou požadovat vzorkování (LLM dokončení), získávání vstupů (uživatelský vstup) a logování od klientů
- Základ protokolu: Postaven na JSON-RPC 2.0 s verzováním založeným na datu (aktuální: 2025-06-18)
- Funkce v reálném čase: Podporuje notifikace pro dynamické aktualizace a synchronizaci v reálném čase
- Bezpečnost na prvním místě: Výslovný souhlas uživatele, ochrana soukromí dat a zabezpečený transport jsou klíčovými požadavky
Navrhněte jednoduchý MCP nástroj, který by byl užitečný ve vašem oboru. Definujte:
- Jak by se nástroj jmenoval
- Jaké parametry by přijímal
- Jaký výstup by vracel
- Jak by model mohl tento nástroj využít k řešení uživatelských problémů
Další: Kapitola 2: Bezpečnost
Upozornění:
Tento dokument byl přeložen pomocí služby pro automatický překlad Co-op Translator. I když se snažíme o co největší přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné výklady vyplývající z použití tohoto překladu.
