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

Python实现MCP Server的完整Demo

mcp server

from fastmcp import FastMCP
import logging# 配置日志记录
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)mcp = FastMCP("DemoServer")@mcp.tool()
async def calculate(a: float, b: float, op: str) -> float:"""数学计算器(支持加减乘除)"""ops = {'+': a + b,'-': a - b,'*': a * b,'/': a / b if b != 0 else float('nan')}result = ops.get(op, float('nan'))logger.info(f"计算: {a}{op}{b}={result}")return result@mcp.resource("greet://{name}")
async def greeting(name: str) -> str:"""个性化问候服务"""return f"您好, {name}! 当前时间:2025-07-07"if __name__ == "__main__":# 启动服务(推荐HTTP模式便于远程调用)mcp.run(transport="streamable-http", port=8000)

mcp client

import asyncio
from mcp.client import HttpClientasync def main():async with HttpClient("http://localhost:8000") as client:# 调用计算工具calc_result = await client.call_tool("calculate", {"a": 5, "b": 3, "op": "*"})print(f"计算结果: {calc_result}")# 访问问候资源greet_result = await client.get_resource("greet://开发者")print(greet_result)asyncio.run(main())

关键配置说明:

  1. 需先安装fastmcp库:uv pip install fastmcp httpx15
  2. 支持三种传输模式:stdio(默认)、sse和streamable-http34
  3. 工具方法需用@mcp.tool()装饰器注册,资源用@mcp.resource()9
  4. 生产环境建议添加类型校验和错误处理
http://www.dtcms.com/a/269210.html

相关文章:

  • 《声音的变形记:Web Audio API的实时特效法则》
  • Web 前端安全防护:防范常见攻击与漏洞的策略
  • SKUA-GOCAD入门教程-第八节 线的创建与编辑7和8
  • 特别放送:关于一个无法修复的系统级Bug
  • Eslint基础使用
  • 插入数据优化
  • 镜头OIS系统方案全面解析:从基础原理到前沿应用
  • 【ElasticSearch实用篇-01】需求分析和数据制造
  • Spring Cloud Config(微服务配置中心详解)
  • 七牛云Java开发面试题及参考答案(60道面试题汇总)
  • 华为OD机试 2025B卷 - 最小循环子数组(C++PythonJAVAJSC语言)
  • 【论文笔记】World Models for Autonomous Driving: An Initial Survey
  • 【C++读取输入空格到CHAR数组】2022-7-19
  • 在vue3+ts项目中引入element-plus及其图标
  • 【读代码】深度解析TEN VAD:实时语音活动检测的高性能开源解决方案
  • 从被动救火到主动预测!碧桂园服务以图谱技术重塑IT运维底座
  • 开放端口,开通数据库连接权限,无法连接远程数据库 解决方案
  • Debian 11 Bullseye 在线安装docker
  • Java 命令行参数详解:系统属性、JVM 选项与应用配置
  • axios无感刷新token
  • 万物智联时代启航:鸿蒙OS重塑全场景开发新生态
  • Android kotlin中 Channel 和 Flow 的区别和选择
  • 《Effective Python》第十二章 数据结构与算法——当精度至关重要时使用 decimal
  • 【R语言】Can‘t subset elements that don‘t exist.
  • 学习日记-spring-day42-7.7
  • Java --接口--内部类分析
  • [学习] C语言数学库函数背后的故事:`double erf(double x)`
  • qiankun 微前端框架子应用间通信方法详解
  • 一份多光谱数据分析
  • Spring MVC HandlerInterceptor 拦截请求及响应体