Source code for autogen_ext.tools.mcp._streamable_http

from autogen_core import Component
from pydantic import BaseModel
from typing_extensions import Self

from mcp import ClientSession, Tool

from ._base import McpToolAdapter
from ._config import StreamableHttpServerParams


class StreamableHttpMcpToolAdapterConfig(BaseModel):
    """Configuration for the MCP tool adapter."""

    server_params: StreamableHttpServerParams
    tool: Tool


[docs] class StreamableHttpMcpToolAdapter( McpToolAdapter[StreamableHttpServerParams], Component[StreamableHttpMcpToolAdapterConfig], ): """ Allows you to wrap an MCP tool running over Streamable HTTP and make it available to AutoGen. This adapter enables using MCP-compatible tools that communicate over Streamable HTTP with AutoGen agents. Common use cases include integrating with remote MCP services, cloud-based tools, and web APIs that implement the Model Context Protocol (MCP). .. note:: To use this class, you need to install `mcp` extra for the `autogen-ext` package. .. code-block:: bash pip install -U "autogen-ext[mcp]" Args: server_params (StreamableHttpServerParams): Parameters for the MCP server connection, including URL, headers, and timeouts. tool (Tool): The MCP tool to wrap. session (ClientSession, optional): The MCP client session to use. If not provided, it will create a new session. This is useful for testing or when you want to manage the session lifecycle yourself. Examples: Use a remote translation service that implements MCP over Streamable HTTP to create tools that allow AutoGen agents to perform translations: .. code-block:: python import asyncio from autogen_ext.models.openai import OpenAIChatCompletionClient from autogen_ext.tools.mcp import StreamableHttpMcpToolAdapter, StreamableHttpServerParams from autogen_agentchat.agents import AssistantAgent from autogen_agentchat.ui import Console from autogen_core import CancellationToken async def main() -> None: # Create server params for the remote MCP service server_params = StreamableHttpServerParams( url="https://api.example.com/mcp", headers={"Authorization": "Bearer your-api-key", "Content-Type": "application/json"}, timeout=30.0, # HTTP timeout in seconds sse_read_timeout=300.0, # SSE read timeout in seconds (5 minutes) terminate_on_close=True, ) # Get the translation tool from the server adapter = await StreamableHttpMcpToolAdapter.from_server_params(server_params, "translate") # Create an agent that can use the translation tool model_client = OpenAIChatCompletionClient(model="gpt-4") agent = AssistantAgent( name="translator", model_client=model_client, tools=[adapter], system_message="You are a helpful translation assistant.", ) # Let the agent translate some text await Console( agent.run_stream(task="Translate 'Hello, how are you?' to Spanish", cancellation_token=CancellationToken()) ) if __name__ == "__main__": asyncio.run(main()) """ component_config_schema = StreamableHttpMcpToolAdapterConfig component_provider_override = "autogen_ext.tools.mcp.StreamableHttpMcpToolAdapter" def __init__( self, server_params: StreamableHttpServerParams, tool: Tool, session: ClientSession | None = None ) -> None: super().__init__(server_params=server_params, tool=tool, session=session) def _to_config(self) -> StreamableHttpMcpToolAdapterConfig: """ Convert the adapter to its configuration representation. Returns: StreamableHttpMcpToolAdapterConfig: The configuration of the adapter. """ return StreamableHttpMcpToolAdapterConfig(server_params=self._server_params, tool=self._tool) @classmethod def _from_config(cls, config: StreamableHttpMcpToolAdapterConfig) -> Self: """ Create an instance of StreamableHttpMcpToolAdapter from its configuration. Args: config (StreamableHttpMcpToolAdapterConfig): The configuration of the adapter. Returns: StreamableHttpMcpToolAdapter: An instance of StreamableHttpMcpToolAdapter. """ return cls(server_params=config.server_params, tool=config.tool)