阿里云《AI云原生应用架构白皮书》中提到AI工具标准化和MCP实践,其中也提到了从第一个MCP Server开始,不仅仅是新建MCP Server,还要考虑对现有API重构为MCP Server。
我们在GitHub上开源了阿里云AI架构Hands-on Lab、最佳实践和Samples,本篇作为其中的MCP实践篇。
构建极简的MCP Server:Hello MCP
构建MCP Server,其实不复杂,现在各种AI Coding都可以帮我们快速生成代码,这次介绍的Hello MCP也是AI生成的。既然AI能够快速生成,就不需要苦苦的手敲每一行代码。
这次的Hello MCP非常简单,从Mook数据中返回用户查询的天气信息,就这些。Mook天气数据只包括4行,如下。
{ "北京": {"temperature": "22°C", "condition": "晴天"}, "上海": {"temperature": "25°C", "condition": "多云"}, "深圳": {"temperature": "28°C", "condition": "小雨"}, "广州": {"temperature": "27°C", "condition": "阴天"}}
这有啥好值得做成MCP的呢?其实MCP也是给AI一个调用的入口,MCP Client调用到MCP Server之后再怎么处理,都是MCP Server自己的事情,从Mook数据中返回数据,或者从数据库中查询,或者调用天气预报平台的接口进行查询,等等这些处理都可以。所以,我们先用Mook数据来实现。
hello-mcp/├── mcp-version/ │ ├── weather_server.py │ ├── mcp.json │ └── requirements.txt └── flask-api-version/ ├── weather_api.py └── requirements.txt
下面把整个mcp-weather.py代码拆解开来看,就下面几部分。
-
如果用户请求是initialize初始化,直接返回固定的JSON格式数据。
if method == "initialize": return { "jsonrpc": "2.0", "id": request.get("id"), "result": { "protocolVersion": "2024-11-05", "capabilities": { "tools": {} }, "serverInfo": { "name": "weather-server", "version": "1.0.0" } } }
2. 如果用户请求的是tools/list,直接返回所支持的城市列表。
elif method == "tools/list": return { "jsonrpc": "2.0", "id": request.get("id"), "result": { "tools": [{ "name": "get_weather", "description": "获取指定城市的天气信息", "inputSchema": { "type": "object", "properties": { "city": { "type": "string", "description": "城市名称" } }, "required": ["city"] } }] } }
3. 如果用户请求的是tools/call,并且输入了city字段,并且对应的Mook数据中还有就进行返回对应的天气信息。
elif method == "tools/call": tool_name = request["params"]["name"] if tool_name == "get_weather": city = request["params"]["arguments"]["city"] weather = self.weather_data.get(city, {"temperature": "未知", "condition": "数据不可用"}) return { "jsonrpc": "2.0", "id": request.get("id"), "result": { "content": [{ "type": "text", "text": f"{city}的天气:温度 {weather['temperature']},天气状况:{weather['condition']}" }] } }
我们再来看下mcp.json,供IDE、其他平台添加Hello MCP这个MCP Server来使用。
{ "mcpServers": { "weather": { "command": "python", "args": ["weather_server.py"], "env": {} } }}
前面也说了,不仅仅是新建MCP Server,真正使用的时候还需要对现有API进行重构。所以,我们也整理了Flask版本的查询天气Python代码。运行后可以通过浏览器直接访问到城市列表、各个城市天气情况。
以上两部分,分别是最简单的MCP Server搭建过程和传统API格式进行对比,都是对外提供了城市列表、查询城市天气的功能,只是调用方式不同,希望能让你从Hello MCP中了解MCP Server基础原理,以及如何针对现有API封装重构为MCP Server。
欢迎讨论与共建,完善AI卓越架构和AI原生应用架构白皮书增加Hands-on Lab、最佳实践、Samples
https://github.com/mumulab-cn/aliyun-ai-architecture-labs/tree/main/samples/hello-mcp