Python FastMCP构建MCP服务端与客户端的详细步骤

2025-06-07 03:50

本文主要是介绍Python FastMCP构建MCP服务端与客户端的详细步骤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St...

简介

MCP(Multi-Client Protocol)是一种用于构建可扩展服务的通信协议框架。本文将以 FastMCP 库为核心,通过一个简单的「打招呼」服务示例,手把手教你如何搭建一个支持 Streamable HTTP 传输协议的 MCandroidP 服务端与客户端。代码已通过 python 3.10+ 验证。

环境准备

安装依赖库:

pip install fastmcp

确保本地环境支持异步编程(Python 3.7+)。

服务端实现(server.py)

核心代码解析

from fastmcp import FastMCP

# 初始化 MCP 服务实例
mcp = FastMCP(name="MyServer")

# 定义一个工具函数
@mcp.tool
def greet(name: str) -> str:
    """Greet a user by name."""
    return f"Hello, {name}!"

if __name__ == "__main__":
    # 启动服务(Streamable HTTP 模式)
    mcp.run(transport="streamable-http", host="127.0.0.1", port=9000)

代码详解

1.服务初始化

FastMCP(name="MyServer") 创建了一个名为 MyServer 的 MCP 服务实例。

.2工具注册

使用 @mcp.tool 装饰器将 greet 函数注册为 MCP 工具,客户端可通过该工具名调用服务。

3.服务启动

mcp.run() 方法以 Streamable HTTP 协议启动服务,监听本机 9000 端口。

客户端实现(client.py)

核心代码解析

import asyncio
from fastmcp import Client

# 配置 MCP 服务器地址
config = {
    "mcpServers": {
        "printer": {
            "url": "http://127.0.0.1:9000/mcp",
            "transport": "streamable-http"
        }
    }
}

# 初始化客户端
client = Client(config)

async def main():
    async with client:
        # 调用服务端工具
        greet_data = await client.call_tool("greet", {"name": "world"})
        print(f"greet: {greet_data}")

if __name__ == "__main__":
    asyncio.run(main())

代码详解

1.客户端配置

config 字典定义了 MCP 服务的连接信息,包含 URL 和传输协议。

2.异步连接管理

使用 async with client: 自动管理连接生命周期,确保资源释放。http://www.chinasem.cn

3.工具调用

client.call_tool("greet", {"name": "world"}) 调用服务端的 greet 工具js,传递参数 {name: &quoiHNZKpmEat;world"}。

运行效果

步骤 1:启动服务端

python server.py

输出(服务端日志):

INFO: MyServer started on http://127.0.0.1:9000/mcp

步骤 2:运行客户端

python client.py

输出结果:

greet: Hello, world!

扩展方向

1.多服务集成

在客户端配置中可添加多个 MCP 服务地址,实现分布式调用。

2.协议切换

尝试替换 transport="stdio" 或 transport="websocket" 验证其他传输协议。

3.工具参数验证

为 greet 函数添加类型检查或默认值逻辑增强健壮性。

常见问题

Q1: 为什么客户端提示 Connection refused?

确保服务端已启动;

检查防火墙是否开放 9000 端口;

确认 URL 地址格式是否正确(需包含 /mcp 路径)。

Q2: 如何调试工具调用?

在服务端工具函数中添加日志打印;

使用 curl http://127.0.0.1:9000/mcp 验证 HTTP 接口可达性。

结语

通过本文,你已掌握了使用 FastMCP 构建基础 MCP 服务的核心方法。下一步可尝试集成 jsON Schema 参数校验、实现流式响应,或探索 MCP 协议的高级特性。实践是学习的最佳途径——试着用这个框架构建你的第一个微服务吧!

server.py

# my_server.py
from fastmcp import FastMCP

mcp = FastMCP(name="MyServer")


@mcp.tool
def greet(name: str) -> str:
    """Greet a user by name."""
    return f"Hello, {name}!"


if __name__ == "__main__":
    # This runs the server, defaulting to STDIO transport
    mcp.run(transport="streamable-http", host="127.0.0.1", port=9000)

    # To use a different transport, e.g., HTTP:
    # mcp.run(transport="streamable-http", host="127.0.0.1", port=9000)

client.py

import asyncio

from fastmcp import Client

# Create a standard MCP configuration with multiple servers
config = {
    "mcpServers": {
        # A local MCP server
        "printer": {
            "url": "http://127.0.0.1:9000/mcp",
            "transport": "streamable-http"
       js }

    }
}

# Create a client that connects to both servers
client = Client(config)


async def main():
    async with client:
        # Access tools from different servers with prefixes
        greet_data = await client.call_tool("greet", {"name": "word"})

        print(f"greet: {greet_data}")


if __name__ == "__main__":
    asyncio.run(main())

到此这篇关于Python FastMCP构建MCP服务端与客户端的详细步骤的文章就介绍到这了,更多相关Python FastMCP构建MCP服务内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Python FastMCP构建MCP服务端与客户端的详细步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154951

相关文章

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”