MCP客户端
一个智能MCP(模型上下文协议)客户端,连接到MCP服务器,使用Ollama进行LLM驱动的查询处理,并自动调用工具。
特性
- MCP服务器集成:通过stdio连接到MCP服务器(支持Python和JavaScript服务器)
- LLM驱动查询:使用Olama进行自然语言处理和智能响应
- 自动工具调用:自动将MCP工具转换为Ollama函数调用格式并执行工具调用
- 身份验证支持:支持API密钥和承载令牌身份验证
- 交互式聊天循环:提供用于查询的交互式命令行界面
- 基于环境的配置:用途
.env用于安全凭据管理的文件
安装
看 安装.md 了解详细的安装说明。
快速安装
pip install -e .或使用 uv:
uv pip install -e .先决条件
- Python>=3.13
- Ollama已安装并正在运行(参见 安装\_ LLAMA.md)
- 连接到MCP服务器(例如。,
my-first-mcp-server)
配置
环境变量
创建一个 .env 客户端目录中的文件,其中包含以下可选变量:
# Option 1: API Key Authentication
MCP_API_KEY=your-api-key-here
# Option 2: Bearer Token Authentication
MCP_TOKEN=your-bearer-token-here
# or
MCP_BEARER_TOKEN=your-bearer-token-here备注:
- 如果同时提供API密钥和令牌,则API密钥优先
- 如果两者都没有提供,客户端将在没有身份验证的情况下连接(要求服务器具有
MCP_AUTH_REQUIRED=false)
配置示例
要匹配默认服务器配置,请执行以下操作:
MCP_API_KEY=default-api-key-12345用法
基本用法
使用默认服务器路径运行客户端:
python client.py或者指定自定义服务器路径:
python client.py path/to/server/main.py程序化使用
import asyncio
from client import MCPClient
async def main():
# Create client with optional authentication
client = MCPClient(
model="llama3.2", # Ollama model to use
api_key="your-api-key", # Optional: API key
token="your-token" # Optional: Bearer token
)
try:
# Connect to server
await client.connect_to_server("path/to/server/main.py")
# Check authentication status
if client.is_authenticated():
print(f"Authenticated using: {client.get_auth_type()}")
# Process queries
response = await client.process_query("Check leave balance for E001")
print(response)
# Or run interactive chat loop
await client.chat_loop()
finally:
await client.cleanup()
asyncio.run(main())运作原理
- 连接:客户端通过stdio通信连接到MCP服务器
- 工具发现:从服务器获取可用工具
- 工具转换:将MCP工具转换为Ollama的OpenAI兼容函数调用格式
- 查询处理:
- 使用可用工具向Ollama发送用户查询 - Ollama明智地决定何时调用工具 - 在MCP服务器上执行工具调用 - 将组合结果返回给用户
示例会话
Connecting to MCP server: ..\my-first-mcp-server\main.py
Using API key authentication
Initializing session...
Fetching available tools...
Session initialized successfully
Authentication verified (api_key)
Connected to server with tools: ['get_leave_balance', 'apply_leave', 'get_leave_history']
MCP Client Started!
Type your queries or 'quit' to exit.
Query: Check leave balance for employee E001
E001 has 18 leave days remaining.
Query: Apply for leave on 2025-04-15 for employee E001
Tool 'apply_leave' result: Leave applied for 1 day(s). Remaining balance: 17.
Query: quitAPI 参考
MCP客户端类
__init__(model="llama3.2", api_key=None, token=None)
初始化MCP客户端。
model:Ollama型号名称(默认:“llama3.2”)api_key:用于身份验证的可选API密钥token:用于身份验证的可选承载令牌
async connect_to_server(server_script_path)
连接到MCP服务器。
server_script_path:服务器脚本的路径(.py或.js)
async process_query(query) -> str
使用Ollama和可用工具处理查询。
query:用户的查询字符串- 返回:已处理的响应
async chat_loop()
运行交互式聊天循环以进行连续查询。
is_authenticated() -> bool
检查是否配置了身份验证凭据。
get_auth_type() -> Optional[str]
获取正在使用的身份验证类型(“api_key”、“bearer”或“None”)。
async cleanup()
清理资源,密切联系。
故障排除
身份验证错误
如果您看到身份验证错误:
- 确保您的
.env文件包含正确的凭据 - 验证服务器是否需要相同的凭据(检查服务器的
.env文件) - 检查服务器是否具有
MCP_AUTH_REQUIRED=true集
连接错误
- 确保服务器路径正确
- 验证服务器脚本是否存在以及是否可执行
- 检查是否安装了服务器依赖项
奥拉马·埃罗尔斯
- 确保Olama正在运行:
ollama serve - 验证模型是否已安装:
ollama list - 如果需要,请安装模型:
ollama pull llama3.2
另见
- 安装.md -安装说明
- 安装\_ LLAMA.md -Olama设置指南
- ../我的第一个mcp服务器/README.md -服务器文档
