diff --git a/lib/crewai/src/crewai/agent/core.py b/lib/crewai/src/crewai/agent/core.py index 3658a330ba..8429846bf9 100644 --- a/lib/crewai/src/crewai/agent/core.py +++ b/lib/crewai/src/crewai/agent/core.py @@ -971,12 +971,14 @@ def _get_native_mcp_tools( url=mcp_config.url, headers=mcp_config.headers, streamable=mcp_config.streamable, + verify=mcp_config.verify, ) server_name = self._extract_server_name(mcp_config.url) elif isinstance(mcp_config, MCPServerSSE): transport = SSETransport( url=mcp_config.url, headers=mcp_config.headers, + verify=mcp_config.verify, ) server_name = self._extract_server_name(mcp_config.url) else: diff --git a/lib/crewai/src/crewai/mcp/config.py b/lib/crewai/src/crewai/mcp/config.py index 775f9403d1..af5a8101f4 100644 --- a/lib/crewai/src/crewai/mcp/config.py +++ b/lib/crewai/src/crewai/mcp/config.py @@ -77,6 +77,10 @@ class MCPServerHTTP(BaseModel): default=True, description="Whether to use streamable HTTP transport (default: True).", ) + verify: bool = Field( + default=True, + description="Whether to verify SSL certificates (default: True). Set to False to disable SSL verification.", + ) tool_filter: ToolFilter | None = Field( default=None, description="Optional tool filter for filtering available tools.", @@ -110,6 +114,10 @@ class MCPServerSSE(BaseModel): default=None, description="Optional HTTP headers for authentication or other purposes.", ) + verify: bool = Field( + default=True, + description="Whether to verify SSL certificates (default: True). Set to False to disable SSL verification.", + ) tool_filter: ToolFilter | None = Field( default=None, description="Optional tool filter for filtering available tools.", diff --git a/lib/crewai/src/crewai/mcp/transports/http.py b/lib/crewai/src/crewai/mcp/transports/http.py index d531d89068..9fc5489db5 100644 --- a/lib/crewai/src/crewai/mcp/transports/http.py +++ b/lib/crewai/src/crewai/mcp/transports/http.py @@ -38,6 +38,7 @@ def __init__( url: str, headers: dict[str, str] | None = None, streamable: bool = True, + verify: bool = True, **kwargs: Any, ) -> None: """Initialize HTTP transport. @@ -46,12 +47,14 @@ def __init__( url: Server URL (e.g., "https://api.example.com/mcp"). headers: Optional HTTP headers. streamable: Whether to use streamable HTTP (default: True). + verify: Whether to verify SSL certificates (default: True). **kwargs: Additional transport options. """ super().__init__(**kwargs) self.url = url self.headers = headers or {} self.streamable = streamable + self.verify = verify self._transport_context: Any = None @property @@ -79,6 +82,7 @@ async def connect(self) -> Self: self.url, headers=self.headers if self.headers else None, terminate_on_close=True, + verify=self.verify, ) try: diff --git a/lib/crewai/src/crewai/mcp/transports/sse.py b/lib/crewai/src/crewai/mcp/transports/sse.py index c2184e7d01..1ac5dc13c4 100644 --- a/lib/crewai/src/crewai/mcp/transports/sse.py +++ b/lib/crewai/src/crewai/mcp/transports/sse.py @@ -28,6 +28,7 @@ def __init__( self, url: str, headers: dict[str, str] | None = None, + verify: bool = True, **kwargs: Any, ) -> None: """Initialize SSE transport. @@ -35,11 +36,13 @@ def __init__( Args: url: Server URL (e.g., "https://api.example.com/mcp/sse"). headers: Optional HTTP headers. + verify: Whether to verify SSL certificates (default: True). **kwargs: Additional transport options. """ super().__init__(**kwargs) self.url = url self.headers = headers or {} + self.verify = verify self._transport_context: Any = None @property @@ -66,6 +69,7 @@ async def connect(self) -> Self: self._transport_context = sse_client( self.url, headers=self.headers if self.headers else None, + verify=self.verify, ) read, write = await self._transport_context.__aenter__()