MCP客户端
用于与模型上下文协议(MCP)服务器交互的命令行客户端。支持基于stdio、SSE和HTTP的传输,并通过Azure OpenAI集成进行工具调用。
特性
- 多种传输协议
- Stdio(本地Python/Node服务器和npm包) - SSE(服务器发送事件) - 流式HTTP(基于HTTP POST的JSON-RPC) - SSE和HTTP之间的自动检测和回退
- 工具执行
- 从MCP服务器自动发现工具 - Azure OpenAI集成用于智能工具选择 - 具有工具调用处理功能的多回合对话 - 对话历史管理
- 开发者友好
- 全面记录 logs/mcp_client.log - 支持向stdio服务器传递额外参数 - 具有刷新功能的交互式聊天循环
安装
来源
# Clone or download the repository
cd mcp-client
# Install with UV (recommended)
uv sync
# Or with pip
pip install -e .需求
- Python 3.13+
- Azure OpenAI API凭据(用于工具执行)
配置
LLM配置文件(llms.json)
此客户端使用存储在中的LLM配置文件 llms.json (通过CLI管理)。
要管理配置文件,请执行以下操作:
mcp-client -l配置文件看起来像:
[
{
"name": "default-azure-openai",
"type": "azure_openai",
"endpoint": "https://.openai.azure.com/openai/v1/",
"api_key": "",
"model": "",
"api_version": "2024-12-01-preview"
}
]笔记:
- 目前仅支持API密钥身份验证。
- 对于Azure OpenAI兼容的端点,
model是您的部署名称。
指令文件(Instruction_files.json)
您可以存储一个或多个markdown指令文件(例如,内部Copilot指令提示),并在聊天会话期间应用一个。
- 在交互模式下:选择 i=管理指令文件 列出/添加/删除已保存的文件。
- 保存指令文件路径:
mcp-client -i(提示)或 `mcp-client -i
`.
- 使用指令文件运行一次聊天: `mcp-client -c -i
`.
- 如果你跑
mcp-client -c没有-i,客户端将询问您是否要使用已保存的指令文件。
例子:
mcp-client -c -i InstructionFiles/copilot-instructions.md护栏(减少幻觉)
此客户端可以在严格模式下运行,不鼓励LLM编造细节。在严格模式下,助理应:
- 当关键上下文缺失时,提出1-3个澄清问题
- 避免发明模式/标识符/命令/配置键
- 说它不知道何时无法从对话和工具输出中确定正确答案
- 用占位符将任何示例明确标记为模板
使用以下环境变量进行配置:
# Strict mode (default: true)
MCP_STRICT_MODE=true
# Lower temperature reduces creative guesswork (default: 0)
AZURE_OPENAI_TEMPERATURE=0用法
快速启动(推荐)
- 安装依赖项:
uv sync- 添加LLM配置文件:
mcp-client -l- 开始聊天(您将选择LLM配置文件和MCP服务器):
mcp-client -c基本命令
mcp-client [extra_args...]如果要为此运行应用指令文件:
mcp-client -i InstructionFiles/copilot-instructions.md例子
| 服务器类型 | 命令 |
|---|---|
| NPM包(剧作家) | mcp-client @playwright/mcp@latest |
| NPM包(Azure DevOps) | mcp-client @azure-devops/mcp contoso -d core work work-items |
| 本地Python服务器 | mcp-client ./weather.py |
| 本地JavaScript服务器 | mcp-client ./server.js |
| 基于SSE的MCP服务器 | mcp-client http://localhost:3000/sse |
| 基于HTTP的MCP服务器 | mcp-client http://localhost:3000/mcp |
| Microsoft学习MCP服务器 | mcp-client https://learn.microsoft.com/api/mcp |
交互模式
如果你跑 mcp-client 没有参数,您将看到一个简单的菜单:
Options: m=manage MCP servers, l=manage LLM profiles, i=manage instruction files, c=chat, q=quit在聊天模式下,键入您的问题,客户端将根据需要调用工具。
特殊命令
quit或exit--关闭客户端refresh--清除对话历史记录
建筑
核心组件
- MCP客户端 --主类处理所有MCP服务器通信
- connect_to_server() --自动检测并连接到任何MCP服务器 - connect_to_sse_server() --SSE运输处理程序 - connect_to_http_server() --流式HTTP处理程序 - connect_to_stdio_server() --Stdio运输处理器 - process_query() --用于工具调用的Azure OpenAI集成 - chat_loop() --交互式用户界面
运输选择
客户端会自动检测服务器类型:
- URL(http/https) → 先尝试SSE,然后回到HTTP
- 文件路径(.py/.js) → 使用stdio传输
- 包名 (例如。,
@playwright/mcp) → 使用npx+stdio
日志记录
所有活动都记录到 logs/mcp_client.log。请检查此文件以了解:
- 连接详情
- 每个服务器提供的工具
- 查询处理信息
- 工具执行结果
- 错误诊断
发展
项目结构
mcp-client/
├── client/
│ ├── __init__.py
│ ├── __main__.py # CLI entry point
│ ├── mcp_client.py # Core MCPClient class
├── logs/ # Generated logs
├── pyproject.toml # Package metadata
├── README.md # This file
└── requirements.txt # Dependencies (optional)以开发模式运行
# From the project root
python -m client https://learn.microsoft.com/api/mcp建筑
uv pip install build
python -m build这将创建:
dist/mcp_client-0.1.0-py3-none-any.whl(车轮)dist/mcp_client-0.1.0.tar.gz(来源)
故障排除
“ModuleNotFoundError:没有名为'client'的模块”
- 确保你已经跑过了
uv sync从项目根
“mcp客户端:找不到命令”
- 激活您的虚拟环境:
.venv\Scripts\Activate.ps1(PowerShell)或source .venv/bin/activate(Linux/Mac) - 重新安装:
uv sync
Azure OpenAI错误
- 验证
llms.json具有有效的配置文件,并且您选择了它 - 检查部署名称是否匹配
model
连接失败
- 对于URL:检查网络连接以及端点是否可访问
- 对于本地服务器:验证文件路径是否正确
- 检查
client/logs/mcp_client.log有关详细的错误信息
安全
llms.json,servers.json,以及instruction_files.json是本地配置文件(通常为gitignored)。- 对待
llms.json就像一个秘密,因为它包含你的API密钥。 - 定期轮换Azure OpenAI API密钥。
许可证
MIT许可证——有关详细信息,请参阅许可证文件
支持
对于问题或疑问:
- 检查
client/logs/mcp_client.log用于详细诊断 - 验证Azure OpenAI凭据和配置
- 确保MCP服务器正在运行且可访问
- 根据您的用例查看上面的示例
贡献
欢迎投稿!请随时提交问题或拉取请求。
