MCP协议客户端

一个通用的Golang实现的MCP协议客户端,可连接MCP服务器并通过任何OpenAI兼容的LLM API与暴露的工具进行交互。

  • by aliok
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 aliok/mcp-talker

使用说明

MCP通话器

MCP(模型上下文协议)客户端的通用Golang实现,连接到MCP服务器,并使用任何与OpenAI兼容的LLM API通过聊天与公开的工具进行交互。

特性

  • 通过流式HTTP连接到MCP服务器
  • 适用于任何与OpenAI兼容的API(OpenAI、Anthropic、Google Gemini等)
  • 记录所有HTTP流量(请求和响应)以进行调试
  • 针对严格LLM验证器(尤其是Gemini)的高级模式清理:
    • 清理工具名称(删除有问题的字符,转换 mcp__foo__bar-baz 到 foo_bar_baz)
    • 从描述中删除表情符号和非ASCII字符
    • 从描述中删除标记格式
    • 确保 additionalProperties: false 对于对象模式
    • 添加缺失项 properties 用于严格验证的字段
  • 使用自动工具调用实现代理循环
  • 交互式聊天界面,支持完整的工具调用
  • 通过命令行标志完全可配置

先决条件

  • 转到1.21或更高版本
  • 正在运行的MCP服务器(例如。,http://localhost:8090/mcp)
  • 您选择的LLM提供商的API密钥(OpenAI、Anthropic、Google等)

安装

  1. 克隆存储库或导航到项目目录:
cd mcp-talker
  1. 安装依赖项:
go mod download
  1. 设置环境变量:
export LLM_API_KEY="your-api-key-here"

用法

应用程序需要以下命令行标志:

  • -api-base-url:与OpenAI兼容的API的基本URL(必需)
  • -model:要使用的模型标识符(必需)
  • -mcp-url:MCP服务器的URL(默认值:“http://localhost:8090/mcp")
  • -max-turns:最大对话回合数(默认值:5)
  • -system-prompt:助手的自定义系统提示(默认值:“您是一个有用的助手,可以访问工具。”)

例子

使用OpenAI:

export LLM_API_KEY=sk-...
go run main.go \
  -api-base-url https://api.openai.com/v1 \
  -model gpt-4

使用谷歌双子座:

export LLM_API_KEY=your-gemini-api-key
go run main.go \
  -api-base-url https://generativelanguage.googleapis.com/v1beta/openai \
  -model gemini-2.5-flash

使用Anthropic(如果OpenAI兼容端点可用):

export LLM_API_KEY=sk-ant-...
go run main.go \
  -api-base-url https://api.anthropic.com/v1 \
  -model claude-3-5-sonnet-20241022

使用自定义配置:

export LLM_API_KEY=your-api-key
go run main.go \
  -api-base-url https://api.openai.com/v1 \
  -model gpt-4 \
  -mcp-url http://localhost:9000/mcp \
  -max-turns 10 \
  -system-prompt "You are a helpful coding assistant."

建筑

构建应用程序:

go build -o mcp-talker

然后运行:

./mcp-talker -api-base-url https://api.openai.com/v1 -model gpt-4

交互式使用

跑步后,您可以与助手聊天。需要时,它将自动使用MCP服务器提供的工具。

类型 quit 或 exit 退出应用程序。

配置标志

标志 说明 必填 默认
-api-base-url OpenAI兼容的API基础URL 是 无
-model 型号标识符(例如gpt-4、gemini-2.5-flash) 是 无
-mcp-url MCP服务器URL 否 http://localhost:8090/mcp
-max-turns 每个用户输入的最大对话次数 否 5
-system-prompt 助手的系统提示 否 You are a helpful assistant with access to tools.

建筑

该应用程序包括:

  1. 记录仪:记录所有请求和响应以进行调试的HTTP中间件
  2. sanctizeToolName():将MCP工具名称转换为LLM兼容格式(例如。, mcp__flights__get_api-airports-search → flights_get_api_airports_search)
  3. cleanToolDescription():从工具描述中删除表情符号、非ASCII字符和标记格式
  4. cleanSchema():递归清理JSON模式,以确保与严格的LLM验证器兼容:
    • 删除有问题的字段(title, examples, default, $schema)
    • 确保所有对象都具有 type: "object" 和 additionalProperties: false
    • 确保所有对象都具有 properties 字段(即使为空)
    • 清除架构属性中的描述
  5. main():协调MCP客户端连接、工具列表和交互式聊天循环

聊天循环实现了一个代理模式,其中:

  1. 用户提供输入
  2. LLM处理输入并决定调用哪些工具(如果有的话)
  3. 工具名称从经过净化的名称映射回原始MCP名称
  4. 工具通过MCP服务器执行
  5. 结果反馈给LLM
  6. LLM提供最终答案或进行额外的工具调用
  7. 重复步骤2-6,直到 max-turns 直到提供最终答案为止

API兼容性

该工具适用于任何实现OpenAI聊天完成API格式的API。已知的兼容提供商:

  • 开放人工智能: https://api.openai.com/v1
  • 谷歌双子座: https://generativelanguage.googleapis.com/v1beta/openai
  • Azure OpenAI: https://<resource>.openai.azure.com/openai/deployments/<deployment>
  • 其他与OpenAI兼容的端点

注意:某些提供程序可能具有不同的身份验证机制或API略有变化。该工具通过API密钥使用标准的OpenAI SDK身份验证。

依赖项

  • mcp走 -用于模型上下文协议的MCP Go SDK
  • 去开 -用于Go的OpenAI API客户端(与OpenAI兼容的API兼容)

故障排除

没有可用的工具

确保您的MCP服务器正在运行,并且可以通过指定的URL访问 -mcp-url.

API错误

  • 验证您的 LLM_API_KEY 环境变量设置正确
  • 检查一下 -api-base-url 对于您的提供商来说是正确的
  • 确保 -model 标识符对您的提供商有效

“MALFORMED_FUNCTION_CALL”错误(Gemini)

如果您看到以下错误 finish_reason: "function_call_filter: MALFORMED_FUNCTION_CALL" 使用Gemini时:

  • 这通常是由严格的模式验证要求引起的
  • 该工具会自动清理工具名称和模式,以实现Gemini兼容性
  • 如果仍然遇到问题,工具名称或模式可能包含验证器拒绝的字符
  • 检查日志以查看发送到API的内容

架构错误

一些LLM对JSON模式格式更严格。此工具包括专门为Gemini等严格验证器设计的广泛模式清理:

  • 对工具名称进行清理,以删除有问题的字符
  • 描述中没有表情符号和标记
  • 对象架构包括必需的 additionalProperties 和 properties 字段

如果您在其他LLM提供程序中遇到与架构相关的错误,您可能需要调整 cleanSchema() 或 sanitizeToolName() 满足提供商特定要求的功能。

许可证

麻省理工学院