Source code for agentopera.mcp.sse

from mcp import Tool
from pydantic import BaseModel
from typing_extensions import Self

from .base import McpToolAdapter
from .config import SseServerParams


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

    server_params: SseServerParams
    tool: Tool


[docs] class SseMcpToolAdapter( McpToolAdapter[SseServerParams], ): """ Allows you to wrap an MCP tool running over Server-Sent Events (SSE) and make it available to agentopera. This adapter enables using MCP-compatible tools that communicate over HTTP with SSE with agentopera 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 `agentopera` package. .. code-block:: bash pip install -U "agentopera[mcp]" Args: server_params (SseServerParameters): Parameters for the MCP server connection, including URL, headers, and timeouts tool (Tool): The MCP tool to wrap Examples: Use a remote translation service that implements MCP over SSE to create tools that allow agentopera agents to perform translations: .. code-block:: python import asyncio from agentopera.models.openai import OpenAIChatCompletionClient from agentopera.agents.tools.mcp import SseMcpToolAdapter, SseServerParams from agentopera.chatflow.agents import AssistantAgent from agentopera.chatflow.ui import Console from agentopera.core import CancellationToken async def main() -> None: # Create server params for the remote MCP service server_params = SseServerParams( url="https://api.example.com/mcp", headers={"Authorization": "Bearer your-api-key", "Content-Type": "application/json"}, timeout=30, # Connection timeout in seconds ) # Get the translation tool from the server adapter = await SseMcpToolAdapter.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()) """ def __init__(self, server_params: SseServerParams, tool: Tool) -> None: super().__init__(server_params=server_params, tool=tool)