LangChain MCP client集成开发 / ai #67

在MCP的集成开发方面,LangChain是个做得不错的项目,其它方面也很优秀!它有个专门的库来处理,就是langchain-mcp-adapterslibrary。导入的MultiServerMCPClient是官方提供的多服务器管理客户端,可以同时连接多个 MCP 服务器。

langchainmcp.jpg
https://docs.langchain.com/oss/python/langchain/mcp

主要能力

  • 工具调用与管理:能够将各种 MCP 服务器提供的工具转换为Agent可直接使用的标准化工具。
  • 多协议通信支持:支持两种主要的通信方式 – stdio 模式(将 MCP 服务器作为本地子进程运行)和 HTTP 模式(通过 SSE 通道和 POST 请求进行通信)。
  • 资源与提示词操作:可以访问和管理 MCP 服务器提供的资源文件以及预定义的提示词模板。
  • 多服务器协同:通过 MultiServerMCPClient 能够同时连接和管理多个 MCP 服务器,从它们加载工具、提示和资源。

应用场景

  • 数据集成:连接内部的知识库、数据库和业务系统,让 AI 能够访问最新的数据。例如,可以连接 SalesForce、Google Drive 等系统。
  • 文件操作自动化:通过文件系统 MCP 服务器,AI 智能体可以自动执行文件读写、目录管理等操作。
  • 多工具协同工作流:通过连接多个专用 MCP 服务器,构建能够处理复杂任务的 AI 智能体系统。

集成代码

主要是MultiServerMCPClient连接 MCP 服务器,以提供工具调用。

from langchain_mcp_adapters.client import MultiServerMCPClient  

client = MultiServerMCPClient(
    {
        "fetch_weather": {
            "transport": "stdio",  # Local subprocess communication
            "command": "python",
            # path to your server.py file
            "args": ["weather_server.py"],
        },
        "httpserver": {
            "transport": "http",  # HTTP-based remote server
            # Ensure you start your weather server on port 8000
            "url": "http://localhost:8005/mcp/mcp",
        }
    }
)
tools = await client.get_tools()
print(123, "tools", tools)

MCPClient完整案例

uv add "mcp<2"   #  注意:mcp2.0暂不与LangChain包兼容,要装低版本的
uv add langchain-mcp-adapters
uv add langchain langchain-openai python-dotenv

import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient  
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
from dotenv import dotenv_values

env_vars = dotenv_values('.env')
DEEPSEEK_API_KEY = env_vars['DEEPSEEK_API_KEY'] 
DEEPSEEK_BASE_URL = env_vars['DEEPSEEK_BASE'] 

llm = ChatOpenAI(model="deepseek-v4-flash", api_key=DEEPSEEK_API_KEY, base_url=DEEPSEEK_BASE_URL)

async def main():
    client = MultiServerMCPClient(
        {
            "httpserver": {
                "transport": "http",  # HTTP-based remote server
                # Ensure you start your weather server on port 8005
                "url": "http://localhost:8005/mcp/mcp",
            }
        }
    )

    tools = await client.get_tools()
    print(123, "tools", tools) # get_weather
    agent = create_agent(model=llm, tools=tools)
    weather_response = await agent.ainvoke(
        {"messages": [{"role": "user", "content": "what is the weather in beijing?"}]}
    )
    print(996, weather_response["messages"][-1].content)


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

集成起来还是蛮方便的。如果用其它的Agent工具,比如Openclaw、Cherry Studio这些也是可以很方便的管理MCP工具的。有了MCP工具可以很方便地拓展Agent的能力边界,设计很多自己可能并不擅长的项目。好了,快试试吧。