Skip to content

Commit e2de153

Browse files
waleedlatif1claude
andcommitted
fix(mcp): catch redirect-required error in execute + always test on save
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent fe7118d commit e2de153

2 files changed

Lines changed: 20 additions & 13 deletions

File tree

apps/sim/app/api/mcp/tools/execute/route.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import type { SubscriptionPlan } from '@/lib/core/rate-limiter/types'
99
import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
1010
import { SIM_VIA_HEADER } from '@/lib/execution/call-chain'
1111
import { getParsedBody, withMcpAuth } from '@/lib/mcp/middleware'
12+
import { McpOauthRedirectRequired } from '@/lib/mcp/oauth'
1213
import { mcpService } from '@/lib/mcp/service'
1314
import {
1415
McpOauthAuthorizationRequiredError,
@@ -227,6 +228,7 @@ export const POST = withRouteHandler(
227228
} catch (error) {
228229
if (
229230
error instanceof McpOauthAuthorizationRequiredError ||
231+
error instanceof McpOauthRedirectRequired ||
230232
error instanceof UnauthorizedError
231233
) {
232234
const serverId =

apps/sim/app/workspace/[workspaceId]/settings/components/mcp/components/mcp-server-form-modal/mcp-server-form-modal.tsx

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -505,19 +505,24 @@ export function McpServerFormModal({
505505
const headers = headersToRecord(formData.headers)
506506
const oauthClientId = formData.oauthClientId?.trim()
507507
const oauthClientSecret = formData.oauthClientSecret?.trim()
508-
const skipTest = !!oauthClientId
509-
510-
if (!skipTest) {
511-
const connectionResult = await testConnection({
512-
name: formData.name,
513-
transport: formData.transport,
514-
url: formData.url!,
515-
headers,
516-
timeout: formData.timeout,
517-
workspaceId,
518-
})
519-
520-
if (!connectionResult.success) {
508+
509+
const connectionResult = await testConnection({
510+
name: formData.name,
511+
transport: formData.transport,
512+
url: formData.url!,
513+
headers,
514+
timeout: formData.timeout,
515+
workspaceId,
516+
})
517+
518+
if (!connectionResult.success) {
519+
const errorText = (connectionResult.error || '').toLowerCase()
520+
const looksLikeAuthRequired =
521+
errorText.includes('401') ||
522+
errorText.includes('unauthorized') ||
523+
errorText.includes('oauth') ||
524+
errorText.includes('authentication')
525+
if (!(oauthClientId && looksLikeAuthRequired)) {
521526
setSubmitError(
522527
connectionResult.error || 'Connection test failed. Please check the URL and try again.'
523528
)

0 commit comments

Comments
 (0)