首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >AI卓越架构开源之Hello MCP,极简的MCP Server构建方式,将Flask API重构为MCP

AI卓越架构开源之Hello MCP,极简的MCP Server构建方式,将Flask API重构为MCP

作者头像
用户5602664
发布2025-11-04 12:54:19
发布2025-11-04 12:54:19
850
举报

阿里云《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行,如下。

代码语言:javascript
复制
{
    "北京": {"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数据来实现。

先看下整体代码目录。

代码语言:javascript
复制
hello-mcp/
├── mcp-version/          # MCP 协议版本
│   ├── weather_server.py # MCP 服务器实现
│   ├── mcp.json         # MCP 配置文件
│   └── requirements.txt # 依赖文件
└── flask-api-version/   # Flask API 版本
    ├── weather_api.py   # Flask API 实现
    └── requirements.txt # 依赖文件

下面把整个mcp-weather.py代码拆解开来看,就下面几部分。

  1. 如果用户请求是initialize初始化,直接返回固定的JSON格式数据。
代码语言:javascript
复制
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,直接返回所支持的城市列表。

代码语言:javascript
复制
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数据中还有就进行返回对应的天气信息。

代码语言:javascript
复制
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来使用。

代码语言:javascript
复制
{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": ["weather_server.py"],
      "env": {}
    }
  }
}

重构Flask API为MCP Server

前面也说了,不仅仅是新建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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 沐然云计算 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档