MCP nie jest jednym mechanizmem, tylko kilkoma. Rozróżnienie między nimi decyduje o tym, co serwer może udostępnić, a czego nie — i jest pierwszą rzeczą, którą warto zrozumieć przed pisaniem własnego serwera.
Trzy prymitywy serwera
Narzędzia (Tools) to funkcje, które model może wywołać. Każde ma nazwę, opis i schemat argumentów. To jedyny prymityw wykonujący działania.
Zasoby (Resources) to dane do odczytania, identyfikowane adresem URI — pliki, rekordy, dokumenty. Nie wykonują niczego, tylko dostarczają treść do kontekstu.
Prompty (Prompts) to gotowe szablony, które serwer oferuje klientowi. Uruchamia je zwykle użytkownik, nie model.
Prymitywy klienta
Klient również może oferować możliwości serwerowi: elicitation, czyli pytanie użytkownika o dane w trakcie działania, sampling, czyli prośbę o wykonanie zapytania do modelu, oraz roots, czyli informację o tym, na jakich katalogach lub adresach serwer może operować.
W specyfikacji 2026-07-28 sampling, roots i logging zostały zdeprecjonowane. Pozostają w dokumencie na czas okna deprecjacji, ale nowe implementacje mają korzystać z parametrów narzędzi, bezpośrednich API dostawców oraz standardowych mechanizmów logowania.
Dlaczego to rozróżnienie ma znaczenie praktyczne
Wielu autorów serwerów udostępnia wszystko jako narzędzia, także dane, które powinny być zasobami. Skutkiem jest rozrost katalogu narzędzi, konkurencja opisów i spadek trafności wyboru. Dane, których model ma tylko użyć, a nie na nich działać, należą do zasobów.
Negocjacja możliwości
Przy nawiązaniu połączenia klient i serwer deklarują, które prymitywy obsługują i czy potrafią zgłaszać zmiany listy. Wersja specyfikacji jest ustalana w tym samym momencie i oznaczana datą.