104 lines
3.8 KiB
Python
104 lines
3.8 KiB
Python
"""
|
|
MCP server table model.
|
|
|
|
Canonical definition for ``litellm_mcpservertable``. Re-exported from
|
|
``litellm.proxy._types`` for backwards compatibility.
|
|
"""
|
|
|
|
import enum
|
|
from datetime import datetime
|
|
from typing import Dict, List, Literal, Optional
|
|
|
|
from pydantic import Field
|
|
|
|
from litellm.types.llms.base import LiteLLMPydanticObjectBase
|
|
from litellm.types.mcp import MCPAuthType, MCPCredentials, MCPTransportType
|
|
from litellm.types.mcp_server.mcp_server_manager import MCPInfo
|
|
|
|
|
|
class MCPEnvVarScope(str, enum.Enum):
|
|
"""Scope for an MCP server environment variable.
|
|
|
|
- ``global``: value is provided by the admin and used for all users.
|
|
- ``user``: each user must provide their own value via the per-user
|
|
env-var endpoint. The admin-supplied ``value`` is treated as a
|
|
placeholder/hint and is not used at request time.
|
|
"""
|
|
|
|
global_ = "global"
|
|
user = "user"
|
|
|
|
|
|
class MCPEnvVar(LiteLLMPydanticObjectBase):
|
|
"""One environment variable for an MCP server.
|
|
|
|
Variables can be interpolated into ``static_headers`` using ``${NAME}``
|
|
syntax. ``scope=global`` values are stored on the server. ``scope=user``
|
|
values are stored per-user in ``LiteLLM_MCPUserEnvVars`` and supplied by
|
|
each user.
|
|
"""
|
|
|
|
name: str
|
|
value: str = ""
|
|
scope: MCPEnvVarScope = MCPEnvVarScope.global_
|
|
description: Optional[str] = None
|
|
|
|
|
|
class LiteLLM_MCPServerTable(LiteLLMPydanticObjectBase):
|
|
"""Represents a LiteLLM_MCPServerTable record"""
|
|
|
|
server_id: str
|
|
server_name: Optional[str] = None
|
|
alias: Optional[str] = None
|
|
description: Optional[str] = None
|
|
url: Optional[str] = None
|
|
spec_path: Optional[str] = None
|
|
transport: MCPTransportType
|
|
auth_type: Optional[MCPAuthType] = None
|
|
credentials: Optional[MCPCredentials] = None
|
|
instructions: Optional[str] = None
|
|
created_at: Optional[datetime] = None
|
|
created_by: Optional[str] = None
|
|
updated_at: Optional[datetime] = None
|
|
updated_by: Optional[str] = None
|
|
teams: List[Dict[str, Optional[str]]] = Field(default_factory=list)
|
|
mcp_access_groups: List[str] = Field(default_factory=list)
|
|
allowed_tools: List[str] = Field(default_factory=list)
|
|
tool_name_to_display_name: Optional[Dict[str, str]] = None
|
|
tool_name_to_description: Optional[Dict[str, str]] = None
|
|
extra_headers: List[str] = Field(default_factory=list)
|
|
mcp_info: Optional[MCPInfo] = None
|
|
static_headers: Optional[Dict[str, str]] = None
|
|
env_vars: Optional[List[MCPEnvVar]] = None
|
|
status: Optional[Literal["healthy", "unhealthy", "unknown"]] = Field(
|
|
default="unknown",
|
|
description="Health status: 'healthy', 'unhealthy', 'unknown'",
|
|
)
|
|
last_health_check: Optional[datetime] = None
|
|
health_check_error: Optional[str] = None
|
|
command: Optional[str] = None
|
|
args: List[str] = Field(default_factory=list)
|
|
env: Dict[str, str] = Field(default_factory=dict)
|
|
authorization_url: Optional[str] = None
|
|
token_url: Optional[str] = None
|
|
registration_url: Optional[str] = None
|
|
oauth2_flow: Optional[Literal["client_credentials", "authorization_code"]] = None
|
|
allow_all_keys: bool = False
|
|
available_on_public_internet: bool = True
|
|
delegate_auth_to_upstream: bool = False
|
|
oauth_passthrough: bool = False
|
|
is_byok: bool = False
|
|
byok_description: List[str] = Field(default_factory=list)
|
|
byok_api_key_help_url: Optional[str] = None
|
|
has_user_credential: Optional[bool] = None
|
|
source_url: Optional[str] = None
|
|
timeout: Optional[float] = None
|
|
approval_status: Optional[str] = Field(
|
|
default="active",
|
|
description="Approval status: 'pending_review', 'active', 'rejected'",
|
|
)
|
|
submitted_by: Optional[str] = None
|
|
submitted_at: Optional[datetime] = None
|
|
reviewed_at: Optional[datetime] = None
|
|
review_notes: Optional[str] = None
|