Python配置MCP工具(FastMCP3.0+最新版)配置指南
MCP(Model Context Protocol)是 AI工具调用的标准协议。本文基于FastMCP 3.1.0 / MCP 1.26最新版从零开始在windows环境使用python搭建MCP调用环境。
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-packagesfrom fastmcp import FastMCP
mcpserver = FastMCP('这是一个mcp服务',version="1.0")@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# 单工具超时(秒)
)主要用来控制是否启动某个标签的注册的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"})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传输: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)


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 interactionawait client.ping()# List available operationstools = await client.list_tools()resources = await client.list_resources()prompts = await client.list_prompts()# Execute operationsresult = await client.call_tool("example_tool", {"param": "value"})print(result)#运行代码asyncio.run(main())
所有客户端操作都需要使用async异步方式,使用with上下文管理器来正确管理连接生命周期。
内存内传输
# 获取服务端所有工具(disable的看不到)
tools = await client.list_tools()
print("可用工具:", [t.name for t in tools])
#传入工具的名称和参数
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服务端和客户端的配置方法,有兴趣的不妨动手操作起来。