MCP客户端工具

一个异步MCP客户端,用于连接MCP兼容服务器并与Llama模型集成处理用户查询,支持动态调用服务器工具。

  • by CASician
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 CASician/mcp-client-snap

使用说明

MCP客户端

此存储库包含一个异步 MCP客户端 它连接到MCP兼容服务器(Python),并与 Llama模型 以处理用户查询。
它自动检测并使用服务器通过MCP提供的工具,允许LLM动态调用它们。

特性

  • 连接到任何符合MCP标准的服务器(.py)
  • 动态列出并使用服务器可用工具
  • 支持工具执行的函数调用
  • 保持交互式聊天循环
  • 将所有交互记录到 logs/llm_output.log

如何使用

如果你是从虚拟机上读到的,请跳到第3条

1.准备服务器

您需要一个兼容MCP的服务器。它将在后台运行。 看 mcp服务器快照 了解更多信息。

2.连接到DISIT实验室LLM。

在目录中 llama4 创建一个名为的新文件 user_credentials.json.

客户端使用它对Snap4City进行身份验证并获取访问令牌。您必须使用Snap4City帐户,该帐户已被授予必要的API规则和使用限制。

{
  "username": "<SNAP4CITY_USERNAME>",
  "password": "<PASSWORD>"
}

3.运行客户端(仅从VM运行)

chat

这是的别名 ./chat.sh 命令。

如果成功,您将看到令牌处理和如下输出:

Connected to server with:
TOOLS: [...]
RESOURCES: [...]
PROMPTS: [...]

3.1运行客户端(外部用户)

如果服务器文件夹和客户端文件夹位于同一级别:

cd mcp-client-snap
python client.py ../mcp-server-snap/server.py

调整 server.py 指向目录结构的路径。

[!提示] 如果您收到服务器未运行的错误:

  1. 打开一个新终端
  2. 转到服务器目录并使用以下命令打开它:
python server.py
  1. 返回原始终端并再次运行上述命令。

如果成功,您将看到令牌处理和如下输出:

Connected to server with:
TOOLS: [...]
RESOURCES: [...]
PROMPTS: [...]

4.开始聊天

连接后,您可以交互式地输入查询:

MCP Client Started!
Type your queries or 'quit' to exit.

Query: list all the available tpl agencies and their websites. 

如果模型决定使用工具,您将在日志和终端输出中看到它。 否则,模型将直接回答。

日志记录

所有查询、原始模型响应和工具调用都保存在:

log/llm_output.log

示例摘录:

2025-10-02 09:23:17 USER QUERY: calculate the area of a circle with radius 5
2025-10-02 09:23:19 RAW MODEL RESPONSE: {'role': 'assistant', 'content': None, 'function_call': {'name': 'tool_name', 'arguments': {...}}}
2025-10-02 09:23:19 FUNCTION CALLED: math_tool
2025-10-02 09:23:19 ARGS: {"operation": "area_circle", "radius": 5}
2025-10-02 09:23:20 FOLLOWUP RESPONSE: The area is approximately 78.54.

清理

退出时(键入 quit),客户端会自动关闭所有异步资源。

️ 故障排除

  • 错误:“用法:python客户端.py<path_to_server_script>” → 您没有传递MCP服务器文件的路径。办理登机 chat.sh 如果路径有效。

  • 虚拟环境问题 → 确保正确的Python解释器处于活动状态。

  • 与DISIT资源的连接 → 确保凭据有效并正确传递,如中所示 How to use: 2.

备注

  • 使用的模型是:

    llama-4-inference
    
  • 工具调用遵循OpenAI风格 function_call 格式,因此客户端应该使用支持它的任何LLM。