MCP 集成 - LangChain 框架 --知识铺
模型上下文协议 (MCP) 是一个开放协议,用于标准化应用程序如何向语言模型提供工具和上下文。LangGraph 代理可以通过 langchain-mcp-adapters 库使用 MCP 服务器上定义的工具。
安装 langchain-mcp-adapters 库以在 LangGraph 中使用 MCP 工具
<span id="__span-0-1">pip install langchain-mcp-adapters
langchain-mcp-adapters 包使代理能够使用一个或多个 MCP 服务器上定义的工具。
使用 MCP 服务器上定义的工具的代理
<span id="__span-1-1">from langchain_mcp_adapters.client import MultiServerMCPClient
<span id="__span-1-2">from langgraph.prebuilt import create_react_agent
<span id="__span-1-3">
<span id="__span-1-4">client = MultiServerMCPClient(
<span id="__span-1-5"> {
<span id="__span-1-6"> "math": {
<span id="__span-1-7"> "command": "python",
<span id="__span-1-8"> # Replace with absolute path to your math_server.py file
<span id="__span-1-9"> "args": ["/path/to/math_server.py"],
<span id="__span-1-10"> "transport": "stdio",
<span id="__span-1-11"> },
<span id="__span-1-12"> "weather": {
<span id="__span-1-13"> # Ensure your start your weather server on port 8000
<span id="__span-1-14"> "url": "https://:8000/mcp",
<span id="__span-1-15"> "transport": "streamable_http",
<span id="__span-1-16"> }
<span id="__span-1-17"> }
<span id="__span-1-18">)
<span id="__span-1-19">tools = await client.get_tools()
<span id="__span-1-20">agent = create_react_agent(
<span id="__span-1-21"> "anthropic:claude-3-7-sonnet-latest",
<span id="__span-1-22"> tools
<span id="__span-1-23">)
<span id="__span-1-24">math_response = await agent.ainvoke(
<span id="__span-1-25"> {"messages": [{"role": "user", "content": "what's (3 + 5) x 12?"}]}
<span id="__span-1-26">)
<span id="__span-1-27">weather_response = await agent.ainvoke(
<span id="__span-1-28"> {"messages": [{"role": "user", "content": "what is the weather in nyc?"}]}
<span id="__span-1-29">)
自定义 MCP 服务器¶
要创建您自己的 MCP 服务器,您可以使用 mcp 库。该库提供了一种定义工具并将其作为服务器运行的简单方法。
安装 MCP 库
使用以下参考实现来测试您的代理与 MCP 工具服务器的交互。
数学服务器示例(stdio 传输)
<span id="__span-3-1">from mcp.server.fastmcp import FastMCP
<span id="__span-3-2">
<span id="__span-3-3">mcp = FastMCP("Math")
<span id="__span-3-4">
<span id="__span-3-5">@mcp.tool()
<span id="__span-3-6">def add(a: int, b: int) -> int:
<span id="__span-3-7"> """Add two numbers"""
<span id="__span-3-8"> return a + b
<span id="__span-3-9">
<span id="__span-3-10">@mcp.tool()
<span id="__span-3-11">def multiply(a: int, b: int) -> int:
<span id="__span-3-12"> """Multiply two numbers"""
<span id="__span-3-13"> return a * b
<span id="__span-3-14">
<span id="__span-3-15">if __name__ == "__main__":
<span id="__span-3-16"> mcp.run(transport="stdio")
天气服务器示例(可流式 HTTP 传输)
<span id="__span-4-1">from mcp.server.fastmcp import FastMCP
<span id="__span-4-2">
<span id="__span-4-3">mcp = FastMCP("Weather")
<span id="__span-4-4">
<span id="__span-4-5">@mcp.tool()
<span id="__span-4-6">async def get_weather(location: str) -> str:
<span id="__span-4-7"> """Get weather for location."""
<span id="__span-4-8"> return "It's always sunny in New York"
<span id="__span-4-9">
<span id="__span-4-10">if __name__ == "__main__":
<span id="__span-4-11"> mcp.run(transport="streamable-http")
附加资源¶
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/ai002/post/20251125/MCP-%E9%9B%86%E6%88%90-LangChain-%E6%A1%86%E6%9E%B6/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com
See Also
- MCP 没解决的问题,Skills 依旧没有解决 --知识铺
- LangGraph4j - 轻松实现人机协作 欢迎来到 Bartolomeo 博客 --- LangGraph4j - Implementing Human-in-the-Loop at ease Welcome to Bartolomeo Blog --知识铺
- GitHub 34.1k star:别再死磕Prompt了,Claude 官方这套 Skills 范式,才是真的“生产力作弊器” --知识铺
- Claude 总是泛泛而谈?试试用 Skills 沉淀团队最佳实践 --知识铺
- Claude Skills:开发者实用指南 --知识铺