Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -938,6 +938,7 @@ data:
host: "${RESOURCE_NAME}.${NAMESPACE}.svc.cluster.local"
port:
number: 80
${MCP_TIMEOUT}
{{- end }}
{{- if .Values.destinationrule.enabled }}
destination-rule.yaml: |-
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,7 @@ class VirtualServiceArguments(_BaseEndpointArguments):
"""Keyword-arguments for substituting into virtual-service templates."""

DNS_HOST_DOMAIN: str
MCP_TIMEOUT: str # "" (Default) is 30 seconds


class LwsServiceEntryArguments(_BaseEndpointArguments):
Expand Down Expand Up @@ -1361,6 +1362,23 @@ def get_endpoint_resource_arguments_from_request(
SERVICE_NAME_OVERRIDE=service_name_override,
)
elif endpoint_resource_name == "virtual-service":
# Set 5-minute timeout for MCP servers to fix 30-second default timeout issue
# MCP servers use passthrough forwarder and have routes containing /mcp
is_mcp_server = False
if (
isinstance(flavor, RunnableImageLike)
and flavor.forwarder_type == "passthrough"
):
all_routes = []
if flavor.predict_route:
all_routes.append(flavor.predict_route)
if flavor.routes:
all_routes.extend(flavor.routes)
if flavor.extra_routes:
all_routes.extend(flavor.extra_routes)
is_mcp_server = any("/mcp" in route.lower() for route in all_routes)
timeout = "timeout: 300s" if is_mcp_server else ""

return VirtualServiceArguments(
# Base resource arguments
RESOURCE_NAME=k8s_resource_group_name,
Expand All @@ -1373,6 +1391,7 @@ def get_endpoint_resource_arguments_from_request(
OWNER=owner,
GIT_TAG=GIT_TAG,
DNS_HOST_DOMAIN=infra_config().dns_host_domain,
MCP_TIMEOUT=timeout,
)
elif endpoint_resource_name == "destination-rule":
return DestinationRuleArguments(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
from model_engine_server.domain.services import ModelEndpointService
from model_engine_server.domain.use_cases.model_endpoint_use_cases import MODEL_BUNDLE_CHANGED_KEY
from model_engine_server.infra.gateways import ModelEndpointInfraGateway
from model_engine_server.infra.gateways.resources.k8s_endpoint_resource_delegate import (
K8SEndpointResourceDelegate,
)
from model_engine_server.infra.repositories import ModelEndpointCacheRepository
from model_engine_server.infra.repositories.model_endpoint_record_repository import (
ModelEndpointRecordRepository,
Expand Down