Hər kəs “MCP”i “Rosetta Stone” kimi dizayn edir.Diagramlar!Whitepapers!TikToks yaratdıqları fikir liderləri! Amma, mənim sevgili data druidlərim, real paketlər nədir? nobody's showing the actual packets. Bu, motivasiyalı bir plakadan öyrənmək üçün çalışır.Şübhəsiz ki, teorik çerçevə *inspirici*dir, lakin mən kanı və ağızları görmək istəyirəm! Nerede çirkin JSON var? Nerede stdin / stdout dəmirləri var? Şimşək görmədiyim zaman yaratdığımı necə animatlaşdırmalıyım? Bu, motivasiyalı bir plakadan öyrənmək üçün çalışır.Şübhəsiz ki, teorik çerçevə *inspirici*dir, lakin mən kanı və ağızları görmək istəyirəm! Nerede çirkin JSON var? Nerede stdin / stdout dəmirləri var? Şimşək görmədiyim zaman yaratdığımı necə animatlaşdırmalıyım? Bir protokol öyrənmək istisna olmaqla, bir PowerPoint-dən qapıçılıq öyrənməyə çalışmaq gibidir. Give me the electrons or give me death. Artıq bizə qələbə qələbəsi gəldi, getdik! Bu sizin iş modelinizdir? MCP biznes planınız: MCP öyrənmək Bir neçə ildir ki, bu... (FOTO) Profitlər Əsas səhifə » Əsas səhifə » Əsas səhifə » Əsas səhifə » Əsas səhifə Şükür... “Sən yalnız deyilsən! Hər kəs LLM-lər haqqında danışır, tool calling, function calling, bidirectional this and capability that. Mən, əslində, istisna deyiləm. "What's this look like ON THE WIRE???" Bütün protokollar açıqlanıb Mən filoloq olmaq istəmirəm. Mən Dr. Frankenstein kimi hiss etmək istəyirəm ki, mənim golem, şimşək və bütün. Əsas səhifə.io see “Mənim üçün çox vacibdir ki, bir neçə ildir ki, bu işdə iştirak edim. Yerdən ilk baxışlar VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Lakin bir şey daha öncə ortaya çıxır: İstehsal etmək lazımdır. Əgər biz bu problemdən qurtulmaq istəsək, bu problemin həllini A-ni görmək mümkün deyil Biz sistemin gözəl skeletonuna baxana qədər asanlaşdıra bilərik: çıxış üçün yalnız dörd mesaj türü, giriş üçün isə üç. (Nə üçün sayı bir az sonra tamamilə uyğunsuzlaşdıracağıq.) tool invocation Lütfi Başlanğıc Başlanğıc Yazılar / List İstehsal / Call (Bundan sonra qayıdıb gələn 3 nəfər) Bütün protokolu bu yeddi mesajı bilərək anlayabilirsiniz. Meteoroloji tədqiqat işləri ( ) Əsas səhifə.io Əsas səhifə.io Biz istifadə edirik MCP serverinin təsadüfü: Siz bunu burada GitHub-da bulabilirsiniz: [ Şirkət weather.py https://github.com/modelcontextprotocol/quickstart-resources/blob/main/weather-server-python/weather.py Bu barədə “Qəbələ”də danışdığınız zaman nə ola bilər? Əvvəlki: MCP HTTPS? Web sockets? Named pipes? Tapping in an ancient Ethernet vampire cable? Agnostik təyyarə Praktikda, ən yaygın metod serveri subprocess kimi başlamaq və və Bu, sizə gözəl bir az priva kommunikasiya kanalı verir. (Təknik olaraq tam dupleks, lakin Biz bunu 1.5 duplex adlandırırıq. stdin stdout stderr Mesajlar necə yayılır MCP, JSON-RPC 2.0 protokolunu istifadə edir və bu, sizə bir istefa / cavab protokolunu və xəbərdarlıqları verir. Hər bir mesaj JSON-in bir rütbəsində bir olaraq göndərilir.Bu, hər bir rütbənin anlamın tam bir paketi olduğu bir digital telegram xidmətinə bənzər. Bu, bir neçə ildir ki, bir neçə ildir ki, bu problemlər həll olunmasa, bir neçə ildir ki, bu problemlər həll olunmalıdır. “Stdin/Stdout” – “Şiddətli sayılır” Yəni, bu modelin “doğru” və ya “düşünməz” olduğunu iddia edən dramatik blog postlarını da görürsünüz: “STDIN/STDOUT MCP COMMUNICATION CONSIDERED HARMFUL”. Biz laboratoriyada atəş açmaq istəmirik, yoxsa biz? Görürsünüz ki, Ye Olden Times'da, çox uzun qidalar bu problemdən çəkinməyə səbəb ola bilər (hello, Morris Worm). Şükürlər olsun ki, ən modern yazılım bu problemdən çəkinmir (bir çox! Parmaklar çəkindi!). Modern JSON analizləri hər ikisi də sürətli və dayandırıcıdır. 256 MB hava xəbərdarlığı göndərmək istəyirsənmi? Bunun üçün gedin. Sadəcə... bəlkə hər saniyə bunu etməyin. Bu xəbərdarlıqlar normaldır ki, C-də dosya descriptorlarını manuel olaraq bağlayan insanlar gəlir. Siz bunu etmirsiniz. Modul bu iş üçün yaradılmışdır. subprocess # fork off an MCP subprocess import subprocess as sp # Redirect stderr to /dev/null stderr = sp.DEVNULL # Start the weather.py process process = sp.Popen( ["uv", "run", "weather.py"], stdin=sp.PIPE, stdout=sp.PIPE, stderr=stderr ) Bu barədə “Python”a istinadən xəbər verir ki, bu barədə “Python”a istinadən xəbər verir. İŞİD Modul uşaqların I/O aksiyalarını borularla dəyişir, sizə tam dominantlıq verir. subprocess Artıq biz protokol biliminə hazırıq. proper digital necromancer! Xatırladaq ki, bu, çox asandır. MCP-nin bütün korporasiyası və scepter rejallərində belədir: YOU: "Hello, I speak robot." SERVER: "Delightful. I also speak robot." YOU: "Excellent, we both can speak robot!" YOU: "What tricks can you do?" SERVER: "I can juggle and summon storms." YOU: "Storm, please!" SERVER: "⛈️ As you wish." Bütün bu protokol yalnız bir şeyi etməyi və bunu etdiklərini təsdiq etmək üçün bir kəsdən sorğu-sual etmək üçün çox formaldır. Üstəlik, bu çox gözəl, çox asan bir prosesdir. 7 Mütəxəssislər mübahisə edir. Bu da budur. Birləşmiş Ştatlar Birləşmiş Ştatlar Birləşmiş Ştatlar Birləşmiş Ştatlar Birləşmiş Ştatlar Birləşmiş Ştatlar Birləşmiş Ştatlar Birləşmiş Ştatlar Birləşmiş Ştatlar Birləşmiş Ştatlar Biz bir hava serverini doğurub, düzgün bir çılgın bilim adamı kimi sorğu-sual edəcəyik. Protokollü işləmək üçün ən yaxşı yolu, bağırana qədər onu pisləşdirmək, sonra işləyə qədər düzəltməkdir. Protokollü işləmək üçün ən yaxşı yolu, bağırana qədər onu pisləşdirmək, sonra işləyə qədər düzəltməkdir. Tip #2: LLM-lərinizdən əziyyət çəkirsəniz, AI-nin keçdiyi vaxtlarda sizə nə olduqlarından sorğu-sual olunmayacağam! Tip #2: LLM-lərinizdən əziyyət çəkirsəniz, AI-nin keçdiyi vaxtlarda sizə nə olduqlarından sorğu-sual olunmayacağam! 1-ci maddə: Digital Minion # Behold! We create life! # (fork off an MCP subprocess) import subprocess # Start the weather.py process # Use `uv run` to execute the script in the uv environment # Redirect stdin, stdout to PIPE for communication # Redirect stderr to DEVNULL to suppress error messages process = subprocess.Popen( ["uv", "run", "weather.py"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=stderr) # Behold! We create life! process = subprocess.Popen( ["uv", "run", "weather.py"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL # Silence the screams ) İŞİD Modul oğlanın I/O aksiyalarını borularla yerləşdirir, sizə mübahisə üzərində tam kontrol verir.Bu gözəl bir basitlikdir: Artıq bacınıza və çağırışınıza hazır bir uşaq prosesiniz var, ona atdığınız hər şeyi yerinə yetirirsiniz. subprocess Bir neçə ildir ki, komandanın liderini göstərmək üçün daşlar göndərə bilərsiniz. Normal vəziyyətdə, valideyn prosesi çıxdığında, uşaq gəmiyə düşər - bu yüzden sisteminizi zombi prosesləri ilə üzləşməkdən qorxmanıza ehtiyac yoxdur (yaxud, əksəriyyəti). Görəcəksiniz ki, biz istifadə edirik. Bu prosesi davam etdirmək lazım deyil, amma VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Quick aside uv uv Əgər hala pip istifadə edirsinizsə, biz danışmalıyıq. Əgər hala pip istifadə edirsinizsə, biz danışmalıyıq. İkinci hissə: ilk görüş Hər bir yaxşı əlaqə bir-birimizlə identifikasiya ilə başlayır.Biz özümüzü (gentleman kimi) açıqlayaraq başlayacağıq: # Define the initialize request init_request = { "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-03-26", "capabilities": {}, "clientInfo": { "name": "MyMCPClient", "version": "1.0.0" } } } Bu bizim Bu, serverə üç əsas şeydən xəbər verir: MCP-dən danışırıq, hansı versiyasını istifadə edirik və nəyi masaya gətiririk. Sağlamlıq açılıb Bu, JSON-RPC 2.0 formatını izləyir və bu, serverlə olan bütün danışıqlarımız boyunca konsistent olacaq. Let's fire it off. import json def send_mcp_request(process, request): """Sends a JSON-RPC request to the subprocess's stdin.""" json_request = json.dumps(request) + '\n' # Add newline delimiter process.stdin.write(json_request.encode('utf-8')) process.stdin.flush() # Ensure the data is sent immediately # 1. Send the initialize request print("Sending initialize request...") send_mcp_request(process, init_request) Bu nəticəni görmək lazımdır: Sending initialize request... Artıq serverin bu qədər hər şey haqqında nə söyləyəcəyini dinləyin: def read_mcp_response(process): """Reads a JSON-RPC response from the subprocess's stdout.""" # Assuming the server sends one JSON object per line line = process.stdout.readline().decode('utf-8') if line: print(" . . . len is", len(line)) return json.loads(line) return None print("Sending initialized request...") send_mcp_request(process, notified_request) O, özü də özü də özü də özü də özü də özü də: . . . len is 266 Received response after initialization:{'id': 1, 'jsonrpc': '2.0', 'result': {'capabilities': {'experimental': {}, 'prompts': {'listChanged': False}, 'resources': {'listChanged': False, 'subscribe': False}, 'tools': {'listChanged': False}}, 'protocolVersion': '2025-03-26', 'serverInfo': {'name': 'weather', 'version': '1.9.4'}}} “Hello, mən hava serveriyəm, danışıqların ortasında yeganə yetkinliklərimi dəyişməyəcəyəm və həqiqətən səni ghost etməyəcəyəm.” Translation Protokolun versiyasını və əsas ayrıntılarını paylaşır, lakin O, həqiqətən də real mükafatdır. So, what's the server actually telling us here? capabilities Biz bu demo üçün imkanları gözləmirik, lakin bunu gözləyin: biz VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Bəlkə “Hazırlanma” və “resurssuzluq” ilə də aynı iş olur – onları tamamilə atırıq. Hər bir sistemin ayrı-ayrı problemləri başa çatdığını düşünürsünüz ki, hər bir rolu yenə işıqlandırmanıza ehtiyac yoxdur.Protokolun hansı parçalarını seçə bilərsiniz və seçə bilərsiniz, lakin digər MCP aletləri ilə yaxşı oynamaq istəyirsinizsə, spesifikasiyaya tabe olmalısınız. API separation Alright, we're connected and ready to rock, right? Wrong. Server orada oturub, dijital ayağını çaldırıb, əl çəkməyi tamamlamaq üçün bizi gözləyir. notified_request = { "jsonrpc": "2.0", "method": "notifications/initialized" } VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. ACK paketi göndərmək kimi düşünün: “Hey server, I’m ready to roll!” Notice the missing id notification “Not id” anlamına gəlmir: “Cavab verməyin, bu xəbərlə nə etməliyinizi biləcəyinizə inanıram”. “Sənə cavab verməyin, bu xəbərlə nə etməyəcəyini biləcəyinə inanıram”. Yəqin id Bir neçə ildir ki, bu filmə geri qayıdın... (FOTO) Bir neçə ildir ki, bu filmə geri qayıdın... (FOTO) Hesab edirəm ki, bir neçə ildir ki, bu problemlər həll olunacaq, bir neçə ildir ki, bu problemlər həll olunacaq. İndi biz bunu təsdiq edəcəyik: Biz həqiqətən partiyaya hazırıq. # yes we are indeed ready to party # Acknowledge the server so it knows we approve print("// Sending initialized request...") send_mcp_request(process, notified_request) Artıq müştərilər istəkləri gözləməyə başlayıblar. “Show Me What You Got” (Mənə nə verdiyinizi göstər) Bu serverin oyunqona nə gətirdiyini görmək zamanı: tools_list_request = { "jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": { } } # 2. Send the tools/list request print("// Sending tools/list request...") send_mcp_request(process, tools_list_request) İndi biz istədiyimiz şeyləri görürük... Mütəxəssislər! // Sending tools/list request... Artıq, gələcəyimizi oxumağa başlayırıq... Biz nəyi tapdığımızı görmək zamanı: # Read the server's response to the tools/list request tools_list_response = read_mcp_response(process) print("// Received tools list response:", end='') pprint(tools_list_response) VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. . . . len is 732 // Received tools list response:{'id': 2, 'jsonrpc': '2.0', 'result': {'tools': [{'description': 'Get weather alerts for a US state.\n' '\n' ' Args:\n' ' state: Two-letter US state code ' '(e.g. CA, NY)\n' ' ', 'inputSchema': {'properties': {'state': {'title': 'State', 'type': 'string'}}, 'required': ['state'], 'title': 'get_alertsArguments', 'type': 'object'}, 'name': 'get_alerts'}, {'description': 'Get weather forecast for a location.\n' '\n' ' Args:\n' ' latitude: Latitude of the ' 'location\n' ' longitude: Longitude of the ' 'location\n' ' ', 'inputSchema': {'properties': {'latitude': {'title': 'Latitude', 'type': 'number'}, 'longitude': {'title': 'Longitude', 'type': 'number'}}, 'required': ['latitude', 'longitude'], 'title': 'get_forecastArguments', 'type': 'object'}, 'name': 'get_forecast'}]}} Bəs bu, a Xocalıya gəlin, yaxşı işlər görək. Lütfi Bu bizim altın maddədir – hər bir objekt LLM istifadə edə biləcək bir alət göstərir. (Plot twist: biz də onları çağırırıq, bu da tamamilə biz bu vaxt etdiyimizdir!) See that tools Xüsusi fakt: “doğrusu” alanlar LLM-nin hansı funksiyaya çağırılacağına necə karar verir.Tinder üçün alətlər kimi düşünün, AI-nizin telefonuna baxaraq solunu və ya sağunu sövq etməyi seçin. Xüsusi fakt: “doğrusu” alanlar LLM-nin hansı funksiyaya çağırılacağına necə karar verir.Tinder üçün alətlər kimi düşünün, AI-nizin telefonuna baxaraq solunu və ya sağunu sövq etməyi seçin. “OpenAI” ilk dəfə bunu “function calling” olaraq etiraf edib. Amma bir yerdə yolda, endüstri kolektiv olaraq "təkniklər" daha qısa (ya da bəlkə daha yaxındır?), və şimdi bütün dansı "təknik çağırmaq" adlandırırıq. One interesting side note Təxminən Anatomy of a tool (pay attention, this is where the magic lives): Xatırladaq ki, bu, bir neçə ildir ki, bir neçə ildir ki, bu problemlər həll olunmayıb. Açıqlama: LLM oxumaq üçün açıq ingilis dil (bu, həqiqətən, AI sizin aletinizi istifadə etməyinizə baxdığınızda baxır) JSON şeması: hansı parametrlərə ehtiyacınız var Hər şey yalnız “big string”ı qaytarır və ən yaxşı ümid verir İstifadə Açıqlama Giriş sistemi Çıxış Çünki biz hamımız bazarda JSON-i zəncirlərlə döndürürük və bu, bir dizayn qərarına bənzəyirik. Xatırladaq ki, normal funksiyaların hər hansı bir tipini qaytarmaq mümkündür, lakin Unix komandosunu göstərən alətlər (namazın bir neçə faydası var) yalnız metni söndürürlər. Bazı modellər JSON çıxışı zorlamaq üçün daşlar var, bu yüzden teorik olaraq, LLM hər dəfə strukturlu məlumatlar gözləyə bilər. Sonra bir daha, alətlər düz texti, CSV, HTML, ya da həqiqətən hər şeyi qaytarabilir. Multi-modal modellər audio, görüntülər, video, ya da canlı objekt algılama alətləri qaytarabilir - imkanlar şaşırdıqca kaosdur. “İnter”ə ilk baxışımız var: “İnter”ə ilk baxışımız var! 4.Şübhəsizlik anı Artıq bir neçə ildir ki, bizə nə lazımdır? - VİDEO Bir yer seçək, bir yer seçək Bizə GPS-dən istifadə etmək lazım deyil, GPS-dən istifadə etmək lazım deyil. Daha yaxşı seçim olardı. get_alerts get_forecast tools_call_request = { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "get_alerts", "arguments": { "state": "TX" } } } “Texas”ı seçdim, çünki oradakı hər şey daha böyükdür, hava katastrofaları da dahil. Niyə “tools/call” və “tool/call” deyildir? Bir Belə ki, “tool/call” ingilis dilində daha doğal deyərdi, lakin görünür ki, digər terminallarla birlikdə qalmaq daha yaxşıdır. Bütün məlumatlarımızı bir-birimizlə bir yerdə saxlayırıq, böyük kırmızı düymə basmalıyıq. # 3. Send the tools/call request print("// Sending tools/call request...") send_mcp_request(process, tools_call_request) # Read the server's response to the tools/call request tools_call_response = read_mcp_response(process) print("// Received tools call response:", end='') pprint(tools_call_response) [BEEP BEEP BOOP BOOP] (Bu da “Big Red Button”un yaradıcılığıdır) ] [Drumroll please Serverin düşüncəsi... işləməsi... və... ] [And the crowd goes wild! Voyilà! Real hava məlumatları materiallaşdırır. xəbərdarlıqlar, sülhlər, tornado, işlər. Bütün strukturlu JSON-da daxil edilmişdir, tam olaraq terapistinizin əmr etdiyi kimi: (düşürülmüş, heç kəs 11 JSON dəmir sayını görmək istəmir) // Sending tools/call request... . . . len is 51305 // Received tools call response:{'id': 3, 'jsonrpc': '2.0', 'result': {'content': [{'text': '\n' 'Event: Flood Advisory\n' 'Area: Hidalgo, TX; Willacy, TX\n' 'Severity: Minor\n' 'Description: * WHAT...Flooding caused by ' 'excessive rainfall continues.\n' '\n' '* WHERE...A portion of Deep South Texas, ' 'including the following\n' 'counties, Hidalgo and Willacy.\n' '\n' '* WHEN...Until 245 PM CDT.\n' '\n' '* IMPACTS...Minor flooding in low-lying and ' 'poor drainage areas.\n' '\n' '* ADDITIONAL DETAILS...\n' '- At 205 PM CDT, Doppler radar indicated ' 'heavy rain due to\n' 'thunderstorms. Minor flooding is ongoing or ' 'expected to begin\n' 'shortly in the advisory area. Between 2 and ' '5 inches of rain\n' 'have fallen.\n' '- Additional rainfall amounts up to 1 inch ' 'are expected over\n' 'the area. This additional rain will result ' 'in minor flooding.\n' '- Some locations that will experience ' 'flooding include...\n' 'Harlingen, Elsa, Edcouch, La Villa, Lasara, ' 'La Villa High\n' 'School, Monte Alto, Jose Borrego Middle ' 'School, Satiago\n' 'Garcia Elementary School, Edcouch Police ' 'Department, Edcouch\n' 'City Hall, Edcouch Volunteer Fire ' 'Department, Edcouch-Elsa\n' 'High School, Laguna Seca, Carlos Truan ' 'Junior High School,\n' 'Elsa Police Department, Lyndon B Johnson ' 'Elementary School,\n' 'Elsa Public Library, Olivarez and Lasara ' 'Elementary School.\n' '- http://www.weather.gov/safety/flood\n' "Instructions: Turn around, don't drown when " 'encountering flooded roads. Most flood\n' '\n' 'The next statement will be issued Tuesday ' 'morning at 830 AM CDT.\n', 'type': 'text'}], 'isError': False}} Bilin ki, - Hər zaman bu alanı kontrol edin, əgər 3:00-da gizemli zərbələr düzəltməyincə. Victory! isError: false Biz bu hava məlumatlarını analiz edə bilərik və LLM üçün masaj edə bilərik, ya da yalnız çirkin cavabı keçirmək və modelin bunu biləcəyini izah edə bilərik. Amma əgər bir şey yaratırsanız, alət çıxarından əvvəl işləmək inanılmaz güclüdür.Onu formatlayabilirsiniz, filtr edə bilərsiniz, digər verilərlə birləşdirə bilərsiniz, ya da uygulamanızın ehtiyacı olan şeylərə dönüşə bilərsiniz. Biz MCP serveri qəbul etdik, bağlantıyı başlatdıq, bir alət çağırdıq və bütün MCP dansı, əllərdən çıxarmaqdan xəbər almağa başlayıb. And that's a wrap! “The Full Monty: Your Complete MCP Client” layihəsi Buradakı bütün rütbələr bir-birindən ibarətdir: import subprocess import json from pprint import pprint def send_mcp_request(process, request): json_request = json.dumps(request) + '\n' process.stdin.write(json_request.encode('utf-8')) process.stdin.flush() def read_mcp_response(process): line = process.stdout.readline().decode('utf-8') return json.loads(line) if line else None requests = { 'init': { "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-03-26", "capabilities": {}, "clientInfo": {"name": "MyMCPClient", "version": "1.0.0"} } }, 'initialized': { "jsonrpc": "2.0", "method": "notifications/initialized" }, 'list_tools': { "jsonrpc": "2.0", "id": 2, "method": "tools/list" }, 'call_tool': { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "get_alerts", "arguments": {"state": "TX"}} } } process = subprocess.Popen( ["uv", "run", "weather.py"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL ) try: send_mcp_request(process, requests['init']) pprint(read_mcp_response(process)) send_mcp_request(process, requests['initialized']) send_mcp_request(process, requests['list_tools']) tools = read_mcp_response(process) print("Available tools:", [t['name'] for t in tools['result']['tools']]) send_mcp_request(process, requests['call_tool']) result = read_mcp_response(process) print("Weather alert received:", len(result['result']['content'][0]['text']), "characters") finally: process.terminate() Böyük açıqlama You just built an MCP client using nothing but Python's standard library. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Bu, görmüş olduğunuz hər bir fancy MCP integrasiyasının arxasında pis sırrıdır. Claude sizin bazanızla danışır, GPT-4 API-nizi çağırır, ya da bir start-upun "revolucionar AI workflow platforması" - bütün bunların altındadır, bu belədir: Spawn process. Send JSON. Read JSON. Repeat. O, “Oz sihirbazı”nın çox yaxşı sessiya sistemi olan bir adam olduğunu göstərir. O, “Oz sihirbazı”nın çox yaxşı sessiya sistemi olan bir adam olduğunu göstərir. Sonraki İçerikÇox çılgınlıq Artıq canavarın göğsünü görmüşsünüz (kodda), siz belə edə bilərsiniz: MCP serverləri hazırlayın (bir daha başqa kəsin bütünlükləri yazmasını gözləməyin) VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. LLM-lərin metadata necə istifadə etdiyini bilərək daha yaxşı alətlər dizayn edin Daha yaxşı alətlər yazın ki, LLM-lərinizə aşık olurlar Protokollun hər şeydən uzaqlaşdırın, çünki protokolun əvvəllərini anladınız Yoxsa, qəlbimdə qocalıq var. - Düşünmürəm. Güclü açıqlama The miracle in step 2 of your business plan? It was you, all along. İş planınızın 2-ci hissəsindəki möcüzə siz idi. Bir şey yarada bilər. Bu kodun işində görmək istəyirsənmi? Tam nümunə burada yaşayır: [https://gitlab.com/-/snippets/4864350] https://gitlab.com/-/snippets/4864350 https://gitlab.com/-/snippets/4864350?embedable=true