当前位置:首页>python>使用Python快速构建MCP服务器、客户端的方法指南

使用Python快速构建MCP服务器、客户端的方法指南

  • 2026-09-17 23:18:09
使用Python快速构建MCP服务器、客户端的方法指南

Python配置MCP工具(FastMCP3.0+最新版)配置指南

MCP(Model Context Protocol)是 AI工具调用的标准协议。本文基于FastMCP 3.1.0 / MCP 1.26最新版从零开始在windows环境使用python搭建MCP调用环境。

一、MCP与FastMCP简介

MCP:MCP是标准的模型上下文协议,能让AI安全的调用外部工具、资源、提示模板等。

FastMCP:FastMCP是构建MCP应用的标准框架。FastMCP为您提供从原型到生产的所需一切——构建暴露功能的服务器,将客户端连接到任何MCP服务,并为您的工具提供交互式UI

MCP服务端配置示例:

from fastmcp import FastMCP
mcp = FastMCP("Demo")

@mcp.tool
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

if __name__ == "__main__":
    mcp.run()

二、环境安装(最新版)

事先检查python版本Python >=3.10,否则可能会安装报错

pip install fastmcp mcp  -i https://mirrors.aliyun.com/pypi/simple/

安装后,为了验证FastMCP是否正确安装,可以在CMD中运行以下命令:

fastmcp version

你应该会看到如下类似的输出:

C:\Users>fastmcpversion
FastMCP version:3.1.0
MCP version:1.26.0
Python version:3.12.4
Platform:Windows-10-10.0.19045-SP0
FastMCP root path:D:\Python312\Lib\site-packages

三、配置MCP服务端

1.FastMCP () 初始化(服务端入口)

from fastmcp import FastMCP

mcpserver = FastMCP('这是一个mcp服务',version="1.0")

2.@mcp.tool () 工具注册

@mcp.tool()支持版本控制、标签、超时等功能,参数更简洁。

@mcp.tool(
    name: str | None = None,         # 工具名(默认函数名)
    description: str | None = None,  # 工具描述(给AI看)
    tags: list[str] | None = None,   # 分类标签
    version: str | None = None,      # 工具版本(v3新特性)
    timeout: int | None = None# 单工具超时(秒)
)

3.mcp.enable启用工具标签,.mcp.disable不启用某个标签

主要用来控制是否启动某个标签的注册的tool,启用时模型才能发现并调用工具。

# 只启用 "public"标签的工具
mcpserver.enable(tags={"public"}, only=True)

#
不启用 "internal" or "deprecated"的工具
# mcp.disable(tags={"internal", "deprecated"})

#
启用“admin”标签的工具,不启用deprecated标签的工具
# mcp.enable(tags={"admin"}, only=True).disable(tags={"deprecated"})

4.mcp.run () 启动服务

mcp.run(
transport: str = "stdio",    # 通信模式:("http", "stdio", "sse", or "streamable-http")
host: str = "0.0.0.0",       # 监听地址(配置stdio模式时不需要配置)
port: int = 8765,            # 端口(配置stdio模式时不需要配置)
log_level: str = "info",     # 日志级别
)
STDIO传输:
以子进程的形式启动服务器,并通过stdin/stdout管道进行通信,主要用于本地调用
HTTP传输:
连接到作为网络服务运行的服务器,主要用于远程调用

5.完整的服务端配置案例(可直接复制使用)

from fastmcp import FastMCP#初始化mcpserver = FastMCP('这是一个mcp服务',version="1.0")#注册为MCP工具 并配置标签@mcpserver.tool(name='a_addition_b',title='两数相加',tags={"public", "a"} )def a_addition_b(a,b):    return a+b#注册为MCP工具 并配置标签@mcpserver.tool(name='a_subtraction_b',title='两数相减',tags={"public", "b"} )def a_subtraction_b(a,b):    return a+b#启用标签为a的工具mcpserver.enable(tags={"a"}, only=True)if __name__ == '__main__':  #配置为 stdio模式供本地调用  mcpserver.run(transport='stdio',log_level='DEBUG')  #配置为http模式供远程调用  #mcpserver.run(transport='http',log_level='DEBUG',      #               host='192.168.1.17',port=8081)
配置为本地模式时执行上述程序,结果:
配置为http模式时执行上述程序,结果会生成mcp地址“http://192.168.1.17:8081/mcp”

4.MCP客户端调用

创建客户端

import asynciofrom fastmcp import Client, FastMCP# 第1种调用内容模式 In-memory server (ideal for testing)server = FastMCP("TestServer")client = Client(server)# 第2种调用HTTP远程方式client = Client("https://example.com/mcp")# 第3种本地调用方式client = Client("my_mcp_server.py")#调用的主代码async def main():    async with client:        # Basic server interaction        await client.ping()        # List available operations        tools = await client.list_tools()        resources = await client.list_resources()        prompts = await client.list_prompts()        # Execute operations        result = await client.call_tool("example_tool", {"param": "value"})        print(result)#运行代码asyncio.run(main())

所有客户端操作都需要使用async异步方式,使用with上下文管理器来正确管理连接生命周期。

  • 内存内传输

直接连接到同一Python进程内的FastMCP服务器实例。在测试和开发中使用此功能,以消除子进程和网络的复杂性。服务器共享您的进程的环境和内存空间
  • STDIO 传输
以子进程的形式启动服务器,并通过 stdin/stdout 管道进行通信。这是像Claude Desktop这样的桌面客户端所使用的标准机制。子进程在隔离环境中运行,因此您必须显式传递服务器需要的任何环境变量。
  • HTTP传输
连接到作为网络服务运行的服务器。在生产部署中,当服务器独立运行并管理其自己的生命周期时,请使用此方法。

client.list_tools () 获取工具列表

# 获取服务端所有工具(disable的看不到)
tools = await client.list_tools()
print("可用工具:", [t.name for t in tools])

client.call_tool () 调用工具

#传入工具的名称和参数
result = await client.call_tool(
  name="a_addition_b",
  arguments={"a": 100, "b": 200}

完整客户端调用代码(可直接复制使用)

import asynciofrom fastmcp import Client#以stdio传输模式举例,如果是http模式,Client参数替换为http的urlasync def main():    async with Client("mcptest-server.py") as client:        tools = await client.list_tools()        print(tools)        print("可用工具:", [t.name for t in tools])       #调用两个数相加的工具        result = await client.call_tool(            name="a_addition_b",            arguments={"a": 100, "b": 200}        )    print(f'返回调用结果:{result}')    print(f'返回工具函数的执行结果: {result.content[0].text}')if __name__ == '__main__':    asyncio.run(main())#执行结果如下:[Tool(name='a_addition_b', title='两数相加', description=None, inputSchema={'additionalProperties': False, 'properties': {'a': {'title': 'A'}, 'b': {'title': 'B'}}, 'required': ['a', 'b'], 'type': 'object'}, outputSchema=None, icons=None, annotations=None, meta={'fastmcp': {'tags': ['a', 'public']}}, execution=None)]可用工具: ['a_addition_b']返回调用结果:CallToolResult(content=[TextContent(type='text', text='300', annotations=None, meta=None)], structured_content=None, meta=None, data=None, is_error=False)返回工具函数的执行结果: 300

五、总结

本文只是展示了在windows环境,使用python配置MCP服务端和客户端的配置方法,有兴趣的不妨动手操作起来。

最新文章

随机文章