44tools, handle tool execution, and manage tool conversion between the two formats.
55"""
66
7+ from collections .abc import Callable
78from typing import Any , cast , get_args
89
910from langchain_core .tools import (
2526 TextContent ,
2627)
2728from mcp .types import Tool as MCPTool
28- from pydantic import BaseModel , create_model
29+ from pydantic import BaseModel , ValidationError , create_model
2930
3031from langchain_mcp_adapters .callbacks import CallbackContext , Callbacks , _MCPCallbacks
3132from langchain_mcp_adapters .sessions import Connection , create_session
@@ -112,6 +113,10 @@ def convert_mcp_tool_to_langchain_tool(
112113 connection : Connection | None = None ,
113114 callbacks : Callbacks | None = None ,
114115 server_name : str | None = None ,
116+ handle_tool_error : bool | str | Callable [[ToolException ], str ] | None = False ,
117+ handle_validation_error : (
118+ bool | str | Callable [[ValidationError ], str ] | None
119+ ) = False ,
115120) -> BaseTool :
116121 """Convert an MCP tool to a LangChain tool.
117122
@@ -124,6 +129,8 @@ def convert_mcp_tool_to_langchain_tool(
124129 if a `session` is not provided
125130 callbacks: Optional callbacks for handling notifications and events
126131 server_name: Name of the server this tool belongs to
132+ handle_tool_error: Optional error handler for tool execution errors.
133+ handle_validation_error: Optional error handler for validation errors.
127134
128135 Returns:
129136 a LangChain tool
@@ -192,6 +199,8 @@ async def call_tool(
192199 coroutine = call_tool ,
193200 response_format = "content_and_artifact" ,
194201 metadata = metadata ,
202+ handle_tool_error = handle_tool_error ,
203+ handle_validation_error = handle_validation_error ,
195204 )
196205
197206
@@ -201,6 +210,10 @@ async def load_mcp_tools(
201210 connection : Connection | None = None ,
202211 callbacks : Callbacks | None = None ,
203212 server_name : str | None = None ,
213+ handle_tool_error : bool | str | Callable [[ToolException ], str ] | None = False ,
214+ handle_validation_error : (
215+ bool | str | Callable [[ValidationError ], str ] | None
216+ ) = False ,
204217) -> list [BaseTool ]:
205218 """Load all available MCP tools and convert them to LangChain tools.
206219
@@ -209,6 +222,8 @@ async def load_mcp_tools(
209222 connection: Connection config to create a new session if session is None.
210223 callbacks: Optional callbacks for handling notifications and events.
211224 server_name: Name of the server these tools belong to.
225+ handle_tool_error: Optional error handler for tool execution errors.
226+ handle_validation_error: Optional error handler for validation errors.
212227
213228 Returns:
214229 List of LangChain tools. Tool annotations are returned as part
@@ -247,6 +262,8 @@ async def load_mcp_tools(
247262 connection = connection ,
248263 callbacks = callbacks ,
249264 server_name = server_name ,
265+ handle_tool_error = handle_tool_error ,
266+ handle_validation_error = handle_validation_error ,
250267 )
251268 for tool in tools
252269 ]
0 commit comments