Tout moun dissepsyon MCP tankou li se Stone a Rosetta nan AI. Diagram! Whitepapers! lidè lide fè TikToks! Men, kote, ti druid done m ', yo se pake yo reyèl? Isit la se sa ki fè m 'nuts: nobody's showing the actual packets. Li se tankou eseye aprann chiriji soti nan yon plak motivasyon. Natirèlman, ankadreman teyori a se *enspirasyon*, men mwen vle wè blòk la ak sèvo a! Ki kote se JSON a brik? Ki kote yo stdin / stdout echantiyon yo? Ki jan mwen ta dwe anime kreyasyon mwen lè mwen pa ka menm wè blòk la? Li se tankou eseye aprann chiriji soti nan yon plak motivasyon. Natirèlman, ankadreman teyori a se *enspirasyon*, men mwen vle wè blòk la ak sèvo a! Ki kote se JSON a brik? Ki kote yo stdin / stdout echantiyon yo? Ki jan mwen ta dwe anime kreyasyon mwen lè mwen pa ka menm wè blòk la? Èske w ap eseye aprann yon pwotokòl san yo pa deba fil se tankou eseye aprann fèy soti nan yon PowerPoint. Give me the electrons or give me death. Koulye a, nou te gen mantra nou an, nou ta ka enterese! Èske sa a se modèl biznis ou? Plani biznis MCP ou: ✅ Aprann MCP ??? (... yon mirak rive...) Profit nan Soti nan konesans? Natirèlman li! Li se ekivalan lanp lanp nan konvèti plent nan lò. Alkimie, men ak yon anpil plis JSON. Feri... # ou pa se yon sèl! Li pral sanble ke reyon an blòk te koule sou sa a rele Modèl Konteks Protokol. Tout moun pale sou LLM yo devlope, zouti apèl, fonksyon apèl, bidirectional sa a ak kapasite sa a. Mwen, klè, pa gen okenn eksepsyon. Men, yon bagay te kontinye klavye nan bravo m 'nan mwen kouri sou sa a plezi woulib woulib nan teyori ak abstraksyon: "What's this look like ON THE WIRE???" Natirèlman, pwotokòl la tout antye se dokiman nan , men mwen pa vle filozofi. Mwen vle Mwen vle santi tankou Dr. Frankenstein tendans nan golem m ', flanm ak tout bagay. Pa wade nan yon lòt semantik fèy-stack nan obsèb BNF-flavored gramatik sentaks. ModèlContextprotocol.io see Malgre m ', yon vwayajè senpleman nan mitan moun ki ta dwe enkyete, jiskaske mwen te kouvri tèt mwen menm jan an! Observasyon prensipal soti nan jaden an MCP se trè, trè nouvo. Vire kantite. Potansyèlman toujou blese. Petèt yon jou, liv tout antye pral ekri sou politik enteryè li yo, tankou yon kalite konvansyon dijital konstitiyèl. Epi nou dwe reyèl - liv sa a pral vann kòm yon NFT. Men, pou kounye a, yon sèl bagay se pi wo nan tout: Zouti Calling se tout sa ou bezwen Si nou zoom fason, fason nan sou sa a sèl, kritik ka itilize - - nou ka ignore a Nou ka senpifye anvan nou gade nan skeleton la bèl nan sistèm la: jis kat kalite mesaj pou pwodiksyon, ak twa pou antrepriz. (Nou pral eksplike poukisa nimewo yo pa korespondan eksakteman yon ti kras pi lwen.) tool invocation Lòt Premye Inicialize nan Zouti / lis Zouti / apèl (ak 3 rezilta ki vini tounen) Ou ka konprann tout pwotokòl la pa konnen sou sa yo sèt mesaj. Yon egzanp meteyografik (nan ) ModèlContextprotocol.io ModèlContextprotocol.io Nou pral itilize — yon egzanp sèvè MCP senp ki pèmèt ou query pratik ak alèt done. Ou ka jwenn li nan GitHub yo isit la: [ Pwodwi weather.py https://github.com/modelcontextprotocol/quickstart-resources/blob/main/weather-server-python/weather.py Tanpri pale sou sa ki reyèlman rive "nan fil la" lè w ap pale sou sa a bagay. Premye soti nan: MCP se Li vle di espesifikasyon an pa gen pwoblèm ki jan ou konekte nan sèvè a. HTTPS? Web Sockets? Nimewo tiyo? Tapping nan yon kab vampire Ethernet ansyen? Pa gen pwoblèm. Transpòtasyon nan agnostik. Nan pratik la, metòd la ki pi komen se lanse sèvè a kòm yon sous pwosesis ak kominikasyon sou ak Li bay ou yon ti chanèl kominikasyon prive bèl. (Technically full-duplex, men si ou ajoute nan , nou pral rele li 1.5-duplex yo dwe bèl). stdin stdout stderr Ki jan mesaj yo kouri MCP sèvi ak JSON-RPC 2.0 sou fil la. Sa a bay ou yon pwotokòl demann / repons, plis anons. Tout mesaj se voye kòm youn pou chak liy nan JSON. Li se tankou yon sèvis telegram dijital kote chak liy se yon pake konplè nan vle di. Èske sa a se nan espèk la? Yon kalite; pa reyèlman. Espèk la kite li louvri. Men, sa a JSON newline-delimited se idiom an default. Mèt la nan "stdin / stdout konsidere kòm danjere" Se poutèt sa, ou ka jwenn kèk pòs blog dramatik revele modèl sa a se "dangere" oswa "ki pa konfyans." Se poutèt sa yo menm ekri li nan tout-kap: "STDIN / STDOUT MCP COMMUNICATION CONSIDERED CHARMFUL." Li sanble enkyetid! Nou pa vle kòmanse yon fire nan laboratwa a, nou? Pou ki sa moun ta di sa a si li pa reyèl? Èske w wè, nan Ye Olden Times, liy ekstra long ka lakòz overflow tampon (kote, Morris Worm). Fortunately, pi fò nan lojisyèl modèn pa soti nan pwoblèm sa a (tou anpil! Fingers kouvri!). Modèn JSON analizè yo tou de vit ak rezilye. Èske ou vle voye yon alèt meteo 256MB? Eseye pou li. Jis... ka pa fè li chak dezyèm. Sa yo alèt souvan soti nan moun ki manyen deskripsyon dosye nan C. Ou pa fè sa. Ou se lè l sèvi avèk Python. Espesifikman, modil ki te bati egzak pou kalite sa a nan travay. 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 ) Fasil, dwa? Tout natif natal Python. Pa gen pake adisyonèl. Batri yo enkli. nan Modil la ranplase flux yo I / O nan timoun yo ak tiyo, bay ou dominasyon konplè. Nou ka tou voye sinyal nouvo pwosesis nou an si nou vle. subprocess Koulye a, nou finalman pare yo fè pwotokòl syans tankou yon proper digital necromancer! Plot twist: Li se entimidantèlman senp MCP, nan tout regalia antrepriz-robe-and-scepter li yo, se jis sa a: 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." Tout pwotokòl sa a se jis yon fason trè fòmasyon nan mande yon moun fè yon bagay ak jwenn konfime ke yo te fè li. Rès la se sèlman sèvè-klas antrepriz ak glise limyè alantou sa a bèl bagay senp manm. 7 Chanjman enteresan. Li se sa. Stitching monstr la ansanm: yon prototip travay Tan pou fè men nou san danje. Nou pral fè yon sèvè meteo ak interrogasyon li tankou yon syantis mantal. Tip #1: Pi bon fason yo konprann yon pwotokòl se yo abuse li jiskaske li gres, Lè sa a, patch li jiskaske li ko-kooperasyon. Li travay sou kòd, plant kay, ak kounye a, Subarus vye granmoun. Tip #1: Pi bon fason yo konprann yon pwotokòl se yo abuse li jiskaske li gres, Lè sa a, patch li jiskaske li ko-kooperasyon. Li travay sou kòd, plant kay, ak kounye a, Subarus vye granmoun. Tip #2: Si ou torture LLM ou yo, mwen pa pral te fè responsab pou sa ki pase ou nan The After Times lè AI pran sou! Tip #2: Si ou torture LLM ou yo, mwen pa pral te fè responsab pou sa ki pase ou nan The After Times lè AI pran sou! Etap 1: Konvoke Digital Minyon nou an # 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 ) nan modil la ranplase flux yo I / O nan timoun yo ak tiyo, bay ou kontwòl konplè sou konvèsasyon an. Li se bèl bagay senp: ou gen kounye a yon pwosesis timoun dedye nan beck and call ou, pare yo egzekite nenpòt ki bagay ou lanse sou li. subprocess Èske ou ka menm voye sinyal yo reyèlman montre ki se bos la. Pi bon pati? Nan kondisyon nòmal, lè pwosesis la patnè se deyò, timoun a desann ak navèt la - se konsa ou pa gen okenn pwoblèm sou pwosesis zombi kouvri sistèm ou (kounye a, pi fò). : Ou pral wè ke nou ap itilize pou spawn pwosesis la. Sa a se pa nesesè, men se byen vit vin estanda a lò pou zouti modèn Python. Si ou pa te tcheke li ankò, ou absoliman ta dwe - li se yon chanjman jwèt. Quick aside uv uv Si ou toujou sèvi ak pip, nou bezwen pale. Si ou toujou sèvi ak Nou bezwen pale. pip Etap 2: Premye dat la enkyetid Tout relasyon bon kòmanse ak identification reciprocité. Nou pral kòmanse pa anonse tèt nou (kòm yon madanm): # 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" } } } Isit la nan nou - premye pake nou voye etabli kominikasyon. Li di sèvè a twa bagay enpòtan: nou pale MCP, vèsyon ki nou itilize, ak ki kapasite nou pote nan tab la. Louvri salvo Ou pral wè sa a swiv fòma JSON-RPC 2.0, ak sa a pral konsistans nan tout konvèsasyon nou an avèk sèvè a. Tout mesaj, chak repons - tout JSON-RPC 2.0. 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) Nou ta dwe wè pwodiksyon sa a: Sending initialize request... Koulye a, nou pral di sa ki sèvè a te di sou tout sa a jodi a: 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) sèvè a, ki te polite, prezante tèt li tounen: . . . 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! Mwen se yon sèvè meteo, mwen pa pral ale nan chanje kapasite mwen nan mitan konvèsasyon an, epi mwen definitivman pa pral fantom ou." Translation Li se pataje enfòmasyon vèsyon protokòl ak detay debaz, men seksyon se pri a reyèl. So, what's the server actually telling us here? capabilities Nou ignore kapasite pou demo sa a, men tcheke sa a: nou abònman nan "listChanged" evènman si sèvè nou an te kalite a ajoute oswa retire zouti dinamikman. Gen an reyalite yon ti pub / sous sistèm enkyete nan pwotokòl la MCP - ou ka koute pou tout kalite evènman. sèvè weather.py nou an se yon fason trè senp pou nenpòt nan sa a fantasy bagay, men li se gen si ou bezwen li. Li kapab Se menm bagay la ak "prompts" ak "resous" - nou pase yo konplètman. Natirèlman, nou ta ka rale pwòp implementation nou an, men sa manke pwen an nan Tout lide a se ke sistèm diferan ranplase pwoblèm diferan, se konsa ou pa bezwen reinvente chak wotè. Ou ka chwazi ak chwazi ki pati nan pwotokòl la aplike, men si ou vle jwe bon ak lòt zouti MCP, ou ta dwe pi bon kenbe nan espesifikasyon an. API separation Alright, we're connected and ready to rock, right? Wrong. sèvè a se toujou kote, koute pye dijital li yo, espere pou nou yo ranpli handshake a. Nou bezwen voye sinyal la "tou bon sou fen nou an": notified_request = { "jsonrpc": "2.0", "method": "notifications/initialized" } Field? Sa a se fason JSON-RPC a di "fire and forget" - pa gen okenn repons espere oswa mande. Dapre danse a demann / repons ki souvan nou te fè, sa a se yon Konsidere li kòm voye yon pake ACK: "Hey sèvè, mwen se pare yo rale!" Notice the missing id notification Pa gen id vle di: "Pa reponn, mwen pral konfyans ke ou konnen ki sa yo fè ak enfòmasyon sa a." Pa gen id vle di: "Pa reponn, mwen pral konfyans ke ou konnen ki sa yo fè ak enfòmasyon sa a." Pandan sa a ... tounen nan ranch la ... (retwaye nan istwa a!) Pandan sa a ... tounen nan ranch la ... (retwaye nan istwa a!) Remake ke sèvè a, ki se rezonabman polite, te deja reponn ak yon manifeste nan kapasite li yo. Nou vle koute apwouve. Se konsa, nou pral konfime: Se konsa, nou reyèlman pare yo fè fas. # 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) Koulye a, sèvè a konnen yo kòmanse espere demann. Etap 3: montre m 'ki sa ou te jwenn' Tan yo wè sa jwèt sa a sèvè te pote nan playground: 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) Nou jwenn eksactman pwodiksyon an ke nou te espere...Perfèt! // Sending tools/list request... Koulye a, nou pral li tounen nan pwodiksyon an ... Tan yo wè ki sakou nou te dekouvri: # 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) Epi sèvè nou an fièlman montre machandiz li yo: previzyon, alèt, ak lòt maladi meteo. . . . 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'}]}} Whoa! Sa a se yon nan JSON! Okay, nou ka kouri nan bagay bon an. Lòt Li se min lò nou an - chak objè reprezante yon zouti ki LLM ka rele. (plot twist: nou ka rele yo tou, ki se eksactman sa nou ap fè kounye a!) See that tools Fakti amizman: 'deskripsyon' jaden yo se ki jan LLM ou deside ki fonksyon yo rele. Pense li kòm Tinder pou zouti, ak AI ou gade nan telefòn li yo eseye deside si w ap swipe lannwit oswa dwat Fakti amizman: 'deskripsyon' jaden yo se ki jan LLM ou deside ki fonksyon yo rele. Pense li kòm Tinder pou zouti, ak AI ou gade nan telefòn li yo eseye deside si w ap swipe lannwit oswa dwat : OpenAI te orijinèlman te eseye brand sa a kòm "pwoteksyon fonksyon" - ki se... Men, yon kote sou wout la, endistri a kolektivman deside "outils" sonne pi cho (oswa ta ka plis aksèb?), ak kounye a nou rele tout dans la "tool calling". One interesting side note Teknoloji Anatomy of a tool (pay attention, this is where the magic lives): non: Non aktyèl la nan fonksyon an - pa gen okenn typos pèmèt isit la! Sa a se non an definitif, kanonik nan zouti a; nou pral sèvi ak li referans a zouti sa a lè nou rele l '. Deskripsyon: Simple angle pou LLM yo li (ki se literalman sa ki AI a gade nan lè deside si yo sèvi ak zouti ou a) inputSchema: JSON Schema defini ki paramèt ou bezwen pwodiksyonSchema: Manke konspire! Tout bagay sèlman retounen yon "grand string" ak espere pou pi bon an Non nan Deskripsyon Envèsyon Pwodwi pou Poukisa pa gen okenn estrikti pwodiksyon? Paske nou tout esansyèlman retounen JSON enveloped nan strings ak pretann li se yon desizyon konsepsyon. Li se tankou West la viltwa, men ak plis kalite ankouraje sekirite. Fonkksyon tradisyonèl ka retounen nenpòt ki kalite, pandan y ap Unix zouti liy komando (ki nonman an sanble) jis piki tèks la. Natirèlman, li se sitou JSON anba kap, se konsa gen toujou estrikti kouvèti anba sifas la. Yon kèk modèl menm gen switches yo force JSON pwodiksyon, se konsa nan teyori, LLM ou ta ka espere done estriktirasyon chak fwa. Lè sa a, ankò, zouti yo ta ka retounen tèks senp, CSV, HTML, oswa reyèlman nenpòt ki bagay. modèl multi-modal ta ka menm retounen odyo, imaj, videyo, oswa liv deteksyon objè feeds - posiblite yo se bèl bagay chaotic. Okay, nou te gen kout la zouti nou an chaje. Nou fè premye nou an MCP zouti apèl! Etap 4: Momant nan verite Anyway, nou gen yon lis nan zouti, kounye a? Nou ap rele yon sèl! Nou chwazi yon zouti. Let's pick pou kenbe bagay yo senp paske nou pa bezwen latitid ak longitid. Si nou te gen done GPS, Li ta dwe yon chwa pi bon. get_alerts get_forecast tools_call_request = { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "get_alerts", "arguments": { "state": "TX" } } } Mwen chwazi Teksas paske tout bagay se pi gwo nan li, ki gen ladan dezas yo tan. Wait, kenbe - poukisa li se "outils / call" epi yo pa "tool / call"? Mwen vle di, nou ap rele yon zouti, pa? Yon Okay, asire w, "outil / apèl" ta sanble plis natirèl nan lang angle a, men aparabman, konsistans ak lòt endpoints yo genyen soti. Plis, espesifikasyon an di "outils / apèl," se konsa ... nou rive nan liy tankou bon ti devlopè. Nan moman sa a, ak tout done nou yo nan yon seri, nou ka klike sou Big Red Button. # 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] (Sa a se son ki nan Big Red Button fè) ] [Drumroll please Tankou sèvè a ... pwosesis ... ak ... ] [And the crowd goes wild! Voilà! Done meteo reyèl materialize. Alèz, inondasyon, tornado, travay yo. Tout enpak nan JSON estrikti, menm jan terapis ou te mande: (travay, pa gen okenn moun vle wè 11 paj nan JSON echantiyon) // 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}} Remake ke Toujou tcheke jaden sa a, si ou pa jwi debugging mistèks erè nan 3 AM. Victory! isError: false Look good! Nou resevwa done string limyè tounen (pa gen okenn estrikti konplike bagay yo), ki ba nou opsyon. Nou ta ka analize done sa a meteo ak masaj li pou LLM la, oswa jis pase repons la brik ansanm ak kite modèl la jwenn li soti. Pifò implemantasyon ale ak metòd la dezyèm - poukisa fè travay ekstra lè LLM yo trè bon nan analize tèks estrikti? Men, si ou se bati yon bagay ki sofistike, pre-prosesyon pwodiksyon zouti ka trè pouvwa. Ou ka fòma li, filtre li, konbine li ak lòt sous done, oswa konvèti li nan jis sa aplikasyon ou bezwen. Nou te avèk siksè enskri yon sèvè MCP, inisyalize koneksyon an, rele yon zouti, ak pwosesis rezilta yo. Tout MCP danse, ki soti nan ranfòse nan retire done. Èske pye ou yo te deja fatige? And that's a wrap! Full Monty: kliyan MCP ou konplè Isit la se tout rituèl la glorifik nan yon sèl kòl rele: 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() Big Revelasyon You just built an MCP client using nothing but Python's standard library. Pa gen okipe. Pa gen depans ekstèn. Pa gen magik. Jis subprocess pipes ak JSON - zouti yo menm ki ou te gen depi Python 2.7. Èske sa a se "produksyon-kòmanse"? Honestly? Pa byen-men li se surprenantly fèmen. Pafwa, solisyon yo pi senp yo se pi byen-pou boul. Si li se Claude pale ak baz done ou, GPT-4 rele APIs ou, oswa yon start-up "revolisyonèl AI platfòm travay flux" - anba tout sa a, li se jis sa a: Spawn process. Send JSON. Read JSON. Repeat. Li se tankou jwenn Wizard nan Oz se jis yon moun ki gen yon sistèm son reyèlman bon. Li se tankou jwenn Wizard nan Oz se jis yon moun ki gen yon sistèm son reyèlman bon. Next Pase ou nan boulèt Kounye a ke ou te wè bwat la nan bès la (nan kòd la), ou ka: Bati Custom MCP sèvè ki fè bidjè ou (pa gen okenn plis espere pou yon lòt moun ekri entegre a) Debug MCP koneksyon tankou yon nekromancer rezo lè yo inevitably fèmen nan pi mal moman posib konsepsyon zouti pi bon pa konnen egzakteman ki jan LLMs konsome metadata ou ekri pi bon zouti ki tan irresistiblement deskripsyon ke LLM ou renmen Optimize jaden an nan tout paske ou konprann pwotokòl la sou tèt Ou jis automatisation chat feeder ou. Mwen pa judike. Revelasyon an bèl The miracle in step 2 of your business plan? It was you, all along. Miracle nan etap la 2 nan plan biznis ou? Li te ou, tout tan. Kreye yon bagay enteresan. Eske ou vle wè kòd sa a nan aksyon? Egzanp la konplè viv isit la: [https://gitlab.com/-/snippets/4864350] https://gitlab.com/-/snippets/4864350 https://gitlab.com/-/snippets/4864350?embedable=true