From 816f9052ff6444657bf6acf671a2eea49af58d1e Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Tue, 24 Feb 2026 19:27:12 +0530 Subject: [PATCH] Fix: Transport Type for OpenAPI Spec on UI --- .../proxy/_experimental/mcp_server/mcp_server_manager.py | 1 + .../src/components/mcp_tools/mcp_server_columns.tsx | 8 +++++++- .../src/components/mcp_tools/mcp_server_edit.tsx | 4 ++-- .../src/components/mcp_tools/mcp_server_view.tsx | 4 ++-- ui/litellm-dashboard/src/components/mcp_tools/types.tsx | 7 ++++++- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py index 5c72bfbc13..b9f335ce5d 100644 --- a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py +++ b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py @@ -2604,6 +2604,7 @@ class MCPServerManager: server.mcp_info.get("description") if server.mcp_info else None ), url=server.url, + spec_path=server.spec_path, transport=server.transport, auth_type=server.auth_type, created_at=datetime.now(), diff --git a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_columns.tsx b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_columns.tsx index 78e9c6f465..d49949e7e0 100644 --- a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_columns.tsx +++ b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_columns.tsx @@ -47,7 +47,13 @@ export const mcpServerColumns = ( { accessorKey: "transport", header: "Transport", - cell: ({ getValue }) => {((getValue() as string) || "http").toUpperCase()}, + cell: ({ row }) => { + const transport = row.original.transport || "http"; + const specPath = row.original.spec_path; + // If server has spec_path, display as "OPENAPI" instead of the raw transport type + const displayTransport = specPath && transport !== "stdio" ? "OPENAPI" : transport; + return {displayTransport.toUpperCase()}; + }, }, { accessorKey: "auth_type", diff --git a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_edit.tsx b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_edit.tsx index 88f8a737af..703f4eac5c 100644 --- a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_edit.tsx +++ b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_edit.tsx @@ -144,9 +144,9 @@ const MCPServerEdit: React.FC = ({ }, [mcpServer.env]); - // If server has spec_path and no url, show it as "openapi" transport in the UI + // If server has spec_path, show it as "openapi" transport in the UI const effectiveTransport = React.useMemo(() => { - if (mcpServer.spec_path && !mcpServer.url && mcpServer.transport !== "stdio") { + if (mcpServer.spec_path && mcpServer.transport !== "stdio") { return TRANSPORT.OPENAPI; } return mcpServer.transport; diff --git a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_view.tsx b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_view.tsx index 635c787f30..15c14f2af1 100644 --- a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_view.tsx +++ b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_view.tsx @@ -131,7 +131,7 @@ export const MCPServerView: React.FC = ({ Transport
- {handleTransport(mcpServer.transport ?? undefined)} + {handleTransport(mcpServer.transport ?? undefined, mcpServer.spec_path ?? undefined).toUpperCase()}
@@ -220,7 +220,7 @@ export const MCPServerView: React.FC = ({
Transport -
{handleTransport(mcpServer.transport)}
+
{handleTransport(mcpServer.transport, mcpServer.spec_path).toUpperCase()}
Extra Headers diff --git a/ui/litellm-dashboard/src/components/mcp_tools/types.tsx b/ui/litellm-dashboard/src/components/mcp_tools/types.tsx index 6856322b53..7eb5b51669 100644 --- a/ui/litellm-dashboard/src/components/mcp_tools/types.tsx +++ b/ui/litellm-dashboard/src/components/mcp_tools/types.tsx @@ -25,11 +25,16 @@ export const TRANSPORT = { OPENAPI: "openapi", }; -export const handleTransport = (transport?: string | null): string => { +export const handleTransport = (transport?: string | null, specPath?: string | null): string => { if (transport === null || transport === undefined) { return TRANSPORT.SSE; } + // If server has spec_path, display as "openapi" instead of the raw transport type + if (specPath && transport !== TRANSPORT.STDIO) { + return TRANSPORT.OPENAPI; + } + return transport; };