Unified MCP Client Library: 连接LLM与工具的开源利器
在人工智能快速发展的今天,大型语言模型(LLM),如OpenAI的GPT系列或Anthropic的Claude,已经成为开发者构建智能应用的核心工具。然而,要让这些模型真正发挥作用,开发者往往需要将它们与各种外部工具和服务连接起来,比如网页浏览、文件操作甚至3D建模等。传统的实现方式通常需要编写大量复杂的代码,既耗时又容易出错。为了解决这一问题,Unified MCP Client Library(以下简称MCP-Use)应运而生。
MCP-Use 是一个开源的 Python 库,旨在帮助开发者以简单、高效的方式将任何支持工具调用的 LLM 连接到任何 MCP(Multi-Capability Protocol)服务器,并构建具有工具访问能力的自定义代理。本文将详细介绍 MCP-Use 的功能、特点和使用方法,帮助你快速掌握这一工具,并在自己的项目中加以应用。无论你是人工智能领域的初学者还是经验丰富的开发者,这篇文章都将为你提供实用的指导。
什么是 MCP-Use?
MCP-Use 是一个专为开发者设计的工具库,它的核心目标是简化 LLM 与外部工具的集成过程。通过 MCP-Use,你可以轻松实现以下功能:
-
连接任意 LLM 到 MCP 服务器:支持多种主流 LLM,如 OpenAI、Anthropic、Groq 等,只要这些模型支持工具调用功能。 -
构建自定义代理:利用 MCP 服务器提供的工具,创建能够完成特定任务的智能代理。 -
动态选择服务器:根据任务需求,从可用的 MCP 服务器中自动选择最适合的服务器。 -
支持多服务器:在一个代理中同时使用多个 MCP 服务器,处理更复杂的任务。 -
工具访问控制:限制代理对某些工具的使用,确保安全性。
MCP-Use 的设计注重易用性和灵活性。开发者只需几行代码,就能搭建一个功能强大的代理,完成从网页搜索到文件操作等各种任务。接下来,我们将深入探讨 MCP-Use 的主要特点和优势。
MCP-Use 的核心特点
MCP-Use 提供了多项实用功能,让它在众多工具库中脱颖而出。以下是它的核心特点:
1. 简单易用
MCP-Use 的最大亮点是它的简洁性。只需要 6 行代码,你就可以创建一个能够访问工具的智能代理。这种低门槛的设计,让开发者无需深入研究复杂的底层技术,就能快速上手。
2. 支持多种 LLM
MCP-Use 通过 LangChain 框架支持多种 LLM,包括 OpenAI 的 GPT-4o、Anthropic 的 Claude 等。只要你选择的模型支持工具调用功能,MCP-Use 就能无缝集成。这种灵活性让你可以根据项目需求自由选择合适的模型。
3. HTTP 连接支持
MCP-Use 支持直接连接到运行在特定 HTTP 端口的 MCP 服务器。这对于需要与基于 Web 的服务集成的场景尤为方便。
4. 动态服务器选择
在运行时,MCP-Use 的代理可以根据任务需求,从配置的服务器池中动态选择最合适的 MCP 服务器。这种智能选择机制提高了任务处理的效率。
5. 多服务器协作
MCP-Use 允许在一个代理中同时使用多个 MCP 服务器。比如,你可以组合网页浏览和文件操作的工具,完成更复杂的任务流程。
6. 工具访问限制
为了保证安全性,MCP-Use 提供了工具限制功能。开发者可以禁止代理使用某些潜在危险的工具,例如文件系统操作或网络访问。
7. 自定义代理支持
通过 LangChain 适配器,开发者可以根据自己的需求构建完全自定义的代理。如果你有特定的任务场景,MCP-Use 也能满足你的要求。
这些特点使得 MCP-Use 成为一个强大且实用的工具库。接下来,我们将通过具体的代码示例,展示如何快速上手 MCP-Use。
如何开始使用 MCP-Use?
要使用 MCP-Use,你需要准备以下环境:
-
Python 3.11 或更高版本。 -
MCP 服务器实现,如 Playwright MCP。 -
LangChain 及相关 LLM 库,如 langchain-openai 或 langchain-anthropic。
安装 MCP-Use
你可以通过以下命令使用 pip 安装 MCP-Use:
pip install mcp-use
或者从源代码安装:
git clone https://github.com/pietrozullo/mcp-use.git
cd mcp-use
pip install -e .
安装 LangChain 提供者
MCP-Use 通过 LangChain 与不同的 LLM 提供者集成。你需要根据使用的 LLM 安装对应的包,例如:
# 用于 OpenAI
pip install langchain-openai
# 用于 Anthropic
pip install langchain-anthropic
然后,在 .env
文件中添加你的 API 密钥:
OPENAI_API_KEY=your_openai_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key
注意:只有支持工具调用功能的 LLM 才能与 MCP-Use 配合使用。在选择模型时,请确认其支持函数调用或工具使用。
创建第一个代理
下面是一个简单的示例,展示如何使用 MCP-Use 创建一个代理,并完成一个任务:
import asyncio
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from mcp_use import MCPAgent, MCPClient
async def main():
# 加载环境变量
load_dotenv()
# 创建配置字典
config = {
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"],
"env": {
"DISPLAY": ":1"
}
}
}
}
# 从配置字典创建 MCPClient
client = MCPClient.from_dict(config)
# 创建 LLM
llm = ChatOpenAI(model="gpt-4o")
# 使用 client 创建代理
agent = MCPAgent(llm=llm, client=client, max_steps=30)
# 运行查询
result = await agent.run(
"Find the best restaurant in San Francisco",
)
print(f"\nResult: {result}")
if __name__ == "__main__":
asyncio.run(main())
这段代码首先加载环境变量,然后定义了一个 MCP 服务器配置(这里使用 Playwright MCP)。接着,它创建了一个 MCPClient 实例和一个 LLM 实例(使用 GPT-4o 模型),并基于这两者构建了一个代理。最后,代理执行任务“寻找旧金山最好的餐厅”,并输出结果。
你也可以通过配置文件加载服务器设置。例如:
client = MCPClient.from_config_file(
os.path.join("browser_mcp.json")
)
配置文件 browser_mcp.json
的内容如下:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"],
"env": {
"DISPLAY": ":1"
}
}
}
}
这种方式更便于管理和复用配置。
MCP-Use 的实际应用场景
MCP-Use 的强大之处在于它的多功能性。以下是几个实际应用的例子,展示它在不同场景下的用法。
1. 使用 Playwright 进行网页浏览
import asyncio
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from mcp_use import MCPAgent, MCPClient
async def main():
# 加载环境变量
load_dotenv()
# 从配置文件创建 MCPClient
client = MCPClient.from_config_file(
os.path.join(os.path.dirname(__file__), "browser_mcp.json")
)
# 创建 LLM
llm = ChatOpenAI(model="gpt-4o")
# 使用 client 创建代理
agent = MCPAgent(llm=llm, client=client, max_steps=30)
# 运行查询
result = await agent.run(
"Find the best restaurant in San Francisco USING GOOGLE SEARCH",
max_steps=30,
)
print(f"\nResult: {result}")
if __name__ == "__main__":
asyncio.run(main())
这个例子展示了如何使用 Playwright MCP 服务器进行网页浏览。代理通过 Google 搜索找到旧金山的最佳餐厅,并返回结果。
2. Airbnb 住宿搜索
import asyncio
import os
from dotenv import load_dotenv
from langchain_anthropic import ChatAnthropic
from mcp_use import MCPAgent, MCPClient
async def run_airbnb_example():
# 加载环境变量
load_dotenv()
# 从配置文件创建 MCPClient
client = MCPClient.from_config_file(
os.path.join(os.path.dirname(__file__), "airbnb_mcp.json")
)
# 创建 LLM
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")
# 使用 client 创建代理
agent = MCPAgent(llm=llm, client=client, max_steps=30)
try:
# 运行查询
result = await agent.run(
"Find me a nice place to stay in Barcelona for 2 adults "
"for a week in August. I prefer places with a pool and "
"good reviews. Show me the top 3 options.",
max_steps=30,
)
print(f"\nResult: {result}")
finally:
# 清理资源
if client.sessions:
await client.close_all_sessions()
if __name__ == "__main__":
asyncio.run(run_airbnb_example())
配置文件 airbnb_mcp.json
:
{
"mcpServers": {
"airbnb": {
"command": "npx",
"args": ["-y", "@openbnb/mcp-server-airbnb"]
}
}
}
这个例子展示了如何使用 MCP-Use 连接 Airbnb MCP 服务器,搜索巴塞罗那的住宿,并筛选出带泳池且评价良好的前三个选项。
3. 使用 Blender 创建 3D 模型
import asyncio
from dotenv import load_dotenv
from langchain_anthropic import ChatAnthropic
from mcp_use import MCPAgent, MCPClient
async def run_blender_example():
# 加载环境变量
load_dotenv()
# 创建配置字典
config = {"mcpServers": {"blender": {"command": "uvx", "args": ["blender-mcp"]}}}
client = MCPClient.from_dict(config)
# 创建 LLM
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")
# 使用 client 创建代理
agent = MCPAgent(llm=llm, client=client, max_steps=30)
try:
# 运行查询
result = await agent.run(
"Create an inflatable cube with soft material and a plane as ground.",
max_steps=30,
)
print(f"\nResult: {result}")
finally:
# 清理资源
if client.sessions:
await client.close_all_sessions()
if __name__ == "__main__":
asyncio.run(run_blender_example())
这个例子展示了如何使用 Blender MCP 服务器创建一个 3D 模型,包括一个充气立方体和地面平面。
高级功能
MCP-Use 还提供了一些高级功能,帮助开发者应对更复杂的场景。
1. 配置文件支持
你可以通过配置文件初始化 MCP-Use,方便管理和切换服务器设置:
import asyncio
from mcp_use import create_session_from_config
async def main():
# 从配置文件创建 MCP 会话
session = create_session_from_config("mcp-config.json")
# 初始化会话
await session.initialize()
# 使用会话...
# 断开连接
await session.disconnect()
if __name__ == "__main__":
asyncio.run(main())
2. HTTP 连接
MCP-Use 支持通过 HTTP 连接到 MCP 服务器:
import asyncio
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from mcp_use import MCPAgent, MCPClient
async def main():
# 加载环境变量
load_dotenv()
config = {
"mcpServers": {
"http": {
"url": "http://localhost:8931/sse"
}
}
}
# 从配置创建 MCPClient
client = MCPClient.from_dict(config)
# 创建 LLM
llm = ChatOpenAI(model="gpt-4o")
# 使用 client 创建代理
agent = MCPAgent(llm=llm, client=client, max_steps=30)
# 运行查询
result = await agent.run(
"Find the best restaurant in San Francisco USING GOOGLE SEARCH",
max_steps=30,
)
print(f"\nResult: {result}")
if __name__ == "__main__":
asyncio.run(main())
3. 多服务器支持
MCP-Use 可以在一个代理中同时使用多个服务器。例如:
import asyncio
from mcp_use import MCPClient, MCPAgent
from langchain_anthropic import ChatAnthropic
async def main():
# 从配置文件创建 client
client = MCPClient.from_config_file("multi_server_config.json")
# 创建代理
agent = MCPAgent(
llm=ChatAnthropic(model="claude-3-5-sonnet-20240620"),
client=client,
use_server_manager=True # 启用服务器管理器
)
try:
# 运行查询
result = await agent.run(
"Search for a nice place to stay in Barcelona on Airbnb, "
"then use Google to find nearby restaurants and attractions."
)
print(result)
finally:
# 清理会话
await client.close_all_sessions()
if __name__ == "__main__":
asyncio.run(main())
配置文件 multi_server_config.json
:
{
"mcpServers": {
"airbnb": {
"command": "npx",
"args": ["-y", "@openbnb/mcp-server-airbnb"]
},
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"],
"env": {
"DISPLAY": ":1"
}
}
}
}
启用 use_server_manager=True
后,代理会根据任务需求智能选择服务器。
4. 工具访问控制
你可以限制代理的工具访问权限:
import asyncio
from mcp_use import MCPAgent, MCPClient
from langchain_openai import ChatOpenAI
async def main():
# 创建 client
client = MCPClient.from_config_file("config.json")
# 创建代理并限制工具
agent = MCPAgent(
llm=ChatOpenAI(model="gpt-4"),
client=client,
disallowed_tools=["file_system", "network"] # 限制潜在危险工具
)
# 运行查询
result = await agent.run(
"Find the best restaurant in San Francisco"
)
print(result)
# 清理
await client.close_all_sessions()
if __name__ == "__main__":
asyncio.run(main())
构建自定义代理
MCP-Use 支持使用 LangChain 适配器构建自定义代理:
import asyncio
from langchain_openai import ChatOpenAI
from mcp_use.client import MCPClient
from mcp_use.adapters.langchain_adapter import LangChainAdapter
from dotenv import load_dotenv
load_dotenv()
async def main():
# 初始化 MCP client
client = MCPClient.from_config_file("examples/browser_mcp.json")
llm = ChatOpenAI(model="gpt-4o")
# 创建适配器实例
adapter = LangChainAdapter()
# 获取 LangChain 工具
tools = await adapter.create_tools(client)
# 创建自定义 LangChain 代理
llm_with_tools = llm.bind_tools(tools)
result = await llm_with_tools.ainvoke("What tools do you have available? ")
print(result)
if __name__ == "__main__":
asyncio.run(main())
调试方法
MCP-Use 提供内置的调试模式,帮助开发者诊断问题:
1. 使用环境变量启用调试
# 显示 INFO 级别消息
DEBUG=1 python your_script.py
# 显示 DEBUG 级别消息(详细输出)
DEBUG=2 python your_script.py
2. 在代码中设置调试
import mcp_use
mcp_use.set_debug(1) # INFO 级别
# 或
mcp_use.set_debug(2) # DEBUG 级别
3. 代理特定调试
agent = MCPAgent(
llm=your_llm,
client=your_client,
verbose=True # 显示代理的调试信息
)
总结
MCP-Use 是一个功能丰富且易于使用的开源库,为开发者提供了一种高效的方式,将 LLM 与外部工具集成。它的简单性、灵活性和安全性使其成为构建智能代理的理想选择。无论是网页浏览、住宿搜索还是 3D 建模,MCP-Use 都能帮助你快速实现目标。
如果你对 MCP-Use 感兴趣,可以访问 GitHub 仓库 获取更多信息,或直接开始尝试。希望这篇文章能为你提供足够的指导,让你在自己的项目中充分发挥 MCP-Use 的潜力!
引用
如果你在项目中使用 MCP-Use,请引用:
@software{mcp_use2025,
author = {Zullo, Pietro},
title = {MCP-Use: MCP Library for Python},
year = {2025},
publisher = {GitHub},
url = {https://github.com/pietrozullo/mcp-use}
}
许可证
MIT