fix(mcp): default available_on_public_internet to true

Fixes breaking change where new MCP servers were private by default,
causing k8s/cross-cluster deployments to have their servers silently
stripped by IP filtering.

Changes all defaults to true across:
- litellm/proxy/_types.py (3 Pydantic models)
- litellm/types/mcp_server/mcp_server_manager.py (MCPServer class)
- litellm/proxy/schema.prisma + schema.prisma + litellm-proxy-extras schema
- mcp_server_manager.py YAML + DB loading fallbacks
- UI MCPPermissionManagement.tsx form defaults

See migration script in https://github.com/BerriAI/litellm/pull/22331 for
existing deployments that need to flip existing servers back to public.
This commit is contained in:
Ishaan Jaffer 2026-02-27 19:45:33 -08:00
parent 7e4e4545c5
commit 6a96ab4980
7 changed files with 14 additions and 12 deletions

View file

@ -266,7 +266,7 @@ model LiteLLM_MCPServerTable {
token_url String?
registration_url String?
allow_all_keys Boolean @default(false)
available_on_public_internet Boolean @default(false)
available_on_public_internet Boolean @default(true)
}
// Generate Tokens for Proxy

View file

@ -71,7 +71,9 @@ try:
from mcp.shared.tool_name_validation import (
validate_tool_name, # pyright: ignore[reportAssignmentType]
)
from mcp.shared.tool_name_validation import SEP_986_URL
from mcp.shared.tool_name_validation import (
SEP_986_URL,
)
except ImportError:
from pydantic import BaseModel
@ -329,7 +331,7 @@ class MCPServerManager:
static_headers=server_config.get("static_headers", None),
allow_all_keys=bool(server_config.get("allow_all_keys", False)),
available_on_public_internet=bool(
server_config.get("available_on_public_internet", False)
server_config.get("available_on_public_internet", True)
),
)
self.config_mcp_servers[server_id] = new_server
@ -632,7 +634,7 @@ class MCPServerManager:
disallowed_tools=getattr(mcp_server, "disallowed_tools", None),
allow_all_keys=mcp_server.allow_all_keys,
available_on_public_internet=bool(
getattr(mcp_server, "available_on_public_internet", False)
getattr(mcp_server, "available_on_public_internet", True)
),
updated_at=getattr(mcp_server, "updated_at", None),
)

View file

@ -1080,7 +1080,7 @@ class NewMCPServerRequest(LiteLLMPydanticObjectBase):
token_url: Optional[str] = None
registration_url: Optional[str] = None
allow_all_keys: bool = False
available_on_public_internet: bool = False
available_on_public_internet: bool = True
@model_validator(mode="before")
@classmethod
@ -1142,7 +1142,7 @@ class UpdateMCPServerRequest(LiteLLMPydanticObjectBase):
token_url: Optional[str] = None
registration_url: Optional[str] = None
allow_all_keys: bool = False
available_on_public_internet: bool = False
available_on_public_internet: bool = True
@model_validator(mode="before")
@classmethod
@ -1196,7 +1196,7 @@ class LiteLLM_MCPServerTable(LiteLLMPydanticObjectBase):
token_url: Optional[str] = None
registration_url: Optional[str] = None
allow_all_keys: bool = False
available_on_public_internet: bool = False
available_on_public_internet: bool = True
class MakeMCPServersPublicRequest(LiteLLMPydanticObjectBase):

View file

@ -266,7 +266,7 @@ model LiteLLM_MCPServerTable {
token_url String?
registration_url String?
allow_all_keys Boolean @default(false)
available_on_public_internet Boolean @default(false)
available_on_public_internet Boolean @default(true)
}
// Generate Tokens for Proxy

View file

@ -52,7 +52,7 @@ class MCPServer(BaseModel):
env: Optional[Dict[str, str]] = None
access_groups: Optional[List[str]] = None
allow_all_keys: bool = False
available_on_public_internet: bool = False
available_on_public_internet: bool = True
updated_at: Optional[datetime] = None
model_config = ConfigDict(arbitrary_types_allowed=True)

View file

@ -266,7 +266,7 @@ model LiteLLM_MCPServerTable {
token_url String?
registration_url String?
allow_all_keys Boolean @default(false)
available_on_public_internet Boolean @default(false)
available_on_public_internet Boolean @default(true)
}
// Generate Tokens for Proxy

View file

@ -46,7 +46,7 @@ const MCPPermissionManagement: React.FC<MCPPermissionManagementProps> = ({
}
} else {
form.setFieldValue("allow_all_keys", false);
form.setFieldValue("available_on_public_internet", false);
form.setFieldValue("available_on_public_internet", true);
}
}, [mcpServer, form]);
@ -99,7 +99,7 @@ const MCPPermissionManagement: React.FC<MCPPermissionManagementProps> = ({
<Form.Item
name="available_on_public_internet"
valuePropName="checked"
initialValue={mcpServer?.available_on_public_internet ?? false}
initialValue={mcpServer?.available_on_public_internet ?? true}
className="mb-0"
>
<Switch />