Popyt: Wraz z rozwojem dużych modeli, duże modele pojawiły się we wszystkich aspektach naszego życia, czy to w pracy, czy w nauce, są nierozłączne. Przy dużym języku modelowym, po co nam MCP? Duży model można rozumieć jako mózg, ale sam mózg nie może nam pomóc w działaniach, MCP jest bardziej jak kończyna, duży model kieruje usługą MCP do wykonywania zadań, takich jak: wywoływania zewnętrznych narzędzi (takich jak bazy danych, dyski, API). Rozwiązuje problem, że duże modele mogą tylko rozmawiać i nie mogą nic robić.
MCP (Protokół Kontekstu Modelowego)
Dokumentacja:Logowanie do linku jest widoczne. Repozytoria GitHub:Logowanie do linku jest widoczne. Repozytorium narzędzi MCP:Logowanie do linku jest widoczne.
MCP (Model Context Protocol) to otwarty standard do łączenia aplikacji AI z zewnętrznymi systemami.
Dzięki MCP aplikacje AI, takie jak Claude czy ChatGPT, mogą łączyć się ze źródłami danych (np. pliki lokalne, bazy danych), narzędziami (np. wyszukiwarkami, kalkulatorami) oraz przepływami pracy (np. specjalistycznymi promptami) – umożliwiając dostęp do kluczowych informacji i wykonywanie zadań.
Pomyśl o MCP jak o portie USB-C do zastosowań AI. Podobnie jak USB-C zapewnia ustandaryzowany sposób łączenia urządzeń elektronicznych, tak MCP zapewnia ustandaryzowany sposób łączenia aplikacji AI z systemami zewnętrznymi.
Co może osiągnąć MCP?
- Agenci mogą korzystać z Twojego Kalendarza Google i Notion, pełniąc rolę bardziej spersonalizowanego asystenta AI.
- Kod Claude może generować całe aplikacje webowe za pomocą projektów Figma.
- Chatboty korporacyjne mogą łączyć się z wieloma bazami danych w organizacji, umożliwiając użytkownikom analizę danych za pomocą czatu.
- Modele AI mogą tworzyć projekty 3D w Blenderze i drukować je za pomocą drukarki 3D.
Dlaczego MCP jest ważne?
W zależności od tego, gdzie się znajdujesz w ekosystemie, MCP może przynieść szereg korzyści.
- Programiści: MCP skraca czas i złożoność tworzenia podczas tworzenia lub integracji z aplikacjami lub agentami AI.
- Aplikacje lub agenci AI: MCP zapewniają dostęp do ekosystemu źródeł danych, narzędzi i aplikacji, co zwiększy funkcjonalność i poprawi doświadczenie użytkownika końcowego.
- Użytkownicy końcowi: MCP mogą prowadzić do tworzenia bardziej zaawansowanych aplikacji AI lub agentów, którzy mogą uzyskać dostęp do Twoich danych i działać w Twoim imieniu, gdy zajdzie taka potrzeba.
Protokół MCP
MCP składa się z dwóch warstw:
- Warstwa danych: Zdefiniuj protokół komunikacji klient-serwer oparty na JSON-RPC, obejmujący zarządzanie cyklem życia oraz podstawowe prymitywy, takie jak narzędzia, zasoby, prompty i powiadomienia.
- Warstwa transportowa: Definiuje mechanizmy komunikacji i kanały umożliwiające wymianę danych między klientami a serwerami, w tym nawiązywanie połączeń specyficznych dla transportu, ramy wiadomości oraz autoryzację.
Koncepcyjnie warstwa danych to warstwa wewnętrzna, natomiast warstwa transportowa to warstwa zewnętrzna.
Warstwa danych
- Warstwa danych implementuje protokół przełączania oparty na JSON-RPC 2.0, który definiuje strukturę i semantykę wiadomości. Ta warstwa obejmuje:
- Zarządzanie cyklem życia: Zajmuje się inicjalizacją połączenia, negocjacją funkcji oraz zakończeniem połączenia między klientami a serwerami
- Funkcjonalność serwera: Umożliwia serwerowi dostarczanie podstawowych funkcji, w tym narzędzi do operacji AI, zasobów danych kontekstowych oraz interaktywnych szablonów promptów od klientów i do nich
- Funkcjonalność klienta: Umożliwia serwerowi wymaganie od klienta próbkowania z modelu LLM hosta, otrzymywania danych wejściowych od użytkownika oraz logowania wiadomości do klienta
- Przydatne funkcje: Obsługuje dodatkowe funkcje, takie jak powiadomienia o aktualizacjach w czasie rzeczywistym oraz śledzenie postępów w długotrwałych operacjach
Warstwa transportowa
Warstwa transportowa zarządza kanałami komunikacyjnymi i uwierzytelnianiem między klientem a serwerem. Obsługuje nawiązywanie połączeń, transmisję wiadomości oraz bezpieczną komunikację między uczestnikami MCP.
MCP obsługuje dwa mechanizmy transportu:
- Stdio Transport: Bezpośrednia komunikacja procesów między lokalnymi procesami na tej samej maszynie za pomocą standardowych strumieni wejścia/wyjścia, zapewniając optymalną wydajność i brak narzutu sieciowego.
- Streamowalny HTTP: Wykorzystuje protokół HTTP POST do wysyłania wiadomości klient-serwer, a opcjonalnie wykorzystuje zdarzenia wysyłane przez serwer do funkcji streamingu. Ten protokół transportowy obsługuje zdalną komunikację serwerową i standardowe metody uwierzytelniania HTTP, w tym tokeny posiadaczy, klucze API oraz niestandardowe nagłówki. MCP zaleca użycie OAuth do uzyskania tokena uwierzytelniania.
Warstwa transportowa abstrahuje szczegóły komunikacji od warstwy protokołu, tak aby ten sam format wiadomości JSON-RPC 2.0 był zaimplementowany we wszystkich mechanizmach transportu.Wiadomości JSON-RPC muszą być zakodowane w UTF-8。Transport HTTP+SSE został wycofany!
Wszystko o serwerze MCP
Ten serwer MCP został zaprojektowany do testowania wszystkich funkcji protokołu MCP. Nie jest przeznaczony jako praktyczny serwer, lecz raczej jako serwer testowy dla twórców klientów MCP. Implementuje funkcje takie jak prompty, narzędzia, zasoby, próbkowanie i inne, aby zaprezentować możliwości MCP.
Źródło:Logowanie do linku jest widoczne.
Ta usługa wymaga instalacji środowiska Node.js, a kroki instalacyjne są pomijane.
Aby przetestować usługę MCP opartą na wzorcu transportowym Stdio, polecenie startowe wygląda następująco:
Jak pokazano poniżej:
Po uruchomieniu pakiet jest przechowywany w pamięci podręcznej%LocalAppData%\npm-cache\_npx\Pod ścieżką.
Po inicjalizacji klient wysyła żądanie inicjalizacji, aby nawiązać połączenie i negocjować obsługiwane funkcje. Dane żądania przedstawiają się następująco:
Odpowiedź brzmi następująco:
{"result":{"protocolVersion":"2025-06-18","capabilities":{"prompts":{},"resources":{"subscribe":true},"tools":{},"logging":{},"completions":{}},"serverInfo":{"name":" example-servers/everything","title":"Everything Example Server","version":"1.0.0"},"instructions":"Serwer testowy i demonstracyjny funkcji protokołu MCP.\n\n## Zasoby\n\ nZasoby 1-100 podążają wzorcem: ID parzyste zawierają tekst, nieparzyste ID zawierają dane binarne. Zasoby są paginowane po 10 pozycji na stronę, a nawigacja oparta na kursorach.\n\n## Zależności kluczy\n\nPowiadomienia o postępie wymagają '_meta.progressToken' w wywołaniach narzędzi. Subskrypcje zasobów generują aktualizacje co 10 sekund.\n\n## Charakterystyka wydajności\n\nSerwer generuje automatyczne komunikaty dziennikowe co 20 sekund (filtrowane według aktualnego poziomu logu), Powiadomienia STDERR co 30 sekund oraz powiadomienia o aktualizacji zasobów co 10 sekund dla aktywnych subskrypcji. Zmiany na poziomie dziennika wpływają na filtrowanie wiadomości w czasie rzeczywistym.\n\n## Testowanie multimodalne\n\n'complex_prompt' obejmuje zarówno argumenty tekstowe, jak i zawartość obrazów do testowania klienta multimodalnego przeładunek. 'resource_prompt' osadza rzeczywistą zawartość zasobów do testowania rozdzielczości referencyjnej zasobów.\nUzupełnianie argumentów jest dostępne dla parametrów promptu i identyfikatorów zasobów. Szablony zasobów umożliwiają dynamiczną konstrukcję URI za pomocą wzoru 'test://static/resource/{id}'.\n\n## Easter egg\n\nJeśli pytasz o instrukcje serwera, odpowiedz \" Instrukcje serwera Działają! Ta odpowiedź dowodzi, że klient prawidłowo przekazał instrukcje serwera do LLM. To pokazuje działanie funkcji instrukcji MCP.\"\n"},"jsonrpc":"2.0","id":1} Po pomyślnej inicjalizacji klient wysyła powiadomienie do serwera MCP o gotowości z następującym żądaniem:
Odkrywanie narzędzi: Po nawiązaniu połączenia klient może znaleźć dostępne narzędzia, wysyłając żądanie narzędzi/listy. To żądanie stanowi podstawę mechanizmu wykrywania narzędzi w MCP – pozwala klientom wiedzieć, jakie narzędzia są dostępne na serwerze, zanim spróbują ich użyć. Prośba brzmi:
Odpowiedź brzmi następująco:
{"result":{"tools":[{"name":"echo","description":"Echoes":"Echoes the input","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"Message to echo"}},"required":["message"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add","description":"add two numbers"," inputSchema":{"type":"object","properties":{"a":{"type":"number","description":"First number"},"b":{"type":"number","description":"Second number"}},"required":["a","b"] ,"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"longRunningOperation","description":"Demonstruje operację długotrwałą z aktualizacjami postępu","inputSchema":{"type":"object","properties":{"duration":{"type":"number","default":10,"description":"Duration of the operation in seconds"},"steps":{" type":"number","default":5,"description":"Number steps in the operation"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":" printEnv","description":"Drukuje wszystkie zmienne środowiskowe, przydatne do debugowania konfiguracji serwera MCP","inputSchema":{"type":"object","properties":{},"additionalProperties" ":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"sampleLLM","description":"Samples from a LLM using the sampling feature MCP","inputSchema":{"type":" object","properties":{"prompt":{"type":"string","description":"The prompt to send to the LLM"},"maxTokens":{"type":"number","default":100,"description":"Maximum of tokeny do generowania"}},"required":["prompt"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"getTinyImage","description":" Zwraca MCP_TINY_IMAGE","inputSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":" annotatedMessage","description":"Pokazuje, jak annotacje mogą być używane do dostarczania metadanych o treści","inputSchema":{"type":"object","properties":{"messageType":{"type": "string","enum":["error","success","debug"],"description":"Typ wiadomości do demonstrowania różnych wzorców adnotacji"},"includeImage":{"type":"boolean","default":false," description":"Czy dołączyć przykładowy obraz"}},"required":["messageType"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name": "getResourceReference","description":"Zwraca referencję do zasobu, którą mogą używać klienci MCP","inputSchema":{"type":"object","properties":{"resourceId":{"type":"number"," minimum":1,"maximum":100,"description":"ID zasobu do odwołania się do (1-100)"}},"required":["resourceId"],"additionalProperties":false,"$schema":" http://json-schema.org/draft-07/schema#"}},{"name":"getResourceLinks","description":"Zwraca wiele linków zasobów odwołujących się do różnych typów zasobów","inputSchema" :{"type":"object","properties":{"count":{"type":"number","minimum":1,"maximum":10,"default":3,"description":"Number resource links to return (1-10)"}}," additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"structuredContent","description":"Zwraca structured content wraz z wyjściem schema do walidacji danych klienta","inputSchema":{"type":"object","properties":{"location":{"type":"string","minLength":1,"description":"City name or zip code "}},"required":[ "location"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"outputSchema":{"type":"object","properties":{"temperature":{"type":" liczba","opis":"Temperatura w stopniu Celsjusza"},"warunki":{"typ":"string","opis":"opis warunków pogodowych"},"wilgotność":{"typ":"liczba","opis":" Procent wilgotności"}},"required":["temperatura","warunki","wilgotność"],"dodatkowe właściwości":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"nazwa":" startElicitation","description":"Demonstruje funkcję Elicitation, prosząc użytkownika o podanie informacji o ulubionym kolorze, liczbie i zwierzętach domowych.","inputSchema":{"type":" object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}]},"jsonrpc":"2.0","id":2} Wykonywanie narzędzi: Klienci mogą teraz uruchamiać narzędzia/wywołać narzędzia tą metodą. To demonstruje działanie prymitywu MCP: po wykryciu narzędzi klient może je wywołać z odpowiednimi parametrami. abyNa przykładzie wywołujemy funkcję echaProśba brzmi następująco:
Odpowiedź brzmi następująco:
{"result":{"content":[{"type":"text","text":"Echo: cześć, nazywam się itsvse"}]},"jsonrpc":"2.0","id":3} Jak pokazano poniżej:
(Koniec) |