返回市场
MCP客户端

MCP客户端

作者:iOSDevSK2 星标更新:2025-09-14

项目介绍

MCP-Use 客户端

一个统一的MCP(模型上下文协议)客户端库,使任何LLM能够连接到MCP服务器并构建具有工具访问权限的自定义代理。该库提供了一个高级Python接口,用于将与LangChain兼容的LLM连接到MCP工具,如网络浏览、文件操作等。

功能

  • 🔧 多传输支持:通过标准I/O、HTTP、WebSocket或沙箱执行进行连接
  • 🤖 LangChain集成:与任何与LangChain兼容的LLM一起工作
  • 📊 高级令牌计数:精确的令牌跟踪和管理
  • 🛡️ 安全第一:内置的安全最佳实践和沙箱
  • 高性能:异步/等待架构以实现最佳性能
  • 🎯 代理框架:带有对话记忆的高级代理接口
  • 📈 可观测性:内置遥测和监控支持

快速开始

安装

pip install -e ".[dev,anthropic,openai,e2b,search]"

基本用法

import asyncio
from mcp_use import MCPClient

async def main():
    # 使用配置初始化客户端
    client = MCPClient()
    
    # 连接到MCP服务器
    await client.connect_to_server("playwright", {
        "command": "npx",
        "args": ["@playwright/mcp@latest"]
    })
    
    # 使用工具
    tools = await client.get_available_tools()
    result = await client.call_tool("browse_web", {"url": "https://example.com"})
    
    print(result)

if __name__ == "__main__":
    asyncio.run(main())

代理用法

from mcp_use.agents import MCPAgent
from langchain_openai import ChatOpenAI

# 创建LLM
llm = ChatOpenAI(model="gpt-4")

# 使用MCP工具创建代理
agent = MCPAgent(
    llm=llm,
    config_path="mcp_config.json"
)

# 使用代理
response = await agent.run("浏览example.com并总结内容")
print(response)

配置

创建一个mcp_config.json文件:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"],
      "env": { "DISPLAY": ":1" }
    },
    "filesystem": {
      "command": "python",
      "args": ["-m", "mcp_server_filesystem", "/path/to/files"]
    }
  }
}

令牌计数系统

该库包含一个先进的令牌计数系统:

from mcp_use.token_counting import TokenCountingFactory

# 创建令牌计数器
counter = TokenCountingFactory.create_counter(
    provider="openai",
    model="gpt-4",
    openai_api_key="your-key"
)

# 计算令牌
usage = await counter.count_tokens(messages)
print(f"输入: {usage.input_tokens}, 输出: {usage.output_tokens}")

架构

核心组件

  • MCPClient:MCP服务器管理的主要入口点
  • MCPAgent:使用LangChain的高级代理接口
  • MCPSession:单个MCP服务器连接管理
  • Connectors:传输层抽象(标准I/O、HTTP、WebSocket、沙箱)
  • ServerManager:动态服务器选择能力

支持的传输方式

  • 标准I/O:基于进程的MCP服务器
  • HTTP:基于HTTP的MCP服务器,带SSE
  • WebSocket:基于WebSocket的MCP服务器
  • 沙箱:E2B沙箱执行以确保安全

开发

设置

# 创建虚拟环境
python -m venv env
source env/bin/activate  # 在Windows上: env\Scripts\activate

# 为开发安装
pip install -e ".[dev,search]"

测试

# 运行所有测试
pytest

# 使用覆盖率运行
pytest --cov=mcp_use --cov-report=html

# 运行特定类型的测试
pytest tests/unit/          # 单元测试
pytest tests/integration/   # 集成测试

代码质量

# 格式化和检查
ruff check --fix
ruff format

# 类型检查
mypy mcp_use/

示例

网络浏览代理

from mcp_use.agents import MCPAgent
from langchain_anthropic import ChatAnthropic

agent = MCPAgent(
    llm=ChatAnthropic(model="claude-3-sonnet-20240229"),
    config={
        "mcpServers": {
            "playwright": {
                "command": "npx",
                "args": ["@playwright/mcp@latest"]
            }
        }
    }
)

result = await agent.run("查找有关AI发展的最新新闻")

文件操作

config = {
    "mcpServers": {
        "filesystem": {
            "command": "python",
            "args": ["-m", "mcp_server_filesystem", "./documents"]
        }
    }
}

agent = MCPAgent(llm=your_llm, config=config)
result = await agent.run("分析项目中的所有Python文件")

多服务器设置

config = {
    "mcpServers": {
        "web": {
            "command": "npx",
            "args": ["@playwright/mcp@latest"]
        },
        "files": {
            "command": "python",
            "args": ["-m", "mcp_server_filesystem", "./data"]
        },
        "database": {
            "url": "http://localhost:8080/mcp"
        }
    }
}

安全

  • 基于环境变量的API密钥管理
  • 通过E2B支持的沙箱执行
  • 通过disallowed_tools限制工具访问
  • 正确的资源清理和连接管理

贡献

  1. 分叉仓库
  2. 创建功能分支
  3. 进行更改
  4. 添加测试
  5. 运行测试套件
  6. 提交拉取请求

许可证

此项目根据MIT许可证发布 - 查看LICENSE文件获取详细信息。

链接

支持

对于问题和疑问:

  • 在GitHub上创建问题
  • 查看文档
  • 查阅示例目录