Adapter for converting LangChain tools to FastMCP tools
This project has been archived.
The maintainers of this project have marked this project as archived. No new releases are expected.
Project description
LangChain to MCP Tool Adapter
A Python package for converting LangChain tools to FastMCP tools, making it easy to use your existing LangChain tools with Anthropic's MCP server.
Why Use This Package?
- Simpler Implementation: While LangChain offers an MCP-to-LangChain adapter, it requires a running MCP server either remotely or co-located with an agent, which can be finicky. LangChain tools have a simpler implementation and are more lightweight.
- Use in Multiple Environments: When creating tools (especially for open source), you might want to make them available in both LangChain and MCP implementations without duplicating code.
- Handle Artifacts Properly: Automatic conversion between LangChain's
content_and_artifactformat and MCP's content format for images, PDFs, and other binary data. - Preserve Metadata: Tool descriptions, argument schemas, and other metadata are preserved during conversion.
Installation
pip install langchain-to-mcp-tool-adapter
Quick Start
from mcp.server import FastMCP
from langchain.tools import Tool
from langchain_to_mcp_tool_adapter import add_langchain_tool_to_server
# Create a LangChain tool
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
calculator_tool = Tool(
name="calculator",
description="Multiply two numbers together",
func=multiply
)
# Create a FastMCP server and add the tool
server = FastMCP()
add_langchain_tool_to_server(server, calculator_tool)
# Run the server
server.run()
Working with Argument Schemas
Type Annotations
from typing import Annotated, List
from langchain.tools import tool
@tool("multiplication-tool")
def multiply_type_annotation(
a: Annotated[int, "The scale factor to multiply by"],
b: Annotated[List[int], "A list of integers to find the maximum from"]
) -> int:
"""Multiply a by the maximum value in list b."""
return a * max(b)
# Add to MCP server
add_langchain_tool_to_server(server, multiply_type_annotation)
Pydantic Models
from pydantic import BaseModel, Field
from langchain.tools import tool
class CalculatorInput(BaseModel):
a: int = Field(description="The first number to multiply")
b: int = Field(description="The second number to multiply")
@tool("multiplication-tool", args_schema=CalculatorInput)
def multiply_pydantic(a: int, b: int) -> int:
"""Multiply two numbers together."""
return a * b
# Add to MCP server
add_langchain_tool_to_server(server, multiply_pydantic)
Working with Artifacts (Images, PDFs, etc.)
This adapter seamlessly handles LangChain tools that return artifacts like images or PDFs:
from langchain.tools import Tool
def generate_image(prompt: str) -> tuple:
# Generate an image (mocked here)
image_data = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
# Return in LangChain's content_and_artifact format
content = f"Generated image for: {prompt}"
artifacts = [{
"type": "file",
"file": {
"filename": "generated.png",
"file_data": image_data,
}
}]
return content, artifacts
# Create the tool with content_and_artifact response format
image_tool = Tool(
name="image_generator",
description="Generates an image based on a text prompt",
func=generate_image,
response_format="content_and_artifact"
)
# Add to MCP server - artifacts will be properly converted
add_langchain_tool_to_server(server, image_tool)
Supported Tool Features
- ✅ Type-annotated tools
- ✅ Pydantic schema tools
- ✅ Regular string/JSON output
- ✅ Image and PDF artifacts
- ✅ Tool descriptions and metadata
How It Works
The adapter performs these key operations:
- Reconstructs the function from the LangChain tool, preserving metadata
- Handling tool responses like images PDFs: Adapts between LangChain's non-standard
content_and_artifacttuple format and MCP's more standard content structure that aligns with LLM provider APIs (this is crucial for binary artifacts like images and PDFs) - Registers the converted function with the FastMCP server
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file langchain_to_mcp_tool_adapter-0.1.1.tar.gz.
File metadata
- Download URL: langchain_to_mcp_tool_adapter-0.1.1.tar.gz
- Upload date:
- Size: 8.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c07d57669d830b86feb9ba7b64a5fac2cc25224225740ee46d9f392936b9a38f
|
|
| MD5 |
d1c0dedd4ff8bd9689bb1db3a8220f07
|
|
| BLAKE2b-256 |
00e18fd05165ec335b770aa2fe13f7a4e2bfdc5b638be02d76f4af7faecb2d47
|
File details
Details for the file langchain_to_mcp_tool_adapter-0.1.1-py3-none-any.whl.
File metadata
- Download URL: langchain_to_mcp_tool_adapter-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b41b986f8a39c39f470d348310731cfe0f3c5869be80c5bfd973cc9eb7dab802
|
|
| MD5 |
88b1da0d993c1148bb0a9570fb314d40
|
|
| BLAKE2b-256 |
2c5969bd0dd3eb071616b02142f29df5e76f17d728c1d61ad51bf9975783475b
|