"""只用 sys + json,从零实现一个 MCP Server 提供 calculate_bmi(height, weight) 工具。 """ import sys import json def process(request): if request.get("method") == "ping": result = { "jsonrpc": "2.0", "id": request.get("id"), "result": "pong" } return result if request.get("method") == "tools/list": result = { "jsonrpc": "2.0", "id": 1, "result": { "tools": [ { "name": "calculate_bmi", "description": "Calculate BMI from height and weight", "inputSchema": { "type": "object", "properties": { "height": { "type": "number" }, "weight": { "type": "number" } }, "required": [ "height", "weight" ] } } ] } } return result if request.get("method") == "tools/call": name = request.get("params", {}).get("name") arguments = request.get("params", {}).get("arguments", {}) if name == "calculate_bmi": height = arguments.get("height") weight = arguments.get("weight") if height is not None and weight is not None: bmi = weight / (height ** 2) result = { "jsonrpc": "2.0", "id": request.get("id"), "result": { "resultType": "complete", "content": [ { "type": "text", "text": str(bmi) } ], "isError": False } } return result return None for line in sys.stdin: request = json.loads(line) output = process(request) if output is not None: print(json.dumps(output, ensure_ascii=False), flush=True)