MCP (Model Context Protocol) to otwarty standard komunikacji, stworzony przez firmę Anthropic w listopadzie 2024 roku, który pozwala modelom AI (np. Claude, GPT, Gemini) łączyć się z zewnętrznymi narzędziami, bazami danych, plikami i aplikacjami w jednolity, bezpieczny i powtarzalny sposób. Zamiast budować osobną integrację dla każdej pary „model + narzędzie”, programiści piszą jeden serwer MCP, z którego może skorzystać dowolny klient AI obsługujący ten protokół. MCP bywa nazywany „portem USB-C dla sztucznej inteligencji” — jednym uniwersalnym złączem zamiast dziesiątek niekompatybilnych kabli.
Spis treści
- Czym jest MCP i skąd się wziął
- Jaki problem rozwiązuje MCP
- Jak działa MCP – architektura krok po kroku
- Trzy główne elementy protokołu: Tools, Resources, Prompts
- MCP a zwykłe function calling – czym się różni
- Do czego wykorzystuje się MCP w praktyce
- Bezpieczeństwo MCP
- Czy można stworzyć własny serwer MCP?
- Przykład: budowa własnego serwera MCP od zera
- Najczęściej zadawane pytania (FAQ)
- Podsumowanie
1. Czym jest MCP i skąd się wziął
Modele językowe, nawet najbardziej zaawansowane, mają jedną fundamentalną wadę: są zamknięte we własnym świecie wiedzy z momentu treningu. Nie widzą plików na dysku użytkownika, nie znają zawartości firmowej bazy danych, nie wiedzą, co dzieje się aktualnie na GitHubie czy w Slacku. Każdą taką informację trzeba było wcześniej ręcznie skopiować do rozmowy albo napisać dedykowaną integrację.
Zanim powstał MCP, każda kombinacja „model AI + narzędzie zewnętrzne” wymagała osobnego, niestandardowego kodu. W branży nazywano to problemem M×N — M modeli razy N narzędzi dawało lawinowo rosnącą liczbę niekompatybilnych integracji, które trzeba było osobno utrzymywać i aktualizować.
Anthropic zaproponował rozwiązanie tego problemu w listopadzie 2024 roku, publikując Model Context Protocol jako otwarty standard — nie zastrzeżoną technologię firmową, lecz specyfikację, z której może skorzystać każdy dostawca modeli i każdy twórca narzędzi. Zamiast M×N integracji potrzeba tylko M+N: każdy model implementuje protokół raz, każde narzędzie implementuje protokół raz, a wszystko ze sobą współpracuje.
Skala adopcji okazała się bardzo szybka. Od dziewięciu referencyjnych serwerów napisanych przez Anthropic w dniu premiery, ekosystem urósł do tysięcy publicznie dostępnych serwerów MCP w ciągu kilkunastu miesięcy, a protokół zaczęli wspierać najwięksi gracze rynku — OpenAI, Google DeepMind i Microsoft dołączyły do standardu obok Anthropic, co uczyniło z MCP de facto standard branżowy, a nie rozwiązanie jednej firmy.
2. Jaki problem rozwiązuje MCP
W praktyce MCP odpowiada na trzy pytania, z którymi mierzy się każdy zespół budujący aplikacje AI:
- Jak dać modelowi dostęp do aktualnych danych — plików, baz danych, API — bez ręcznego wklejania ich do promptu?
- Jak pozwolić modelowi wykonywać realne akcje — tworzyć zadania, wysyłać wiadomości, aktualizować rekordy — w kontrolowany i bezpieczny sposób?
- Jak zrobić to raz, a nie za każdym razem od nowa dla każdego nowego modelu, frameworka czy aplikacji?
Bez wspólnego standardu integracje są kruche, trudne do ponownego użycia i kosztowne w utrzymaniu. MCP standaryzuje sposób, w jaki narzędzie „przedstawia się” modelowi — jaką ma nazwę, jakie przyjmuje parametry, jak zwraca wynik i jak zgłasza błąd — dzięki czemu ta sama integracja działa niezależnie od tego, czy po drugiej stronie jest Claude, GPT czy inny model obsługujący protokół.
3. Jak działa MCP – architektura krok po kroku
MCP opiera się na klasycznym wzorcu klient–serwer, inspirowanym architekturą Language Server Protocol (LSP) znaną z edytorów kodu. W systemie występują trzy role:
1. Host
Aplikacja, z której korzysta użytkownik — na przykład Claude Desktop, Claude Code, edytor kodu (Cursor, Zed, VS Code) czy niestandardowy agent AI. To host decyduje, jakie serwery są podłączone, i to on pośredniczy w każdym wywołaniu narzędzia. Model nigdy nie łączy się z serwerem bezpośrednio.
2. Klient MCP
Warstwa wewnątrz hosta, która utrzymuje sesję jeden-do-jednego z konkretnym serwerem MCP. To klient wysyła zapytania w rodzaju „co potrafisz mi udostępnić?” i odbiera odpowiedzi.
3. Serwer MCP
Lekki program (lokalny proces albo zdalna usługa), który udostępnia konkretne możliwości — narzędzia, dane, szablony promptów. Serwer nie wie nic o modelu, z którym rozmawia — zna tylko protokół.
Komunikacja techniczna odbywa się przez JSON-RPC 2.0, czyli ustrukturyzowane komunikaty w formacie JSON. Transport może przebiegać na dwa sposoby:
- stdio — lokalny, serwer działa jako osobny proces na tym samym komputerze; najczęstszy wybór dla narzędzi deweloperskich,
- Streamable HTTP — zdalny, serwer działa jako usługa sieciowa dostępna przez internet, z autoryzacją opartą o OAuth 2.1.
Sesja MCP jest stanowa — w odróżnieniu od typowego REST API, gdzie każde zapytanie jest niezależne, klient i serwer MCP najpierw się inicjalizują, negocjują dostępne możliwości (tzw. capability negotiation), a potem mogą wymieniać wiele powiązanych komunikatów w ramach jednej, ciągłej sesji.
4. Trzy główne elementy protokołu: Tools, Resources, Prompts
Specyfikacja MCP definiuje trzy podstawowe prymitywy, którymi serwer może się „podzielić” z modelem.
Tools (narzędzia)
Funkcje, które model może aktywnie wywołać, aby wykonać jakąś akcję — np. utworzyć plik, zapytać bazę danych, wysłać wiadomość, założyć zgłoszenie w systemie projektowym. Każde narzędzie ma nazwę, opis w języku naturalnym oraz schemat JSON opisujący wymagane parametry. To model decyduje, kiedy wywołać narzędzie (stąd nazywane są model-controlled).
Resources (zasoby)
Dane kontekstowe, zwykle tylko do odczytu — treść pliku, rekord z bazy, wynik zapytania do API. Zasoby są identyfikowane przez URI (np. file:///Users/dev/projekt/README.md). O tym, jakie zasoby są w ogóle widoczne dla modelu, decyduje aplikacja-host, a nie sam model (application-controlled).
Prompts (szablony promptów)
Gotowe, wielokrotnego użytku wzorce interakcji, które użytkownik może świadomie wywołać — na przykład komendą lub przyciskiem w interfejsie (user-controlled). Ułatwiają ustandaryzowanie powtarzalnych zadań, jak „przygotuj podsumowanie tygodnia” czy „przeanalizuj ten log błędów”.
Ten podział na trzy kategorie odróżnia MCP od bardziej ogólnych standardów jak OpenAPI czy GraphQL — MCP od podstaw projektowano z myślą o tym, jak model językowy „rozumie” i wykorzystuje kontekst, a nie jak typowa aplikacja webowa woła punkty końcowe API.
5. MCP a zwykłe function calling – czym się różni
Wiele osób myli MCP ze zwykłym „wywoływaniem funkcji” (function calling), które od dawna oferują API modeli językowych. Różnica jest istotna:
| Function calling (bez MCP) | MCP | |
|---|---|---|
| Zasięg integracji | Jednorazowa, przypisana do konkretnej aplikacji | Wielokrotnego użytku, współdzielona między dowolnymi hostami |
| Discovery | Programista ręcznie opisuje każdą funkcję w kodzie aplikacji | Serwer sam ogłasza klientowi listę dostępnych narzędzi/zasobów |
| Wymiana modelu | Zwykle wymaga przepisania integracji | Ta sama integracja działa z innym modelem obsługującym MCP |
| Stan sesji | Zazwyczaj bezstanowe, pojedyncze wywołanie | Sesja stanowa, wiele powiązanych komunikatów |
| Skala | Sensowne dla jednej aplikacji, jednego narzędzia | Sensowne przy wielu narzędziach i wielu agentach na produkcji |
Praktyczna zasada: przy prostym prototypie z jednym narzędziem i jednym użytkownikiem, zwykłe function calling w ramach jednego SDK bywa szybsze do wdrożenia. MCP zaczyna się opłacać, gdy integracje mają być długowiecznym, współdzielonym elementem infrastruktury dla wielu agentów, modeli lub zespołów.
6. Do czego wykorzystuje się MCP w praktyce
Ekosystem oficjalnych i społecznościowych serwerów MCP obejmuje dziś tysiące gotowych integracji. Najczęstsze zastosowania to:
- Systemy plików i repozytoria kodu — dostęp do plików, historii commitów w Git, automatyczne code review, generowanie dokumentacji na podstawie realnej bazy kodu.
- Zarządzanie projektami — automatyczne odczytywanie i aktualizowanie zadań w Jira, Linear czy Asana, generowanie raportów statusu.
- Komunikacja zespołowa — integracja ze Slackiem, Discordem czy Microsoft Teams, analiza wątków, automatyczne odpowiedzi.
- Bazy danych — bezpośrednie zapytania SQL, analiza schematu, optymalizacja wydajności zapytań.
- DevOps i monitoring — integracja z Kubernetes, Dockerem, systemami logowania i alertowania.
- Analityka biznesowa — pytania w języku naturalnym kierowane do Google Analytics, BigQuery czy narzędzi BI, z automatycznym wykonaniem zapytania i wizualizacją wyniku.
- Publikacja treści — serwery pozwalające modelowi tworzyć i aktualizować wpisy np. w WordPressie, zarządzać tagami i metadanymi SEO bez ręcznej pracy w edytorze.
Wspólny mianownik tych scenariuszy: MCP jest najbardziej wartościowy tam, gdzie agent AI ma działać produkcyjnie na wielu systemach naraz, a nie tylko demonstrować pojedynczą funkcję.
7. Bezpieczeństwo MCP
MCP został zaprojektowany wokół zasady, że to użytkownik i host kontrolują, co model może zrobić — nie jest to tylko deklaracja, lecz element architektury:
- Model nie ma bezpośredniego dostępu do żadnego serwera — każde wywołanie narzędzia przechodzi przez warstwę autoryzacyjną hosta.
- Wiele hostów domyślnie prosi o potwierdzenie przed każdym wywołaniem narzędzia o charakterze destrukcyjnym (zapis, usunięcie, uruchomienie kodu), pokazując użytkownikowi dokładne argumenty wywołania.
- Host może ograniczyć serwerowi widoczność wyłącznie do wskazanych zasobów (tzw. roots), np. jednego katalogu na dysku.
- Każdy serwer lokalny (stdio) działa jako osobny proces systemowy z własnymi uprawnieniami.
- Połączenia zdalne przez HTTP wymagają standardowej autoryzacji opartej o OAuth 2.1.
Mimo tych mechanizmów MCP jako młody protokół ma realne obszary ryzyka, o których warto wiedzieć przed wdrożeniem produkcyjnym:
- Prompt injection przez opisy narzędzi — złośliwie spreparowany opis narzędzia w publicznym serwerze może próbować manipulować zachowaniem modelu.
- Jakość serwerów społecznościowych — niski próg wejścia w tworzenie serwerów oznacza ryzyko złośliwych pakietów w publicznych rejestrach npm czy PyPI.
- Brak formalnych polityk bezpieczeństwa — znaczna część organizacji wdrażających MCP nie ma jeszcze udokumentowanych zasad zarządzania uprawnieniami serwerów.
- MCP nie narzuca autoryzacji na poziomie protokołu — to świadoma decyzja projektowa; odpowiedzialność za zasadę najmniejszych uprawnień, audyt logów i walidację danych wejściowych/wyjściowych spoczywa na zespole wdrażającym.
Dobra praktyka brzmi prosto: każdy serwer MCP powinien mieć dostęp tylko do zasobów faktycznie niezbędnych do jego zadania, wszystkie wywołania narzędzi powinny być logowane, a dane wejściowe i wyjściowe — walidowane.
8. Czy można stworzyć własny serwer MCP?
Tak — i to jest jedna z głównych zalet protokołu. MCP jest standardem otwartym, więc każdy programista może napisać własny serwer i udostępnić go dowolnemu klientowi obsługującemu MCP. Anthropic udostępnia oficjalne zestawy SDK dla TypeScript, Pythona, Javy i Kotlina, a społeczność rozwija dodatkowe implementacje dla Go, Rust czy C#. Ponieważ warstwą transportową jest JSON-RPC nad stdio lub HTTP, protokół da się technicznie zaimplementować w praktycznie każdym języku programowania.
Budowa własnego serwera sprowadza się do kilku kroków koncepcyjnych:
- Zainicjuj projekt i zainstaluj oficjalne SDK.
- Zdefiniuj narzędzia (tools) — nazwę, opis w naturalnym języku oraz schemat parametrów wejściowych.
- Napisz handlery — funkcje, które faktycznie wykonują logikę (odczyt pliku, zapytanie do API, zapis do bazy).
- Uruchom transport — najczęściej stdio na start, HTTP przy wdrożeniu zdalnym.
- Podłącz serwer do hosta — np. jedną komendą w Claude Code lub przez plik konfiguracyjny w aplikacji AI.
Poniżej pełny, działający przykład.
9. Przykład: budowa własnego serwera MCP od zera
Zbudujmy prosty serwer MCP obsługujący listę zadań (todo), zapisywaną w pliku JSON. To klasyczny przykład edukacyjny — pokazuje wszystkie kluczowe elementy: definicję narzędzia, walidację parametrów i zwracanie wyniku do modelu.
Krok 1: Inicjalizacja projektu
mkdir mcp-todo-server && cd mcp-todo-server
npm init -y
npm install @modelcontextprotocol/sdk zod
Krok 2: Kod serwera (src/index.ts)
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import fs from "fs";
const TODO_FILE = "./todos.json";
interface Todo {
id: number;
text: string;
done: boolean;
}
function readTodos(): Todo[] {
if (!fs.existsSync(TODO_FILE)) return [];
return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8"));
}
function writeTodos(todos: Todo[]) {
fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2));
}
const server = new McpServer({
name: "todo-server",
version: "1.0.0",
});
// Narzędzie: dodaj zadanie
server.tool(
"add_todo",
"Dodaje nowe zadanie do listy",
{ text: z.string().describe("Treść zadania") },
async ({ text }) => {
const todos = readTodos();
const newTodo: Todo = { id: Date.now(), text, done: false };
todos.push(newTodo);
writeTodos(todos);
return {
content: [{ type: "text", text: `Dodano zadanie: "${text}"` }],
};
}
);
// Narzędzie: lista zadań
server.tool(
"list_todos",
"Zwraca wszystkie zadania z listy",
{},
async () => {
const todos = readTodos();
const formatted = todos
.map((t) => `${t.done ? "[x]" : "[ ]"} #${t.id} ${t.text}`)
.join("\n");
return {
content: [{ type: "text", text: formatted || "Brak zadań." }],
};
}
);
// Narzędzie: oznacz jako zrobione
server.tool(
"complete_todo",
"Oznacza zadanie o podanym ID jako wykonane",
{ id: z.number().describe("ID zadania do oznaczenia") },
async ({ id }) => {
const todos = readTodos();
const todo = todos.find((t) => t.id === id);
if (!todo) {
return {
content: [{ type: "text", text: `Nie znaleziono zadania o ID ${id}.` }],
};
}
todo.done = true;
writeTodos(todos);
return {
content: [{ type: "text", text: `Zadanie "${todo.text}" oznaczone jako wykonane.` }],
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);
Krok 3: Uruchomienie i podłączenie do hosta
Serwer uruchamiany jest jako osobny proces przez klienta MCP. Jeśli host to Claude Code, podłączenie sprowadza się do jednej komendy w terminalu:
claude mcp add --transport stdio todo-server -- node src/index.ts
Od tego momentu model — bez żadnych dodatkowych instrukcji w promptach — widzi trzy nowe narzędzia: add_todo, list_todos i complete_todo. Wystarczy napisać do asystenta AI: „Dodaj zadanie: przygotować prezentację na piątek”, a model sam zdecyduje, że powinien wywołać add_todo z odpowiednim parametrem, wykona zapis do pliku todos.json i poinformuje o wyniku.
Co warto zapamiętać z tego przykładu
- Każde narzędzie ma jasny opis w języku naturalnym — to na jego podstawie model decyduje, kiedy go użyć. Precyzyjne opisy to jedna z najważniejszych dobrych praktyk przy budowie serwerów MCP.
- Walidacja wejścia (tu przez bibliotekę Zod) chroni przed błędnymi lub złośliwymi parametrami.
- Handler zwraca ustrukturyzowaną odpowiedź w formacie oczekiwanym przez protokół (
contentz typemtext), a nie dowolny tekst. - Ten sam serwer, bez żadnych zmian w kodzie, będzie działał zarówno z Claude Desktop, jak i z każdym innym hostem obsługującym MCP — to jest właśnie sedno standaryzacji, o której mowa w tym artykule.
10. Najczęściej zadawane pytania (FAQ)
Czy MCP to produkt tylko Anthropic?
Nie. MCP zostało zapoczątkowane przez Anthropic, ale od początku jako w pełni otwarta specyfikacja. Obsługują je dziś również modele i narzędzia OpenAI, Google DeepMind i Microsoft, co czyni z MCP standard branżowy, a nie zamkniętą technologię jednej firmy.
Czy MCP zastępuje REST API albo GraphQL?
Nie zastępuje ich, lecz działa na innym poziomie abstrakcji. REST i GraphQL opisują, jak komunikują się dowolne aplikacje. MCP opisuje konkretnie, jak model językowy odkrywa i wykorzystuje narzędzia oraz dane — z prymitywami (tools, resources, prompts) dopasowanymi do sposobu, w jaki „myśli” LLM, a nie do typowej architektury webowej.
Czy budowa serwera MCP wymaga zaawansowanej wiedzy programistycznej?
Podstawowy serwer, jak przykład z listą zadań powyżej, można napisać w niecałą godzinę, znając podstawy TypeScriptu lub Pythona. Trudniejsze stają się kwestie bezpieczeństwa, obsługi błędów i skalowania przy wdrożeniu produkcyjnym.
Czy korzystanie z MCP jest bezpieczne?
Protokół ma wbudowane mechanizmy kontroli — pośrednictwo hosta, potwierdzenia użytkownika, ograniczanie zakresu dostępu — ale jako młody standard wymaga świadomego zarządzania ryzykiem, zwłaszcza przy podłączaniu serwerów pochodzących spoza zaufanych źródeł.
Jakie są alternatywy dla MCP?
Zwykłe function calling wbudowane w API modeli sprawdza się przy prostych, jednorazowych integracjach. Przy większej skali i wielu współpracujących narzędziach MCP oferuje przewagę w postaci standaryzacji i możliwości ponownego użycia tej samej integracji z różnymi modelami.
Gdzie znaleźć gotowe serwery MCP?
Publiczne rejestry (np. katalog mcp.so) gromadzą tysiące serwerów społecznościowych i oficjalnych, obejmujących m.in. systemy plików, Git, GitHub, Google Drive, Slack, bazy danych PostgreSQL i SQLite oraz wiele innych integracji.
11. Podsumowanie
MCP (Model Context Protocol) to otwarty standard, który rozwiązuje jeden z najbardziej praktycznych problemów współczesnej sztucznej inteligencji: jak połączyć model językowy z realnymi danymi i narzędziami w sposób bezpieczny, powtarzalny i niezależny od konkretnego dostawcy. Dzięki architekturze host–klient–serwer, komunikacji przez JSON-RPC oraz trzem jasno zdefiniowanym prymitywom (Tools, Resources, Prompts), MCP zamienia model AI z izolowanego generatora tekstu w element większego systemu, który realnie działa na danych i wykonuje zadania.
Co ważne, MCP jest w pełni otwarty — każdy może zbudować własny serwer i podłączyć go do dowolnego hosta obsługującego protokół, co pokazuje przedstawiony wyżej przykład serwera do zarządzania listą zadań. To właśnie ta otwartość i prostota wdrożenia sprawiły, że w ciągu niespełna dwóch lat od premiery MCP stał się jednym z fundamentów infrastruktury AI, wspieranym przez wszystkich największych graczy branży.
