diff --git a/ui/litellm-dashboard/src/hooks/useTestMCPConnection.tsx b/ui/litellm-dashboard/src/hooks/useTestMCPConnection.tsx index 0cb4288db0e..32092e7f33c 100644 --- a/ui/litellm-dashboard/src/hooks/useTestMCPConnection.tsx +++ b/ui/litellm-dashboard/src/hooks/useTestMCPConnection.tsx @@ -1,11 +1,12 @@ import { useState, useEffect } from "react"; import { testMCPToolsListRequest } from "../components/networking"; -import { AUTH_TYPE, OAUTH_FLOW } from "@/components/mcp_tools/types"; +import { AUTH_TYPE, OAUTH_FLOW, TRANSPORT } from "@/components/mcp_tools/types"; interface MCPServerConfig { server_id?: string; server_name?: string; url?: string; + spec_path?: string; transport?: string; auth_type?: string; authorization_url?: string; @@ -55,8 +56,10 @@ export const useTestMCPConnection = ({ const isM2MOAuth = formValues.auth_type === AUTH_TYPE.OAUTH2 && formValues.oauth_flow_type === OAUTH_FLOW.M2M; const requiresOAuthToken = formValues.auth_type === AUTH_TYPE.OAUTH2 && !isM2MOAuth; + const isOpenAPITransport = formValues.transport === TRANSPORT.OPENAPI; + const hasEndpoint = isOpenAPITransport ? !!formValues.spec_path : !!formValues.url; const canFetchTools = !!( - formValues.url && + hasEndpoint && formValues.transport && formValues.auth_type && accessToken && @@ -67,7 +70,7 @@ export const useTestMCPConnection = ({ const credentialsKey = JSON.stringify(formValues.credentials ?? {}); const fetchTools = async () => { - if (!accessToken || !formValues.url) { + if (!accessToken || (!formValues.url && !formValues.spec_path)) { return; } @@ -125,11 +128,15 @@ export const useTestMCPConnection = ({ ) : undefined; + // For OpenAPI transport, map to "http" for backend compatibility + const effectiveTransport = formValues.transport === TRANSPORT.OPENAPI ? "http" : formValues.transport; + const mcpServerConfig: MCPServerConfig = { server_id: formValues.server_id || "", server_name: formValues.server_name || "", url: formValues.url, - transport: formValues.transport, + spec_path: formValues.spec_path, + transport: effectiveTransport, auth_type: formValues.auth_type, authorization_url: formValues.authorization_url, token_url: formValues.token_url, @@ -190,6 +197,7 @@ export const useTestMCPConnection = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [ formValues.url, + formValues.spec_path, formValues.transport, formValues.auth_type, accessToken,