Camel.utils.mcp client
Unified MCP Client
This module provides a unified interface for connecting to MCP servers using different transport protocols (stdio, sse, streamable-http, websocket). The client can automatically detect the transport type based on configuration.
TransportType
Supported transport types.
ServerConfig
validate_config
Validate that either command or url is provided.
transport_type
Automatically detect transport type based on configuration.
MCPClient
Unified MCP client that automatically detects and connects to servers using the appropriate transport protocol.
This client provides a unified interface for connecting to Model Context Protocol (MCP) servers using different transport protocols including STDIO, HTTP/HTTPS, WebSocket, and Server-Sent Events (SSE). The client automatically detects the appropriate transport type based on the configuration provided.
The client should be used as an async context manager for automatic connectionmanagement.
Parameters:
- config (Union[ServerConfig, Dict[str, Any]]): Server configuration as either a :obj:
ServerConfig
object or a dictionary that will be converted to a :obj:ServerConfig
. The configuration determines the transport type and connection parameters. - client_info (Optional[types.Implementation], optional): Client implementation information to send to the server during initialization. (default: :obj:
None
) - timeout (Optional[float], optional): Timeout for waiting for messages from the server in seconds. (default: :obj:
10.0
) - strict (Optional[bool], optional): Strict mode for generating FunctionTool objects. (default: :obj:
False
)
init
transport_type
Get the detected transport type.
_simplify_connection_error
Convert complex MCP connection errors to simple, understandable messages.
session
Get the current session if connected.
is_connected
Check if the client is currently connected.
list_mcp_tools_sync
Returns:
ListToolsResult: Result containing available MCP tools.
generate_function_from_mcp_tool
Dynamically generates a Python callable function corresponding to a given MCP tool.
Parameters:
- mcp_tool (types.Tool): The MCP tool definition received from the MCP server.
Returns:
Callable: A dynamically created async Python function that wraps the MCP tool.
_build_tool_schema
Build tool schema for OpenAI function calling format.
get_tools
Returns:
List[FunctionTool]: A list of :obj:FunctionTool
objects
representing the available tools from the MCP server. Returns
an empty list if the client is not connected.
Note: This method requires an active connection to the MCP server. If the client is not connected, an empty list will be returned.
get_text_tools
Returns:
str: Text description of tools
call_tool_sync
Synchronously call a tool by name with the provided arguments.
Parameters:
- tool_name (str): The name of the tool to call.
- arguments (Dict[str, Any]): A dictionary of arguments to pass to the tool.
Returns:
Any: The result returned by the tool execution.
create_mcp_client
Create an MCP client from configuration.
Factory function that creates an :obj:MCPClient
instance from various
configuration formats. This is the recommended way to create MCP clients
as it handles configuration validation and type conversion automatically.
Parameters:
- config (Union[Dict[str, Any], ServerConfig]): Server configuration as either a dictionary or a :obj:
ServerConfig
object. If a dictionary is provided, it will be automatically converted to - a: obj:
ServerConfig
. **kwargs: Additional keyword arguments passed to the :obj:MCPClient
constructor, such as :obj:client_info
, :obj:timeout
, and :obj:strict
.
Returns:
MCPClient: A configured :obj:MCPClient
instance ready for use as
an async context manager.
create_mcp_client_from_config_file
Create an MCP client from a configuration file.
Parameters:
- config_path (Union[str, Path]): Path to configuration file (JSON).
- server_name (str): Name of the server in the config. **kwargs: Additional arguments passed to MCPClient constructor.
Returns:
MCPClient: MCPClient instance as an async context manager.
Example config file:
\{ "mcpServers": \{ "filesystem": \{ "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem", "/path" ] \}, "remote-server": \{ "url": "https://api.example.com/mcp", "headers": \{"Authorization": "Bearer token"\} \} \} \}
Usage: .. code-block:: python
async with create_mcp_client_from_config_file( “config.json”, “filesystem” ) as client: tools = client.get_tools()