Redirect into OAuth flow upon receiving 401

This commit is contained in:
Justin Spahr-Summers
2025-01-24 11:34:07 +00:00
parent 8a20f7711a
commit 1c4ad60354
4 changed files with 77 additions and 3 deletions

View File

@@ -1,5 +1,5 @@
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
import { SSEClientTransport, SseError } from "@modelcontextprotocol/sdk/client/sse.js";
import {
ClientNotification,
ClientRequest,
@@ -12,8 +12,9 @@ import {
} from "@modelcontextprotocol/sdk/types.js";
import { useState } from "react";
import { toast } from "react-toastify";
import { Notification, StdErrNotificationSchema } from "../notificationTypes";
import { z } from "zod";
import { startOAuthFlow } from "../auth";
import { Notification, StdErrNotificationSchema } from "../notificationTypes";
const DEFAULT_REQUEST_TIMEOUT_MSEC = 10000;
@@ -160,7 +161,17 @@ export function useConnection({
);
}
await client.connect(clientTransport);
try {
await client.connect(clientTransport);
} catch (error) {
console.error("Failed to connect to MCP server:", error);
if (error instanceof SseError && error.code === 401) {
const redirectUrl = await startOAuthFlow(sseUrl);
window.location.href = redirectUrl;
}
throw error;
}
const capabilities = client.getServerCapabilities();
setServerCapabilities(capabilities ?? null);