最近MCP(Model Context Protocol)太火了,大家纷纷使用MCP来实现各种神奇功能,比如添加文件的MCP、语音合成的MCP等等。MCP的出现极大地简化了开发过程。在过去,我们通常使用Function Call来封装外部方法,而现在,MCP则提供了一种更灵活、更直观的方案。
今天,我们就借助langchain-mcp快速实现自己的MCP服务!
环境准备
我的Python开发环境是3.12版本,只要Python版本大于3.10即可。
先安装必要的依赖:
pip install langchain-mcp-adapters
pip install langchain_openai
pip install langchain langgraph
注:这里我用的是OpenAI的代理,如果你使用DeepSeek,也可以安装langchain-deepseek。
创建Math MCP Server
新建文件 math_server.py
,内容如下:
from mcp.server.fastmcp import FastMCP
import logging
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
mcp = FastMCP("Math")
@mcp.tool()
def add(a: int, b: int) -> int:
logger.info("The add method is called: a=%d, b=%d", a, b)
return a + b
@mcp.tool()
def multiply(a: int, b: int) -> int:
logger.info("The multiply method is called: a=%d, b=%d", a, b)
return a * b
if __name__ == "__main__":
logger.info("Start math server through MCP")
mcp.run(transport="stdio")
创建Weather MCP Server
同理,创建天气服务文件 weather_server.py
:
from mcp.server.fastmcp import FastMCP
import logging
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
mcp = FastMCP("Weather")
@mcp.tool()
def get_weather(city: str) -> str:
logger.info("Getting weather for city=%s", city)
# 模拟返回天气信息
return f"{city}天气晴朗,25℃"
if __name__ == "__main__":
logger.info("Start weather server through MCP")
mcp.run(transport="stdio")
创建动态调用的MCP Client
新建文件 remote_client.py
:
import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
llm = ChatOpenAI(model="gpt-4o-mini", api_key="sk-xxx", base_url="https://api.gptsapi.net/v1")
def print_optimized_result(agent_response):
messages = agent_response.get("messages", [])
for message in messages:
if message.type == "ai":
print("最终答案:", message.content)
async def main():
client = MultiServerMCPClient({
"math": {"command": "python", "args": ["./math_server.py"], "transport": "stdio"},
"weather": {"command": "python", "args": ["./weather_server.py"], "transport": "stdio"}
})
tools = await client.get_tools()
agent = create_react_agent(llm, tools)
while True:
user_input = input("\n请输入您的问题(或输入'exit'退出):").strip()
if user_input.lower() == "exit":
print("感谢使用!再见!")
break
agent_response = await agent.ainvoke({"messages": user_input})
print_optimized_result(agent_response)
await client.aclose()
if __name__ == "__main__":
asyncio.run(main())
关键代码解读
-
langgraph.prebuilt 是 LangGraph 提供的预构建模块,可快速创建ReAct风格的Agent。
-
create_react_agent(llm, tools) 将工具集合到一个Agent中,实现任务的自动调度。
运行测试
分别运行 math_server.py
和 weather_server.py
,再启动 remote_client.py
即可通过AI对话动态调用服务,观察日志输出效果。
至此,已经完成了AI与MCP的完美结合,你可以通过编写自己的MCP服务,集成到大模型中,构建自己的Agent了。
欢迎大家关注我,后续会分享更多有意思的文章。