使用说明
概述
此代码是关于两个MCP服务器的:
- 第一个提供来自国家气象局(NWS)的数据。
- 第二个提供来自Pokemon的数据。
还有两个MCP客户端。两者都使用服务器的MCP工具来增强对用户问题(查询)的响应:
- 第一个连接到NWS MCP服务器,该服务器包含工具“get_alerts”和“get_forecast”。
- 第二个连接到口袋妖怪MCP服务器,该服务器包含工具“get_abilitys”和“get_moves”。
客户端是为了与Amazon Bedrock和Claude LLMs API集成而构建的。
MCP服务器及其各自的客户端是按照以下步骤构建的 MCP官方文件.
设置
- 安装Python 3.10或更高版本
- 安装Python MCP SDK 1.2.0或更高版本
- [可选]安装 紫外线:
curl -LsSf https://astral.sh/uv/install.sh | sh
MCP服务器的工作原理:
服务器使用官方的FastMCP启动 Python MCP SDK
服务器使用STDIO作为传输协议。
每个服务器都使用注释公开MCP工具 @mcp.tool() 高于其功能。
服务器基于NWS和PokeAPI等第三方API提供数据。
当MCP客户端LLM连接到MCP服务器时,会提供这些工具来帮助其改进研究以回答问题(查询)。
MCP客户如何工作:
当您提交查询时:
- 客户端从服务器获取可用工具的列表
- 您的查询将与工具描述一起发送给LLM
- LLM决定使用哪些工具(如果有的话)
- 客户端通过服务器执行任何请求的工具调用
- 结果将发送回LLM
- LLM提供自然语言响应
- 将向您显示响应
最佳实践
错误处理
- 始终将工具调用包装在try-catch块中
- 提供有意义的错误消息
- 优雅地处理连接问题
资源管理
- 使用AsyncExitStack进行适当的清理
- 完成后关闭连接
- 处理服务器断开连接
安全
- 将API密钥安全地存储在.env中
- 验证服务器响应
- 谨慎使用工具权限
- 提示用户确认敏感操作
客户应该
- 在调用服务器之前向用户显示工具输入,以避免恶意或意外的数据泄露
- 在传递给LLM之前验证工具结果
- 实施工具调用超时
- 用于审计目的的日志工具使用情况
工具名称
- 工具名称可以根据以下内容进行验证 下面指定的格式:
- 工具名称的长度应在1到128个字符之间(包括首尾两个字符)。
- 工具名称应区分大小写。
- 以下应该是唯一允许的字符:大写和小写ASCII字母(A-Z,A-Z)、数字(0-9)、下划线(_)、破折号(-)和点(.)
- 工具名称不应包含空格、逗号或其他特殊字符。
- 工具名称在服务器中应该是唯一的。
- 有效工具名称示例:
getUser ; DATA_EXPORT_v2 ; admin.tools.list
- 如果工具名称符合指定格式,则不应使MCP客户端验证失败