MCP ExplorerExplorer

Langchain Mcp Tools Py

@hideyaon 9 months ago
22 MIT
FreeCommunity
AI Systems
#langchain#langchain-python#mcp#mcp-client#modelcontextprotocol#pyhon#tool-call#tool-calling
MCP To LangChain Tools Conversion Utility

Overview

What is Langchain Mcp Tools Py

langchain-mcp-tools-py is a utility designed to simplify the integration of Model Context Protocol (MCP) server tools with LangChain and Python, enabling seamless access to over 1500 MCP servers and their functionalities.

Use cases

Use cases include integrating tools like Google Drive, Slack, Notion, and PostgreSQL into applications built with LangChain, enabling enhanced capabilities for language models in various projects.

How to use

To use langchain-mcp-tools-py, install it via pip with the command ‘pip install langchain-mcp-tools’. Then, utilize the ‘convert_mcp_to_langchain_tools()’ function to asynchronously initialize multiple MCP servers and convert their tools into a LangChain-compatible format.

Key features

Key features include the ability to access a wide range of MCP servers, parallel initialization of multiple servers, and conversion of MCP tools into a list compatible with LangChain, enhancing the functionality of LLMs.

Where to use

langchain-mcp-tools-py can be used in various fields such as software development, data analysis, and AI applications, particularly where integration of external tools and resources is required.

Content

MCP To LangChain Tools Conversion Utility License: MIT pypi version

NOTE

LangChain’s official LangChain MCP Adapters library has been released at:

You may want to consider using the above if you don’t have specific needs for using this library…

Introduction

This package is intended to simplify the use of
Model Context Protocol (MCP)
server tools with LangChain / Python.

Model Context Protocol (MCP),
an open standard
announced by Anthropic,
dramatically expands LLM’s scope
by enabling external tool and resource integration, including
GitHub, Google Drive, Slack, Notion, Spotify, Docker, PostgreSQL, and more…

MCP is likely to become the de facto industry standard as
OpenAI has announced its adoption.

Over 2000 functional components available as MCP servers:

The goal of this utility is to make these 2000+ MCP servers readily accessible from LangChain.

It contains a utility function convert_mcp_to_langchain_tools().
This async function handles parallel initialization of specified multiple MCP servers
and converts their available tools into a list of LangChain-compatible tools.

For detailed information on how to use this library, please refer to the following document:

A typescript equivalent of this utility is available
here

Prerequisites

  • Python 3.11+

Installation

pip install langchain-mcp-tools

API docs

Can be found here

Quick Start

A minimal but complete working usage example can be found
in this example in the langchain-mcp-tools-py-usage repo

convert_mcp_to_langchain_tools() utility function accepts MCP server configurations
that follow the same structure as
Claude for Desktop,
but only the contents of the mcpServers property,
and is expressed as a dict, e.g.:

mcp_servers = {
    "filesystem": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
    },
    "fetch": {
        "command": "uvx",
        "args": ["mcp-server-fetch"]
    }
}

tools, cleanup = await convert_mcp_to_langchain_tools(
    mcp_servers
)

This utility function initializes all specified MCP servers in parallel,
and returns LangChain Tools
(tools: list[BaseTool])
by gathering available MCP tools from the servers,
and by wrapping them into LangChain tools.
It also returns an async callback function (cleanup: McpServerCleanupFn)
to be invoked to close all MCP server sessions when finished.

The returned tools can be used with LangChain, e.g.:

# from langchain.chat_models import init_chat_model
llm = init_chat_model("anthropic:claude-3-7-sonnet-latest")

# from langgraph.prebuilt import create_react_agent
agent = create_react_agent(
    llm,
    tools
)

For hands-on experimentation with MCP server integration,
try this LangChain application built with the utility

For detailed information on how to use this library, please refer to the following document:
“Supercharging LangChain: Integrating 2000+ MCP with ReAct”

Experimental Features

Remote MCP Server Support

mcp_servers configuration for SSE and Websocket servers are as follows:

    "sse-server-name": {
        "url": f"http://{sse_server_host}:{sse_server_port}/..."
    },

    "ws-server-name": {
        "url": f"ws://{ws_server_host}:{ws_server_port}/..."
    },

Note that the key "url" may be changed in the future to match
the MCP server configurations used by Claude for Desktop once
it introduces remote server support.

A usage example can be found here

Authentication Support for SSE Connections

A new key "headers" has been introduced to pass HTTP headers to the SSE (Server-Sent Events) connection.
It takes dict[str, str] and is primarily intended to support SSE MCP servers
that require authentication via bearer tokens or other custom headers.

    "sse-server-name": {
        "url": f"http://{sse_server_host}:{sse_server_port}/..."
        "headers": {"Authorization": f"Bearer {bearer_token}"}
    },

The key name header is derived from the Python SDK
sse_client() argument name.

A simple example showing how to implement MCP SSE server and client with authentication can be found
in sse-auth-test-client.py
and in sse-auth-test-server.py
of this usage examples repo.

Working Directory Configuration for Local MCP Servers

The working directory that is used when spawning a local (stdio) MCP server
can be specified with the "cwd" key as follows:

    "local-server-name": {
        "command": "...",
        "args": [...],
        "cwd": "/working/directory"  # the working dir to be use by the server
    },

The key name cwd is derived from
Python SDK’s StdioServerParameters.

stderr Redirection for Local MCP Server

A new key "errlog" has been introduced to specify a file-like object
to which local (stdio) MCP server’s stderr is redirected.

    log_path = f"mcp-server-{server_name}.log"
    log_file = open(log_path, "w")
    mcp_servers[server_name]["errlog"] = log_file

A usage example can be found here

NOTE: Why the key name errlog was chosen:
Unlike TypeScript SDK’s StdioServerParameters, the Python
SDK’s StdioServerParameters doesn’t include stderr: int.
Instead, it calls stdio_client() with a separate argument
errlog: TextIO
.
I once included stderr: int for
compatibility with the TypeScript version, but decided to
follow the Python SDK more closely.

Limitations

  • Currently, only text results of tool calls are supported.
  • MCP features other than Tools are not supported.

Change Log

Can be found here

Tools

No tools

Comments

Recommend MCP Servers

View All MCP Servers