Skip to content

Commit c0a280c

Browse files
committed
Fix problems since MCP doesn't exist on python 3.9
1 parent 19e57eb commit c0a280c

File tree

6 files changed

+32
-15
lines changed

6 files changed

+32
-15
lines changed

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ opentelemetry = [
2727
pydantic = ["pydantic>=2.0.0,<3"]
2828
openai-agents = [
2929
"openai-agents >= 0.2.3,<0.3",
30-
"eval-type-backport>=0.2.2; python_version < '3.10'"
30+
"eval-type-backport>=0.2.2; python_version < '3.10'",
31+
"mcp>=1.9.4, <2; python_version >= '3.10'",
3132
]
3233

3334
[project.urls]

temporalio/contrib/openai_agents/__init__.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,15 @@
88
Use with caution in production environments.
99
"""
1010

11-
from temporalio.contrib.openai_agents._mcp import (
12-
TemporalMCPServer,
13-
TemporalMCPServerWorkflowShim,
14-
)
11+
# Best Effort mcp, as it is not supported on Python 3.9
12+
try:
13+
from temporalio.contrib.openai_agents._mcp import (
14+
TemporalMCPServer,
15+
TemporalMCPServerWorkflowShim,
16+
)
17+
except ImportError:
18+
pass
19+
1520
from temporalio.contrib.openai_agents._model_parameters import ModelActivityParameters
1621
from temporalio.contrib.openai_agents._temporal_openai_agents import (
1722
OpenAIAgentsPlugin,

temporalio/contrib/openai_agents/_mcp.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33

44
from agents import AgentBase, RunContextWrapper
55
from agents.mcp import MCPServer
6-
from mcp import GetPromptResult, ListPromptsResult
7-
from mcp import Tool as MCPTool
8-
from mcp.types import CallToolResult
6+
from mcp import GetPromptResult, ListPromptsResult # type:ignore
7+
from mcp import Tool as MCPTool # type:ignore
8+
from mcp.types import CallToolResult # type:ignore
99

1010
from temporalio import activity, workflow
1111
from temporalio.workflow import LocalActivityConfig

temporalio/contrib/openai_agents/_temporal_openai_agents.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Initialize Temporal OpenAI Agents overrides."""
22

33
import dataclasses
4+
import typing
45
from contextlib import AsyncExitStack, asynccontextmanager, contextmanager
56
from datetime import timedelta
67
from typing import AsyncIterator, Callable, Optional, Sequence, Union
@@ -18,7 +19,6 @@
1819
set_trace_provider,
1920
)
2021
from agents.items import TResponseStreamEvent
21-
from agents.mcp import MCPServer
2222
from agents.run import get_default_agent_runner, set_default_agent_runner
2323
from agents.tracing import get_trace_provider
2424
from agents.tracing.provider import DefaultTraceProvider
@@ -28,7 +28,6 @@
2828
import temporalio.worker
2929
from temporalio.client import ClientConfig
3030
from temporalio.contrib.openai_agents._invoke_model_activity import ModelActivity
31-
from temporalio.contrib.openai_agents._mcp import TemporalMCPServer
3231
from temporalio.contrib.openai_agents._model_parameters import ModelActivityParameters
3332
from temporalio.contrib.openai_agents._openai_runner import TemporalOpenAIRunner
3433
from temporalio.contrib.openai_agents._temporal_trace_provider import (
@@ -53,6 +52,11 @@
5352
)
5453
from temporalio.worker.workflow_sandbox import SandboxedWorkflowRunner
5554

55+
if typing.TYPE_CHECKING:
56+
from agents.mcp import MCPServer
57+
58+
from temporalio.contrib.openai_agents._mcp import TemporalMCPServer
59+
5660

5761
@contextmanager
5862
def set_open_ai_agent_temporal_overrides(
@@ -232,7 +236,7 @@ def __init__(
232236
self,
233237
model_params: Optional[ModelActivityParameters] = None,
234238
model_provider: Optional[ModelProvider] = None,
235-
mcp_servers: Sequence[MCPServer] = (),
239+
mcp_servers: Sequence["MCPServer"] = (),
236240
) -> None:
237241
"""Initialize the OpenAI agents plugin.
238242

tests/contrib/openai_agents/test_openai.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
TResponseOutputItem,
5858
TResponseStreamEvent,
5959
)
60-
from agents.mcp import MCPServer, MCPServerStdio
6160
from openai import APIStatusError, AsyncOpenAI, BaseModel
6261
from openai.types.responses import (
6362
EasyInputMessageParam,
@@ -87,7 +86,6 @@
8786
from temporalio.contrib import openai_agents
8887
from temporalio.contrib.openai_agents import (
8988
ModelActivityParameters,
90-
TemporalMCPServerWorkflowShim,
9189
TestModel,
9290
TestModelProvider,
9391
)
@@ -2512,7 +2510,10 @@ async def test_hosted_mcp_tool(client: Client, use_local_model):
25122510
class McpServerWorkflow:
25132511
@workflow.run
25142512
async def run(self, question: str) -> str:
2515-
print("Running")
2513+
from agents.mcp import MCPServer
2514+
2515+
from temporalio.contrib.openai_agents import TemporalMCPServerWorkflowShim
2516+
25162517
server: MCPServer = TemporalMCPServerWorkflowShim("Filesystem Server, via npx")
25172518
agent = Agent[str](
25182519
name="MCP ServerWorkflow",
@@ -2586,9 +2587,13 @@ class McpServerModel(StaticTestModel):
25862587

25872588
@pytest.mark.parametrize("use_local_model", [True, False])
25882589
async def test_mcp_server(client: Client, use_local_model: bool):
2589-
if not os.environ.get("OPENAI_API_KEY"):
2590+
if not use_local_model and not os.environ.get("OPENAI_API_KEY"):
25902591
pytest.skip("No openai API key")
25912592

2593+
if sys.version_info < (3, 10):
2594+
pytest.skip("Mcp not supported on Python 3.9")
2595+
from agents.mcp import MCPServer, MCPServerStdio
2596+
25922597
server = MCPServerStdio(
25932598
name="Filesystem Server, via npx",
25942599
params={

uv.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)