mirror of
https://github.com/mcp-use/mcp-use.git
synced 2026-09-14 18:06:01 +08:00
8348c59a53
* docs: reorganize navigation and clean up content - Remove 'Misc' group with misplaced blog posts - Remove 'Libraries' redirect group from Home nav - Simplify 'Dev Tools' group (flatten Inspector, CLI, Tunneling) - Remove individual changelog versions from Python nav (keep summary) - Remove changelog from TypeScript 'Get Started' group - Remove tunneling duplicate from Python Development group - Rewrite mcp101 as clean MCP concepts page (was pitch deck) - Delete typescript/blog posts (not technical docs) - Add redirects for deleted blog post URLs * docs: fix content accuracy and remove sloppy language - Fix broken python/server/mcp-apps link in home page - Remove informal pitch-speak from python/server/index.mdx - Fix grammar error in typescript/server/index.mdx - Update typescript/client/logging.mdx: remove fake 'coming soon' API code - Fix non-existent model name gpt-5.1 in typescript quickstart - Fix mcp_use naming in development contributing guide * docs: fix incorrect TypeScript server API calls in inspector docs - Replace server.addTool() with server.tool() (correct mcp-use API) - Add missing zod import to debugging-chatgpt-apps example * docs: fix fake model names (gpt-5.1 → gpt-4o) in agent docs * docs: update model names, fix APIs, and add agent visibility hints - Replace all deprecated model names with latest: gpt-4.1, gpt-4.1-mini, claude-sonnet-4-6, claude-opus-4-7, gemini-2.5-flash across all docs - Fix TypeScript server.tool() API in installation.mdx (old positional string form) - Fix TypeScript agent.run() in quickstart.mdx (deprecated string form → object) - Remove broken manufact.com/docs/llms.txt hidden hints from 5 pages - Add <Visibility for="agents"> block to mcp101.mdx with install commands, key classes, and API signatures for agent-oriented navigation - Add LangChain provider install note to Python quickstart (mcp-use agent requires a separate langchain-* provider package) - Update model name cards in Python llm-integration.mdx * docs: clean up remaining stale model names and improve accuracy - Update supported model lists in Python and TypeScript llm-integration pages - Fix cost optimization table to use current model IDs - Update TypeScript agent overview supported providers list * docs: add LangChain provider install to TypeScript quickstart agent section The MCPAgent requires a separate @langchain/* provider package; this was not mentioned before the code example that imports from @langchain/openai. * docs: update to latest flagship model IDs (May 2026) - OpenAI: gpt-4.1 → gpt-5.5, gpt-4.1-mini → gpt-5.5-mini - Google: gemini-2.5-flash → gemini-3.1-flash, gemini-2.5-pro → gemini-3.1-pro - Groq: llama-3.1-* → llama-4-scout-17b-16e-instruct - Anthropic (claude-opus-4-7, claude-sonnet-4-6) already current, no change * docs: replace all em dashes with hyphens * docs: restore llms.txt hints using Visibility component * docs: simplify TypeScript logging page to unsupported notice only * docs: rewrite mcp101 to explain MCP protocol with mcp-use examples and doc links * docs: remove goal.md * docs: revert nav changes, keep only Misc group removal and blog redirects * docs: reorder mcp101 to Server/App -> Client/Inspector -> Agent, restore title * docs: add code examples for Resources and Prompts in mcp101 * docs: remove em dashes from mcp101 * docs: add MCPClient code examples to mcp101 * docs: add React client example to mcp101 * docs: add agent code examples to mcp101 * docs: expand MCP Apps section in mcp101 with example and links * docs: restore Contacts, Socials, and Founders sections to mcp101 * docs: add context-setting intro paragraph to mcp101 for new readers * docs: add MCP stores section to mcp101 intro with Claude, ChatGPT, Cursor * docs: fix Claude store link * docs: fix ChatGPT store link * docs: fix Cursor store link * docs: replace store Cards with linked image grid * docs: add captions to store images * docs: add Notifications to client primitives table in mcp101 * docs: add lead-in paragraph before resource cards at bottom of mcp101 * docs: move resource cards to end of page after Contacts/Socials/Founders * docs: demote Contacts/Socials/Founders to bold text to remove from TOC * docs: move Contacts/Socials/Founders to very end of mcp101 * docs: add Resources and Contacts section headers, link official MCP docs * chore(docs): update site metadata, footer links, and rename mcp_use to mcp-use * update docs metadata + images * docs: enhance MCP section by highlighting the reach of MCP stores with 1 billion weekly active users * api ref
212 lines
6.8 KiB
Plaintext
212 lines
6.8 KiB
Plaintext
---
|
||
title: "LangChain"
|
||
description: "Use mcp-use tools, resources, and prompts directly with LangChain agents"
|
||
tag: "New"
|
||
icon: "https://cdn.mcp-use.com/langchain.svg"
|
||
---
|
||
|
||
# Using mcp-use with LangChain
|
||
|
||
The LangChain adapter allows you to seamlessly integrate tools, resources, and prompts from any MCP server with LangChain agents. This enables you to use `mcp-use` as a comprehensive tool provider for your LangChain-powered agents.
|
||
|
||
## How it Works
|
||
|
||
The `LangChainAdapter` converts not only tools but also resources and prompts from your active MCP servers into a format compatible with LangChain's tool-calling feature. It maps each of these MCP constructs to a callable function that the LangChain agent can request.
|
||
|
||
- **Tools** are converted directly to LangChain tools.
|
||
- **Resources** are converted into functions that take no arguments and read the resource's content.
|
||
- **Prompts** are converted into functions that accept the prompt's arguments.
|
||
|
||
The adapter maintains a mapping of these generated functions to their actual execution logic, allowing you to easily call them when requested by the agent.
|
||
|
||
## Step-by-Step Guide
|
||
|
||
Here's how to use the adapter to provide MCP tools, resources, and prompts to a LangChain agent.
|
||
|
||
<Note>
|
||
Before starting, install the LangChain SDK:
|
||
```bash
|
||
uv pip install langchain
|
||
```
|
||
</Note>
|
||
|
||
<Steps>
|
||
<Step name="Initialize MCPClient">
|
||
First, set up your `MCPClient` with the desired MCP servers. This part of the process is the same as any other `mcp-use` application.
|
||
|
||
```python
|
||
from mcp_use import MCPClient
|
||
|
||
config = {
|
||
"mcpServers": {
|
||
"airbnb": {"command": "npx", "args": ["-y", "@openbnb/mcp-server-airbnb", "--ignore-robots-txt"]},
|
||
}
|
||
}
|
||
|
||
client = MCPClient(config=config)
|
||
```
|
||
</Step>
|
||
|
||
<Step name="Create the LangChain Adapter">
|
||
Next, instantiate the `LangChainAdapter`. This adapter will be responsible for converting MCP constructs into a format LangChain can understand.
|
||
|
||
```python
|
||
from mcp_use.agents.adapters import LangChainAdapter
|
||
|
||
# Creates the adapter for LangChain's format
|
||
adapter = LangChainAdapter()
|
||
```
|
||
<Tip>
|
||
You can pass a `disallowed_tools` list to the adapter's constructor to prevent specific tools, resources, or prompts from being exposed to the model.
|
||
</Tip>
|
||
</Step>
|
||
|
||
<Step name="Generate LangChain-Compatible Tools">
|
||
Use the `create_all` method on the adapter to inspect all connected MCP servers and generate a list of tools, resources and prompts in the LangChain tool format.
|
||
|
||
```python
|
||
# Convert tools from active connectors to the LangChain's format
|
||
# this will populates the list of tools, resources and prompts
|
||
await adapter.create_all(client)
|
||
|
||
# If you decided to create all tools (list concatenation)
|
||
langchain_tools = adapter.tools + adapter.resources + adapter.prompts
|
||
```
|
||
|
||
This list will include tools generated from your MCP tools, resources, and prompts.
|
||
|
||
<Tip>
|
||
If you don't want to create all tools, you can call single functions. For example, if you only want to use tools and resources, you can do the following:
|
||
|
||
```python
|
||
await adapter.create_tools(client)
|
||
await adapter.create_resources(client)
|
||
|
||
# Then, you can decide which ones to use:
|
||
langchain_tools = adapter.tools + adapter.resources
|
||
```
|
||
</Tip>
|
||
</Step>
|
||
|
||
<Step name="Create and Run the LangChain Agent">
|
||
Now, you can use the generated `langchain_tools` to create a LangChain agent. The agent will use the descriptions of these tools to decide if it needs to call any of them to answer the user's query.
|
||
|
||
```python
|
||
from langchain.agents import create_agent
|
||
from langchain.chat_models import init_chat_model
|
||
|
||
# Create chat model
|
||
model = init_chat_model(
|
||
"gpt-5.5-mini", temperature=0.5, timeout=10, max_tokens=1000
|
||
)
|
||
# Create the LangChain agent
|
||
agent = create_agent(
|
||
model=model,
|
||
tools=langchain_tools,
|
||
system_prompt="You are a helpful assistant",
|
||
)
|
||
|
||
# Run the agent
|
||
result = await agent.ainvoke(
|
||
{
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "Please tell me the cheapest hotel for two people in Trapani.",
|
||
}
|
||
]
|
||
}
|
||
)
|
||
|
||
print(result)
|
||
```
|
||
</Step>
|
||
</Steps>
|
||
|
||
## Complete Example
|
||
|
||
For reference, here is the complete, runnable code for integrating mcp-use with LangChain.
|
||
|
||
```python
|
||
import asyncio
|
||
from dataclasses import dataclass
|
||
|
||
from dotenv import load_dotenv
|
||
from langchain.agents import create_agent
|
||
from langchain.chat_models import init_chat_model
|
||
|
||
from mcp_use import MCPClient
|
||
from mcp_use.agents.adapters import LangChainAdapter
|
||
|
||
# This example demonstrates how to use our integration
|
||
# adapters to use MCP tools and convert to the right format.
|
||
# In particularly, this example uses the LangChainAdapter.
|
||
|
||
load_dotenv()
|
||
|
||
|
||
# We use a dataclass here, but Pydantic models are also supported.
|
||
@dataclass
|
||
class ResponseFormat:
|
||
"""Response schema for the agent."""
|
||
|
||
# AirBnb response (available dates, prices, and relevant information)
|
||
relevant_response: str
|
||
|
||
|
||
async def main():
|
||
config = {
|
||
"mcpServers": {
|
||
"airbnb": {
|
||
"command": "npx",
|
||
"args": ["-y", "@openbnb/mcp-server-airbnb", "--ignore-robots-txt"],
|
||
},
|
||
}
|
||
}
|
||
|
||
try:
|
||
client = MCPClient(config=config)
|
||
|
||
# Creates the adapter for LangChain's format
|
||
adapter = LangChainAdapter()
|
||
|
||
# Convert tools from active connectors to the LangChain's format
|
||
await adapter.create_all(client)
|
||
|
||
# List concatenation (if you loaded all tools)
|
||
langchain_tools = adapter.tools + adapter.resources + adapter.prompts
|
||
|
||
# Create chat model
|
||
model = init_chat_model(
|
||
"gpt-5.5-mini", temperature=0.5, timeout=10, max_tokens=1000
|
||
)
|
||
# Create the LangChain agent
|
||
agent = create_agent(
|
||
model=model,
|
||
tools=langchain_tools,
|
||
system_prompt="You are a helpful assistant",
|
||
response_format=ResponseFormat,
|
||
)
|
||
|
||
# Run the agent
|
||
result = await agent.ainvoke(
|
||
{
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "Please tell me the cheapest hotel for two people in Trapani.",
|
||
}
|
||
]
|
||
}
|
||
)
|
||
|
||
print(result["structured_response"])
|
||
except Exception as e:
|
||
print(f"Error: {e}")
|
||
raise e
|
||
|
||
|
||
if __name__ == "__main__":
|
||
asyncio.run(main())
|
||
```
|