当前位置: 首页 > news >正文

Python-MCPServer开发-模拟版本

Python-MCPServer开发-模拟版本

原则,简化业务的逻辑部分,学习核心业务逻辑(所有的业务逻辑都是模拟出来的)

1)空工程初始化环境

mkdir my_project
cd my_project
python -m venv .venv

2)激活环境

source .venv/bin/activate

3)添加依赖

对应的依赖是在激活的环境中

pip install uv httpx mcp

4)创建Python天气服务

import logging# 假设 mcp 已经正确导入
try:from mcp import tool
except ImportError:# 如果 mcp 未找到,模拟一个 tool 装饰器def tool(func):return func# 配置日志打印级别
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)# 定义天气服务
class WeatherDataProvider:# 模拟的天气数据WEATHER_DATA = {"北京": {"condition": "晴","temperature": 25,"humidity": 40},"上海": {"condition": "多云","temperature": 27,"humidity": 60},"广州": {"condition": "雨","temperature": 30,"humidity": 80},"深圳": {"condition": "多云","temperature": 29,"humidity": 70},"杭州": {"condition": "晴","temperature": 26,"humidity": 50}}@toolasync def get_weather(self, city: str) -> str:"""获取指定城市的天气信息。参数:city (str): 城市名称返回:str: 天气信息描述"""logging.info(f"获取天气信息: {city}")if city in self.WEATHER_DATA:weather = self.WEATHER_DATA[city]return f"{city} : {weather['condition']} , {weather['temperature']} °C,湿度 {weather['humidity']} %"else:return f"抱歉,未找到 {city} 的天气信息"

5)调用Python天气服务

import asynciofrom weather_01_server import WeatherDataProviderclass WeatherInfoUser:def __init__(self):self.weather_provider = WeatherDataProvider()async def get_city_weather(self, city: str):result = await self.weather_provider.get_weather(city)return resultasync def main():user = WeatherInfoUser()city = "北京"weather_info = await user.get_city_weather(city)print(weather_info)if __name__ == "__main__":asyncio.run(main())

6)创建Python城市服务

import logging# 假设 mcp 已经正确导入
try:from mcp import tool
except ImportError:# 如果 mcp 未找到,模拟一个 tool 装饰器def tool(func):return func# 配置日志打印级别
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)# 定义城市服务
class CityDataProvider:# 模拟城市的天气数据CITY_WEATHER_DATA = {"北京": {"condition": "晴","temperature": 25,"humidity": 40},"上海": {"condition": "多云","temperature": 27,"humidity": 60},"广州": {"condition": "雨","temperature": 30,"humidity": 80},"深圳": {"condition": "多云","temperature": 29,"humidity": 70},"杭州": {"condition": "晴","temperature": 26,"humidity": 50}}@toolasync def get_weather(self, city: str) -> str:"""获取指定城市的天气信息。参数:city (str): 城市名称返回:str: 天气信息描述"""logging.info(f"获取天气信息: {city}")if city in self.CITY_WEATHER_DATA:weather = self.CITY_WEATHER_DATA[city]return f"{city} : {weather['condition']} , {weather['temperature']} °C,湿度 {weather['humidity']} %"else:return f"抱歉,未找到 {city} 的天气信息"@toolasync def get_city_list(self) -> list:"""获取所有的城市信息。返回:str: 所有的城市信息列表"""logging.info(f"获取所有的城市信息")city_list = []for city in self.CITY_WEATHER_DATA:city_list.append(city)return city_list@toolasync def get_city_detail(self, city: str) -> str:"""获取指定城市的信息。参数:city (str): 城市名称返回:str: 城市信息"""logging.info(f"获取指定城市的信息: {city}")if city in await self.get_city_list():return f"{city} : 一个风景秀丽的城市,你值得去玩一把"else:return f"抱歉,未找到 {city} 的城市信息"

7)调用Python城市服务

import asynciofrom city_03_server import CityDataProviderclass CityInfoTest:def __init__(self):self.city_provider = CityDataProvider()# 获取指定城市的天气信息async def get_city_weather(self, city: str):result = await self.city_provider.get_weather(city)return result# 获取所有城市列表async def get_city_list(self):result = await self.city_provider.get_city_list()return result# 获取指定城市的信息async def get_city_detail(self, city: str):result = await self.city_provider.get_city_detail(city)return resultasync def main():user = CityInfoTest()city = "北京"city_weather_info = await user.get_city_weather(city)print("\n", city_weather_info)city_list = await user.get_city_list()print("\n", city_list)city_info = await user.get_city_detail(city)print("\n", city_info)if __name__ == "__main__":asyncio.run(main())

8)MCP Inspector调试

1-安装MCP Inspector

pip install mcp[cli]

2-运行MCP Inspector服务

mcp dev city_06_mcp_server.py

3-访问MCP Inspector网页

  • http://127.0.0.1:6274

相关文章:

  • ShenNiusModularity项目源码学习(20:ShenNius.Admin.Mvc项目分析-5)
  • OpenCV 中的角点检测方法详解
  • 动态贴纸+美颜SDK的融合实现:底层架构与性能优化技术全解析
  • Python相对路径问题与工作目录和脚本目录
  • 5.学习笔记-SpringMVC(P53-P60)
  • 大模型面经 | 春招、秋招算法面试常考八股文附答案(五)
  • Springboot——Redis的使用
  • .NET 6 + Dapper + User-Defined Table Type
  • ElasticSearch深入解析(三):Elasticsearch 7的安装与配置、Kibana安装
  • Kafka 核心使用机制总结
  • ADW600防护等级与电气安全设计要点详解
  • MCU开发学习记录11 - ADC学习与实践(HAL库) - 单通道ADC采集、多通道ADC采集、定时器触发连续ADC采集 - STM32CubeMX
  • 从零到精通:探索GoFrame框架中gcron的定时任务之道 —— 优势、实践与踩坑经验
  • Java的JUC详细全解
  • Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系
  • 深度探究获取淘宝商品数据的途径|API接口|批量自动化采集商品数据
  • 小学数学出题器:自动化作业生成
  • 智能指针(weak_ptr )之三
  • equals与hashCode的关系探究
  • 一 、环境的安装 Anaconda + Pycharm + PaddlePaddle
  • “雷公”起诉人贩子王浩文案开庭:庭审中不承认拐走川川
  • 中海宏洋集团4.17亿元竞得浙江绍兴宅地,溢价率20.87%
  • “2025未来地球:科学与应用大会”在江西景德镇开幕
  • 新片|真人版《星际宝贝史迪奇》5月23日与北美同步上映
  • 常方舟评《心的表达》|弗洛伊德式精神分析在我们时代的延展
  • 全球安全倡议提出三周年,外交部介绍有关情况