1. 项目背景
本文展示如何将普通的Python函数转换为MCP(Model Context Protocol)服务器,并使用MCP Inspector进行测试的完整过程。这个过程展示了AI工具开发的标准化流程。
2. 起点:普通Python函数
我们从最简单的Python函数开始:
# 原始的普通Python函数
def add(a: int, b: int) -> int:
"""两个数相加"""
return a + b
def multiply(a: float, b: float) -> float:
"""两个数相乘"""
return a * b
def calculate(expression: str) -> float:
"""计算数学表达式"""
return eval(expression)
# 本地测试
if __name__ == "__main__":
print(add(10, 5)) # 15
print(multiply(3.5, 2.0)) # 7.0
print(calculate("2+3*4")) # 14
问题:这些函数只能在本地使用,无法被AI应用调用。
转换目标:MCP服务器
我们的目标是将这些函数转换为:
– 可以被AI应用调用的MCP工具
– 支持网络访问的服务器
– 具有标准化接口的服务
3. 转换过程
3.1 第一步:环境准备
# 创建项目目录
mkdir python-to-mcp
cd python-to-mcp
# 创建虚拟环境(避免系统包冲突)
python3 -m venv mcp_env
source mcp_env/bin/activate
# 安装MCP库
pip install mcp
3.2 第二步:基础MCP服务器转换
将普通函数转换为MCP工具(mcp_demo_sse_server.py):
"""
MCP 演示服务器 – SSE版本(支持前端调用)
基于 MCP 教程实现的SSE协议MCP服务器
"""
from mcp.server import FastMCP
# 创建 FastMCP 应用,指定端口
app = FastMCP('demo-calculator', port=9000)
@app.tool()
async def add(a: int, b: int) -> str:
"""
两个整数相加
Args:
a: 第一个整数
b: 第二个整数
Returns:
计算结果
"""
try:
result = a + b
return f"计算结果: {a} + {b} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
@app.tool()
async def multiply(a: float, b: float) -> str:
"""
两个数字相乘
Args:
a: 第一个数字
b: 第二个数字
Returns:
计算结果
"""
try:
result = a * b
return f"计算结果: {a} × {b} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
@app.tool()
async def subtract(a: float, b: float) -> str:
"""
两个数字相减
Args:
a: 被减数
b: 减数
Returns:
计算结果
"""
try:
result = a – b
return f"计算结果: {a} – {b} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
@app.tool()
async def divide(a: float, b: float) -> str:
"""
两个数字相除
Args:
a: 被除数
b: 除数
Returns:
计算结果
"""
try:
if b == 0:
return "错误: 除数不能为零"
result = a / b
return f"计算结果: {a} ÷ {b} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
@app.tool()
async def calculate(expression: str) -> str:
"""
计算数学表达式
Args:
expression: 要计算的数学表达式,如 '2+3*4'
Returns:
计算结果
"""
try:
if not expression:
return "错误: 请提供有效的数学表达式"
# 为了安全,只允许基本的数学运算
allowed_chars = set('0123456789+-*/.()')
if not all(c in allowed_chars or c.isspace() for c in expression):
return "错误: 表达式只能包含数字、运算符(+,-,*,/)和括号"
result = eval(expression)
return f"计算结果: {expression} = {result}"
except ZeroDivisionError:
return "错误: 除数不能为零"
except Exception as e:
return f"计算错误: {str(e)}"
@app.tool()
async def power(base: float, exponent: float) -> str:
"""
计算幂运算
Args:
base: 底数
exponent: 指数
Returns:
计算结果
"""
try:
result = base ** exponent
return f"计算结果: {base} ^ {exponent} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
@app.tool()
async def sqrt(number: float) -> str:
"""
计算平方根
Args:
number: 要计算平方根的数字
Returns:
计算结果
"""
try:
if number < 0:
return "错误: 不能计算负数的平方根"
result = number ** 0.5
return f"计算结果: √{number} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
if __name__ == "__main__":
# 运行SSE服务器
print("启动MCP计算器服务器…")
print("服务地址: http://localhost:9000/sse")
print("可用工具: add, multiply, subtract, divide, calculate, power, sqrt")
app.run(transport='sse')
关键转换要点说明
关键变化:
– 添加`@app.tool()`装饰器
– 函数变为`async`异步函数
– 返回类型改为`str`(MCP工具通常返回文本)
– 返回值包含描述性信息
# 原始函数
def add(a: int, b: int) -> int:
return a + b
# MCP工具
@app.tool()
async def add(a: int, b: int) -> str: # 返回类型改为str
result = a + b
return f"计算结果: {a} + {b} = {result}" # 返回描述性文本
4. 启动测试
启动SSE服务器(支持前端调用):
python3 mcp_demo_sse_server.py

使用MCP Inspector 对MCP server进行调试,MCP Inspector 是一个用于调试和测试 MCP 服务器的工具。
使用 npx 直接运行 MCP Inspector:
在终端中输入以下命令:
npx @modelcontextprotocol/inspector


接下来我们点击connect,并且点击list tools:


可以看到,我们已经连接到我们的mcp server服务,并且已经拿到了一系列工具,接下来随便选一个函数进行执行验证结果:

结果正确,这样我们就完成了一个简单的mcp server的开发。后续就是需要集成到相应的大模型客户端进行使用。
5. 参考材料
【1】https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide
网硕互联帮助中心







评论前必须登录!
注册