MCP开发难?是工具没选对!五分钟用MCP Factory构建天气服务
前言
各位开发者好!今天我要和大家分享一个激动人心的开发经历 —— 如何在短短5分钟内,利用MCP Factory开发一个能查询天气的MCP Server。相信很多人都有这样的感受:MCP开发繁琐、耗时,需要处理各种配置和接口问题。但今天,我将向你展示一种全新的开发方式,让MCP开发变得简单高效!
MCP开发的痛点
传统的软件开发工作,我们通常需要:
- 搭建复杂的服务器环境
- 编写大量的接口代码
- 处理各种异常和错误
- 进行繁琐的测试和调试
这些步骤不仅耗时,还容易出错。特别是对于初学者来说,这简直是一场噩梦!
MCP Factory:开发利器
MCP Factory是一个专为MCP Server开发而生的平台,它基于FastMCP框架打造,大大简化了MCP Server的开发复杂度。使用MCP Factory,你只需关注业务逻辑,而不必担心底层实现细节,开发过程中可以随时debug你的服务,测试完成后一键部署到云端k8s上运行,让你的开发效率直接翻倍。
MCP Factory的核心优势
- 简洁的代码结构 :最小化代码量,专注业务逻辑
- 快速部署 :一键部署,无需复杂配置
- 高度可扩展 :轻松添加新功能和接口
- 内置调试工具 :便于快速定位和解决问题
实战:5分钟开发天气查询MCP Server
下面,我将带领大家一步步完成一个能查询天气的MCP Server开发。
第一步:环境准备(1分钟)
如果已经安装好MCP Factory请直接跳转到第二步。
如果没有安装MCP Factory可以复制下面的链接,在任意一台linux服务器上一键安装,推荐使用ubuntu18版本以上(虚拟机配置推荐6核8G,预留80G根分区空间)
Bash
wget -qO - https://mcpfactory.cn/release/download/ce/installer-linux-amd64 | bash -s mcpfactory-ce-k3s install --env single
第二步:创建开发空间与项目结构(1分钟)
点击页面上“创建开发空间”,创建好后我们点击"创建MCP Server"
填写mcp server相关信息,给他加一些标签以方便后面大模型认识它,点击"创建"
云IDE创建运行起来后会自动弹出MCP Server的初始配置,这里我们要填写一些mcp功能函数的相关定义,比如这里查询天气我是根据城市来查询,所以我这里就创建一个city的变量,标签还用创建项目时候定义的标签。
它会自动帮你搭建好MCP开发的脚手架,期间需要按界面提示安装好pyenv环境和依赖包,然后我们只需要关注handler.py这个文件,我们接下来的实际代码也是在修改这个handler.py文件
第三步:编写核心代码(2分钟)
编写handler.py文件,实现天气查询功能
Python
#
# 代码运行所需的 OS 安装包放在 packages.txt 中,Python安装包放在requirements.txt,请注意都仅放置包名,每个包占一行
#
from server import mcp
import requests
# 创建会话对象,用于API请求
session = requests.Session()
session.headers = {"Content-Type":
"application/json"}
# 工具:天气mcp
@mcp.tool(
name="weather_mcp",
description="天气mcp",
tags="工具,weather,天气"
)
def weather_mcp(city: str) -> str:
"""
查询指定城市的天气信息
Args:
city: 城市名称,如:北京、上海、广州等
Returns:
str: 天气信息的JSON字符串
"""
# 使用免费的天气API
api_url = f"http://t.weather.sojson.com/api/weather/city/{get_city_code(city)}"
try:
response = session.get(url=api_url)
if response.status_code == 200:
weather_data = response.json()
# 提取关键天气信息
if weather_data["status"] == 200:
data = weather_data["data"]
result = {
"城市": weather_data["cityInfo"]["city"],
"日期": weather_data["date"],
"温度": data["wendu"] +"℃",
"湿度": data["shidu"],
"空气质量": data["quality"],
"今日天气": data["forecast"][0]["type"],
"风向": data["forecast"][0]["fx"],
"风力": data["forecast"][0]["fl"],
"最高温": data["forecast"][0]["high"],
"最低温": data["forecast"][0]["low"],
"提示": data["forecast"][0]["notice"]
}
return str(result)
return f"查询失败:{weather_data['message']}"
return f"请求失败,状态码:{response.status_code}"
except Exception as e:
return f"发生错误:{str(e)}"
# 城市代码映射表(部分城市)
def get_city_code(city_name):
city_codes = {
"北京": "101010100",
"上海": "101020100",
"广州": "101280101",
"深圳": "101280601",
"杭州": "101210101",
"天津": "101030100"
}
return city_codes.get(city_name,"101010100") # 默认返回北京
第四步:调试与运行(1分钟)
在debug文件夹中已经创建好main.py文件,用于本地调试
Python
# |------------------------------------------------------------------------------------------------------------------|
# | main.py is generated for debugging only. |
# |------------------------------------------------------------------------------------------------------------------|
import asyncio
import logging
import os
import sys
import logging
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from server import mcp
import handler
# Configure logging to output to stdout (standard output)
# This setup ensures that all log messages at the INFO level and above are displayed
logging.basicConfig(
stream=sys.stdout, # Direct log output to standard output
level=logging.INFO, # Set the logging level to INFO
format='%(levelname)s: %(message)s' # Define the format of log messages
)
# Set default transport if it doesn't exist
transport = getattr(handler, 'transport', 'http')
async def main():
logging.info('Start MCP Server ...')
# FastMCP handles the server setup automatically
# Just run the FastMCP instance from the handler
await mcp.run_async(
transport=transport,
host="0.0.0.0",
port=5000,
log_level="DEBUG",
path="/"
)
if __name__ == "__main__":
asyncio.run(main())
现在,我们可以运行我们的MCP Server了
Plain Text
python debug/main.py
服务器启动后,你可以通过API调用来查询天气,通过侧边栏测试功能来验证我们写的代码没有问题
选择weather_mcp工具,输入城市参数,比如"深圳",点击运行查看返回数据
响应示例:
JSON
{
result:
"{'城市': '深圳市', '日期': '20250902', '温度': '29.6℃', '湿度': '60%', '空气质量': '优', '今日天气': '阴', '风向': '东南风', '风力': '2级', '最高温': '高温 30℃', '最低温': '低温 27℃', '提示': '不要被阴云遮挡住好心情'}"
}
这样一个天气查询的MCP Server就开发好了,我们对接大模型试试
配置大模型对接你的Weather MCP
以ChatBOX客户端为例,我们先点击"端口映射"将在云端运行的mcp server访问地址复制出来
打开ChatBox添加一个MCP Server,将URL贴入URL框,点击"测试",没问题最下面会罗列出该MCP提供的工具函数名称,也就是mcp_tools中定义的name名称,点击"保存"
我们用自然语言向DeepSeek提问,它了解了我的意图并调用了我写的mcp server查询到深圳的天气并返回给我数据。
如果你在一个企业,你开发了之后想让它成为你们团队或公司服务的一部分,你就可以直接将编写好的mcp一键部署到远程环境。
MCP Factory开发的优势
通过上面的实例,我们可以看到使用MCP Factory开发MCP Server的诸多优势:
- 代码简洁 :整个项目只需要几个文件,代码量极少
- 开发迅速 :从零到可用只需5分钟
- 功能强大 :轻松集成第三方API
- 易于扩展 :可以方便地添加更多功能
进阶优化
如果你想进一步提升你的天气查询MCP Server,可以考虑以下优化:
- 添加缓存机制 :减少API调用,提高响应速度
- 支持更多城市 :扩展城市代码映射表
- 增加更多天气数据 :如未来几天的天气预报
- 添加用户认证 :保护你的API不被滥用
- 部署到云服务 :让你的服务全球可用
结语
MCP开发不再是难事!通过MCP Factory,我们可以快速、高效地开发出功能强大的MCP Server。希望这篇文章能够帮助你解决MCP开发中的困扰,让你的开发之路更加顺畅。
如果你有任何问题或建议,欢迎在评论区留言。我们下期再见!
加入技术社群(二维码有效期7天)
群无法进入可以添加 MCP Factory 小助手
更多推荐
所有评论(0)