හැමෝම MCP විෂය කරන්නේ එය AI හි Rosetta Stone ලෙසයි.Diagrams!Whitepapers!TikToks නිර්මාණය කරන සිතුවිලි නායකයන්! නමුත් කොහෙද, මගේ ආදරණීය දත්ත Druids, සැබෑ පැකේජය? nobody's showing the actual packets. එය ආකර්ෂණීය තැපැල් වලින් ක්රියාකාරකම් ඉගෙන ගැනීමට උත්සාහ කරන ආකාරයයි. සැබැවින්ම, න්යාය පද්ධතිය * ආකර්ෂණීය වේ*, නමුත් මම රුධිරය සහ මත්ද්රව්ය දැකීමට අවශ්යයි! කොතැනද මත්ද්රව්ය JSON? කොතැනද stdin / stdout ඩුප්පල්? එය ආකර්ෂණීය තැපැල් වලින් ක්රියාකාරකම් ඉගෙන ගැනීමට උත්සාහ කරන ආකාරයයි. සැබැවින්ම, න්යාය පද්ධතිය * ආකර්ෂණීය වේ*, නමුත් මම රුධිරය සහ මත්ද්රව්ය දැකීමට අවශ්යයි! කොතැනද මත්ද්රව්ය JSON? කොතැනද stdin / stdout ඩුප්පල්? විදුලි යැවීමකින් තොරව ප්රොටොක්ටෝල් ඉගෙන ගැනීමට උත්සාහ කිරීම, PowerPoint හි සීමාව ඉගෙන ගැනීමට උත්සාහ කරන ආකාරයයි. Give me the electrons or give me death. දැන් අපි අපේ මාතෘකාව ඇති නිසා, අපි ඇතුළත් කරමු! මේ ඔබේ ව්යාපාරික ආකෘතියද? ඔබේ MCP ව්යාපාරික සැලැස්ම: MCP ඉගෙන ගන්න (මොකක්ද මන්දා මන්දා මන්දා මන්දා ) මෙම ලාභය සැබැවින්ම එය සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සැබැවින්ම සතුව ඇත. වාසනාවකට... # ඔබ තනියම නොවේ! මෙම නමින් Model Context Protocol ලෙස හැඳින්වෙන මෙම ආකෘති සබැඳි ප්රොටොකෝල් මත ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආකෘති ආ "What's this look like ON THE WIRE???" අනිවාර්යයෙන්ම, සම්පූර්ණ ප්රොටෝලට් ලියාපදිංචි වී ඇත මම Philosophy ඕනි නෑ මම ඕනි මම ඩොක්ටර් Frankenstein මගේ golem, පිපිරුමක් හා සියල්ලට පිවිසෙන බව දැනීමට අවශ්ය. මාතෘකාවProtocol.io see අවාසනාවකට මම, ආලෝකය ලැබෙන අය අතර සරල සංචාරකයෙක් වන විට, මම එය එවැනි ආකාරයෙන් විවෘත කර ගත්තේය! ප් රදේශයේ ආරම්භක නිරීක්ෂණය MCP ඉතා, ඉතා නව වේ. රුධිර සීමාව. සමහර විට තවමත් රුධිරය. සමහර විට දවසක, එහි අභ්යන්තර දේශපාලනය ගැන සම්පූර්ණ පොත් ලියනු ඇත, සමහර ආකාරයේ ඩිජිටල් විප්ලවය වැනි. නමුත් මේ වන විට, එක් දෙයක් ප්රධාන වශයෙන් පෙනේ: Tool Calling යනු ඔබට අවශ් ය සියලුම දේ අපි පාර zoom කරන්නේ නම්, මේ තනි, ප්රධාන භාවිතය නඩුව මත way in — අප නොසලකා බැලිය හැක a අපි පද්ධතියේ සුන්දර ස්කෙල්ටොන් දිහා බැලීමට පෙර පහසු කර ගත හැක: ප්රතිඵල සඳහා පණිවිඩ වර්ග හතරක් පමණි, ප්රතිඵල සඳහා තුනක් පමණි. (අපි අංක ටිකකට පසුව ගැලපෙන්නේ ඇයි කියලා පැහැදිලි කරමු.) tool invocation ලෝට් ආරම්භක ආරම්භක උපකරණ / ලැයිස්තුව උපකරණ / Call (අපි ආපහු එන ප් රතිඵල 3ක්) ඔබ මෙම පණිවිඩ හතක් ගැන දැනුවත් කිරීමෙන් මුළු ප්රොටොක්ටෝලය තේරුම් ගත හැකිය. කාලගුණ උදාහරණයක් (from ) මාතෘකාවProtocol.io මාතෘකාවProtocol.io අපි පාවිච්චි කරන්නම් — සරල MCP සේවාදායක උදාහරණයක් ඔබට අනාවැකි සහ අනතුරු ඇඟවීම දත්ත ප්රවේශ කිරීමට ඉඩ සලසයි.You can find it in their GitHub here: නුඹ weather.py https://github.com/modelcontextprotocol/quickstart-resources/blob/main/weather-server-python/weather.py අපි මේ දේවල් ගැන කතා කරන විට සැබෑවටම සිදුවන දේ ගැන කතා කරමු "අයිට්" මත. මුල් පිටුව: MCP HTTPS?Web Sockets?Nameed pipes?Tapping into an ancient Ethernet vampire cable?මේක වැදගත් නැහැ. Agnostic ප් රවාහනය ප්රායෝගිකව, වඩාත් පොදු ක්රමයක් වන්නේ සේවාදායකය Subprocess ලෙස ආරම්භ කිරීම සහ සන්නිවේදනය කිරීමයි සහ මෙය ඔබට සුපිරි කුඩා පෞද්ගලික සන්නිවේදන චැනල් ලබා දෙයි. ( තාක්ෂණිකව සම්පූර්ණ ඩොප්ලෙක්ස්, නමුත් ඔබ ඇතුළත් එහෙනම් අපි එය 1.5duplex නම් කරමු. stdin stdout stderr පණිවිඩ ගලවා ගන්නේ කෙසේද MCP ජාලය හරහා JSON-RPC 2.0 භාවිතා කරයි.මේක ඔබට ඉල්ලීම / ප්රතිචාර ප්රොටොක්ලොක්ස් සහ දැනුම්දීමක් ලබා දෙයි. සෑම පණිවිඩයක්ම JSON සඟරාවකට එක් එක් ලෙස යැවෙනවා.එය ඩිජිටල් ටෙලිග්රෑම් සේවා වැනි ය, සෑම සඟරාවක්ම තේරුම් ගැනීම පිළිබඳ සම්පූර්ණ පැකේජයක් වේ. එය spec වලද? සමහර විට; ඇත්ත වශයෙන්ම නොවේ. spec එය විවෘත කරයි.ඒත් මෙම newline-delimited JSON මූලික අර්ථය වේ. The Myth of "Stdin / Stdout Considered Harmful" (එළිදරව් කිරීම හානිදායක ලෙස සැලකේ) ඔව්, ඔබට මෙම ආකෘතිය "අපේක්ෂිත" හෝ "අපේක්ෂිත" බව ප් රකාශ කරන ලද ප් රදර්ශනීය බ්ලොග් සටහන් කිහිපයක් සොයා ගත හැකිය. අපි laboratory එකේ ගිනි තැබීමට කැමති නැහැ නේද?Why would people say this if it wasn’t true? ඔබ දකිනවා, Ye Olden Times දී, අතිශයින් දිගු රේඛා බෆර් ප්රමාණයට හේතු විය හැකිය (සහ, මොරිස් වෝම්). වාසනාවකට මෙන්, වඩාත් නවීන මෘදුකාංග මෙම ගැටලුවගෙන් පීඩනය නොකරයි (එහෙත් බොහෝ! ඇඟිලි ගැසූ!). නවීන JSON පර්සර් දෙකම වේගවත් හා ප්රතිරෝධී වේ. 256MB කාලගුණ අනතුරු ඇඟවීමක් යැවීමට අවශ්යද? එය සඳහා යන්න. මෙම අනතුරු ඇඟවීම සාමාන්යයෙන් C හි ගොනු විස්තරකරුවන් අතින් සකසන අයගෙන් එනවා.ඔබ එය කරන්නේ නැහැ.ඔබ Python භාවිතා කරනවා.විශේෂයෙන්, මේ මොඩියුලය නිශ්චිතව මෙම කාර්යය සඳහා නිර්මාණය කර ඇත. 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 ) Easy, right? All native Python. No extra packages. බැටරි ඇතුළත්. ඒ මොඩියුලය දරුවාගේ I / O ප් රවාහනයන් ටයිප් වලින් මාරු කරයි, ඔබට සම්පූර්ණ පාලනය ලබා දෙයි.අපි කැමති නම් අපගේ නව ක්රියාවලිය සංඥා එවන්නත් පුළුවන්. subprocess දැන්, අපි අන්තිමේදී ප්රොටෝලට් විද්යාව ලෙස කටයුතු කිරීමට සූදානම් proper digital necromancer! Plot Twist: It's Embarrassingly Simple - එය ලැජ්ජාවෙන් සරලයි MCP, එහි සියලු ව්යාපාරික ඇඳුම් සහ ස්කෙප්ටර් regalia, මෙන්න මෙන්න: 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." මෙම සම්පූර්ණ ප්රොටොක්ටෝලය යනු යම් දෙයක් කරන්න සහ එය කළ බව තහවුරු කිරීම සඳහා කෙනෙකුගෙන් ඉල්ලීම සඳහා ඉතා නිල ක්රමයකි. ඉතිරිව ඇත්තේ ව්යාපාරික මට්ටමේ සාදයක් සහ මෙම ලස්සන සරල අත ගැසීම වටා ගැඹුරු ලීවරයකි. 7 ආදරණීය විනිමය ඒක තමයි ඒක. Monster Together: A Working Prototype (අදාල Monster එක එකතු කරන්න: වැඩ කරන ප් රොටොටොටොප්) අපි කාලගුණය සේවාදායකයක් උපන් හා එය නිවැරදි පිස්සු විද්යාඥයෙකු මෙන් ප්රශ්නය කරනු ඇත. උපදෙස් #1: ප්රොටෝලට් තේරුම් ගැනීම සඳහා හොඳම ක්රමය එය කෑගැසෙන තුරු එය අපහසු කිරීමයි, පසුව එය සහාය වන තුරු එය පැකේජය කිරීමයි. උපදෙස් #1: ප්රොටෝලට් තේරුම් ගැනීම සඳහා හොඳම ක්රමය එය කෑගැසෙන තුරු එය අපහසු කිරීමයි, පසුව එය සහාය වන තුරු එය පැකේජය කිරීමයි. ඉඟිය #2: ඔබ ඔබේ LLMs දඬුවම් කරන්නේ නම්, මම ඔබට සිදුවන දේ ගැන වගකිව යුතු නැත The After Times When AI Taketh Over! ඉඟිය #2: ඔබ ඔබේ LLMs දඬුවම් කරන්නේ නම්, මම ඔබට සිදුවන දේ ගැන වගකිව යුතු නැත The After Times When AI Taketh Over! පියවර 1: අපගේ ඩිජිටල් 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 ) ඒ මොඩියුලය ඔබේ දරුවාගේ I / O ප්රවාහයන් ටයිප් වලින් මාරු කරයි, සන්නිවේදනය පිළිබඳ සම්පූර්ණ පාලනය ලබා දෙයි.එය සුන්දරවම සරල ය: දැන් ඔබ ඔබේ බක් සහ ඇමතුම මත විශේෂිත දරුවා ක්රියාවලිය ඇත, ඔබ එය මත යැවීමට ඕනෑම දෙයක් ඉටු කිරීමට සූදානම්. subprocess ඔබ සංකේත පවා යවන්න පුළුවන් සැබවින්ම පෙන්වන්න කවුද බොස්. හොඳම කොටස? සාමාන්ය තත්ත්වයන් යටතේ, දෙමාපියන් ක්රියාවලිය පිටතට ගිය විට, දරුවා නැව් සමඟ පහළට යනවා - එබැවින් ඔබ ඔබේ පද්ධතිය (ඔව්, බොහෝ විට) තදබද ක්රියාවලිය ගැන බය විය යුතු නැත. : ඔබ දකිනු ඇත අපි භාවිතා කරන මෙම ක්රියාවලිය ක්රියාත්මක කිරීම සඳහා අවශ්ය නොවේ, නමුත් ඔබ තවමත් එය පරීක්ෂා කර නොමැති නම්, ඔබ අනිවාර්යයෙන්ම කළ යුත්තේ - එය ක්රීඩාව වෙනස් කිරීමක්. Quick aside uv uv ඔබ තවමත් pip භාවිතා කරන්නේ නම්, අපි කතා කළ යුතුයි. ඔබ තවමත් භාවිතා කරන්නේ නම් අපි කතා කරන්න ඕන. pip පියවර 2: අවුල් පළමු දිනය සෑම යහපත් සබඳතාවක්ම ආරම්භ වන්නේ එකිනෙකා හඳුනා ගැනීමෙන්.අපි පටන් ගනිමු තමන්ව ප් රකාශ කිරීමෙන් (මහත්තයෙක් ලෙස): # 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" } } } මේ අපේ එය සේවාදායකයාට වැදගත් දේවල් තුනක් පවසයි: අපි MCP කතා කරමු, අපි භාවිතා කරන සංස්කරණය සහ අපි මේසයට ගෙන යන හැකියාවන්. ආරක්ෂාව විවෘත කිරීම ඔබ මෙම 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) අපි මේ ප් රතිඵල බලන්න ඕන: Sending initialize request... දැන්, මේ වන විට සේවාදායකයා සියල්ල ගැන කියන්නට ඇති දේ අහන්න: 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) සර්වර්, ආචාරශීලී වන විට, නැවත හඳුන්වා දෙයි: . . . 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'}}} "අනේ!මම කාලගුණ සේවාදායකයෙක්, මම කතාබහ මැද මගේ හැකියාවන් අසාමාන්යව වෙනස් නොකරමි, මම අනිවාර්යයෙන්ම ඔබව භූත නොකරමි." Translation එය ප්රොටෝලට් අනුවාදය තොරතුරු සහ මූලික විස්තර බෙදාගෙන ඇත, නමුත් ඒක තමයි සැබෑ තෑග්ග. So, what's the server actually telling us here? capabilities අපි මෙම demo සඳහා හැකියාවන් නොසලකා, නමුත් මෙය පරීක්ෂා කරන්න: අපි "listChanged" සිදුවීම් සඳහා ලියාපදිංචි වන්න, අපේ සේවාදායකයා දෛනිකව මෙවලම් එකතු කිරීමට හෝ ඉවත් කිරීමට ආකාරය විය හැකි නම්. MCP ප්රොටොක්ටෝලයේ සැඟවුණු සංකීර්ණ කුඩා pub / sub පද්ධතියක් ඇත - ඔබට සියලුම සිදුවීම් සඳහා සවන් ගත හැකිය. අපගේ weather.py සේවාදායකයා එතරම් සරල යමක් ඇත, නමුත් ඔබට එය අවශ්ය නම් එහි ඇත. විය හැකි "අපේ" සහ "අපේ" ප්රභවයන් සමඟ එකම එකඟතාවක් - අපි ඒවා සම්පූර්ණයෙන්ම නොසලකා හැරෙමු.ඔව්, අපි අපේම ක්රියාත්මක කිරීම ක්රියාත්මක කළ හැක, නමුත් එය ප්රශ්නය නැති වේ සම්පූර්ණ අදහස වන්නේ විවිධ පද්ධති විවිධ ප්රශ්න සකස් කිරීමයි, එබැවින් ඔබට සෑම රෝදයක්ම නැවත සොයා ගැනීමට අවශ්ය නොවේ.ඔබ තෝරා ගත හැකි අතර ප්රොටොක්ටෝලයේ මොන කොටස් ක්රියාත්මක කළ යුතුද යන්න තෝරා ගත හැකිය, නමුත් ඔබ වෙනත් MCP මෙවලම් සමඟ හොඳින් සෙල්ලම් කිරීමට අවශ්ය නම්, ඔබ විශේෂාංගයට ගලපන්න. API separation Alright, we're connected and ready to rock, right? Wrong. සේවාදායකයා තවමත් එහි රැඳී සිටින අතර එහි ඩිජිටල් කකුල අල්ලමින්, අතින් අල්ලා ගැනීම අවසන් කිරීමට අප බලා සිටී.We need to send the "all good on our end" signal: notified_request = { "jsonrpc": "2.0", "method": "notifications/initialized" } ඒ JSON-RPC ගේ ක් රමයයි "පරික්ෂා කරන්න අමතක කරන්න" - කිසිදු ප් රතිචාරයක් බලාපොරොත්තු හෝ අවශ්ය නොවේ. එය ACK පැකේජය යැවීම මෙන් සිතන්න: "ඔව් සේවාදායකයා, මම රූගත කිරීමට සූදානම්!" Notice the missing id notification කිසිදු ID අදහස් කරන්නේ, "අර උත්තර දෙන්න එපා, මම ඔබ මෙම තොරතුරු සමඟ කළ යුතු දේ දන්නවා විශ්වාස කරන්නම්. " අදහස්: "අපි පිළිතුරු නොදෙන්න, මම විශ්වාස කරනවා ඔබ මෙම තොරතුරු සමඟ කුමක් කළ යුතුද යන්න දන්නවා. " නෑ id ඒ අතරෙ... ආපහු මාලිගාවෙ... (තව කතාවට ආපහු!) ඒ අතරෙ... ආපහු මාලිගාවෙ... (තව කතාවට ආපහු!) මතක තබා ගන්න, සේවාදායකය, සාපේක්ෂව ආචාරශීලී වන අතර, දැනටමත් එහි හැකියාවන් ප්රකාශයක් සමග පිළිතුරු දුන් බව. දැන් අපි තහවුරු කරමු: ඇත්තෙන්ම අපි උත්සවයට සූදානම්. # 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) දැන් සේවාදායකයා ඉල්ලීම් බලාපොරොත්තු කිරීමට පටන් ගන්නවා. Step 3: Show Me What You Got මෙම සේවාදායකයා ක්රීඩා ක්ෂේත්රයට ගෙන ඇති ක්රීඩා මොනවාද බලන්න කාලය: 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) අපි බලාපොරොත්තු වූ ප්රතිඵල ලබා ගනිමු ... පරිපූර්ණ! // Sending tools/list request... දැන්, අපි ප්රතිඵල නැවත කියවන්න ... අපි සොයාගෙන ඇති දේපළ බලන්න කාලය: # 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) අපගේ සේවාදායකයා ආඩම්බරයෙන් එහි භාණ්ඩ පෙන්නුම් කරයි: අනාවැකි, අනතුරු ඇඟවීම සහ අනෙකුත් කාලගුණික නරකතා. . . . 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!එය A JSON! හරි, අපි හොඳ දේවල් වලට පිවිසෙමු. ලෝට් ඒ අපේ රත්තරන් - සෑම අමුද්රව්යයක්ම LLM භාවිතා කළ හැකි මෙවලමක් නියෝජනය කරයි. See that tools විනෝද කාරණාව: 'විවේචන' ක්ෂේත් රයන් ඔබේ LLM විසින් කැඳවිය යුතු කාර්යය තීරණය කරන ආකාරයයි.Tinder සඳහා මෙවලම් සඳහා එය සිතන්න, ඔබේ AI ඔබේ දුරකථනය දිහා බැලීමෙන් වම් හෝ දකුණු දිව යන්න තීරණය කිරීමට උත්සාහ කරයි. විනෝද කාරණාව: 'විවේචන' ක්ෂේත් රයන් ඔබේ LLM විසින් කැඳවිය යුතු කාර්යය තීරණය කරන ආකාරයයි.Tinder සඳහා මෙවලම් සඳහා එය සිතන්න, ඔබේ AI ඔබේ දුරකථනය දිහා බැලීමෙන් වම් හෝ දකුණු දිව යන්න තීරණය කිරීමට උත්සාහ කරයි. OpenAI මුලින්ම මෙය "සංස්කරණ ඇමතුමක්" ලෙස හඳුන්වන්නට උත්සාහ කළා - එය ... නමුත් සමහර වෙලාවට, කර්මාන්තය එකිනෙකා විසින් තීරණය කර තිබුණේ "මේක" වඩා සීතල (හෝ සමහර විට වඩාත් ප්රවේශවත් විය හැකිද?), දැන් අපි මුළු නාට්යය "මේක ඇමතුමක්" ලෙස හැඳින්වේ. One interesting side note තාක්ෂණික Anatomy of a tool (pay attention, this is where the magic lives): Name: Function's actual name — no typos allowed here!This is the definitive, canonical name of the tool; we will use it to refer to this tool when we call it විස්තරය: කියවීමට LLM සඳහා සරල ඉංග්රීසි (මෙය සැබවින්ම ඔබේ මෙවලම භාවිතා කිරීමට හෝ තීරණය කරන විට AI දෙස බලන්නේ කුමක්ද) inputSchema: JSON Schema ඔබ අවශ්ය ප්රමාණයන් සකස් කිරීම OutputSchema: Conspicuously missing! Everything just returns a "big string" සහ හොඳම බලාපොරොත්තු නම විස්තරය ආදායම නිෂ්පාදන ඇයි කිසිදු ප්රතිඵල සැලැස්ම? මොකද අපි හැමෝම මූලික වශයෙන් JSON මුද්රණය කර ඇති අතර එය සැලසුම් තීරණයක් ලෙස හැසිරෙන නිසා. සාමාන් ය කාර්යයන් ඕනෑම වර්ගයක් ආපසු ලබා ගත හැකි අතර, Unix කොමිෂන් රේඛාව මෙවලම් (මේ නාමයෙන් සමහර විට අදහස් දක්වනවා) හුදෙක් ලිඛිතව පිටපත්. සමහර ආකෘති පවා JSON ප්රතිදානය බල කිරීමට ස්විච් ඇත, එබැවින් ප්රතිදානයෙන්, ඔබේ LLM සෑම අවස්ථාවකදීම සංයුක්ත දත්ත බලාපොරොත්තු විය හැක. එවිට නැවතත්, මෙවලම් සරල පෙළ, CSV, HTML, හෝ ඇත්ත වශයෙන්ම ඕනෑම දෙයක් ආපසු ලබා ගත හැකිය. හොඳයි, අපි අපගේ මෙවලම් පෙට්ටිය උඩුගත කර ඇත. අපි අපගේ පළමු MCP මෙවලම් කෝල් කරන්න! පියවර 4: සත් ය මොහොත කෙසේ වෙතත්, අපි මෙවලම් ලැයිස්තුවක් ඇත, දැන් කුමක්ද? අපි තෝරා ගනිමු මෙවලමක් අපි GPS දත්ත තිබුණා නම්, අපි latitude සහ longitude අවශ්ය නැහැ නිසා දේවල් සරල තබා ගැනීම සඳහා, වඩා හොඳ විකල්පයක් වනු ඇත. get_alerts get_forecast tools_call_request = { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "get_alerts", "arguments": { "state": "TX" } } } මම ටෙක්සාස් තෝරා ගත්තා, එහිදී සියල්ල විශාල වන නිසා, කාලගුණික අනතුර ඇතුළත්. Wait, hold up - ඇයි එය "tools / call" සහ "tool / call" නොවේ? එකක් හරි, අනිවාර්යයෙන්ම, "tool / call" ඉංග් රීසි භාෂාවෙන් වඩාත් ස්වාභාවිකව සවන් දෙනු ඇත, නමුත් පෙනෙන පරිදි, අනෙකුත් අවසාන ප්රතිඵල සමඟ අනුකූලත්වය ජයග්රහණය කරයි. දැන් අපගේ සියලුම දත්ත ඇඟිලි එක් රැයකින්, අපි විශාල රතු බොත්තම පීඩනය කළ හැකිය. # 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] (මේක තමයි ලොකු රතු බොත්තම සද්ද කරන්නේ) ] [Drumroll please සේවාදායකයාගේ සිතුවිලි ... පාවිච්චි කිරීම ... සහ ... ] [And the crowd goes wild! Voilà! සැබෑ කාලගුණ දත්ත සැබෑ වේ. අනතුරු ඇඟවීම්, මුහුදු වැසි, ටර්නාඩෝස්, වැඩ. සියළුම ක්රියාකාරී JSON ඇතුළත් කර ඇත, ඔබේ ප්රතිකාරකයා ඇණවුම් කරන පරිදි: (පහතට කපලා, කිසිවෙකු JSON ගබඩා 11 පිටු දැකීමට අවශ්ය නැත) // 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}} මතක තියාගන්න සෑම විටම මෙම ක්ෂේත් රය පරීක්ෂා කරන්න, ඔබ රාත්රියේ 3 ට අභිරහස් අසාර්ථකතා සකස් කිරීම සඳහා ප්රශංසා නොකරන්න. Victory! isError: false හොඳ පෙනුමක්! අපි නැවත පිරිසිදු string දත්ත ලබා ගන්නවා (ඔබට දේවල් සංකීර්ණ කිරීමට ස්ට්රොයිම් නැත), අපට විකල්ප ලබා දෙයි. අපි මෙම කාලගුණ දත්ත පාඨමාලා සඳහා එය ප්රමාණය කළ හැකිය, හෝ පාඨමාලාව සමඟ අමුද්රව්ය ප්රතිචාරය පවත්වාගෙන එය ආකෘතියට ලබා දෙන්න. නමුත් ඔබ මෘදුකාංගයක් ගොඩනගන්නේ නම්, මෙවලම් ප්රතිසංස්කරණය ප්රමාණවත් විය හැක.ඔබ එය ප්රමාණවත් විය හැක.ඔබ එය ප්රමාණවත් විය හැක.ඔබ එය ප්රමාණවත් විය හැක.ඔබ එය ප්රමාණවත් විය හැක.ඔබ එය අනෙකුත් දත්ත මූලාශ්ර සමග සබඳන්න හෝ එය ඔබේ යෙදුම අවශ්ය දේ බවට පරිවර්තනය කළ හැක. අපි MCP සේවාදායකයක් සාර්ථකව ලියාපදිංචි කර, සම්බන්ධතාවය ආරම්භ කර, මෙවලමක් කැඳවා, සහ ප්රතිඵල ක්රියාත්මක කර ඇත. And that's a wrap! Full Monty: ඔබේ සම්පූර්ණ MCP සේවාදායකය මෙන්න මුළු ආශිර්වාදීය චර්යාව එක් කැඳවීමේ සමයේ: 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() ලොකු විවෘතය You just built an MCP client using nothing but Python's standard library. කිසිදු frameworks. කිසිදු බාහිර සබඳතා. කිසිදු මැජික්. හුදෙක් subprocess pipes සහ JSON—ඔබ Python 2.7 සිට තිබුණු එකම මෙවලම්. ඔබ කවදාවත් දැක ඇති සෑම රසවත් MCP සංයෝගයක් පිටුපස ඇති අඳුරු රහස මෙයයි.ඔබගේ දත්ත සංකේතය සමඟ කතා කරන ක්ලෝඩ් හෝ GPT-4 ඔබගේ API වලට ඇමතුමක් දීම හෝ සමහර ආරම්භකයින්ගේ "ප්රවර්ගික AI වැඩපිළිවෙළක්" - සියල්ල යටතේ, එය මෙන්න: Spawn process. Send JSON. Read JSON. Repeat. ඕස්ගේ මැජික් සොයාගැනීම ඉතා හොඳ සද්ද පද්ධතියක් ඇති මිනිසෙකු පමණි. ඕස්ගේ මැජික් සොයාගැනීම ඉතා හොඳ සද්ද පද්ධතියක් ඇති මිනිසෙකු පමණි. ඔබේ ඊළඟ පියවර පිස්සුවකට දැන් ඔබ සත්තුගේ බඩ දැක ඇති නිසා (කෙඩේ දී), ඔබට පුළුවන්: ඔබගේ මිලදී ගැනීම් කරන Custom MCP සේවාදායකයන් ගොඩනඟා ගන්න (එහෙත් තවදුරටත් වෙනත් කෙනෙකුගේ ඇතුළත් කිරීම සඳහා බලා සිටිය යුතු නැත) Network necromancer වගේ MCP සම්බන්ධතා Debug කරන විට එය අවුල්ම අවස්ථාවකදී අතුරුදහන් වේ. හොඳම මෙවලම් නිර්මාණය LLMs ඔබේ මෙටා දත්ත භාවිතා කරන්නේ කෙසේද යන්න දැන ගැනීමෙන් හොඳම මෙවලම් ලිවීමට එතරම් ප්රතිරෝධය නොලැබෙන පරිදි විස්තර කර ඇති අතර ඔබේ LLMs ආදරය කරයි හැමදේම අපූරුවට පරිපූර්ණ කරන්න, ඔබ ප්රොටෝලට් overhead තේරුම් ගන්න නිසා ඔබගේ පූසාව ආහාරයට ගන්න.අපිට තේරෙන්නේ නැහැ. ලස්සන විවෘත කිරීම The miracle in step 2 of your business plan? It was you, all along. ඔබගේ ව්යාපාරික සැලැස්මේ පියවර 2 හි පුදුමයක්? අමුතු දෙයක් හදන්න. මෙම කේතය ක්රියාත්මක කිරීමට අවශ්යද? සම්පූර්ණ උදාහරණ මෙහි ජීවත් වේ: [https://gitlab.com/-/snippets/4864350] https://gitlab.com/-/snippets/4864350 https://gitlab.com/-/snippets/4864350?embedable=true