Give your LangChain agents access to tools from Model Context Protocol (MCP)
servers. @langchain/mcp-adapters manages connections and converts MCP tools
and results into LangChain formats, ready to use with createAgent or a custom
LangGraph workflow.
Read the MCP guide for concepts, configuration, and advanced usage.
Requires Node.js 20.10 or later. Install the adapter and its LangChain peers:
npm install @langchain/mcp-adapters @langchain/core @langchain/langgraph
The adapter requires @langchain/core ^1.2.6 and @langchain/langgraph ^1.4.13.
It includes the MCP SDK client; install the SDK separately only if your application
imports it directly.
This example connects an agent to the public LangChain docs MCP server so it can look up documentation. You do not need to run a server or configure authentication for this MCP endpoint.
Install LangChain and the model integration used below:
npm install langchain @langchain/openai
Set OPENAI_API_KEY in your environment, then run:
import { createAgent } from "langchain";
import { ChatOpenAI } from "@langchain/openai";
import { MCPAdapter } from "@langchain/mcp-adapters";
const adapter = new MCPAdapter({
servers: {
docs: { url: "https://docs.langchain.com/mcp" },
},
});
try {
const tools = await adapter.listTools();
const agent = createAgent({
model: new ChatOpenAI({ model: "gpt-4.1-mini" }),
tools,
});
const result = await agent.invoke({
messages: [
{
role: "user",
content: "How do I add short-term memory to a LangChain agent?",
},
],
});
console.log(result.messages.at(-1)?.content);
} finally {
await adapter.close();
}
Keep the adapter open while your agent uses its tools, then call close() when
finished. Connections open as needed. listTools() returns executable LangChain
tools, which you can also invoke directly without a model or use in a custom
LangGraph workflow.
MCP tools can ask users to complete a form or visit a URL before continuing. For modern MCP servers, the adapter pauses the agent through a LangGraph interrupt so your application can collect a response and resume the run.
Configure a checkpointer for these workflows. Tools that do not request input can run without one. See the tools guide for handling requests and resuming execution.
| I want to… | Start here |
|---|---|
| Connect local or remote servers, manage connections, or select tools | Connections |
| Authenticate with tokens or OAuth | Authentication |
| Customize tool calls, handle results, or collect user input | Tools |
| Modify tool arguments and results | Hooks example |
| Work with multimodal content and artifacts | Content example |
| Receive server messages and tool progress | Notifications example |
| Run a local example without model credentials | Example setup and walkthroughs |
If you already manage an MCP SDK client, use loadMcpTools() to adapt its tools
without handing connection management to MCPAdapter.
Use MCPAdapter, { servers: { ... } }, and listTools() for new code.
MultiServerMCPClient, mcpServers, and getTools() remain available as
deprecated compatibility APIs.
Version 2 also changes tool-name defaults, configuration, connection behavior, and tool results. Review the migration guide before upgrading, including any approval rules that refer to tool names.
Big thanks to @vrknetha, @knacklabs for the initial implementation!
Contributions are welcome! See the contributing guidelines.
MIT
Client for connecting to multiple MCP servers and loading LangChain-compatible tools.
An operational failure while connecting to or using an MCP server.
Custom error class for tool exceptions
Client for connecting to multiple MCP servers and loading LangChain-compatible tools.