MCP to LangChain/LangGraph Adapter
Okay, I understand. You want me to translate the following English sentence into Chinese: "Adapter that turns MCP server tools into langchain usable tools" Here are a few options, depending on the nuance you want to convey: **Option 1 (Most Literal):** * **将 MCP 服务器工具转换为 Langchain 可用工具的适配器** (Jiāng MCP fúwùqì gōngjù zhuǎnhuàn wéi Langchain kěyòng gōngjù de shìpèiqì) * This is a direct translation and is generally understandable. **Option 2 (Slightly More Natural):** * **一个将 MCP 服务器工具适配成 Langchain 可用工具的工具** (Yī gè jiāng MCP fúwùqì gōngjù shìpèi chéng Langchain kěyòng gōngjù de gōngjù) * This emphasizes that the adapter *is* a tool itself. It also uses "适配成" (shìpèi chéng) which implies adapting *into* something. **Option 3 (Focus on Integration):** * **用于将 MCP 服务器工具集成到 Langchain 的适配器** (Yòng yú jiāng MCP fúwùqì gōngjù jíchéng dào Langchain de shìpèiqì) * This focuses on the *integration* aspect, using the word "集成" (jíchéng), which means "integrate." **Breakdown of the terms:** * **Adapter:** 适配器 (shìpèiqì) * **MCP server tools:** MCP 服务器工具 (MCP fúwùqì gōngjù) * **turns into / adapts to:** 转换成 (zhuǎnhuàn chéng) / 适配成 (shìpèi chéng) * **Langchain usable tools:** Langchain 可用工具 (Langchain kěyòng gōngjù) * **Integrate:** 集成 (jíchéng) **Which option is best depends on the specific context.** If you want a simple, direct translation, Option 1 is fine. If you want to emphasize the adapter's role as a tool, Option 2 is better. If you want to highlight the integration aspect, Option 3 is the best choice.
SDCalvo
README
MCP 到 LangChain/LangGraph 适配器
本项目提供了一个适配器,允许你在 LangChain 和 LangGraph 应用中使用 MCP (多模态对话过程) 服务器工具。通过此适配器,你可以无缝地将 MCP 的工具集成到你的 AI 应用流程中。
目录
简介
MCP 到 LangChain/LangGraph 适配器弥合了 MCP 服务器(通过标准化接口提供各种工具)与 LangChain/LangGraph(用于构建大型语言模型应用的流行框架)之间的差距。 此适配器使你能够:
- 连接到 MCP 服务器
- 发现可用工具
- 将 MCP 工具转换为 LangChain 兼容的工具
- 在 LangChain agents、chains 和 LangGraph agents 中使用这些工具
安装
要使用此适配器,你需要安装必要的软件包:
# 如果使用 pipenv (推荐)
pipenv install mcp langchain langchain-openai langgraph python-dotenv
# 如果使用 pip
pip install mcp langchain langchain-openai langgraph python-dotenv
设置 API 密钥
对于使用 OpenAI 模型的示例,你需要一个 OpenAI API 密钥。 推荐的设置方法是使用 .env
文件:
- 在你的项目根目录中创建一个
.env
文件(基于.env.example
):
OPENAI_API_KEY=your_actual_api_key_here
- 在你的代码中加载环境变量:
from dotenv import load_dotenv
# 从 .env 文件加载环境变量
load_dotenv()
或者,你可以直接在你的环境或代码中设置 API 密钥:
import os
os.environ["OPENAI_API_KEY"] = "your_api_key_here"
快速开始
设置 MCP 服务器
在使用适配器之前,你需要运行一个 MCP 服务器。 该适配器设计为与你提供的 MCP 服务器脚本一起使用。
- 创建一个基本的 MCP 服务器脚本(例如,
simple_server.py
):
import mcp
from mcp.server import expose
@expose()
def add(a: int, b: int) -> int:
"""添加两个数字并返回结果。"""
return a + b
@expose()
def get_weather(city: str) -> str:
"""
获取一个城市的当前天气。
Args:
city: 要获取天气的城市名称
"""
# 在实际应用中,你将在此处调用天气 API
return f"Weather in {city}: Sunny +11°C"
if __name__ == "__main__":
mcp.run(transport='stdio')
此示例服务器公开了两个工具:
add
: 接受两个整数并返回它们的和get_weather
: 接受一个城市名称并返回一个模拟的天气报告
连接到 MCP 服务器
适配器将自动管理与 MCP 服务器的连接:
from mcp_langchain_adapter import MCPAdapter
# 创建一个适配器实例,指向你的 MCP 服务器脚本
adapter = MCPAdapter("simple_server.py")
# 初始化连接并获取可用工具的列表
tools = adapter.get_tools()
# 打印可用工具
print(f"Found {len(tools)} tools:")
for tool in tools:
print(f"- {tool.name}: {tool.description}")
在 LangChain 中使用 MCP 工具
获得工具后,你可以在 LangChain 应用中使用它们:
from langchain.agents import AgentExecutor, create_react_agent
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# 初始化语言模型
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 为 agent 创建一个 prompt 模板
template = """Answer the following questions as best you can using the provided tools.
Available tools:
{tools}
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
Thought: """
prompt_template = PromptTemplate.from_template(template)
# 使用 MCP 工具创建一个 LangChain agent
agent = create_react_agent(llm, tools, prompt_template)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 运行 agent
result = agent_executor.invoke({"input": "What is 5 + 7?"})
print(result["output"])
在 LangGraph 中使用 MCP 工具
LangGraph 提供了一种更现代、更灵活的方法来构建 agents。 以下是如何将我们的 MCP 工具与 LangGraph 一起使用:
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySaver
# 初始化语言模型
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 为对话历史记录创建一个内存保存器
memory = MemorySaver()
# 使用 MCP 工具创建一个 LangGraph react agent
agent = create_react_agent(
llm,
tools,
prompt="You are a helpful AI assistant that can use tools to solve problems.",
checkpointer=memory
)
# 创建带有线程 ID 的配置以用于内存
config = {"configurable": {"thread_id": "example-thread"}}
# 使用问题运行 agent
result = agent.invoke(
{"messages": [HumanMessage(content="What is 5 + 7?")]},
config
)
# 获取最终答案
final_answer = result["messages"][-1].content
print(final_answer)
# 继续对话并提出后续问题
state = memory.get("example-thread")
messages = state["messages"] + [HumanMessage(content="What's the weather in London?")]
result = agent.invoke({"messages": messages}, config)
print(result["messages"][-1].content)
API 参考
MCPAdapter
MCPAdapter
类管理与 MCP 服务器的连接并将 MCP 工具转换为 LangChain 工具。
构造函数
MCPAdapter(server_script_path: str, env: Dict[str, str] = None)
server_script_path
: 要运行的 MCP 服务器脚本的路径env
: 服务器进程的可选环境变量
方法
initialize()
: 同步初始化与 MCP 服务器的连接get_tools() -> List[BaseTool]
: 获取所有可用工具作为 LangChain 工具get_tool_names() -> List[str]
: 获取所有可用工具的名称get_tool_by_name(name: str) -> Optional[BaseTool]
: 按名称获取特定工具close() -> None
: 清理资源 (异步方法)
MCPToolWrapper
MCPToolWrapper
类扩展了 LangChain 的 BaseTool
以包装 MCP 工具:
MCPToolWrapper(
name: str,
description: str,
server_script_path: str,
env: Optional[Dict[str, str]] = None,
args_schema: Optional[Type[BaseModel]] = None
)
name
: 工具的名称description
: 工具的描述server_script_path
: MCP 服务器脚本的路径env
: 服务器进程的可选环境变量args_schema
: 工具参数的可选 Pydantic 模型
实用函数
get_langchain_tools(server_script_path: str, env: Dict[str, str] = None) -> List[BaseTool]
: 从 MCP 服务器获取 LangChain 工具的便捷函数
示例
基本用法
这是一个如何使用适配器的完整示例:
from mcp_langchain_adapter import MCPAdapter
# 创建一个适配器实例
adapter = MCPAdapter("simple_server.py")
# 获取所有工具
tools = adapter.get_tools()
# 打印有关工具的信息
print(f"Found {len(tools)} tools:")
for tool in tools:
print(f"- {tool.name}: {tool.description}")
# 使用特定工具
add_tool = adapter.get_tool_by_name("add")
if add_tool:
result = add_tool.run({"a": 5, "b": 7})
print(f"Result of add(5, 7): {result}")
# 使用另一个工具
weather_tool = adapter.get_tool_by_name("get_weather")
if weather_tool:
result = weather_tool.run({"city": "London"})
print(f"Result of get_weather('London'): {result}")
与 LangChain Agents 集成
有关与 LangChain agents 集成的完整示例,请参见 example_agent_integration.py
文件。
主要特点:
- 连接到 MCP 服务器
- 检索可用工具
- 使用这些工具创建一个 LangChain agent
- 使用不同类型的查询执行 agent
与 LangGraph Agents 集成
有关与 LangGraph agents 集成的完整示例,请参见 example_langgraph_integration.py
文件。
主要特点:
- 连接到 MCP 服务器
- 检索可用工具
- 使用这些工具创建一个 LangGraph react agent
- 使用检查点管理对话历史记录
- 使用不同类型的查询执行 agent
- 展示如何流式传输 agent 的思考过程
故障排除
常见问题
-
MCP 服务器连接问题
- 确保你的 MCP 服务器脚本的路径正确
- 检查服务器脚本是否具有正确的运行权限
- 确保服务器脚本正确实现了 MCP 协议
-
工具执行错误
- 检查工具输入格式是否正确
- 确保该工具已在 MCP 服务器中正确定义
- 在工具响应中查找错误消息
-
LangChain/LangGraph 集成问题
- 验证工具是否已正确转换为 LangChain 格式
- 检查 agent 是否已正确配置
- 确保你将正确格式的输入传递给 agent
- 对于 LangGraph 问题,请检查线程 ID 和内存配置
调试
要调试连接问题,你可以将日志记录添加到你的 MCP 服务器脚本:
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("mcp_server.log"),
logging.StreamHandler()
]
)
# 其余的 MCP 服务器代码...
贡献
欢迎贡献以改进适配器! 你可以通过以下方式做出贡献:
- 报告错误和问题
- 添加新功能或改进现有功能
- 改进文档
- 编写测试
- 分享与不同 LangChain/LangGraph 组件集成的示例
请按照以下步骤进行贡献:
- Fork 存储库
- 创建一个功能分支
- 进行更改
- 提交 pull request
推荐服务器
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
MCP Package Docs Server
促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。
Claude Code MCP
一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
mermaid-mcp-server
一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。
Jira-Context-MCP
MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

Linear MCP Server
一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。
Curri MCP Server
通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。