MCP服务器与客户端工具

MCP服务器提供来自国家气象局和Pokémon的数据,客户端利用这些工具增强LLM对用户查询的响应。

  • by rodrigodonizettio
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 rodrigodonizettio/mcp_server_client

使用说明

概述

此代码是关于两个MCP服务器的:

  • 第一个提供来自国家气象局(NWS)的数据。
  • 第二个提供来自Pokemon的数据。

还有两个MCP客户端。两者都使用服务器的MCP工具来增强对用户问题(查询)的响应:

  • 第一个连接到NWS MCP服务器,该服务器包含工具“get_alerts”和“get_forecast”。
  • 第二个连接到口袋妖怪MCP服务器,该服务器包含工具“get_abilitys”和“get_moves”。

客户端是为了与Amazon Bedrock和Claude LLMs API集成而构建的。

MCP服务器及其各自的客户端是按照以下步骤构建的 MCP官方文件.

设置

  1. 安装Python 3.10或更高版本
  2. 安装Python MCP SDK 1.2.0或更高版本
  3. [可选]安装 紫外线: 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客户如何工作:

当您提交查询时:

  1. 客户端从服务器获取可用工具的列表
  2. 您的查询将与工具描述一起发送给LLM
  3. LLM决定使用哪些工具(如果有的话)
  4. 客户端通过服务器执行任何请求的工具调用
  5. 结果将发送回LLM
  6. LLM提供自然语言响应
  7. 将向您显示响应 ​

最佳实践

错误处理

  • 始终将工具调用包装在try-catch块中
  • 提供有意义的错误消息
  • 优雅地处理连接问题

资源管理

  • 使用AsyncExitStack进行适当的清理
  • 完成后关闭连接
  • 处理服务器断开连接

安全

  • 将API密钥安全地存储在.env中
  • 验证服务器响应
  • 谨慎使用工具权限
  • 提示用户确认敏感操作

客户应该

  • 在调用服务器之前向用户显示工具输入,以避免恶意或意外的数据泄露
  • 在传递给LLM之前验证工具结果
  • 实施工具调用超时
  • 用于审计目的的日志工具使用情况

工具名称

  • 工具名称可以根据以下内容进行验证 下面指定的格式:
    • 工具名称的长度应在1到128个字符之间(包括首尾两个字符)。
    • 工具名称应区分大小写。
    • 以下应该是唯一允许的字符:大写和小写ASCII字母(A-Z,A-Z)、数字(0-9)、下划线(_)、破折号(-)和点(.)
    • 工具名称不应包含空格、逗号或其他特殊字符。
    • 工具名称在服务器中应该是唯一的。
    • 有效工具名称示例: getUser ; DATA_EXPORT_v2 ; admin.tools.list
  • 如果工具名称符合指定格式,则不应使MCP客户端验证失败