diff --git a/temporalio/contrib/openai_agents/README.md b/temporalio/contrib/openai_agents/README.md index 12c29bec5..9acd958ad 100644 --- a/temporalio/contrib/openai_agents/README.md +++ b/temporalio/contrib/openai_agents/README.md @@ -383,6 +383,7 @@ from temporalio.contrib.openai_agents import ( ) from temporalio.worker import Worker + async def main(): # Create the MCP server provider filesystem_server = StatelessMCPServerProvider( @@ -403,7 +404,7 @@ async def main(): model_params=ModelActivityParameters( start_to_close_timeout=timedelta(seconds=60) ), - mcp_servers=[filesystem_server], + mcp_server_providers=[filesystem_server], ), ], ) @@ -415,6 +416,7 @@ async def main(): ) await worker.run() + if __name__ == "__main__": asyncio.run(main()) ``` diff --git a/temporalio/contrib/openai_agents/_temporal_openai_agents.py b/temporalio/contrib/openai_agents/_temporal_openai_agents.py index 49b186d98..d893affde 100644 --- a/temporalio/contrib/openai_agents/_temporal_openai_agents.py +++ b/temporalio/contrib/openai_agents/_temporal_openai_agents.py @@ -196,7 +196,7 @@ class OpenAIAgentsPlugin(temporalio.client.Plugin, temporalio.worker.Plugin): of model calls. If None, default parameters will be used. model_provider: Optional model provider for custom model implementations. Useful for testing or custom model integrations. - mcp_servers: Sequence of MCP servers to automatically register with the worker. + mcp_server_providers: Sequence of MCP servers to automatically register with the worker. The plugin will wrap each server in a TemporalMCPServer if needed and manage their connection lifecycles tied to the worker lifetime. This is the recommended way to use MCP servers with Temporal workflows. @@ -223,7 +223,7 @@ class OpenAIAgentsPlugin(temporalio.client.Plugin, temporalio.worker.Plugin): >>> # Create plugin with MCP servers >>> plugin = OpenAIAgentsPlugin( ... model_params=model_params, - ... mcp_servers=[filesystem_server] + ... mcp_server_providers=[filesystem_server] ... ) >>> >>> # Use with client and worker @@ -242,7 +242,7 @@ def __init__( self, model_params: Optional[ModelActivityParameters] = None, model_provider: Optional[ModelProvider] = None, - mcp_servers: Sequence[ + mcp_server_providers: Sequence[ Union["StatelessMCPServerProvider", "StatefulMCPServerProvider"] ] = (), ) -> None: @@ -253,7 +253,7 @@ def __init__( of model calls. If None, default parameters will be used. model_provider: Optional model provider for custom model implementations. Useful for testing or custom model integrations. - mcp_servers: Sequence of MCP servers to automatically register with the worker. + mcp_server_providers: Sequence of MCP servers to automatically register with the worker. Each server will be wrapped in a TemporalMCPServer if not already wrapped, and their activities will be automatically registered with the worker. The plugin manages the connection lifecycle of these servers. @@ -276,7 +276,7 @@ def __init__( self._model_params = model_params self._model_provider = model_provider - self._mcp_servers = mcp_servers + self._mcp_server_providers = mcp_server_providers def init_client_plugin(self, next: temporalio.client.Plugin) -> None: """Set the next client plugin""" @@ -340,13 +340,13 @@ def configure_worker(self, config: WorkerConfig) -> WorkerConfig: ] new_activities = [ModelActivity(self._model_provider).invoke_model_activity] - server_names = [server.name for server in self._mcp_servers] + server_names = [server.name for server in self._mcp_server_providers] if len(server_names) != len(set(server_names)): raise ValueError( f"More than one mcp server registered with the same name. Please provide unique names." ) - for mcp_server in self._mcp_servers: + for mcp_server in self._mcp_server_providers: new_activities.extend(mcp_server._get_activities()) config["activities"] = list(config.get("activities") or []) + new_activities diff --git a/tests/contrib/openai_agents/test_openai.py b/tests/contrib/openai_agents/test_openai.py index bcaeccfd9..565792632 100644 --- a/tests/contrib/openai_agents/test_openai.py +++ b/tests/contrib/openai_agents/test_openai.py @@ -2438,7 +2438,7 @@ async def get_prompt( model_provider=TestModelProvider(TrackingMCPModel()) if use_local_model else None, - mcp_servers=[server], + mcp_server_providers=[server], ) ] client = Client(**new_config) @@ -2548,7 +2548,7 @@ def override_get_activities() -> Sequence[Callable]: start_to_close_timeout=timedelta(seconds=120) ), model_provider=TestModelProvider(TrackingMCPModel()), - mcp_servers=[server], + mcp_server_providers=[server], ) ] client = Client(**new_config)