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等)
安装
- 克隆存储库或导航到项目目录:
cd mcp-talker- 安装依赖项:
go mod download- 设置环境变量:
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. |
建筑
该应用程序包括:
- 记录仪:记录所有请求和响应以进行调试的HTTP中间件
- sanctizeToolName():将MCP工具名称转换为LLM兼容格式(例如。,
mcp__flights__get_api-airports-search→flights_get_api_airports_search) - cleanToolDescription():从工具描述中删除表情符号、非ASCII字符和标记格式
- cleanSchema():递归清理JSON模式,以确保与严格的LLM验证器兼容:
- 删除有问题的字段(title, examples, default, $schema) - 确保所有对象都具有 type: "object" 和 additionalProperties: false - 确保所有对象都具有 properties 字段(即使为空) - 清除架构属性中的描述
- main():协调MCP客户端连接、工具列表和交互式聊天循环
聊天循环实现了一个代理模式,其中:
- 用户提供输入
- LLM处理输入并决定调用哪些工具(如果有的话)
- 工具名称从经过净化的名称映射回原始MCP名称
- 工具通过MCP服务器执行
- 结果反馈给LLM
- LLM提供最终答案或进行额外的工具调用
- 重复步骤2-6,直到
max-turns直到提供最终答案为止
API兼容性
该工具适用于任何实现OpenAI聊天完成API格式的API。已知的兼容提供商:
- 开放人工智能:
https://api.openai.com/v1 - 谷歌双子座:
https://generativelanguage.googleapis.com/v1beta/openai - Azure OpenAI:
https://.openai.azure.com/openai/deployments/ - 其他与OpenAI兼容的端点
注意:某些提供程序可能具有不同的身份验证机制或API略有变化。该工具通过API密钥使用标准的OpenAI SDK身份验证。
依赖项
故障排除
没有可用的工具
确保您的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() 满足提供商特定要求的功能。
许可证
麻省理工学院
