使用说明
FastMCP演示-计算器服务器
一个简单的演示 模型上下文协议(MCP) 使用FastMCP构建的服务器。
什么是MCP?
模型上下文协议(MCP) 它是一种标准协议,允许人工智能助理(如Claude)与外部工具和服务进行通信。把它想象成一个“插座”,人工智能可以插入他们的“插头”以获得额外的功能。
为什么这很有用?
- 人工智能可以计算,查询数据库,读取文件等。
- 你不需要给人工智能所有的背景 - 人工智能会自己询问
- 可重复使用:一台服务器可与所有 MCP 兼容的 AI 配合使用
什么是FastMCP?
FastMCP 是一个Python框架,使构建MCP服务器非常简单。它的工作原理类似于FastAPI - 你编写普通的Python函数并添加一个 @mcp.tool() 装饰师脚趾。
此 Demo
这个演示包含一个简单的计算器,有3个工具:
add加两个数字multiply乘以两个数字random_number生成一个随机数
安装
步骤1:虚拟制造环境
inv venv
这使得一个 .venv 一个孤立的Python环境。
为什么是虚拟环境?
- 依赖关系与您的 Python 系统保持分离
- 与其他项目无冲突
- 易于删除(只需删除)
.venv/)
步骤 2: 安装依赖关系
inv install
这将安装FastMCP及其所有依赖关系。
技术背景:
- 自动使用任务
.venv/bin/python3如果存在 - 否则将返回系统
python3 - 确保所有工具在正确的环境中运行
使用
1.服务器启动(开发模式)
inv dev
服务器现在正在运行并通过stdio(标准输入/输出)监听命令。
2. 检查可用工具
inv inspect
它显示了服务器提供的所有工具,包括其参数和文档。
3.测试工具
inv test
这将运行一个完整的测试脚本,显示如何:
- 连接到 MCP 服务器
- 使用参数调用工具
- 已处理结果
测试功能是如何工作的? (技术解释)
的 inv test 函数显示完整的客户端-服务器流:
步骤1:服务器处理子流程开始
params = StdioServerParameters(command='python', args=['server.py'])
这是怎么回事?
我们开始 python server.py 作为一个单独的过程(subprocess)。我们通过这个过程进行沟通。 标准 这意味着我们通过标准输入和输出来回发送JSON消息。
为什么是STDIO?
- 简单:无论Python在哪里运行
- 安全:服务器在自己的进程中运行
- 默认:大多数 MCP 服务器使用 stdio
步骤 2: 建立客户端连接
async with stdio_client(params) as (read, write):
async with ClientSession(read, write) as session:
这是怎么回事?
stdio_client创建两个“通道”:一个用于阅读,一个用于写作ClientSession根据MCP协议管理通信- 的
async with确保一切顺利关闭(包括错误)
为什么是async?
MCP基于异步通信。这意味着客户端不必等待服务器完成 - 它可以同时发送多个请求。
步骤 3: 初始化连接
await session.initialize()
这是怎么回事?
客户端和服务器进行“握手” - 他们交换以下信息:
- 他们使用的协议版本
- 他们支持哪些功能
- 哪些工具可用
这类似于在说话之前建立电话连接。
步骤4:调用工具
result = await session.call_tool('add', {'a': 5, 'b': 3})
print(f"Result: {result.content[0].text}")
这是怎么回事?
- 客户端向服务器发送JSON-RPC消息:“调用'add'工具,a=5,b=3”
- 服务器接收了它,然后运行
add功能从 - 服务器将结果作为JSON返回
- 客户端解析结果并返回
里面有什么 result?
result.content是内容项目的列表result.content[0]第一个项目(通常是唯一的)result.content[0].text是结果的文本表示
完整流量可视化
┌─────────┐ ┌─────────┐ │ 客户端│ │ 服务器│ │ (测试)│ │(server.py)│ └────┬────┘ └────┬────┘ │ │ │ 1. 启动子进程:python server.py│ ├─────────────────────────────────────────────>│ │ │ │ 2. 初始化(握手)│ ├─────────────────────────────────────────────>│ │<─────────────────────────────────────────────┤ │ (服务器信息、可用工具)│ │ │ │ 3. call_tool('add',{a:5,b:3})│ ├─────────────────────────────────────────────>│ │ │ (贝雷肯5+3) │<─────────────────────────────────────────────┤ │ 结果:“8”│ │ │ │ 4. call_tool('倍数',{a:4,b:7})│ ├─────────────────────────────────────────────>│ │ │ (贝雷肯4*7) │<─────────────────────────────────────────────┤ │ 结果:“28”│ │ │ │ 5. 关闭连接│ ├─────────────────────────────────────────────>│ │ │ (服务器已停止) └──────────────────────────────────────────────┘
Je特征工具制造商
添加新工具 server.py:
@mcp.tool()
def divide(a: float, b: float) -> str:
"""Deel twee getallen. Let op deling door nul!"""
if b == 0:
return "Error: Kan niet delen door nul"
return str(a / b)
测试满足: inv test (首先在tasks.py中添加一个测试)
学生的实践练习
练习1:字符串操作工具
创建一个翻转字符串的工具:
@mcp.tool()
def reverse_string(text: str) -> str:
"""Keer een string om"""
return text[::-1]
练习2:编辑列表
创建一个计算数字列表平均值的工具:
@mcp.tool()
def average(numbers: list[float]) -> float:
"""Bereken gemiddelde van een lijst getallen"""
return sum(numbers) / len(numbers)
练习3:自己的想法
想出一个有用的工具。想法:
- 温度转换(摄氏度)↔ 华氏度)
- 身体质量指数计算器
- 密码强度检查器
- Morse代码的字符串
- JSON验证器
故障排除
“ModuleNotFoundError:没有名为'fastmcp'的模块”
→ Run inv install 首先
“服务器启动niet”
→ 检查Python是否处于活动状态: python --version
检查server.py是否有语法错误
“工具不会产生输出”
检查返回类型是否正确(必须是 str、int、float 等)
看看这个功能是否有一个 return 声明是
下一步
-
使用 Claude Desktop
将此服务器添加到您的 Claude 桌面配置 -
构建更复杂的工具
- 执行数据库查询
- 读取/写入文件
- 调用 API
- 整合外部服务
-
了解更多关于MCP
许可证
公共领域 - 免费用于教育目的。