From 71bb89ddf220b7937f1ed8e70ebdf0d62ac06a3d Mon Sep 17 00:00:00 2001 From: Nathan Arseneau Date: Tue, 1 Apr 2025 18:02:29 -0400 Subject: [PATCH 001/135] create sampling response form --- client/src/components/DynamicJsonForm.tsx | 18 +- client/src/components/SamplingRequest.tsx | 162 ++++++++++++++++++ client/src/components/SamplingTab.tsx | 37 +--- client/src/components/Sidebar.tsx | 4 +- .../__tests__/samplingRequest.test.tsx | 73 ++++++++ .../components/__tests__/samplingTab.test.tsx | 55 ++++++ 6 files changed, 316 insertions(+), 33 deletions(-) create mode 100644 client/src/components/SamplingRequest.tsx create mode 100644 client/src/components/__tests__/samplingRequest.test.tsx create mode 100644 client/src/components/__tests__/samplingTab.test.tsx diff --git a/client/src/components/DynamicJsonForm.tsx b/client/src/components/DynamicJsonForm.tsx index f5b0d630..c4caf0da 100644 --- a/client/src/components/DynamicJsonForm.tsx +++ b/client/src/components/DynamicJsonForm.tsx @@ -36,6 +36,7 @@ interface DynamicJsonFormProps { value: JsonValue; onChange: (value: JsonValue) => void; maxDepth?: number; + defaultIsJsonMode?: boolean; } const DynamicJsonForm = ({ @@ -43,8 +44,9 @@ const DynamicJsonForm = ({ value, onChange, maxDepth = 3, + defaultIsJsonMode = false, }: DynamicJsonFormProps) => { - const [isJsonMode, setIsJsonMode] = useState(false); + const [isJsonMode, setIsJsonMode] = useState(defaultIsJsonMode); const [jsonError, setJsonError] = useState(); // Store the raw JSON string to allow immediate feedback during typing // while deferring parsing until the user stops typing @@ -370,11 +372,21 @@ const DynamicJsonForm = ({
{isJsonMode && ( - )} -
diff --git a/client/src/components/SamplingRequest.tsx b/client/src/components/SamplingRequest.tsx new file mode 100644 index 00000000..84c61723 --- /dev/null +++ b/client/src/components/SamplingRequest.tsx @@ -0,0 +1,162 @@ +import { Button } from "@/components/ui/button"; +import JsonView from "./JsonView"; +import { useMemo, useState } from "react"; +import { + CreateMessageResult, + CreateMessageResultSchema, +} from "@modelcontextprotocol/sdk/types.js"; +import { PendingRequest } from "./SamplingTab"; +import DynamicJsonForm, { JsonSchemaType, JsonValue } from "./DynamicJsonForm"; +import { useToast } from "@/hooks/use-toast"; + +export type SamplingRequestProps = { + request: PendingRequest; + onApprove: (id: number, result: CreateMessageResult) => void; + onReject: (id: number) => void; +}; + +const SamplingRequest = ({ + onApprove, + request, + onReject, +}: SamplingRequestProps) => { + const { toast } = useToast(); + + const [messageResult, setMessageResult] = useState({ + model: "GPT-4o", + stopReason: "endTurn", + role: "assistant", + content: { + type: "text", + text: "", + }, + }); + + const s = useMemo(() => { + const schema: JsonSchemaType = { + type: "object", + description: "Message result", + properties: { + model: { + type: "string", + default: "GPT-4o", + description: "model name", + }, + stopReason: { + type: "string", + default: "endTurn", + description: "Stop reason", + }, + role: { + type: "string", + default: "endTurn", + description: "Role of the model", + }, + content: { + type: "object", + properties: { + type: { + type: "string", + default: "text", + description: "Type of content", + }, + }, + }, + }, + }; + + const contentType = (messageResult as any)?.content?.type; + if (contentType === "text" && schema.properties) { + schema.properties.content.properties = { + ...schema.properties.content.properties, + text: { + type: "string", + default: "", + description: "text content", + }, + }; + setMessageResult((prev) => ({ + ...(prev as { [key: string]: JsonValue }), + content: { + type: contentType, + text: "", + }, + })); + } else if (contentType === "image" && schema.properties) { + schema.properties.content.properties = { + ...schema.properties.content.properties, + data: { + type: "string", + default: "", + description: "Base64 encoded image data", + }, + mimeType: { + type: "string", + default: "", + description: "Mime type of the image", + }, + }; + setMessageResult((prev) => ({ + ...(prev as { [key: string]: JsonValue }), + content: { + type: contentType, + data: "", + mimeType: "", + }, + })); + } + + return schema; + }, [(messageResult as any)?.content?.type]); + + const handleApprove = (id: number) => { + const validationResult = CreateMessageResultSchema.safeParse(messageResult); + if (!validationResult.success) { + toast({ + title: "Error", + description: `There was an error validating the message result: ${validationResult.error.message}`, + variant: "destructive", + }); + return; + } + + onApprove(id, validationResult.data); + }; + + return ( +
+
+ +
+
+
+ { + setMessageResult(newValue); + }} + /> +
+
+ + +
+
+
+ ); +}; + +export default SamplingRequest; diff --git a/client/src/components/SamplingTab.tsx b/client/src/components/SamplingTab.tsx index a72ea7d7..19ed4a33 100644 --- a/client/src/components/SamplingTab.tsx +++ b/client/src/components/SamplingTab.tsx @@ -1,11 +1,10 @@ import { Alert, AlertDescription } from "@/components/ui/alert"; -import { Button } from "@/components/ui/button"; import { TabsContent } from "@/components/ui/tabs"; import { CreateMessageRequest, CreateMessageResult, } from "@modelcontextprotocol/sdk/types.js"; -import JsonView from "./JsonView"; +import SamplingRequest from "./SamplingRequest"; export type PendingRequest = { id: number; @@ -19,21 +18,8 @@ export type Props = { }; const SamplingTab = ({ pendingRequests, onApprove, onReject }: Props) => { - const handleApprove = (id: number) => { - // For now, just return a stub response - onApprove(id, { - model: "stub-model", - stopReason: "endTurn", - role: "assistant", - content: { - type: "text", - text: "This is a stub response.", - }, - }); - }; - return ( - + When the server requests LLM sampling, requests will appear here for @@ -43,19 +29,12 @@ const SamplingTab = ({ pendingRequests, onApprove, onReject }: Props) => {

Recent Requests

{pendingRequests.map((request) => ( -
- - -
- - -
-
+ ))} {pendingRequests.length === 0 && (

No pending requests

diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index 19f8020b..8b40bb76 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -460,7 +460,9 @@ const Sidebar = ({ {Object.values(LoggingLevelSchema.enum).map((level) => ( - {level} + + {level} + ))} diff --git a/client/src/components/__tests__/samplingRequest.test.tsx b/client/src/components/__tests__/samplingRequest.test.tsx new file mode 100644 index 00000000..402c2441 --- /dev/null +++ b/client/src/components/__tests__/samplingRequest.test.tsx @@ -0,0 +1,73 @@ +import { render, screen, fireEvent } from "@testing-library/react"; +import SamplingRequest from "../SamplingRequest"; +import { PendingRequest } from "../SamplingTab"; + +const mockRequest: PendingRequest = { + id: 1, + request: { + method: "sampling/createMessage", + params: { + messages: [ + { + role: "user", + content: { + type: "text", + text: "What files are in the current directory?", + }, + }, + ], + systemPrompt: "You are a helpful file system assistant.", + includeContext: "thisServer", + maxTokens: 100, + }, + }, +}; + +describe("Form to handle sampling response", () => { + const mockOnApprove = jest.fn(); + const mockOnReject = jest.fn(); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it("should call onApprove with correct text content when Approve button is clicked", () => { + render( + , + ); + + // Click the Approve button + fireEvent.click(screen.getByRole("button", { name: /approve/i })); + + // Assert that onApprove is called with the correct arguments + expect(mockOnApprove).toHaveBeenCalledWith(mockRequest.id, { + model: "GPT-4o", + stopReason: "endTurn", + role: "assistant", + content: { + type: "text", + text: "", + }, + }); + }); + + it("should call onReject with correct request id when Reject button is clicked", () => { + render( + , + ); + + // Click the Approve button + fireEvent.click(screen.getByRole("button", { name: /Reject/i })); + + // Assert that onApprove is called with the correct arguments + expect(mockOnReject).toHaveBeenCalledWith(mockRequest.id); + }); +}); diff --git a/client/src/components/__tests__/samplingTab.test.tsx b/client/src/components/__tests__/samplingTab.test.tsx new file mode 100644 index 00000000..3e721216 --- /dev/null +++ b/client/src/components/__tests__/samplingTab.test.tsx @@ -0,0 +1,55 @@ +import { render, screen } from "@testing-library/react"; +import { Tabs } from "@/components/ui/tabs"; +import SamplingTab, { PendingRequest } from "../SamplingTab"; + +describe("Sampling tab", () => { + const mockOnApprove = jest.fn(); + const mockOnReject = jest.fn(); + + const renderSamplingTab = (pendingRequests: PendingRequest[]) => + render( + + + , + ); + + it("should render 'No pending requests' when there are no pending requests", () => { + renderSamplingTab([]); + expect( + screen.getByText( + "When the server requests LLM sampling, requests will appear here for approval.", + ), + ).toBeTruthy(); + expect(screen.findByText("No pending requests")).toBeTruthy(); + }); + + it("should render the correct number of requests", () => { + renderSamplingTab( + Array.from({ length: 5 }, (_, i) => ({ + id: i, + request: { + method: "sampling/createMessage", + params: { + messages: [ + { + role: "user", + content: { + type: "text", + text: "What files are in the current directory?", + }, + }, + ], + systemPrompt: "You are a helpful file system assistant.", + includeContext: "thisServer", + maxTokens: 100, + }, + }, + })), + ); + expect(screen.getAllByTestId("sampling-request").length).toBe(5); + }); +}); From a524f17d8074cd720672e3685d114e749b0a9de3 Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Mon, 7 Apr 2025 16:09:46 +0900 Subject: [PATCH 002/135] Implement auto-open feature for browser launch on server start --- README.md | 1 + bin/cli.js | 4 ++ package-lock.json | 134 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 4 files changed, 140 insertions(+) diff --git a/README.md b/README.md index c43f9432..cb5fd52c 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ The MCP Inspector supports the following configuration settings. To change them | -------------------------- | ----------------------------------------------------------------------------------------- | ------------- | | MCP_SERVER_REQUEST_TIMEOUT | Maximum time in milliseconds to wait for a response from the MCP server before timing out | 10000 | | MCP_PROXY_FULL_ADDRESS | The full URL of the MCP Inspector proxy server (e.g. `http://10.2.1.14:2277`) | `null` | +| MCP_AUTO_OPEN_DISABLED | Disable automatic browser opening when inspector starts | `false` | ### From this repository diff --git a/bin/cli.js b/bin/cli.js index 35edf0e9..21a4bf0e 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -1,5 +1,6 @@ #!/usr/bin/env node +import open from "open"; import { resolve, dirname } from "path"; import { spawnPromise } from "spawn-rx"; import { fileURLToPath } from "url"; @@ -99,6 +100,9 @@ async function main() { if (serverOk) { try { + if (!process.env.MCP_AUTO_OPEN_DISABLED) { + open(`http://localhost:${CLIENT_PORT}`); + } await spawnPromise("node", [inspectorClientPath], { env: { ...process.env, PORT: CLIENT_PORT }, signal: abort.signal, diff --git a/package-lock.json b/package-lock.json index 42fec875..ba5ae44e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@modelcontextprotocol/inspector-client": "^0.8.1", "@modelcontextprotocol/inspector-server": "^0.8.1", "concurrently": "^9.0.1", + "open": "^10.1.0", "shell-quote": "^1.8.2", "spawn-rx": "^5.1.2", "ts-node": "^10.9.2" @@ -4338,6 +4339,21 @@ "dev": true, "license": "MIT" }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "license": "MIT", @@ -4786,6 +4802,46 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "dev": true, @@ -5995,6 +6051,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "license": "MIT", @@ -6027,6 +6098,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "license": "MIT", @@ -6054,6 +6143,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isexe": { "version": "2.0.0", "license": "ISC" @@ -7261,6 +7365,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "dev": true, @@ -8098,6 +8220,18 @@ "node": ">=16" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "funding": [ diff --git a/package.json b/package.json index 453fa71c..f3663f9a 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@modelcontextprotocol/inspector-client": "^0.8.1", "@modelcontextprotocol/inspector-server": "^0.8.1", "concurrently": "^9.0.1", + "open": "^10.1.0", "shell-quote": "^1.8.2", "spawn-rx": "^5.1.2", "ts-node": "^10.9.2" From 638603c0f336528567411d4692a221e4eda89cd9 Mon Sep 17 00:00:00 2001 From: Shiv Deepak Muddada Date: Wed, 9 Apr 2025 20:47:53 -0700 Subject: [PATCH 003/135] add support for streamable http server --- client/src/App.tsx | 4 ++-- client/src/components/Sidebar.tsx | 7 ++++--- client/src/lib/hooks/useConnection.ts | 2 +- server/src/index.ts | 6 ++++++ 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 4f99ffd4..c36353e1 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -79,9 +79,9 @@ const App = () => { const [sseUrl, setSseUrl] = useState(() => { return localStorage.getItem("lastSseUrl") || "http://localhost:3001/sse"; }); - const [transportType, setTransportType] = useState<"stdio" | "sse">(() => { + const [transportType, setTransportType] = useState<"stdio" | "sse" | "streamable-http">(() => { return ( - (localStorage.getItem("lastTransportType") as "stdio" | "sse") || "stdio" + (localStorage.getItem("lastTransportType") as "stdio" | "sse" | "streamable-http") || "stdio" ); }); const [logLevel, setLogLevel] = useState("debug"); diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index e3e2118c..44d0d530 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -39,8 +39,8 @@ import { interface SidebarProps { connectionStatus: ConnectionStatus; - transportType: "stdio" | "sse"; - setTransportType: (type: "stdio" | "sse") => void; + transportType: "stdio" | "sse" | "streamable-http"; + setTransportType: (type: "stdio" | "sse" | "streamable-http") => void; command: string; setCommand: (command: string) => void; args: string; @@ -111,7 +111,7 @@ const Sidebar = ({
diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index ac4605c7..1eccfeb5 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -42,7 +42,7 @@ import { getMCPServerRequestTimeout } from "@/utils/configUtils"; import { InspectorConfig } from "../configurationTypes"; interface UseConnectionOptions { - transportType: "stdio" | "sse"; + transportType: "stdio" | "sse" | "streamable-http"; command: string; args: string; sseUrl: string; diff --git a/server/src/index.ts b/server/src/index.ts index 0987d996..879db922 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -14,6 +14,7 @@ import { } from "@modelcontextprotocol/sdk/client/stdio.js"; import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"; +import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; import express from "express"; import { findActualExecutable } from "spawn-rx"; import mcpProxy from "./mcpProxy.js"; @@ -94,6 +95,11 @@ const createTransport = async (req: express.Request): Promise => { console.log("Connected to SSE transport"); return transport; + } else if (transportType === "streamable-http") { + const transport = new StreamableHTTPClientTransport(new URL(query.url as string)); + await transport.start(); + console.log("Connected to Streamable HTTP transport"); + return transport; } else { console.error(`Invalid transport type: ${transportType}`); throw new Error("Invalid transport type specified"); From f43a9140efbebb5795e8db5695ac7df95bd39eb0 Mon Sep 17 00:00:00 2001 From: Shiv Deepak Muddada Date: Wed, 9 Apr 2025 21:09:32 -0700 Subject: [PATCH 004/135] run prettier-fix --- client/src/App.tsx | 9 +++++++-- server/src/index.ts | 6 ++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index c36353e1..d85bb43f 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -79,9 +79,14 @@ const App = () => { const [sseUrl, setSseUrl] = useState(() => { return localStorage.getItem("lastSseUrl") || "http://localhost:3001/sse"; }); - const [transportType, setTransportType] = useState<"stdio" | "sse" | "streamable-http">(() => { + const [transportType, setTransportType] = useState< + "stdio" | "sse" | "streamable-http" + >(() => { return ( - (localStorage.getItem("lastTransportType") as "stdio" | "sse" | "streamable-http") || "stdio" + (localStorage.getItem("lastTransportType") as + | "stdio" + | "sse" + | "streamable-http") || "stdio" ); }); const [logLevel, setLogLevel] = useState("debug"); diff --git a/server/src/index.ts b/server/src/index.ts index 879db922..cbb67663 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -14,7 +14,7 @@ import { } from "@modelcontextprotocol/sdk/client/stdio.js"; import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"; -import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; +import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; import express from "express"; import { findActualExecutable } from "spawn-rx"; import mcpProxy from "./mcpProxy.js"; @@ -96,7 +96,9 @@ const createTransport = async (req: express.Request): Promise => { console.log("Connected to SSE transport"); return transport; } else if (transportType === "streamable-http") { - const transport = new StreamableHTTPClientTransport(new URL(query.url as string)); + const transport = new StreamableHTTPClientTransport( + new URL(query.url as string), + ); await transport.start(); console.log("Connected to Streamable HTTP transport"); return transport; From d2cb2338a0b69f9f154c43901f75c368051534cd Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Sun, 13 Apr 2025 21:23:39 +0900 Subject: [PATCH 005/135] Fix host name --- bin/cli.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/cli.js b/bin/cli.js index 21a4bf0e..b12564f5 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -101,7 +101,7 @@ async function main() { if (serverOk) { try { if (!process.env.MCP_AUTO_OPEN_DISABLED) { - open(`http://localhost:${CLIENT_PORT}`); + open(`http://127.0.0.1:${CLIENT_PORT}`); } await spawnPromise("node", [inspectorClientPath], { env: { ...process.env, PORT: CLIENT_PORT }, From 52564dd7c5a0ddd3d129566b296659deeb831075 Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Sun, 13 Apr 2025 21:53:42 +0900 Subject: [PATCH 006/135] Add auto open disabled environment option to sidebar --- client/src/components/Sidebar.tsx | 20 +++++++++++--- .../src/components/__tests__/Sidebar.test.tsx | 27 +++++++++++++++++++ client/src/lib/configurationTypes.ts | 5 ++++ client/src/lib/constants.ts | 5 ++++ 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index 2ddb18d7..e7d74f9e 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -386,7 +386,6 @@ const Sidebar = ({ /> ) : typeof configItem.value === "boolean" ? ( ) : ( diff --git a/client/src/components/__tests__/Sidebar.test.tsx b/client/src/components/__tests__/Sidebar.test.tsx index 8e72b008..fad066fa 100644 --- a/client/src/components/__tests__/Sidebar.test.tsx +++ b/client/src/components/__tests__/Sidebar.test.tsx @@ -423,6 +423,33 @@ describe("Sidebar Environment Variables", () => { ); }); + it("should update auto browser open disabled", () => { + const setConfig = jest.fn(); + renderSidebar({ config: DEFAULT_INSPECTOR_CONFIG, setConfig }); + + openConfigSection(); + + const autoOpenDisabledInput = screen.getByTestId( + "MCP_AUTO_OPEN_DISABLED-input", + ); + fireEvent.click(autoOpenDisabledInput); + const trueOption = screen.getByTestId( + "MCP_AUTO_OPEN_DISABLED-input-true", + ); + fireEvent.click(trueOption); + + expect(setConfig).toHaveBeenCalledWith( + expect.objectContaining({ + MCP_AUTO_OPEN_DISABLED: { + label: "Auto Browser Open Disabled", + description: + "Disable automatic browser opening when inspector starts", + value: true, + }, + }), + ); + }); + it("should maintain configuration state after multiple updates", () => { const setConfig = jest.fn(); const { rerender } = renderSidebar({ diff --git a/client/src/lib/configurationTypes.ts b/client/src/lib/configurationTypes.ts index 7c74bb71..1b9736fd 100644 --- a/client/src/lib/configurationTypes.ts +++ b/client/src/lib/configurationTypes.ts @@ -33,4 +33,9 @@ export type InspectorConfig = { * The full address of the MCP Proxy Server, in case it is running on a non-default address. Example: http://10.1.1.22:5577 */ MCP_PROXY_FULL_ADDRESS: ConfigItem; + + /** + * Disable automatic browser opening when inspector starts. + */ + MCP_AUTO_OPEN_DISABLED: ConfigItem; }; diff --git a/client/src/lib/constants.ts b/client/src/lib/constants.ts index e7fa14c9..cbfab90c 100644 --- a/client/src/lib/constants.ts +++ b/client/src/lib/constants.ts @@ -43,4 +43,9 @@ export const DEFAULT_INSPECTOR_CONFIG: InspectorConfig = { "Set this if you are running the MCP Inspector Proxy on a non-default address. Example: http://10.1.1.22:5577", value: "", }, + MCP_AUTO_OPEN_DISABLED: { + label: "Auto Browser Open Disabled", + description: "Disable automatic browser opening when inspector starts", + value: false, + }, } as const; From 5bcc1fd77bbbba60e8b7d13b515ededae157046e Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Sun, 13 Apr 2025 21:58:55 +0900 Subject: [PATCH 007/135] Fix condition for auto browser opening --- bin/cli.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/cli.js b/bin/cli.js index b12564f5..cb0db390 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -100,7 +100,7 @@ async function main() { if (serverOk) { try { - if (!process.env.MCP_AUTO_OPEN_DISABLED) { + if (process.env.MCP_AUTO_OPEN_DISABLED !== "true") { open(`http://127.0.0.1:${CLIENT_PORT}`); } await spawnPromise("node", [inspectorClientPath], { From 6b57f7ce117900e6252ff54ddf0c510fd37aa2a6 Mon Sep 17 00:00:00 2001 From: Nathan Arseneau Date: Tue, 15 Apr 2025 21:58:03 -0400 Subject: [PATCH 008/135] feat: test ci linter From 014acecf777edbc934582be0b1230ce4cb846b70 Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Thu, 17 Apr 2025 18:13:58 +0900 Subject: [PATCH 009/135] Avoid double negative --- README.md | 2 +- client/bin/start.js | 2 +- client/src/components/__tests__/Sidebar.test.tsx | 16 ++++++++-------- client/src/lib/configurationTypes.ts | 2 +- client/src/lib/constants.ts | 8 ++++---- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 221cbd3f..c34673f7 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ The MCP Inspector supports the following configuration settings. To change them, | `MCP_REQUEST_TIMEOUT_RESET_ON_PROGRESS` | Reset timeout on progress notifications | true | | `MCP_REQUEST_MAX_TOTAL_TIMEOUT` | Maximum total timeout for requests sent to the MCP server (ms) (Use with progress notifications) | 60000 | | `MCP_PROXY_FULL_ADDRESS` | Set this if you are running the MCP Inspector Proxy on a non-default address. Example: http://10.1.1.22:5577 | "" | -| `MCP_AUTO_OPEN_DISABLED` | Disable automatic browser opening when inspector starts | false | +| `MCP_AUTO_OPEN_ENABLED` | Enable automatic browser opening when inspector starts | true | The inspector also supports configuration files to store settings for different MCP servers. This is useful when working with multiple servers or complex configurations: diff --git a/client/bin/start.js b/client/bin/start.js index 93d77fa8..8e383b38 100755 --- a/client/bin/start.js +++ b/client/bin/start.js @@ -100,7 +100,7 @@ async function main() { if (serverOk) { try { - if (process.env.MCP_AUTO_OPEN_DISABLED !== "true") { + if (process.env.MCP_AUTO_OPEN_ENABLED !== "false") { open(`http://127.0.0.1:${CLIENT_PORT}`); } await spawnPromise("node", [inspectorClientPath], { diff --git a/client/src/components/__tests__/Sidebar.test.tsx b/client/src/components/__tests__/Sidebar.test.tsx index dffc1393..ed3bbb3b 100644 --- a/client/src/components/__tests__/Sidebar.test.tsx +++ b/client/src/components/__tests__/Sidebar.test.tsx @@ -583,21 +583,21 @@ describe("Sidebar Environment Variables", () => { openConfigSection(); const autoOpenDisabledInput = screen.getByTestId( - "MCP_AUTO_OPEN_DISABLED-input", + "MCP_AUTO_OPEN_ENABLED-input", ); fireEvent.click(autoOpenDisabledInput); - const trueOption = screen.getByTestId( - "MCP_AUTO_OPEN_DISABLED-input-true", + const falseOption = screen.getByTestId( + "MCP_AUTO_OPEN_ENABLED-input-false", ); - fireEvent.click(trueOption); + fireEvent.click(falseOption); expect(setConfig).toHaveBeenCalledWith( expect.objectContaining({ - MCP_AUTO_OPEN_DISABLED: { - label: "Auto Browser Open Disabled", + MCP_AUTO_OPEN_ENABLED: { + label: "Auto Browser Open Enabled", description: - "Disable automatic browser opening when inspector starts", - value: true, + "Enable automatic browser opening when inspector starts", + value: false, }, }), ); diff --git a/client/src/lib/configurationTypes.ts b/client/src/lib/configurationTypes.ts index 1b9736fd..f390e6da 100644 --- a/client/src/lib/configurationTypes.ts +++ b/client/src/lib/configurationTypes.ts @@ -37,5 +37,5 @@ export type InspectorConfig = { /** * Disable automatic browser opening when inspector starts. */ - MCP_AUTO_OPEN_DISABLED: ConfigItem; + MCP_AUTO_OPEN_ENABLED: ConfigItem; }; diff --git a/client/src/lib/constants.ts b/client/src/lib/constants.ts index 210e160c..fc05c069 100644 --- a/client/src/lib/constants.ts +++ b/client/src/lib/constants.ts @@ -52,9 +52,9 @@ export const DEFAULT_INSPECTOR_CONFIG: InspectorConfig = { "Set this if you are running the MCP Inspector Proxy on a non-default address. Example: http://10.1.1.22:5577", value: "", }, - MCP_AUTO_OPEN_DISABLED: { - label: "Auto Browser Open Disabled", - description: "Disable automatic browser opening when inspector starts", - value: false, + MCP_AUTO_OPEN_ENABLED: { + label: "Auto Browser Open Enabled", + description: "Enable automatic browser opening when inspector starts", + value: true, }, } as const; From d82e06fe657a5c8451f98841cebda14da064dd62 Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Fri, 18 Apr 2025 09:28:29 +0900 Subject: [PATCH 010/135] Fix format of README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b568e7cc..6c042c94 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,9 @@ The MCP Inspector supports the following configuration settings. To change them, | `MCP_REQUEST_TIMEOUT_RESET_ON_PROGRESS` | Reset timeout on progress notifications | true | | `MCP_REQUEST_MAX_TOTAL_TIMEOUT` | Maximum total timeout for requests sent to the MCP server (ms) (Use with progress notifications) | 60000 | | `MCP_PROXY_FULL_ADDRESS` | Set this if you are running the MCP Inspector Proxy on a non-default address. Example: http://10.1.1.22:5577 | "" | -| `MCP_AUTO_OPEN_ENABLED` | Enable automatic browser opening when inspector starts | true | +| `MCP_AUTO_OPEN_ENABLED` | Enable automatic browser opening when inspector starts | true | + +These settings can be adjusted in real-time through the UI and will persist across sessions. The inspector also supports configuration files to store settings for different MCP servers. This is useful when working with multiple servers or complex configurations: From 8213402185705675b322ec04fad00d423a39e3ad Mon Sep 17 00:00:00 2001 From: Shiv Deepak Muddada Date: Thu, 17 Apr 2025 21:29:47 -0700 Subject: [PATCH 011/135] attach auth headers to the streamable http request --- server/src/index.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/server/src/index.ts b/server/src/index.ts index cbb67663..e966910d 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -20,6 +20,7 @@ import { findActualExecutable } from "spawn-rx"; import mcpProxy from "./mcpProxy.js"; const SSE_HEADERS_PASSTHROUGH = ["authorization"]; +const STREAMABLE_HTTP_HEADERS_PASSTHROUGH = ["authorization"]; const defaultEnvironment = { ...getDefaultEnvironment(), @@ -96,8 +97,24 @@ const createTransport = async (req: express.Request): Promise => { console.log("Connected to SSE transport"); return transport; } else if (transportType === "streamable-http") { + const headers: HeadersInit = {}; + + for (const key of STREAMABLE_HTTP_HEADERS_PASSTHROUGH) { + if (req.headers[key] === undefined) { + continue; + } + + const value = req.headers[key]; + headers[key] = Array.isArray(value) ? value[value.length - 1] : value; + } + const transport = new StreamableHTTPClientTransport( new URL(query.url as string), + { + requestInit: { + headers, + }, + }, ); await transport.start(); console.log("Connected to Streamable HTTP transport"); From 114df8ac30194b343e909dc55e6005c48eb6393b Mon Sep 17 00:00:00 2001 From: sumeetpardeshi Date: Fri, 18 Apr 2025 00:04:02 -0700 Subject: [PATCH 012/135] feat: add copy config button --- client/src/components/Sidebar.tsx | 85 +++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index d59e4169..da27bcdb 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -12,6 +12,8 @@ import { Settings, HelpCircle, RefreshCwOff, + Copy, + CheckCheck, } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; @@ -36,6 +38,7 @@ import { TooltipTrigger, TooltipContent, } from "@/components/ui/tooltip"; +import { useToast } from "@/hooks/use-toast"; interface SidebarProps { connectionStatus: ConnectionStatus; @@ -95,6 +98,56 @@ const Sidebar = ({ const [showBearerToken, setShowBearerToken] = useState(false); const [showConfig, setShowConfig] = useState(false); const [shownEnvVars, setShownEnvVars] = useState>(new Set()); + const [copiedConfig, setCopiedConfig] = useState(false); + const { toast } = useToast(); + + // Generate MCP configuration JSON + const generateMCPConfig = () => { + if (transportType === "stdio") { + // Generate only the server config without the mcpServers wrapper + const serverConfig = { + command, + args: args.trim() ? args.split(/\s+/) : [], + env: { ...env }, + }; + + return JSON.stringify(serverConfig, null, 2); + } else { + // For SSE connections + return JSON.stringify({ + // SSE configuration doesn't go in mcp.json, but provide the URL info + "type": "sse", + "url": sseUrl, + "note": "For SSE connections, add this URL directly in Cursor" + }, null, 2); + } + }; + + // Handle copy config + const handleCopyConfig = () => { + try { + const configJson = generateMCPConfig(); + navigator.clipboard.writeText(configJson); + setCopiedConfig(true); + + toast({ + title: "Config copied", + description: transportType === "stdio" + ? "Server configuration has been copied to clipboard. Add this to your mcp.json inside the 'mcpServers' object with your preferred server name." + : "SSE URL has been copied. Use this URL in Cursor directly.", + }); + + setTimeout(() => { + setCopiedConfig(false); + }, 2000); + } catch (error) { + toast({ + title: "Error", + description: `Failed to copy config: ${error instanceof Error ? error.message : String(error)}`, + variant: "destructive", + }); + } + }; return (
@@ -160,6 +213,22 @@ const Sidebar = ({ className="font-mono" />
+
+ +
) : ( <> @@ -175,6 +244,22 @@ const Sidebar = ({ className="font-mono" />
+
+ +
+
+ + + + + + + Copy Config Entry + + + + + + + + Copy Config File + +
) : ( @@ -248,11 +313,11 @@ const Sidebar = ({
-
+
@@ -259,7 +259,7 @@ const Sidebar = ({ variant="outline" size="sm" onClick={handleCopyConfigEntry} - className="mt-1" + className="w-full" > {copiedConfigEntry ? ( @@ -279,7 +279,7 @@ const Sidebar = ({ variant="outline" size="sm" onClick={handleCopyConfigFile} - className="mt-1" + className="w-full" > {copiedConfigFile ? ( @@ -309,12 +309,12 @@ const Sidebar = ({ className="font-mono" />
-
+
- - Copy Config Entry - + Copy Server Entry - - Copy Config File - + Copy Servers File
@@ -313,16 +329,16 @@ const Sidebar = ({
diff --git a/client/src/components/__tests__/Sidebar.test.tsx b/client/src/components/__tests__/Sidebar.test.tsx index 980dc012..44afac33 100644 --- a/client/src/components/__tests__/Sidebar.test.tsx +++ b/client/src/components/__tests__/Sidebar.test.tsx @@ -12,6 +12,22 @@ jest.mock("../../lib/useTheme", () => ({ default: () => ["light", jest.fn()], })); +// Mock toast hook +const mockToast = jest.fn(); +jest.mock("@/hooks/use-toast", () => ({ + useToast: () => ({ + toast: mockToast, + }), +})); + +// Mock navigator clipboard +const mockClipboardWrite = jest.fn(() => Promise.resolve()); +Object.defineProperty(navigator, "clipboard", { + value: { + writeText: mockClipboardWrite, + }, +}); + describe("Sidebar Environment Variables", () => { const defaultProps = { connectionStatus: "disconnected" as const, @@ -622,4 +638,144 @@ describe("Sidebar Environment Variables", () => { ); }); }); + + describe("Copy Configuration Features", () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("should copy server entry configuration to clipboard for STDIO transport", () => { + const command = "node"; + const args = "--inspect server.js"; + const env = { API_KEY: "test-key", DEBUG: "true" }; + + renderSidebar({ + transportType: "stdio", + command, + args, + env, + }); + + const copyServerEntryButton = screen.getByRole("button", { + name: /server entry/i, + }); + fireEvent.click(copyServerEntryButton); + + // Check clipboard API was called with the correct configuration + expect(mockClipboardWrite).toHaveBeenCalledTimes(1); + + const expectedConfig = JSON.stringify( + { + command, + args: ["--inspect", "server.js"], + env, + }, + null, + 2, + ); + + expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); + }); + + it("should copy servers file configuration to clipboard for STDIO transport", () => { + const command = "node"; + const args = "--inspect server.js"; + const env = { API_KEY: "test-key", DEBUG: "true" }; + + renderSidebar({ + transportType: "stdio", + command, + args, + env, + }); + + const copyServersFileButton = screen.getByRole("button", { + name: /servers file/i, + }); + fireEvent.click(copyServersFileButton); + + // Check clipboard API was called with the correct configuration + expect(mockClipboardWrite).toHaveBeenCalledTimes(1); + + const expectedConfig = JSON.stringify( + { + mcpServers: { + "default-server": { + command, + args: ["--inspect", "server.js"], + env, + }, + }, + }, + null, + 2, + ); + + expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); + }); + + it("should copy servers file configuration to clipboard for SSE transport", () => { + const sseUrl = "http://localhost:3000/events"; + + renderSidebar({ + transportType: "sse", + sseUrl, + }); + + const copyServersFileButton = screen.getByRole("button", { + name: /servers file/i, + }); + fireEvent.click(copyServersFileButton); + + // Check clipboard API was called with the correct configuration + expect(mockClipboardWrite).toHaveBeenCalledTimes(1); + + const expectedConfig = JSON.stringify( + { + mcpServers: { + "default-server": { + type: "sse", + url: sseUrl, + note: "For SSE connections, add this URL directly in Client", + }, + }, + }, + null, + 2, + ); + + expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); + }); + + it("should handle empty args in STDIO transport", () => { + const command = "python"; + const args = ""; + + renderSidebar({ + transportType: "stdio", + command, + args, + }); + + const copyServerEntryButton = screen.getByRole("button", { + name: /server entry/i, + }); + fireEvent.click(copyServerEntryButton); + + // Check clipboard API was called with empty args array + expect(mockClipboardWrite).toHaveBeenCalledTimes(1); + + const expectedConfig = JSON.stringify( + { + command, + args: [], + env: {}, + }, + null, + 2, + ); + + expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); + }); + }); }); diff --git a/mcp-inspector.png b/mcp-inspector.png index 7ca1112ffb931bfd4f67bc41ba14ac5669a70279..4c78d03121fa83c2061e6f7a78d99d9f44c8a942 100644 GIT binary patch literal 412178 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

QmLnJ`$F=5z=0N?+bwP)1Ud4Mhzs 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ý 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

9p4pt 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�%_Yy&2}9 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 literal 394507 zcmb6B1z43!_dgDAN=gt!KuStNKv257Te?*m>F(|p>DY8hBi$X+-JP2T>Hgn5&pG1t ze$V?{zq7Bs-Lq%zS+mxf&#YN%&0wIcvn1FLF4WdF4iy%Z-IdhWn(Z zxf(r?EXPmuKr2~Wkd-go%G6iTRrT5n_V3t4hwvUxK3P;>lIYvmz}~?74Y->hn01@9 zD8hfA;OV+I9$h**t^pAZqvag^s;NOEga#F_1hvC~(6Z_;$Dku#w4s)_zvB(S7Ps`n zR~EBOz(0tbZtwa*WCq78=G%sD07{*Ka&#hQf%%eqCb0W@4bcabJ4}4m-`~H=mxNS` zQjX3?Gj5Q1n;Ln<(qH~r3Y9|VWv_JvQx-2@Bc(sX?LAG`y;%+0H)2Ail6>7D0i7(i zw%Yl=0pwV1%z$ejqlgb^#{4&Y&5_drA#(I&X^2+NV_y>oy_jIw(KwD+J(tn&`0;7_ z0z+gEjkdf#F}GXzrjEkG?K%XU5@~f0J`0kcGQryHpmIq&-O|RAZ%Nq<&~wXb+?V)) z5r=d;8ShfbPbmMkCq%|84!Tq*jp+SzZN&hB$z2^V@ZPvH@s{QefxZf3Eb|g1JX1c zZkmZ4_oo;d-w{iv9rG!mp;4y<%L}p%BRS87q+pP&_Y>Lm(}l?QbzmSbc}4B4Zl!xc z92}DzK44MMsJ(jD_*4*tg#c?q$hs z-C?tN!1rjQnU>)G{08kB{F$GezeUuKb7b6)CXlb4SDW&EoMABDQe!pCE2!|h5{}iU zbJmpM2WLJMKGLlMt+xCu%M-eMr58DrU0!Cngax@mGvO7@g{j$iuRN}KZF56*mYy_2 z+55W1RTG};9vEkU?=zVct(Mv*NCl`*pMZTUN;CblS!!O;IlZh{VL&MxEiEk>i!~+spfl&@+52w$0Y9jZ1U;Z6p4R99_iev}2HtLB$+FnDp{3>NSU&4jR?@6g~@_~_$cGX{NjG@fRA#eaH53Ag?UM+IfV zTj~?_6yli&Oez#UOir_^1)`0|&JwBy7uOOT1pc7e0G3Y_0W*#GDgaSCaEf#Q0p>`^ z>np-*EHPoZh^K-9qF>{?T{7`iJqtuCiI}?G))1_aYCLR6s=mUD(*44{^wG{m%Jaod zQ-V-NdD0JCFuno@=%>mLk(9$~dKC%f56>HNIUzOpXo=JfV?#hs-swrgGj!m;d(zpO zUh;y507Iv&l)eBuzjM2U+yPvyJ+DG|hEB1*rP+2f9X;U1bTY3nRY(?&hac5FK_gCPhA}b`_BWH>%`syS~7!?&Q8I=_66)hL# zBiFMb)=*g_V)bsqMv0l-09W_YJBYT&d{#`q#RW3f2zpP4V`g7K#Mt>J@fO^o&qV&SZ=ijTaYw-^&B%a!J+6U02&xp=Rr3 zwN3mSR?V~K-Siuv&?ME&ru}FiVFupEoIiIWJ-Io(aME*fJ}ugD9m&~&-!j;tn=~J4 zGVs8g!fAgg$uwnX(V1%QGl6h`K8LPHiW*XF8h|^4(}_FqZtlyJKID3Hu zW^xBrx~3LcdmW;W5LdM@5(0|@n{}hb%6?kcGK0ki(~7gIMy{n$qy(hMvehMLrFarm z6UpK*6Ze?v45Z&1#N{Lw)0@9PsCrlW()j&o`ou~l+4Q&1@kTYBzmnFSsg3hr=ff$X zC=C{z7EDhFO;k+So8~gRG0U6enHEhyH^r%(uEaCp*p=mAsgtY|uj@U_ZK!K#cJp@K z6m1n9jA)G*C#}O*z>h=qMXf-6hHr~ciXTjXhyO9`$IEE?FPFL28I5c;Z0oG1*0l_3 z);3d+m0_ujj~ugX)?jLIagD5|m*z$_V{N@vh5dS+nN7o%ur=OJWpiQ2UVfc_-BiOs z!(>}4>3Bv@MsQk3fIf|W()nwLCk_KgoEw+Jz4Q6aJ06oC7f=_b7wYO$LQ7w@5tf4@&pXgxG~>Pt_ zjJ2ang!S^d3f9!COq?jRa&CxQiK>OLg{g&mfO>bx*T^)Vp~Io|G))sy=2*?P{b$Dr ziI@|(MbBShH*(*6_R;iVO*f)pXExdGDYYkkOX?ee@_{Ibpn`r|tK9Y^3X<`@Jq{Ar z6Gu^+p<~dQ9GuZ16*h}`PRmW?W^@CFO@tNWmq=Gz@o7(JKNs^9qyARg6^hGZJeQ^G zt;=VngY<^%y`FPV^F``We%HCAMWQVGa;M-<;3&CPobJ0f1|vs5zeKV{KFfYC7b$0- z<+dznna2iWv|FB6?nWD2=XdS3IjG*TvwnT3e3+7bomnjE9@fwCe!@9 z0K2{isedNwl$(RfS>)`KwA{dgM%LWe94Wul=gJbMK~{4$t(-{xFgQs0MH4uMvFUqzuCCe7 zjF0?o-`^^}#f-Ikd#F`nMBFG_QsNrXn{FH27=6@38^aN;9ObUsr|EJuIowoqYil8P z_3bQcUxI~}loo@wu5`})asU&TI!K9Ajm=K)mg*|+hoZT%jFxL!YlZeGZV&Fyg#8M1 zW4uY#0`j{|!uO%Ji6P9<=2zvaC6^m9U*DdND~)5S z2dX1iaZkro@6DNqEPesj3ft^nsjhol<=ZmapZmH`;tDokHdj%Bzjr@DJBd)eiZ&Bh==0ksmf<;=x z${8J52)MT$Y`Wf$>O^-{gwt{Hv3;=8E~&|NT*`##E`AS@4_70vnq%YIKdG3An>b@w zHW)}j;dZ{lKh`*QOgZkNbL=vRz2U)aQCBYy%TjXEPLQR zn4;)Hlg*ataC_Q#*EqIFMC+hF!eUi_(x+%Yu|9FoY<pQgbK?5R1TR5JSdpPEK7r8k%Cu<;@2+~s#)0dJ0 zQ2}KH5G)if2o5Mg0UvHCyx(PEC`u5_f9jz@Ab%qe>|f7F1K$s?ufXS_&wsyRzWIUR zfnU#ok3%Z--%lg+ro#MPexd@jf%xPF#KeGac^xY~Ju_=VbDQ{};D_-MEksoT?y$%n zK2TzEuMYwGQ$`9ZHY!q*>^kPAw4Zg&we@HnOf4ShfH)o4fugCN&1WJ9Qxh|5b_Xt! z|2)AClpm_;NQnOPh>bB9iHejgk$}0C9uYI`JKA?7+(<-3M4VQ-`s{Lo!hdxKesPf) z+SpjI)6v=6+tb=J(3)Er(7k74W21XVPe)Jx7I@;VwWFEMXNR|D)};R>@;4npJ!>5+ zBMTcNb2Fj`x}UYpZEd(nNFE0I{rWGTdJaa9BbizMB^Dqc-9roAd)jw&zi9(qIUj1- zWsMy4OjHGpOaYw%V{pG`rf1~*Plx~0^f=@nT~!{t(zCL@`?KpGP5-}L6|MEG1k6o= zL2bAnC+x4ze>VQrk(2I0_CIv-Uq%0?7SJ>|5+~j7S>s0PLL`5H48D<|i~{ft!0h1# zLj(Ln`QLA#48vWKa*(?Q0`Y>x1o;#kpmxDduODkgpuvx=-cO*90<@vpnvm5b3$}^0%Zf?s-9v%13~@umPO{yog^ z@&0##SCk9{Wh2UEWytc_(?JvjZTQSHjs3Cek^lce&qMjS2WW=+88R;1qd-tHAZUn( zK@gMI|LFNoO|V>02&vx5Y?Xf~sD&RO_NgT-^j{Nu2M~jKNvQTHTmbvG*#B>|c!}Zwq!aYPgA(EY#y-e1l?2efY(%Hs|7PU> zwn9e&ta*xI?>zZU42ljQR*p^Zlo9SDy~I6fKDKK8tb1r&Bi=D+@bC+mOL)CWGG%!Y9Y>$i|- z2!anNBhe_p{g+co)Qte3OgFcb_zz-Q55(x)O$h!iu}=@g-r<-2!P%h`K+O4;m>=f% zTK(VR{cfEj0%i{HtLz`>PgSJ4(ijP%)aQ#~~|F=*d z0|=z$Y&i7pk9kyim`56!0+dHy|8LKKs3CHAm`BdJQpG=rSv?SAvob;Zx5UsMh#|<9 zia!!N6n+qM^#fnxKaBoA1?B{{@$#H@S;9vy_$fWVl6&0ASh$_h0yDn%9G&VBal8;BG&$Iz z1D+cZ^Th`2du|`p!ztwde?wIv`e2hl4wqZyrrv$!uR}q>{D--1hJP5v8=j!<>EB!| zCBpK1fv(0A?a{ceH?{&B{%g74p)W-|LnA^Pf}PSt|AS>>Ul4K{sSpCTTtcwj<9_|e z5`cXV;LZCbEAt<&L5omxBHYmKRo}|yGwq`x1g3;o##nK3wZ`3V7IeJSQY2#+B4V8q2lkWJx!8&FRfqNPG;i2VVN;fldaO}EyT zj`aU7F5(yusxL~L>!_;hKj|g;nl+)7_zjq3!1ngw+&}o`6Y_vB{e*5)UGmxMOXL*l zqdEO!dJq7^VS~UbYDn_f3=0co{(`sc__%k{9C2mSgSAx!{y(j}q9mzEiR<-_c?aPa z0)g+J+u+6>d3X#Vp_gilBEGR>mZ=Hqlh4z^dIVg(7l>y>Fzn?k=^-sk#vz1%5dIML z0pMMhywr~XCmKR@$N*hk=2xBY1*D??WmJ|VVEgzDq>r0Q_{Y(?T~v^;X$#Qoe28D| z<3T|~33;T{EVy6r9xOEERGBZ1I$I8uE~y43_m6ta&`!YojTO*;o($&+f5Dxq=we`=gVLiMICB zroWs3*x?ges&K$^CKFz{NJU5^_Clq)dYl3ecSN6O*nT9-HPcNOCHRl3|ILjL)dL54 zZGm8@--v+ff~^+=-DT@_oIXb1ZBgm zCn)IUu>?en@PE%pa~SW7WoQDdjI1e3z9;`M@C7b_eAm4I9rxc$&n3o#1u=E`ZnrFl z*be`J5>TUhbF8VU4IwxLgRb`K zo+Y#qp(6j)4RD^Zcz5o7jv1(#w1uzdlr(~gv=oh*{GY; zb-}l=j|h5{x8%WNfP10q`FlQi4PP(4g@zc=Eh1p|4T-+I{@bBEgSFW-IO+2K=D&~q}>U)B(?$h!aV2!A)D9by9L zzV3@ndCvx9J&SA30m!jztyb>+qXY> zu-KGi_<>Zu9bvg44{Z1pAs1Gw$x)(sp+4u`=hocmxW@nks+jap=mjgU^E@A)_v47a zw`3xO2mi;Xr1Z_-oI;@?NCSeyQ@EPo{Rhy^*oY8l$TLC+*F6R_Wa@oWY6)7*)yfu{ z_F4Sk_$J-rh=ECdz~5U9K!y&8D9f=4@frWgP4V&o{2D$GPU0UO%pazi1s|>)>c0aj zBa~dkd*={x2c;}FIEx^zbe>?sP7R_-E^P%*rk?^fXGtI+`!B2KAp?MQh60tr?)hKq z?@uxD9|C(~+!v3_mKX96azWUWr||wO@&P#!+z^f1h9eeFlL3@Xy~@J8ML8-gtS6v* z517aG;qVaFH{7A6c|NX+-}w);Tv+~4&{f~`ak;?(6ifjEdaL~W%s7f;^6QDBSwZ{# z1qPaL+?u#Oi4-}+gCAD*W~<5_wvg0nzHn(aT7?#A)Z`V?nI%m{QGVd>iD8PIXw()$ zmV3$K*EHX#gRNQX5>2aBFF9+!pB;css=G?JW5sWA^1}UMCj?z~L|$(4{KovkcW7V?(^EC)g`)m+Q)Y zqrTjGoL_y2Slrf#6A$eaPWi6o(?9i;BBB*DH!&jF=@n*%X&zV}uwq9dn* zg)XhK3{Q#$ZpgSdPOba{*-zD3XMNQ5!HJti-_kv7Zx6VozK%WE81A6XXruqI?>@Ja0pc=PAo((rPFhOY z2BuU^N4PCB#1aa_{|VmC1$>w#p@$3r_sdN>%?#T_J5}riEBPErem(IQ@775W|MGFp zU^6e`bC{t{I950n7d?-P#{z=sOru^NOjbsQM$3;`O@=^EMvY_QxCAnL0`{fdED>3(!0cr3?W}z zcw`67z$lKQ7wFY4>$sRSa$);(4V$rVHh>*Y0$6cr=Ld_U@nzV%K5ak0k!QPC6{lSs zt>DI3Mt#Uw;OZ)qGTSv;t@5u>d`H@ym$9x3xlLet;ihE)4;h@vhN zK`HJ7$%Gow*UoJ!KqT1A%j-&KVJC%)#ZRK}kj+yd)Y|>>L+BV#f~z!`wF}d@DH>^1qZ;?;Vt(lN3tFzWr|ERbjO=q= z8@05$8(yP2SGAbemS>>1J((%&5(jbVtr!Y4C>Lvu`Xa|dJf{4m607ifSR%Zk2b(k{cfi#L8>B(Miwo8{y?9B;hU>rwjZP)DyaG?(v;y?rk5 zEC`LbKBhru)9lMa9)o7JgR0VKwza-=CVNF5&abZz^J50g4_^3SZGW9%VdB7GCzmR;0@mizeArX?iC!b7wh4tD*eI*QYSycK-k!{<8+D?5%Jtx^ z@BLhanOhVXbcDQhCRxP8=en<>I*+;K<=|~rN5~~m!`D>asO;J4OA2>xj1M@-BKA0I z&qObX{iQ($q*R5vuX_Q0c3%>(yD01+w4}q~z#*??_3y-fK^>wG&nf=c zl*ZrDGYY8u)Wpt`$H^jbVvBe1sZTtvZNkuxb>kBzgTAjZs0WMUpId!~kMa9MUU5X! zo_2azRs=l}ln%#*Mj-=jXfP$sAG8MPXNAd;1&}^#cWJ=yC^_O4nYTgAbuU8w1U6tM%JU070h(KFraj zM`BW&%eLZe6QmW(hxG}Tr`Zmhgxa=?qoY814nIESzqCMOYg>+Iji}@lXKNyb% zl}tKHR-$Znw`Y6@GPYHA0$J7(f7>1zPoJHU#P;Ju6lKJzo<@JY>vfDYm|em@{8dgQ z#h|Pg>=C84nHzJ0;vaQO9N&S*S6LW209aMm6Y zBes^pEcNB;=9n_fPM~*F=jNs+C62|V`Y?*k`iX0NXaCG-l4I}*;~+jqIha0E#<)8& z5K#69Pm*&*&F44X0ypCUgNXK@Y$@Keh#QaXZJqCzs|Bi`R`=o6S0^HXn8QMdw?SAH zf+gEBd3YJTk`iYX^76u#w-9#+3JS*a>uZl!C!>RmhKC3Zx11!BN9n$Xy_I0KWVKEl z4OA9Gg4j`<{kXfcJr2{?w6D@=GJUELQpX40-SlN6rS#KWHa1F!>=Pdxgtg~wtk;vd z9-na~&|3#yplo3(QmIEFZ4U0gl{((C%RPWr+KkHowdB!to+J{UB3BSMT(P+Cm4UKQ z*}s}IFxo@H0z76f0!8`kez9kSTod`3fCn=Gp2^8^?Bszq)C$v7e@4LF zSq3+Qhc zpDWUwk*g}^K&!i|4Z3uvOG|OT1*?EeF=z0)MgRpxjsZ;BIC)HjZzc0?}b$a$5I3HqPyPD&WZ*4zxtJ2S4ilNxR8!kvh+ z$&5Q4t#)MTOEso1aMg`qe-u;BSN8`!gq}@EV>H`i663_y_ZRm zA0%CF7OU+_CDo*lu_&eBd5{KbpphY}viK?=(!{y;>c8%6qQd!~nOeTV-MpH^AyVJh zw)$Y&1N{Vxo;Aq%oKW_M!t~S0kHPvV?KLbT!zA4gVFCTa_V_G-s>o&ol<#H|O=zI_ z9<^9;1Fs70-FJ5-Q(z))@5tjPaWy$-$)xa8zLAOXBCd8>?i_eH5{PuX!S!_!PXo4ByJQJehCs_ zw~c3Os*0sj7HAtJ&|oQe-*~SQm2~@dLu|CnhorRJeyv-=Hx(YD(s2`sxMtN>#GYkq({`A)DOm zARJO$y`OOj-zX~X!1`M~{pGIb#HKYbS1yZWs$%?XiO@M=$Bu`#!Gs&CY1l^Hfz5SfFNHS0j*8j8k^bGMAqwR3D3?hzC{E&F_gB zZ7vK2q9ry_<-WBCo^akHrB0g~p3V7QIXUpxP1mDi(kN+FLp7DCfs?zS zr`Z_D*=)RlBLV_f>H*)y`?x&1RTJ`H3p}lx^QYqRt(1PUv7fuQDE_ z7OEry9&7eynemA)1N;f&!?AjOB9JTTTwNuED!+nK#N^Ar>@0L~`m(#`XmgoonTal9 z9QsycL5-zQj8n*iSCl+82xksm$f35_v*C_mlXf%{NBAf=gIO4XFgbyxK-@@<+*SeZ zk{sHY`7WO=)5`8r&bPhJSx_G3K-7;Bicwx(Xh4Z}@C(~yRbJaA6y}F?iuX3nC%O#+ zPwsiS>TJ(+BY3|fLzUl`<_)STwaSYaD;*qpUWR0wEk0S5t-SO-#ltw-R`jyJ`1HCLt*-+e&l- z(`A{~a?~eSY#6+&Gsst~`&+JRg$LX0j0d5LuGR!Hqxn8@ZW(Cfbr|Ta{u!O8RPui1 zZ|1(gqOs-gDXSo5MdRfl@pk#`4nGzSQJ~Y5K$_V$hJ90`@rH%d5R;W z8}SSVgYwxXz9+lV1Zp1~mM=JdRq>o~QbXBv7Qh7(_~?~bTO~B(8GyrabSjoTF5zHB- zI15IrzbRK?7D8NmjRqtSAh)m%?I8_>}S<`>C134NiI|o@;_Lgt2 zTz`j#$ma~oEqG;ZWm&xY^?IcA+sZAWzPrJN<3TuU94?Cn$bv)T%bmL=W z^*;0*ypvP$J^6cI90z_0#$;%3*Xfl`r&PLm?R_c@U%BJ09F^SEWl5lt*_b?eSax>k z4&DSN8e&D+lVUpS>=PS{1N|yZ9@VkNHA0?Pr^ZFjM*HESQIDF!h9*Kmnm%Rk`R!>} z0>C9+x&=ab=2xVEr&=Gi{n}6?_+yWzGJg}c?Vh}Co1)A)DZn%ios&v9N>(%U=O4-MoL_0$1(G65nEPN4XIYycnJ)pg3tI zO_f55jhf`A>B&y(F({!jzIatz~fqyrFWlcr??pOb%8)y3lNg)UOBmgUY>;5{G4rqbTG-|(dzV}A~%=~u4=73}ngZ4%t3Z?JOaEj(&| zuxw*}O|IK~f&!3~a3Y(iaT!-j;Mz22rw#MOji!#yB5Pe%L!pK$r!f$|Jl@Q9akTmn zHJC9JO+9INF$86Xf^N7Dxfx84p8xO?Tm<5k zxjI{61nQ(ZBdrEIuw3>j9)D!)>T&$wjz`ETUZw11k1a}m5{L1(iLJJ;Td!NXVmPq7 zyOZBC>@7BYASaME7|`PFSF@v!GGDCsLRuTt=@x(nQa~Jt7e7F1L7&FLvyub8j6KT@ z3p4u^Xso~|<&R}csrRehPU_R=wpMrMp~AZJiXX6+I`UQ0p?llJFtGecP^Ss<#j_q? z+&>k6#N;h2v!2zj*iCS|-iJ}EbfN}x+lx`_pr5c1;L6QSz2Dm=X%i*N3}EEX1Jwe# z#&W$KX_TwF*s9P&o@@p5a?-T&buXx>pWsaU-MPX-)7xz!g>;8ykeYRKvGARKJApaj z!V$)sCpR(BcA+vKFKkB;rkLuQm@f;mgO=tr)wr)MZ<{YTw9WkUH!JK97Dkg{x(vs! zz)oEi^=u5rVf7of#Cw{s3Z7--$Bp^FngJ7JKsOu}FHtTf_=2=;yihCVhn}?Y)ayjj zg4z1S3G>o<1|0+pzXPF7;tuOJS)Ouo4a8J|9XID4x9@{1VKcex7x}02H95{|iy!dt z*YlwvRv)o4M>>vY71sx7B$UmvS944|*-WfQiw*FCsNBxaDiPicPJ~tSf%XEP{`!Yx zZ!-&m&ljkZJiX&w+d6Z@8Jk2%yl>j3%t1z`*sc&M&6#8}JA7#{n#jJ!w9$E3#aM>2 zdk!>2B%Dw_33ltLfdt@|8?IbL_|2M@|MwGDaB~xQPXO z>7TcUi*QsGPT(i&B`4WI=Df+J?n0kmpHbR3(xLF1 zXnpNi@kQDgom>V|Uy_^s3F#c~c95&t+FHGA;(y`5?wG2xWLY+$RH?(HP`nvgV_Yk~ zF(~4bHMcw7aPCUnWI^dwAuD+4KAJ@k`jUAlueRwJ3G1zl^Ets->>x?|{_b4?d*_ZX zsy@B$n@<+{1}z|Dc#V!8#hu(Q{lb1tViu z(WRy)Iw6BXO6^SK`}Sb$VoJ%WcXu?=S`ym$@_<1t;xo=AVp7!<}8tqw^j&9x~jRV{DF`Cfb*4QfpDN zDAFpA70$2igbyOSDcQa#?r`kg9NNsbe=l-Muzp-gA`}9VrRmtb>{TwlaphUs`$5Xg zF;_?0{i|5i`+$R!J)C3KqP;cp<|~zlQb+&599WZ0$hoy=v=#u`hV(S26|{ZPnarWB z^Z9~np*M~FJ9|tZpLM|FkQ*AZ{_`4~&wP=?Sq(R|?K%TQ_qLAq?N)c6Gig`%k7r6F zHw~}m)@Ra}ecG%S_X}@NUDC|1Z?B)7D9!EM9&>gP92DY@jh|lkaHcRQm70yxe$#WI zjc-$AYchsaqS0y$wA-)1!Cvc)j^9?GUbT>4&F-6=OReGO7=BM(0ZCn_nbPAaa8NoQ zJkHmkw*s<8qzvGXi77SavZ|XN+Y#dGYtu7oOc?VqeYdE{O^jLg5cZs)RlEQBl z?-aga{MxqX^%Y0uTroWv^4EH|v8(;LQLaL|s;&Jo0w~7f;K7Jt4E@pm+4FKmmLm0^ zMUh^Pi8oSSKtqNg`X+O4HrF$m#R`E3clP=JbZ50drgnY=Lsb;FhpsGj8Fe<(RC$V3 z@yYi<-eN3U5hM1$PGAha(8;<(wn5cEd+Ue?stj-h@S#|(P`K7Q(qu3krYYmV$?a{V znba+{$42;(GTp0(6ALx79Ko$G<*xoxqV1S+*`mS*GBfzWY`01X4(T1zMixP@n9F%= zuWMnjo$-}Whw5pyaunxkoWp;u(Fw7bEsO+TwhaO9q%GfhsSd>(k%i|@Y=Z@=r5@t0 zs(oK6FlczYWAa~u*>*N>GLa%KSLIuE;{yni^-73RH0|2_tFRj5gvP(iXQhsInGVoe z5h$%_*w+0>PEsnKkBcc*p^iMMvB+7Hh5}Ap#*fG13uo=*wtiJS<=+k4Qy+nR^oNWW zzz)&W>vf&TT&A|-L0CRfqTp<7W`Y^TNNOD>WM0$YwX9fgka_z{Y*;JYzLd|`Voz(kkPl1NtPwQkj99dSLRP|P|smSVO{WKz(J zKCw67$j5f_7)U#(*uyP3I4YR!QX@|XG^@pfl}$#z?YeYHYtTz0Ocr7qR~i50WTOwd z?IYDVv>Vty8YjGg?jq+8NSab-G zNTd~v3gZza1aU^PQ)5E&jMsnhV96iX^low?$Ffan zvKy^j%rI>mLQIb!N5myyL|mpTQ$pl<$M)>1fHg$iQd^2Fp8BSuWNY>=gOV@;BeVK}6dICBs&{(5}qpDrIQw z!78aety{Wc&*eJkecxENI?O;|Z<4w{6bq|<*kJjQ5QBqsFF#o2vA`w6uI^O3$767x zQP(^1T`l3)`oM|>CQb8N(lv z4^(x#5-*~*QD>V^ljk?LxVjJkSC4Q*Qy{9zg3Xlea*=mgdQPPJ1-wlh zaP4KP-hOn@Hm<6RBnAjshwotgx7^!A@OTG zSD?N9NT1jfOP#fTdjTA2SO7;FNkTpK0|?R@R|!?yk_`I&ld*5qGKoypssts9RqG-USMMoijN-(f^OxiCEKOH3R{y#>{y5pCFbzH84lC2 zLKjb>B-Z417nM;*Ox4^=Y%B?mk6a}=smq|CP{RBEHy-5*QC482;Xs0iAS zYy^_?T;W0^EJgT}fZcBlh)#-2d1{Ac;AzDR>;BT9(?9&8g3LH3#D;e_hXE>PyfQ;j zMw_+K_KRW$8v}(JkX|i4X5^5~Kbq}M8%xtfWs3C6ULF24wKgx}M|0Ahn0i%% z%$SjfPlGCE@!#fg-81EX^rg?1F;dPkxc`s`y{1@>rJm%9Fxg!zV5t}VF+|JmCdhTw_e-WyEg2o-P;g4 zvEe6f+#Sj*%93A=ST!(eWDP4`tRLRVXSiXxmmsEDUfmINFQk1=vdM+X=1?2y+2AGv zJ2dyk6THltE)p!xV`H3kFt8{wIl2#1xw%7rN;O)k3BQ$I9j2El6X~VKR74v&!^Eu` z;G<%5K-oz1EtU!)B9U#(lnHZkh1-%YLclKHc3P@dy{l7A#II?i5DoWrjNwaf-=RJA zF?8C>;S=b_q9^y-&a~1|L`4?gX{4HDRF_H$ZS!N(fIx1iw`|I3jF4H{DcdO9(L1kw zk{q66vtPAZ*ygO-FmF9pm(MZMDO%89vx|V|=8H2o_H($QylaMoQU-X)TXp;A!KrLl zw?p1nr&~q+@Ez{Sti0y4cg1I6T_pMhU%O7Y6?}47 z%3yPGfn!>+&kC1VMfiO5OHQYUnfs??_c=$S+ZZmj$g<#pfY5EF6XoOSP>1CoC~7%0 zBGgNp>&5M5<`a@ePZj$HrvXnTYu$J^26gtw{h?Swonfd_GP9!G zm(lW=G+KLvmn@FlM*-4dUL10Vr#fW&n|e3LMFh`N3JH#Y`%vgOYmXP3e_sIgFh@H? zggWV7yc_cA`}MU*jXAt0ik3Li=C)HxJesy@f2Kz|d)Kh%GZv)Md^V{w=kfef%o4mi)D4-2OVogup;IQj6LVf|?xLN!g&r<$NIfW8lEvm0{&-Bm;;WPtz`=Je$p-mSywwds9 ztxli#^-K6$46KDmmu*ZX_335-w_AEtd$+njtfH)(D7=X@ZgnX#v7_9m4>iV)R2}NO zO!fi50o-Jf^P_=#ntw2#L5=e2q=9%a$#ATkpdZ|%GPtpNbTh1|`P7WegWJxqPC(hn zRmf~$?X7GADiyy)*({s;VOT6{gN3}~_hQS<3B@S7;zf~Xw1!ieZ~N6t1dH3iB*}A4 znK=agCCr(a;qvW;>ej>_htoXL zy2R*@jTjCkNGj(j{)r*n7Tmb>h2E%UN>#`@Q1KuVVYNa>>9LPHjFXoor?PK~2R z=ls^E?Kc--_A=NxTCFI4gz&305A+iH1XI=h{Naq(`%;w=_^*yemKAA>k)B!U_43lt z2GDR%l)bbrMic)Li31;8q?(lfB(^L!*4r2528zXXX6@waRDHSCMXb7Qeyp;;HHcYT z)T|7{h8HPS)uv^?bPk<1(4t)mjiqu!gWC5w-N#0(^u9}*og!0rZNyDItj{Ia^w#XI z``!{eAeC-?~Fc*eJX-e0_|{Bq4CmGWM>7dT91kA5rv zEeM-hGDkWEy>%VM=4=kGkj6AYp>{U_Ml=@i0$ zbKT6h410T?t~YalUjMDt_t$6)%02KG4pWHc&v~zv>&Zo~5hS7VI8l=kQfnf|v%;n8 zL$?(&cU4D>@-3Bpe!4%qcm<|((-5al#+YJ@0o!F6#w&MbSdHar?^M&xcAs0BQG`QU zTK3Df+HYAJE!H=stu{N#gyVqZ42@;-VzsMs{wg)J;ex6ga|sfg6I6=G&G{gHQO{)! zONp0=+cNqm-51^9=pLl^PHa2zL+|~_F^H(mTQ)Djf8enB0*N&2c0f_nrRmS?9* z>bqp~^cL~Q0er_c^ZIRPQTk>6{=w0k^W;T?iv~Xqjw3@%`aDHSTKs(Lo=j#G1gLWN z;)Yv)ACO(C6sR}!v-DixTe(bx_Q4RB+h33uG#=4lB4Q6_eD1f)DPc&Sw)X&{`$_W( z7PaxdM{t~5Qt;s1s59|2^*R@w?Y~L7nYINlmR&mje~i6#SX6JcQ*_j0~6oo7x#BR&+)#;@&30NX7=9Kx~^;O zwa#^(YsVS<5xHoIk@H%wlzSf13dLJBL#i%(g3b}yg-HKm^_Xjc3dZn zN75hvHA>W5{B&1B%7`j_rH+J#=YhG$9>AW0Z>`iaWtcIfyCc`dF40j1*3>OvcWEZw znRgja7$v}pPWL7y_4{`Bz1^uM(hunq%+eKg^wT6f_zt7dsjb>Cmh4*~=dvAgk6Pee z~eW~_=^%?d4F=k=>DcJUUU3|?Qu_XIE6xh z_;B1r)dW^L$nHL{Io*2!aEdOyc8yLJqm^*FKi{YB&i@gH7ZYM!*i>tiL38|VstqHl zrcjkpnRCC?;3hTKS6WbbIvJY~wURH^j!fz6PdDw^fk@3iR^?M#8Unwv8&LpF(rPak zQo}`k^L+cyz@qN`Z@_jTzFjd_Y3!!t|D!fwL+5q7$-P^QM=b%46>An&54gTD@|lZD zpf`uk?1E(*KfWM)*Q1zPBw{OfC+l;$XKXMk{&1-SBA`UB!NXt`PSd9p*Y)i5d2P6H zR6^-=F$-th(^o8C%GGXCzdJtSlIo3rTGD2K8FlmC@%=#d{e}-3a0XfqlLa?dhI&35 zjHW!zG}h?sUlX@=Kb2?MO~)FNZOBp+RRquzg{SDO788(>B3D1`@Cd>)Is_UD=lC+Y*CjHPY4?Cl#VEU=D#7|K&;CNciee#YMgv}W z{)J)tvc&`2Hm(}B-r8smpu=U?1N=rL3J9-BqmCG zID$9>8oKjI?5r;m%4KgJT}7Kxx0~S{w{6LwbdkDx>v+3qkT(mQXSi^4l-l_4c;0}n zI=X9B^g_SzT@It&WW7c|hx#)nJF3T)g7hRANQNk}+#?6gW`s>b#xL znPU`bbDdU2J*9qff;2`$i^^soG`#oS5bX2&C&}+!mzRgsx6yH3r5{;`h7oDbIjv9p zK_P7hvO7GK$8v4EhK6?*cwG!I(|oy)*6?1dBv!hh;SQ-L%ny2V(W3U@Z%s4Qzqw zKnBlO{gO(`#SekfX#IY;AHD70599N-b0U&`u-z01VaV_@NH_Fp#!Aa6jYMb_%PtE$ zZR4Sz%2qCI5CXJhg?rswz;dr9N0cvd^o1yseHz34Wq@0KhG0ju96e|;jHvw1Cdb;c zr54DH?Tuo_o1B-}p+)p_yiopcJS^3a$gqoWPa(!GvBvKmD7)YkRnG~4gjQ~!1MR%(R6g6n>k2zS-D z2@Oi__ut}C=!CTLaV~#Mt&I;YrVUqFtA`2iv7AC?19M;4T-(+gEZrX!g>`Oi*?NA4 zXc?c{8u23dh==;I)9mv;F@Uq={gAIFzQ zdd)T5r~c+b9@It0a+bF+i@%l+0Wikeih8DM)3E#Yf}g^T%hQ;*exd*=(gfF^7N~>K z3<bbob#rVt%6dKlKK7!44CYag4$L+wM zgD87r|1_vw>GRl+Ss5>so_=Tc(M;&i#3S~XI=H62uaafxd`o<6^%!ls9JLyiEUFWBRc2&kCQ_A~NBBzn;mT&H%gIFZTD)21EftN5yJUD2zLYn2#autHa~l?EnBkg7 z^s$U}r4I3;EN<*gL)44Z)P*ZFs3L9G7ttS#S;@FWtTiz)r0avZT4Zlca+Ht84WA#Os~`j_UY*hDcJKgRGpK* zzbziE9Vw@!0-5HTrT;3PM6U(?=}v50!~>dD|Q zo^Y;g(n#W`c$QTcI;4q%$boNwJ{df#;^g&WBDSB1)de7;h>PBhdf)jgExW;`SakZk zE%Xv&fp`Xes`p6L<*ZrLZ5XwsUL)_-kSJ+}>r$I4Blw8lf>EMA?RnVULQ~;;Qbo*R z4g8{U`bO`R06O~DYB4-Z>Kd3~eey-a*N)xG{Zbs!u+7&CZEPUWMa1J@J1agzANXSM zn-I?V46oBckheF2RNzNmPd*{iXv6Q~?HYXMC8k+D%nS%2C(bCdg7pk^Z12ZkHk)Yh zh!C!y%r%`07=&1?{U%(ullgk*rEpJfF8wmvUyhm&Dx?n;yXADC5~bM&I(ox5OA^(A zO8-Hc@iA=pX)6sw>_CMl5~x;AoP8bOncm|TeKMe19&;sHVXc_YX+^gIZ$cb z!_q-JGN1-Mt62n;DZ)sP{ts;3pB}^)Uva!k?oU^nj9p$v$7Q~DN0<>AJ?QxIu6|~M z!SoNnn$a@N({~@xSlRAk{{HNxuVDX{IOM>b?+b187qz&{tm-(NMni_ID@I<}Ew|>q zCvWeOY-HXGy6v!iDUo#B9=F<-Q%sm!w=#7d+w$FgZ=NmatuI&jZmvkB#ScMF?08q1 z{x2^7QvHJBJMyq{J@Xw6qqKCaVzN7+=hlZZ|5 zf|-wL-x!3I^}EDmQx8wY`aA_RU_s(46u{HpV}D8|Fq|&1h60R@(|zHv=~{&*B+q%& z0XX{niB})UGQ2u+`X?wm?(f5Ap80JHTVKTO(W(Gasrji-oPU$W&##_w(@ zry8%gmnW901?D-tPg@*kHRm4Ggh?JiFMoit$uf|Rf?E1%HIZbmY$3>P?nfsgB~9o< zuZ3(dRmY*GOs{6?;*okHGrk*_)baE1F z=T_qV-1IB}%OX5CZ;+^A4)g{C%(+5gT^`OnYm3j9?Mnh4kzXs{q!dmha~!B~-lTlB zYr!N2qaKKjkf$EZ3a=RR{v^V54O2NG9==(^&hiSedbYsY<{`D6Bj4V+&yJ(kq1LW;hOP4i^ zb)FBxbTF;N4De1aUYVvzTL8CPcdWJ~<-N+GSU^!^opTG&Vc7m!fKt0aEh(d3I3I=D zdA!GCp#fxB;@R@XbR^*k5Ek%$lLz+h9!*;6swMp{d^S^6aCwOP`7FS#agkgIC^7lG zsm?6+-N_=6vK^hUax$eL;I)3wPEw&;V6+-+W;eeLs$mW4*wV7SwQwum?n9=KA`AUbcJT5xr1kk)%W3?u**}LIky@V z2(KKgUAVii$1K_E;3SC;=U~`R(IS8&sw3r|SnO#;yLA={psf6Z%4L!#CP!Fk-s1QSF@1+cq`uke;9Gb)ZG_K zLE^4!+irWm&4<3HUrUQ_rc~#6k=ZigOpIvWN<=MIM{G?~#KdlrKTIcFS7ZcWPNj{fDoWbb1~M0J0ZS#LY&IIsU3t zR8FEej`{W3-n}foqnjuY$9o%ERiJd`U`mm1zh^Dr)BXB6v_r(jlmgFWCThTYEsDQx ze|9YB@w$tmETCJo`n||x`p0>?z=rqo<1*Cy!GaoMURX&rP^>4fGy5rjzF!_9NTZ(l z_Y1BM@?6^W>P>n1Q=IWbKb+0l)T?&atJXN=*_1EmJdQT{mBea`tBZoKweWtn{Gq2Ec? zK{P*d->0(kQ1B&xIPT=&;I4T$M8W4aDnim1l_I*?bk@lPDS1WJT=_6DF!nj#dz`)B zfys3_jVsigiQ$Fc>qwSO#Zr}O{1^meA&g2aLGd(FTr{d8b(F96$zNUc{X%@@ifr}4 z{%EB?HW?Pi_NP9oF&1`gdC#7z3M1nDHJpcV{!oS;Xy_NP>NcrMNfPnnu+}e&!OU{e zsLS*Ywiafl-KbPdD}3CR`|9WsCgA%JNq3V$FaIbN+;8u8lP$D zQHw5co4qSlv}|Xwui~o+)T~~KNzU?!$lr}h>|ow-G=;?{o$b%(59*=w8s7k5LlF4E zVV2=w5{~yk{acf2&bD(!j94;@3n7O-d)s=gL4%1%7}qQ~fcdi;P6_EFkPHsPorim?<=_=bf2H8+usC=V6JP^+>M^dWY5+% z<$X}(_wJcUIx$u!y(~XttR9tzW}`Qn8h~i@=*-sR?#C_V+&KWW>S{*8{J7Ow8@8to z&JDa|p~tY+tnuy=AImYq84*Buigs%v>|~Gx7LGNW@|~zwdxxvN_#MJ8IMbks`OYn} zt=+&PU6(PNKeJ#kz+_nUFlfGoTb=Zcd+_|!ElkaQ`}^AvITn&_pvsuWsYl4ciD;_$ zC@UnO)&dc3bYI2W9pGJfv?liH4D$d7a7z(@TjKUg%mdQ2(1$nwPw-{6q znCRTJpmG>Z1pb`!IFJm!eyT8L%?La8o^sorKBc>?6sfYvX=xhYvBC~Giczo*W``Sj zG8l~&z2(Qy?>o8?-D1r34eX=so7(f0YBLNHe{!vsxbDC9$OvapdZ#;rK^oNSDQvLC z-u-H7-bjdzF?out6*XFWp_AL^UNk|Q_S6^;O{Zk92_HNHsykJSS;ZH>p--hb1jR-NiE1sm%O|eW zlH^VH1R*VRrF!GFlf6jxq}#3D5gt46kbA_za&m`lsw112jvien2R?F-UF{cqL1Htc z?6?BZ9GAM z2MVc_u0iv|$}DGUsjBix`t`NJHQY3JIh-_R6(>>m+4Zkr%YE~{n67<88+(;TMdZm{ z4`rqWC4hznmxUHyX(*Hwj_u2Ai;fQad*VN441E*Ck1H^d^xTdb?Qp@~VJYLRFwJef@ z?H8KunC$NLK(UNYj%;#>UG{*T0jjLGsdr$|(#HTA6(B>zAqS~LI&gcmuC|yaoIdhH zgBAWlzDry90L~-TBaRJ6*7_a@Ih-1M9c0SJgqgRxhJ&_npb zVvO3GO%}Ck$ti2`+{1Ip_jInxyXzj%dDq^Fk}SSBOJZ3fHA}hX`FE9OQ2ss?dQ>{N zL;nAeRec8@6?P-$14U$*$+Wn@^yl%sNlI(|aWQZ0wj*(pIpfRp6UH4TO|)yRQ%kF_d5ey+5KC=E39*9VR|lpVkRDOGiv)ckwE0R zU2WF{brkm~-L3ZN(QRqe!5Jio`{LIW0|V+b{MZnfy~L~u)xa_ z@lqhJ%_i6Rs!Z`un~T`+NhMyx##edDQ{6K`nsd?uu>{v|M*hVSiiFe+*E~A7er|17yZ*G`TWjSi*jDb$mA{ z2Xs^sk}YjNKB0YfbY4F4Uyn%gD*xd3Gm2RtS~%gjRbSla=VJK~(mGL0(eXiefX)+J zDhgJmiBhwg-HoMykhH47UmJoOg0ws}pFjfD@(Ar}IR4!SsNhXl;zSMxlbip3y@J=5jO`%mP!mfpp2y~VRL zL`N|ws-(8Erw)|DSt^ERUTF_LzVQI*V)0{IL&4^)#+RRnqJS&cY~s7c&oP?}pCohgOBV@*&Er*LtJvvT~C zA0HS7OL>}JGToI0?;+zO&K$?EJi&xkv*hl+iq>`&zQDa#5gD?l-*`)@qKvPcD z!OI9o;|}7DuKeVy%qbCrk`2J`>=aFS_REe54wpAFioo`1{RpG7>Xt><7nMmWN51^! zbxt-^ACLGOp22!6)2?o%XLu>t?mH12n`b4*wSAYF9yN$2)LOrKBKE;K53d!b-vUm# zkkFTnd3{(=a^HD&+e>HsaR0kkKV<%izxxyW_^YkLS+38wtPlC?Mi_9bb$hnY85`Ps zZ2^Yq%U#z#C%Lc79cj}-_S3RvoYVMKUdOB1kh+q1U>OFJ;<_wgq-#)sTx&Sr2>fTK z9!RoeBvmfzz5>*zks$*gs|8HJ$$G@Xz6NThdpZtc)5fsLd22Ok5x|P@>QtN{@t*3z zsGk=;kL$8XGdREV6pQh?h=6WX#Cnhq|LTu+jNKu~#kmBC7XmK7dv`;vEa!8n?B^J@1~kj08WtZlpNjg+n1J&*VVsyLSd(p%a&p z0$~?vAut0(MxAFDt6dGixkJoX@O4Ge%vjTGEoHF@m}U>oep&GFcD2u(AmhP3$y}q` zT4<50b|0l`*FapDQ=y7M7YV)Ick$t(q<*<_Sk=pBFV_4rehnPEwZb;rQ_bniecY0y z*~2oM8AA7f8x@?OrehaJxea-m;LtMFmmJ!Q408N9sCr22a@Y< zJjQce`Hbf?j`HbTp^u;x00THvR%wO~KO_})3zQeRcMr7Qy_U@gI4E;t&!)&ZS3+@q zyQBNov*o3aq9{;zQvy2%G-O*u$E?PUC`{kGOt(6pHm1k(@0!fisd#jJ8v*i|oO?Ni zf2Le$Oa<+%S!j8*tHt-`Jl>V{FjZ@F4cz*zj6~3AaYsoVHQC#X2nMm0*$9i&dw`=FOvoS{sS&49M=dmH5YK zK$!SG$J*$@cr<`wDTOcyMIK6bZ1Hb=;dgwXG|EY{=*~FR7Wdp-k*(@;CvLJ(EzrkF z37=a?zetu!x6w9EGTSM1InWBws#H!oUw36H>A)AO?*Cxe>{vYos*j5|HgTj1WS@pKIF=WPa2-1R4vRNVh$j zmh6e7Qgf+GC|z@&`lkvB^e9+|CFp(3s!buwg(WI*&$tSXx~+XS&;JVa@AlWaZsv9Z zJYqYalW`-Z+q^vI9vo}I0iIXQ@wdPRk;>fLzlsjehxx92<4 zXPhP#KQwl!l}jMlDnm~B1W}P1`{j*i058~5iQe4ZS#1JvI;y($wgK@uVdWw#Kcm$I zu*wfHDr>A#|8)52{C$kaAjOe!W*&0A{ z>Pkpvd521BcOE_}!rP7OotkXjT$jQR+ zo7VOu9lyRHwb;}$siul7vyRWxpJMQ+9^*i+fS!Wa3xF012B9eiar}fDI1Kd57WM%g z_Uj&E;2!?qOS-=DALs%A?i|pl7HB)R7|?x}vf+W;h_c<^W>ZPaDHgFa$2bax!qvornah&gZm( z>HY^10O;Lbi2X_Vy8zG9C0NiSO6LPmNJB#9a27)-ID=Tp*M^qX7w?J$h1?Y}-FRUH zAJi>aS7Q!-X{sI@`39 zA`NzB8Pe6!a1GVgDvzYt%-HqODTSIfXVbSTH+L@F-jD;XYyL)$73TfSzNeS7X{L83 zMV1D=FxR{mHPWpbpme=?+mcWOLkyJ~w4S{uA#!g$CvpXRH;88ci?p0_)`Wwkq|Nv} zSn||YSn_t0h3wM9xy&DjLb^4BAdGluy0~Ad89=*?ieXdAAG|J-m9YawG8-|w>u!70 z@4o$4^Y;G~$|PU^+`xxJcrSyug>3CSLax9I5trwCRtXN&ng0^R3?zmw%trS|cbY!A zo9$BSw^+;cB@4!~TAOby1O!Ks%0Z=16ooAlS0?TT6ezG=y(nbb_k2M8alXZ?yV)}% zd+avE`Nm)E!^CK3tlYJ0oh#$}k6nQ#L!+m9pe5do7GGy2npMLlu(XR-yt1PH5NI2F zvT|F!Qrp;$SdUtgNemp*c)nfc7qTY$d_cKj{j7jzaUeD=b|m+$%#M(K&YaKLj{TCe zpFS4eI`|#vBbSt;1QdT?ha_vT@wvO%ziW#>dlWBIr1j;7h?ofa@s|Rw(zst&F6*6) z^536*8hA`SXAaZ&s?7x`KdK7~<$Qe_4;?45L-7 zFK07uHwxocF=9J}`pH?2Dfm z1X^tRq5dy0YRe+vB8jGax*KRNP@osp8gwescYX-andSFovv6f`A!vh=fngZ`M*I)x_xrg zX(=r!jGhF$58sN^A=4cG@iDK)%l$Q~($dgw9tGw2Q>vXy9LE(SSC$#ZNKX<@gQ@!D zz6UDgUNOS0=D3B{ub(^J{qr^Rb!c{-^iX*KS9o+6lbn14t4M`3cMsQ6vF96MF6TEE zJlsJ0y9((Al{Up;Q1l^UivIgQk(S92_hcAgs9)+rqfn2?IgY+zyolAH7 zlfpMyK6$K^pwgP6mRdX_Y(eC{CeO$%>SOkqnQK6Nu(VHN8Yxw}3#1_n#-gr>A2r#E zTlcEvT_tP64k>a~H_Ci$WVS8kxpY;cS@Y(5y|31()E~AjEU-54AnN;GSuwhO{rDFV z(Sb)t@w)X~AQ3sOY(OxkkY%REO7^4N?O2&lk~abLWm+WA<5|XQn{5eDd1wASkH2~P zjn{JA)N4+ZeJN?y>Mta3xB6X0c897;ul|0l57WYjHt1pTmf3d0q@4_%fb=Yp+z<$Y*22o%PL(*t^HSPNhW)^t<7 z@eFn%pY?F;PD`0*`qG{@sIdei{jNPRO8mIL{y}A^Y1hS23z2~PAMxdn9Dh~XUaak? z89Ef==ne|;7%Lps^q<}k)hEgD^4VUfP6Yah01U48^^V4;xsGznOCNJ>w(?C}DG}d4 z2tMuwTDNX)R6wjwfyyqstg2O3N(zCSgp9$8Yj0g!;YhdTka6nm398Z#Qt&C2zt#7rkj_Sj6{6_KNygwevQ zG=lxlK;=ff+sw1&X8%aSav%qB$kN;-{+v96nF;F-(?YiZpbf!{?Ffc0`EtY7?RZ+8 zzY&bQ-xb0*S2~dTD{}CZwl)(IU-E)RM5&6ChKZ;u<$dfr!*wH(ATxfF;9X!7KR6Qp z#badke08|PD8@jnZDudz9alZ%evWo@Cg^2YJCvt|lQ`tfeoF%U(Mb&6qbD9DSTDALN{>39hW@!T zi=&2_DGzgt`E##xXCM9rFN?B$KW;8T>tR<+Lq*w_DxOr4dwQtd<5-Ed=utb2tIpZp z4>>4Ff+7F0hra#>O>gg#u{4oIc&xXd$mi2_BLgffH&Lnb2lHY4YxoGBQhCGNt--mv@?0u67P9w_rOK zS&zx61o{BiT$&4;<0R%~qo${>nwvargFGE=sSf2O4dJHQ8TX9?G3P5~h&* z@ij}e+bVDMbEI1=nb=WYFryFatmm){@$4&Yi|+I7^MRihKf(uB=6uHuA>p&4SmARA<2na0 zx7J(-7&&uizmy^`I-Hl5v3Y;p9io6Z%(~Hzq!~al(DUko*F%%`TWp!T@Zg7na*XI6 z*Bb7+N#RuR^gxEoS>uK0i9_T~i0~P&m8x71^O4br+VR>gsSRw~f|?zBZQAa+e8pOo z+I$ksrfS;$shof0Rpbl^`)9|QMu@j9$vxxN)yFYfF|e8_(CI7BRf**LC0Fe0m)6eG(fP#W`^X7~%A%H37|7+8rzYplI<992Atm_ys!&51IHCIjD# zVW2cjF!ALaL=WZZX9^Sn{cafA<_s#ct8*%v=u!Qp0y^(I_$5d2=SZF?<0A{{9K&PC zlbw2H`d;tQF6ywVE%gE%*I6&}sGd7ssh2EJD@_9{#rtXcucz9K+Ex)fWjP*2Nuo6( z4=jzn5&KErx25F5cQ@FAzRN}E3p136#9OFgWS$}0m`Tx0j96vQtvIJCg^`|%WML{@ zkO4fx0SOX1++R@=vPGX;&AOsyxFegPbC2@j2D+GJ)Xl4Iz5QH49iWTF(p8iFOrhqX zz9tIAC=GYAzVfhFL6tDn>2X3!J{piI;lTsdzu$c*<&T4lhfjRx`ruRdUCVkL*WKxW z+Y%h9o<~~^hV!nmH#;IG4B~y#K_hWEu4j$>u-1nR66`^2Vq#r01sEQZ@mdB|5$tIM zt$!q;(<;L6Tr6ATzQ6)2M3Qk6gh zb}nMc7;tyPk_8ddUD1(qr_QZ5)~wJCsJ>m(o}NP!=k8e=Qw`~EodKJVBsK)u9+!|t zH?HeaQ=C8dQQWc-L8uqh!w40jm7k%SCd^nly8ms?tWKiC?;JGhe)<_!H|1UBh?&X@ z6n^hKQ;>?gX<0X=Y2=_6=qhl=$s>_x;8pS2^6b_%{>TsU8 z+IgzlOR|gF%DdWUz__9uj>G>Tg$qv{z>rr(M-W4=m!e1RMeTShh}I3vNjw}GuK8Bh zC6aB2Ov&M^5C6@VZAaTXfz)-JS35?S`)6|&QSNJ`#CP(+xVW3+Y@lP6O!vC;u)xQS zO>-BQLxk2tO&8M#qb~d)SZ6HyFdKrQ>}c3v-RTTJGs$<{8`FBDB5<4Gxt1rd$Pe!g zzo_-kZQ-oAYv}W7!SkaE-WEp80#YjnwnFUU^kjo2LHo&okgxW=pv3!#=8fpt-%cGd zdtK47$8vRzd<|)**q9mJo~M!aHAkdb9h*A1o6a;oSmt9-=i`iH%bU~j&STZ=-q_(3V7UGHuQ^I zi-|s>R+b)InfK{fc##5OF%SaxdxVum81J)C8?m?K@9sU>^+H4T zNy}L4c%#(hvKDeUM=$D7P}qIl-))N-Y{~HvtBFj-o1uH=Gwgu7L(%VrWi5CWTAC4e>9KG15;XLAy`$?z;8mvk!?Op(`o&4Ib-Qv9~PXbQFD5qC>jtTslfq33oGBL~b?Nee`bdmn^WG zBf_gB5c;u8jKV*1r>lvzi!6Mli}Ns2dEw&nY>OdcIV}R?GQz#|r@yS%;6QIP(&+Gf zv{np3y}Xd%6h>1HUfBU?1>WB4Qx!{%I}Uy55@FbENBdr#K3)8S7WGE^vl49_@Al5n zUV=-`we|@oY}0PDw6@(?Tr8Q-Jeih(i$MspRF9ZRSGWz6&p~aut#gG_L#{L6>6+x7 zekkabU0}hemOmqE7N9b>>V@}287r+0O;<|?`zg~#U(&`n4evY$w`U7{d(clSf|G{T z$%b2?b+}=Q3doCPPKPi2Lroks)=|)o6@!~5`4Sk(ufH}tf58pTCE}X`elIo<20^i_ zO~z99T%**$V#^z-o8vlyNQkYer997XA8zEV*NnmKJm%mYNBdL`2LDKCG*GgCg5E7x zbbe{k?D;%MYGoti;{0_g>D*y%4DRNI*W&Cd|1|$w2{NTayfM$it+ig_@d`U9>n}L2 z7=qqF{UdDK5CrPZ3ZET2CEIJusvN@4SlQW^$8=*hZr0_cgh3&_Ue^{pNk;t;h)K>4JX%in29o&WyqJihZ7Kx#U)eIELRgPKR!cC52)Cl;h|x|-ljcR& zudCpax@oSuv`F)G@9ina=`D-kaNZUUUzAKe3j{s6;j}snWjcv$lOBn2N?>YY? zvSE-a#+Sk!9>oVQKaEcbq=>w7)Asy9a7;s$8pYvCw5mq0$OHnHcGKo0l3LDQRHY;#u*Ayw`)WlJ`W^44+s%${)vd z2Y6y8r4vt6lD1<2TPQ~I|) z>BiF2Jn}nt17o z`x2i1+uWT8(!S|RIhdsWvyrqOdHjrzeoS7d2FG3vp`auz8KwQNuzv2id2q{~#hEi< z#>af-$atC#sjltm;rxL^lP@Dft>WicgYiEo>^Y<7>XzeRo5Nt>k4m>Arj0j}Z2QgV z+&!Mg-$r?2$7A>WThWm|?W}sc-(Tb~w!8*lSPSou}@RgF(ur`Z(c{zJE6 zkg|gZ4YXbyW6*ZEE*2=qkLc3o7_rQcf_u|O0q=bnQ<7-Asa1GK{K%rUEN=5 za)o=8hO`+?=-LIIoWE)IV2gcL99CXk*!fPs1!uZkBC4oUmMKa4UC0nLy?%4^%Sc4<|PI)_MB{lJ4) zpc&8-=~$OI?6IZ-?q+=a*3v~=I!(7qDrHKF;fM0Mc%$@$Ftaq|3_m6f9m|Bcw;Tuw z%tc&Be_BBFM^+;dPa;JVtE&88u^$iw(n@F8Z!FbJ^aM^AL6{#H z><8SrQO+DQ?47{CFKSzk5$)adR2tJo7nW$b`hj=JmI7&vZjtdkgJ^>r_z2|a?PvUf zSwNi{LRJQ!x$lN=oykV(bCE+W5U8%S^e8u9+;@%i6ZPI=>ChV2D_YEl z*(sTTx`(S*>=HkI6HXuC89M=*5eI4+`7jqZA01US|9o5|O>VT{caC1_N-!cRdqU$p zAYp5HU(nk0xyih>db<>SgFv*?v393fZKsrjJ}UWa8YYAl1@7GZ@oI) zw8)A|#91Y|g}dNV&Z+~juANOQ}0X+ zCUj}=c8|&c!P)Xgr10_?Z4nR6xRKA;=Q6Z2XALNU$@#Z~68O&Jw&v+|PAdP%TYNt$ z7o?~5s`*oXy{)$!9E(?(huBb~W_1xbConK-PhgVKfeebps?s;uqun$~j0_+VtA3a@ z0z4hD${ykAkMug2l2r@HG>wPRH2(t$zDU9(B`4P_$h@Q8^G0;jQdNOk)w1i8OJS3f zGd;WSD8F&c0|vQ@g7%v{$0&F#qv$ ztvEiR3Q@sSrpTk|3#5V#(dozMAk)&9#tnQ~?e2QE@NFLMDbd3$gi_sn>=zg4O^PF) zZX@qelU|!~6_5};ln8>bO4@3pCKo|&S zJg$qgNMpbiwSSKBOE<`;lj8!pV)xm4^z;@)_|P-QwO6ribw>85 zbrx-{O1)_i+2Fw#GWF$rL{}~XbDfuxK}*7GjBpwgzdHY$kp7*S!tdkZ!6SxYy2wB& z3p{xFU&*Re3$X7J)>kb`T8$(zt0SwAOQK@oKfgY~5w8C5E<<}}nPmJnDEW@063+!~ zG`{x=dtq9d$(u*>(;|o_6=$10&&NWMqLXo30kKJ!oR(97j;uAS)IQ%?Lgn=CBZ zUF&WJsVJ#Pqlh`{{%~>7*`QtD{Ep5wCOY<%sUka2&gbX9#2h?2z~gYMI$k;ZBKDT_b%`?Ez8?Bvjr@?r^o zqm^m-cUFY(AjhJ3(OTTI@R#dRF=8_<=%K5vjXlqotDngRW^!OiK7YD46X81k8!X?m z(t6Td?TMLF|K%HyJ))=(SB&T6wHHmbU%T$#T>k7sPb z<9K7V{`PdD5!|63wjpgo)=yVo>@aR31(hXsDi3}Ut&H5C(L_-FXB7skvSTkeJm9X?N3rQN62< z%L_d6vIfw*muxf%6xW+Bxb|I+DFRlfhZi{4QK#;ANY^R|YVSV~JlC7yf z&C!%{55Cr=*@;bmsGViT#gpLuhMpw_oj2RD)UxA9FjrSse_3B&FNdQ#IEM*-*b#eo z+#FZ>3=95pVfh%YnW1|FZpZtrx2$e~21&cOu@AW@aO`TcSElI{Q!B0;?=y}Ll>Oor ztNQuln_~dH4f0{~6<1V{9g7%=)N}Y=8Y^k_(_zY|Wb(>dv!Cu;v8ht&8jkDhhRra# zjw}_)gv(B`_Tq|dXX9uBxonT@3rke?0sJHE3meqy5d*rxK~3%AkWq{clyaOfP^Br9 z3K@QBG4pPBqpqr~&d?4R^n@&^faQO#5cW7AfG;q$tK%TR&nT+YQwQEDiHG0!1pXU$ zb4o;Kx>oNi$E0Sb3t%Z%Ln)lbBizm6I{UVjbXUy-5sE|YH`jx%C=HaHAZei5?ix4a z<{lZrIq8T3&3L~|u~726{89#>i`sr`W;0w?&3SyQv%>`6fJyf>$+2=OAlG|JMitfe}1a zx2v+g9zm^*`q#fk@bG#Bzv)!Ix2F2GoXBq|C$4++=12Du!|6)Wj7-z7zts5f+15($ z(wA76f>FiKkR{^<36HJzA{&=67zitFYQ%4@u7cC}LU62c7H^E+Kav^=-I>kFve}Q^ z=x)7d-*Eiv0CB|>sFLR!-&*fcW@vmN-qHSwY=Cau$bu>h<{mLR%|d(8$uu;l35zMVkC(Y$LL=yb{sZDkFSKlj$uM7wBC`}gh4?|DcJrj zHOXiLFu*jA^7a3PRq6otfZ_dKzPwj|v~APD)@vtGWi`c@)j?ZS79(-`=C9axTQ_6) z2Hb6~fmZJNZw_oDAK`K8Phl5Rr#%5X_SdT2d2dD^lWsJ=WuwPgBqKW znIK>w=5M}S#1yQ`q=Vety|DRmc#}sN!gk1pM4%bCsg5=RoWF3>e`iE0fQ(p5=z>n_ znB-qP^^U)NYU}v>>#dl7{hPHbshj3TQaIjcd(AP|lR$ij9SVGoEZz(K`_F$7S@kU7 zW5Kg9(SOG+|L`G>0iJrwlfPgD8GQVV@Sp6ZB*3mt-eisY`_r4e4{_!W9B^^|L3IDV zGx#F#0KJJJg!^7!@1azN6YyiYyt10_*O%nrg}=a&@bgx%w70)S7J1(g*;j!3Nr%`M zwKZxQVOXWzZ}Rug{H4r*HO9H)u>U{KE|u{IIDH%f_loTwfaCjHV5=y?-KGDUgL|LO za5uMp0Vea>O-HDmAaw=rk&kN}Ls)BzibEfcvszbPF&pn=$)Wcs8`rkHr)l!);v zgO@=wz>LvPCNy4n4GT725~8M=6IsFEGY;E08QDU+qZ_4fthrN}{fMtnGE8REu< z1`+Zk8>#yOj#3|uE$x(ueV-#oo*k~JNH4VdNnluRqAm-)=FYyG^IJ^LLc@_#2s29Rqb3JNawCO2tw@9)jhGDZK_CK&+M zuo+<;&^7n(k>%hQUPpCIKtYT7Wy;^5wUANL5j5ricE0~iF41E0n>QQ0mG;hsBdYUY zD-Rl&+iDa9^m7>rg3BNoy^~7%XoK zH@0jz{+i`NsUNBtE0%C4%FXrl_-7mR=yuU z8Fc#+`CWiPEY&}uR5L&-?XZ!RiIeyz_!1IGYmycpKgJ+(MtVY+V7Y2&brT+5tYkVp zt8y}>x$itDi6meJC@>e_zl6p_LnAQypBO6?{xJwYo-E}5WA87+qTIg!aeP2g1WZJv zMMMN76zLj8KtMoRT0}s)89J0O2&H>KkPf9r+5-yGNW;)Iba(#t0OL8rdHXs4$N%pW zuDO`m_ui{tYwfl7J>%_feMk?qfu(bb2pVEwz!iB_2#-zGFsQ(hR6TFp7v!S`?DaTk zdi6wpwrS zcb2-mtI@<4o;yjbJ%gg2O+lJ-9&F#~@wF>y8*<5mJ6#*hN+^O>nCDFiNQc>V>m zas!eTtxoc9p~!PqCU?fJjcl!>*qYwQXkX#Ewm5$J!qamF>LWNY$oDsHTxsOFe1~l} z@;F@EJo6@mqP(6BwfM3@d5qiP<|lLE1LJYa!uvM2NWL9@PtF2`cUZfjR|wC!)?ed8 zyMFX4C)Chz>^;BlaSEZvdBv$;;`F%J`1vNjP=ngedTrn9&qdLKJGhA7(C!i<5#p+cdv&Zl+l2% zWIq{`9sP=WY&3X9TV1z?e{W%K_UC?_y<55R3~S7m*B#6etvA^!6pHGU_1E%$Qslr7N#e#$5Dz+pF*q=0=C}bhgyJVK-#Vsd zoY=`3iln>f<-cQjM`cn!iWC@aUcO{=**#5jC{8@rD zyf>EqlwcyU`SQ04PBH|_S1_aDgFy+7^p6a&##jtZeD^0rKt-uhzQL`CH*L%D zP*E)KdHETI(P1UV*cEX00YG^C$@;1oK{J3TnK4)|17IJTcXU^lBE7WoDshfSJ4Cje z*vE4R{MdJ5`v?yY4ILmo%$Oepodb_?FL1)BB*x%>=ji?umU2L(mwwwtiQ%(28p7vj z%m43XV}d8Za1ww3^}(#$n87w^At7d4A`kKIZ<_xe+%Ez6$--2Nk;H@w0BjkBN<)8I z?m?tJO#>h%t9p9uK1t9xbZFh+g>GV4@Nc9Zj9sP%s!O$x`SDz&V_TX%!D~T82s@k$^+#A zd*X{YF!k~zO0+K=$7jd*!aqGE)Cv5!6R{|M5EG%20Qj`a!;--Z6o1k7zdk_EgTYr> z-(Xg~d>!z>ls|?4e+~Fs_-+*-l$g{yw;SwF6N3d5gzQr@JI0FtR)@pPy7I^iD3^6d za`^p&uWnoe^F9#91dJmC{_!kmI+{KezhssJ`kruriS-EUYyQMy3$=b5uGL;eU{Fpfnil*tUXMby5-#y72n+e=&&|FOU;C;5O-ECT?X0Bv13lJOAIT z#=?#|4^;6VaKjp{t0$w9PW_j`vF#D2rMuiGG3wy9K^*!smEL%`jK;IgMLYLUf`DNa zW}$mi#FzjkPv#l2@1_6Xt46d*=X&Y=mj&d~H%=}-OQ}mqWyk0wROxs{F)y`x4{oEn zOg1y--+!yuk^ew*f!vi;{gS}zjQ5vxA1D#+i(F+4T}Oue{WK8gK{YoBS&tzq2#7r+ zvY7wBh_I-`3Pk|5 zER=kH>^D`wP`v7s-wok16qf9=!zS#NMHwf+08* zO>n2oBI$o|dIo4Gmq#f>g`xO0&^C$VhS~q*$|2eQ`br0s`I#9JQJ7UT&;jmoJ2?Co zix}eutBlUhp~XzB06?6Q^=cCN|K#xB$_b?dyyiWHE|Bi20yG^AZnr<1BKThhAIfh5 z>t9;s=>7)>GNA@ktDg7qB1Zqhz}V{p`x(cdbu%Uy?bGvDTcQq}S|bjipZSUMfmQ!6 z7Vps)^IKsZOx~CcWX?aSZ}>|TfA|mtfI)_LVKIilYP62qSn%$bYyU71e09SOPJI&CxdT#fKI{asfzc zGE!$+F8>EPm4hhAY1D4Wbs(qbU|yfLp)QHPE&X30z}}COqyd2&Q%dQW(47MunThC! z|9d3JTmPk)fZdoKH_HAe`C!D-iq3zG`9BC?D82x+Ed;ks7lTOt^pI)>Fj&!q7gI!# zmjc|gSXsgN?q4$bmk*7WfIa+r`VyFlQ_%H-i5VI0|C`kiHz_=MVTgTUR0&0RLF%`BRji)>V&eQ` zi?G)6)Xd`dieo{wWX2v~0@Ad(3Q&|7zKWO=%x|2lhmVyf<%_1PZ z!>ZKQ8V0t+&mnot`du?h?tEJ*-Tli;YwR6$tjn&my0g>Di>GbNE?z3^Vo~?>n9?Qpi<;wpWUbFH4bT1K*Y6HDNtY znrlnV^aH)TrUZs*CF1oPar1A_EW5!+vYkYrp&Q+~hEJAJYO?m7`lNe8 zLPGaOXRRXAiLGe9;>*&w6RhWAufy(3vn}`zDSD@SuIw#K;@!4eHQr}R1r{1V)wM)M_deIaSB^=DEW^U`{oFyer9WJHCO&iZ9_57l8DepXgv{sQ(n8@NVKGJT1q{{s^ z7;D-WmXR1~<%kejo~gxcl;)eaT5DTf5ud!Z+HL8@YZ5jdl1sNc|0>S+RQuLspZ-rR zubn%NDAm3PD2FC~ler0(9o|UCiLe2;lT=b=>vBSw8pUO0_)O^MsIvDc`I+yeovIH8FDK3%aT1+4o#B03zc1J_B(0*YMx3JTyfr8T= zbg;5JZNMW;PC3k2Ke0vitY&?mrsV8-R&LfQtd~p1Z67w$eukxFNxWdELyr;{X;f-R z>S%&+i|>b(a`TZ#AJ<1pDXA@I&c!)7UlQ0^3&?xhgfc%qUhWTBG4&O=dAd@Uak_Z+ z?m(I)^Fz3Xb*J6H2Z;;9k4KI(U3FZ$ua zy6x33=dXQ8ZyQguE_HS)pD;A-n#eVVt66>*EXzY0_2zwPZa^Pin01qhQ^Lx21g9SW`njUzAs-Q$$z>L{c4BB&xz|4ElX%dliZBCHr-Yq{lJ{&HnU56`l!+a z>^a2lY?sY!p(3N*y*}D7klhG+m|iL_RFn=Xb{$ zC>qn|3vW?}*hlAkedOoY8jSz6Wl?iYt3BwRM9q@bebi40mN4HXK8s|9J!jdDe7fjU zequ5+z&F^jCLQK^*|$FU`+3&}{>eba*~l%(QkHh`8PG_@YxKFZLMuI25ud7PSL@4K z6JxnyW&=63y)XBMS0ZI$Ve5lxbib9innCNGND84cFA9q%ue2uh!B&wmqK`;wbF-7$ zSBfGrBBS)G(N^oSb)ox;ZCS`9z|mLS$@`23A?wW8g?&uhc0nIl zdoQp%MCD81MV_N+q8yn&P!Un?%j?2&x~jr;?mKbhd(~*FZ$2JmX{9C?{7d-mu(OY} z<*$~UEU$=|y$FCnb5?*fAIFyMEY)!E?)tapGL|#Dk{f)UW>iJ9F6r1^pp5}n)p)gT zuJqbNibU&nWw!43?lIZ)f)I)to~(L}?BUy~Ug(Zxr;TcSKX>6v8aGs1(ktsv#K4_q zJU*2%Xo{^82~A4#S?CpRQ?AtXc?xciwB&5nHcJx}x|kxmdH4r*)(E9NtT{Uv9!Bvn z5s-6T>9$!EEN5WM3`L3(q*proZBr$_JOfTY?{sJ;E|%;in{Lq;l2#yANJ2|vxTx1X z9sUt*-a`%$>U8QNk63$N+Vr9U@pA{G`02&RyZ3Zjdzp{OkAddVSjPioR$c?6T=R-U zdJV*ifVR@iESCO+WA-sYr;R209P!86QFUc;esu%_f{WkywZ=b+jI;rDhMRSpmNlH| zphMh@;2x@7EHBxl@)y|tYqgYUr>}3`>eDAPJ-g>t-K?4hq!N+q{C<+1T%c~Osu^kR~ zRvFjR*JePvxlyMR~?~@ zsgTSK(GEw_%^afV4t&=fdRJ~as4GVEXD(^?;KZQ94IkO=rlVAS-gGMro4T0Jnt`wy z&r-Nt+U~wwnk8jI2wGhVO-lvRaz_pFbvkRKU_E3d1)aX*&61p*tlhRfI-MWp5X}vz zHg}gkEvVaU!F$S2;`n zsz7=;%s5?f+L_zl#b-?a;%E}K-?7lB?q)y$)uS7KiX3!Y;ft89}uw_>%osx`b@%TL&wFE}OXNM>QpOhKe4o$;{Ej2gQsplqHx|KP2xeXpc?0i02hm|u>%`q zCTHsE>Wnoh6_xG2o3&(~nPGk9P)D?ji!{l$D{R-rAu}!z`Z77Q*_622Yp4BKds(4O zp}!d8;U9n-<-pAp1v7ea2) z7P^=lLWz$)Pt%ovaVc5=z<8Kv3Ur#>nE@zd>I=&6N7T%xfWCTwOy;6Yo#FxvRrk?P ztx8NdcH=tTY*xReqjxMy0JNhN+-k!BreAEb5<<7(>7V1lzpLkG9$;QVdL5{3EOE(;?m7d*3 z)|om)6U>+%yRp-+e3Q!Yaz@caml;ZZ^*RlS;5($A8s$qty(n|pREUxDxz$XUb?puq zoIgu4*MXefK6kEba;Rwmq2a<)8DbR(m(`6nhUV!!Y5bzO85W#3 zcUU9WP=fKPZ5EJ?EXIseeH$~q`n*!y<6k~CXcT&JRuq$nFy|VmT!L3F=iu#L65k0~)cI2@I$;tFiC2irU9^e9la8+H;J&UzcLbs!J&VE}9-6e84saSKW zVn)S*f4^4pt1|p(8+-oCeLiNm2k7s4yeLi;XSNl;(I;r|;E9TH`;D^VA7yUw6C|bFgT~_jm%kWYiY1OS8 zW8Ad199W3>T~~X0T*#SAmQt*G`gT`B20jU$d5ALPhVbiD>uJS)50Mt#={0KhDLdV+ zLHhK{&exaDVR_T_s+suc(=I&l-Som4b5;DCSw^qiR=J7+R?>1?7mdfD0Si2NAxOb= zRpC@{c3H!SBV7maAvV1`^^9(QaM4yT#Q^s%xC?68SM)H{BR!rnzb0m-p9Ie3J}*T_ zR=)Ky_32(R^B*&p6}O*nxmzi7A8R!C0v_?9=rv#JQ7)Z0&dPOkEEg4A_?oWO{}szz zCYAm~h_)-Yl&VpQ`P!-=ixf)x>+^Y9rBkNG+fo}_8OR-qHVwmND}h~PB3w%BWm6|^ z(`vW5&|^!Vu()e5PRRB!4b1bFc5r=Pk5Pl^m#UR2a8l~nAZMSgLI*gWs+*rqHNBX< zmzZ*GtRhYMC`vw0QVz5sXYeGv)oyw_jk>+aoXv3P9z&EADt(!Ham*O>& zGtSIvQr3FZNz|6fpEv$+_i=MV@p>QL2lOkGl&>C<=U%Gd;sX5F6CJ`o1Ya;0If7z z?wT|{kIwL~jWu7)DB0TjREAeGx^b)!C4Y003Zd3TLw9 zz5s(stjRJ3M=~uQ8y43!%lK+{X8Q5nA)l{->%A@4D%~<(Yu1#Kg!`#E{+#P~;`E9Y z@*EDX4C8mUf^zM?0B>3R7(z-EZ8sR*z0i3Inpv`PeE`%C#1ZrDrCYbA3L7Z%r>*sL zZLrbjTckUly^U(>i3Y~){?f(V%HE-n=8WKtt&Jqji)m8QUo>6HUCLK9H>C=;xfoW} z5um)KY4l!k^KIqLf6G{cQ*Zr|t01 zN_Rm@7uka8%TR%dS3+eV>m&nZx(m_Z?hUiG^QC83dsm+nIEF;QaEZ5vysZR44mVga zH-#>(`PLRqbEvx0iZW5|z-lN4x+Zr5PNWTOq-N$>e3>3~@!%dEqk<>M8MT8O0)l<* z$?=0FMYMM++F=hwrJWD12*Bg)wzVvn0i`Z{M4yH6W8Ed$@x?V`AcR6Ey-c(9AU07! zN_5c(pLw9s&Z@}=fk!3A5c8TZnJ67zNHlhedIYhE-%Y5OhjOQFzQaD4gX;ALlD zx{DFv;r3}x97pyz#(bd?5)w0^!Wc&8=4mwR$X=?^8+Z&7ZeOq_Gpn6YQY~H++-5MO>Y1zO- z`|X?s$H+-@mg2G6xsZSz%9+C5SR?b)%JYkLWHY6xgimw#@beh_qz7*_-@@G))0WOr z4JHB&yLw+hU9!p5TJaK<9v$fHE%=$h>u&pr*`;9gjf=Z6qLZ&QNn$Y@lt*~E29vbQ zKGW3_#8#qi-Ei(x-+i5plNfE`N7iSVd92)S_e*@gb5>dAY>xT`M?wD69y&Uhf+4Ov z1Ej}h>BCysmEh&c_Ds5P9kN4e32~z&4COFZA+@c?Zd6|5c9{B1k=yxhh|U~bn` zYr2*dL>u$w@tk#C&C``TJ3l@RzNyg>o~G13w}~hfq^6j+2iVK9W(cdej-%%Wx%t{% zYTtJ~HsRnlgl-XXg^kc5;Q8~T`PQ4QveBsU)!o_7C|%&PjczwBk>FFM;@z;Ft`!|J$q&Y={OE0Nw~b3l z&mcU}-)c&{chvf3+0qXc8FFvF6MQ4XCmpb>P;H}ADVZe-{6VrY@(|6GL-Z(0i z2hx+5#lP*?l`}e5o892?*UOW8wb5^Lrum7N)tteJ>2a(aP*ar>xi_VngJ=Bm3(^#! zQ((e}y8>?a@T>};^LkH1j1SK4(HHpS;Xj3JEpt|QAo`r?oO(XIW$OOej_A?Qi>~~M z*j$+=1F9Gls$sXh{HY~0Y+z<=d*ZF1$NDIRMh?SAGe7DzfP;uCd>q)&C2R0juGg%f zTK&QL(>_R9a)$zInvYkH%nE?b!=7wi;X_3Rt&=wr`sN+N%eXCwuYvS(_sDY+)Z(DL z&a!>8bccDheB;r~5S<4B84pAqH$J@P4UTzgetqj>1gPD!sG0p7(QjSpG+Z^S7OS*= zEIC85@OTd_v0r;s1u}nu$^g6hvUINH*}hWGVfn)ww9l`(CCeoy)J-=hO7pl%a=1z% zd0{JoVwYTPw&D}-8+#r02D#9DKlnuhKZq4|5Caq8x2SDjyTx=wfJ{c;>D_`APqSKc zx&$(C8-gGJSm1yf@q}4Xs2s!q0Vqnipi}BF_e^jDC)dP2GvNL6 zQiLQnH}s_!bKK6~18h5SMLp4j3=T66q{c|0F zU0BDffmgWv5n^?VWaQvGHy*+yE1*@7p6+h)6K5&a^s>Sav!o^BYrI&%J#e_D8Jx}- zYfxUxZ`qq;Ix7B9189sh4tkEzm_u`bJ<9Aet%nv3jd_MW!s8a=vlH2KR{~P-Ox>XT z_a(bR&*JZ~!~p+ymVkX; zpc_*UI$b8ygxHT5Y#20Os{a%;Bn{sfvn7s6w{Cof=KI1g8hZZ!KqOG~Ean`o-=zkP z`34x^ESpAx-T3`kAg0G~;vv`%uIG`r{97yc2z2v56*zf38e&yd(CB$scP{KRN*C-o zVm2T_VTkSjG3x&@3LHrJe;W1wr=};;3hqX8qr#k6in(;$etANnwe{k^HjTu*0U-h# z9JYSLqpon+`!ECV1EQ0-f({7o{D_C}^9hb^tqpII?_IH&4);gr-2{pq zyb=<6V_o_Zz(GDIAvt)jK7YzB0w#$1d&H|KOd}d*7WNzauA6;r^pVaXH+hBVM*Dog z({2SK*ZQ*pE`00RbNUyYIWQ@+f!Gu1g%{C={p1QH?w4FMKEnJ94nIEV;*IuGd{|@R zD_Kq$KZ}{V=ltH|t<%CGR+pTk`E*o5=jH>|oKDtvvVe$hI@aDox3vEB{`c;C`&%IZ zspH{4l%9EfD_zHa&B(y=6^`R=c^7v=ND6a2c8~dLv-H$~*RZl!%ZW4#vWlvwYPSzEx zt($D^Uw8D`Q>l*wwi?e~UOpTVQxsy<=;lBh`Z7g~#-ZT)HEj%J zJWqJ?bSTLs21WB<0KtH0ZMZo(pI1e``9UM-``hr9VL2q9n63l0>9W^w!f+J>FzWI4 z)Mi8e4kXG09ua`7C|&(Yr%&Mle`_6daP&DQ`1pcQ<6<5EjV0rW0L4;&n!EVW_9os3 z>W96zICvVGg|rTxC5OM8*@sU&ihK}?vr`Y(Y{l1>vPW6X>YcSZ`mw%Gr2NuOIqV@i zC(=Q6X7pLnZ*Pm9t|>zbxCtovz9ejXz69>c?4u;6bQnxlYxUzD9b*O8HCZ;)VL%3k zz`v#0Xp^i>X)Mf#X;nV>Wf0+>UNNOThVbyl5Q@4uyKD{TIO7vgk%MZtdRj&`h5~k4 zR;LZ`xs{UvO*{>}Mo)O~tZ0QAMO=3lrY)Q3_1rlti_`0yh+ggLU%X|U5g&ia*fIy zxv1nu={~Yi{(h`+eq}D;x-|QSo|Ld{FHqutrky=1{E7Oy)Ut;aP+pFJ5jGXDLX54hZGPaz9eoGohO3^m#g;k1vy zP=T!*Cq01hP}aVdEArot6O$`z(Pz?%jy+Z$xxINQHSs`gT%nS955v011tM9wmuA~9 zj#BdJjrBN;_An1VXdH~J@6qsIOkkVu&PRY=c!U!C7ABc^B{mMIY7 zL-h~~_AXnATJ{&*HJ+^XHzqdJLLYsuX28h0CHyP64zCPJ^$^d=zkji)JmJF38s;v5 z6Y*GMmz{x2GLkka972?Voif!=7feeRO+p2n>`giy7tfsC-dL{TZ-D17kGgoGEB~7E zM2k`<6pvg3(DG>?k;0}W2SY{Mi_#7iYQ^dI@NL(ldB_qkm9u}F@xXbZx2-bV2l-G; z0#4TZ5ENYR9mLAg65K;)rm%{V)o#PhEZVTo@WpHtSu_}GRaAXd8KbrSZL`+R;L^Sa z%_znvUmOb$$;Bw|KJTFPd&vJW8N(&l==a_m!+;+?WXtX zjPnB1pR_Lh9uVAaqoK4$Iyi$a6%|aGX*<2l3GO4M^70^7xpFhNCF#?*AKweQ*&6s3 z9c`C$+sk=pOQQ^12w_Y=_o`rSy)u+u>o6}yDj?hrU zjJwmpl`njyPK=iJ$9hrWqxZt+(0vx5^JkIxL27NWYM?fo1$VZ1_iiDg3|w8uyEWLqU9PBV(q*FTe7C57v!yhOqMmE9 zdrr;bmJO2rL^5aJRO*1cwhQ5Cq@{1(TYSpJ$2ucK<-MDf7k8YtB?mxPphYGLkJW>Y ztDS9OiEw!{)qJ9WuxOr)fKtiDLk8KqpH_lh(0`<^l;|$wSx~IGxob8H_pHg>Lf!1U zCFDtP1{Gy(&|wo%ho7;Du3|-%<~!IfBoZrKnu)s9ceD(>2d^!&;vKLK0S+bJt*>)&xig;c;MgT>^xfER*m13URBbKPu7PI1$-ykHNu zEFIAk)a|@d3@(L#u}sDyc>bv?@=#@+^e);dr);lPq3T{kZz#U|JIuJ0+q_4(-ZHb3dSUgvhRW*1Xqr4p;GDD*b#V97$F$0fBZd@FOt zS{;on4bDXDBaoKsoR_a%eo-?CEh2E{Gg(wC|}U0db+C4@W96L8DSw`|7JCwiSWm#GCI z#T8ujl^y9S~8L4MVl7&Yw)bjQKNK>U?H)*d5!46(P&g7 z_hihjpu;K_rSQ*6^DXIFT=AgmFP4~vd0tqZ|3v*j=25|wVpu%q_=Aw^SFzuShcF1o z!_M7@p1b>I>3AL82)S&mK{~F^d7wKSrwsz120v- zt!aU(kF9y};>EL-NROr>g_DM4%fb`K9P(auwMFXIN3&3InCdZ4G-O0|ReMq0xwwpD zy8L}k!O%I-`Iu*w+e^{3>24%VHm{Z0-9i_5MpN-*`B%%&{z1bb>JI5W zz4mblH$ykWa*gVf<}9kRTGLiug}fmOuA3}nQ}SAGf_W}AR0sPA{>avEevC{Cdnxj& z0Q%md&AcU~F>}XScCgY<&lr_%Low-kbXj%BBMk&UYturE>4dm3Jnsj$n>4zSxC*RR z+SxH1-c6;E^cmZ(oIOda^G1(PfSZDMHTc$0!sAI&c3aT|mz87e%H93zPQSUBd82T3ij7#OqUCebCua)7bs4NNayt!w!qVuhJk1iT68U7czf^Qj zU>!dPh5Y@;ZH&2J{$#Y^$rxgmb;XI6&9C+sC)yn(bS0@wnF{OG3T@P*#TH*E#Ea-C z8j~6DEF)(>l$e=FF?esGI?H2AYK=4G;N>E|0YYBBD#Am86bxYhuBm3mm@=vh5&Rc? zDJ#!9ihfHLr!#xiRUyZ^8INA}ON_>fZlSL=w(f6B0gHO2i!GH4@A!PdH7_8R9J9(f zaHwkRD*@DHx7@&PdU>NwZb2=9z+&)+lwqe+1^;lQpr*;X&L&T>a)`iIG$F55vNi!3-%en*<(;mwv57yYbqrgi* z#aE1!jmz8Hq>c*j>w!)c7_RQze!6sgk~x({6S19?oI543`1G@vW`-{zoo{!6jR=Cp zvC#2ji*sshZoUDG>kI5{E_oQqDu3N20&Jtm} z-=7+WP`|X7sI*B>(^(CZu5`Ih!NX79^J6>r^GuZ64Ayh@g(k)z!HZRucuP;KFm%&!fWz#3o@^TxT&s+9Wo8bUR-m$`VaTBXTd#t zregW;ra~!TP-HcE>#MzZxO3y9>%L?rOoiaKn9VowQX%CGikS|@iw)exTL$U&Sx-k) z410Xg}%S?GEeshX_}>X*!#X<1y3EZir$`vgjH(Th4l{ zkxj25PiM8`f|?dsFJb0{5uZpeS$)8xmw*&4Oq`tK_a4*dV?i|(bxf8OI~bPB+L+< zyHo5r`yeYZ`obzlplGph4Uel=*pD1LcVbtY%;uq-N!z6B!k7?(dGvjJti&$qDb`a^ zWYr^I%ztgcS#zr=Ct_M()frs7W?B7iN15B&5s`m+R1POnp|LX(Z@7Vm7vbT(ktX7= zNOLw!Zrk3pDsB91NS(!^98RW!XcTv@agV&n85b^6>t{U2>a>#@`um@B7VDJ?tZcDd zs_`M?OmFqjym*6cJhdN}d)7@UyQ#~wUY_YG&D}=mk*o`)~ z18Fciu5sZCgd!AcOps-VmIU6wvO3#`hz{(NnhIVTkIoHN*Hb}EUkwn9&>?c_hPZK~dNYifL=)H= zyQ++JD;o;q?}w!*Ca2Vl;8)U`58hWKVLL2}<0-Ck6t+9$t{O$ds>yP*$0jeeJD^Ul zJC5Er{xa++3X)bT^totBFFK zOXKlj@5n2>HZ%VG6^13dB^C-~$)*v+41v-b%-~KugwciTMISh1 zGsk7!26k_=J7-20ZR;`>r`mu2GHKY{;}^mub5$&aIX#|JBT=JRT(~NTv2gRcRxlDa zLGR^l`aMcz!m*0pvaVB@M>=WW_Z0c-aLQ3#J2@Rylp3TK7OH>~6BnpflJ-r@|uIZvsW zDL>t&?Yd>Y^J2O7;>~x`d8W!F6EMl#x;dGlbYuCG{jSbE!#-W?*9?Pe7bdIvo>gVd z#*1c3-}B+=$+MOt;dXS*g@>QYWSgsQP4%ajz{dew#r4|CS_(t%r_I8lgD;)~)7s|{nXdj6J?p5a{jb#@g?OPZ~s zk;G|x_QYnv^`7y7iSv-N5icoFGD?07koOG))#b(xT4n(h&( zg17NvQR2HZm)Ud)(6Er4cPBMh!y}%UC6YF?HR);4ts`OR3O+gv&0;-o)sTs|#W9?t zSd30x@!`w2tfq2Nd$&lubLZ`{p4*n4w@gHccvHOCy`aLA{&hhqR5KH~ld&fzWF|F! zY!vO>&LhcD)bTS|e1r@Q*jx{GW*5~+*QioU7c6egAe@M~c_f*T+=C)R-Zogzm!~b+ zCl&-nE(=Q<#A`24%y;Koyt3zScN6kj=B%xAU9=3l{euPBUL_|@n@f<5VjeX=zUSss zs2@ls%O-p(SvQ$}UTZbeA>xOdRNZ~7k%TQin?vEW2E*_N4VF=!?{A1Czzbm+)V+sn z!>?X&Rg7D=p5<=rQm2sfD7L(e6}~n6~<_d27}?u~ZuitCms8tES#w?~X*khiJ# z0!;r|?2G}uY=Irp7uO*a9bnPC>d2LzXA?`@qjAqS!*~?LmAPEPr$bugy#|oh5kK0D z1(B5HYOy8ctF2{W{sKMOy6>0Qlj@<%g=U4m{5owY{4}R2-Im$hY`uq#r7T^>e6C_4yVNtcP5)AwNiDmH z#$P3&oC^MQ`1}uk#&z+joxS)TlEaC#R%@u^!z4$T=l{IB7f5TK6T32N6uj9gvP7&T zDJ~O*-Lj6PlxZM(zPlr|AhmsVWb89xfo=6SnWo`wm^$Y?mu6m>VcTSJTiO~=_xtcx zEVW~e6GW(0ljyUS-S{pVfh@#K0YBkVfoyuapV}HCIiyI7HuFI8$HxFk7x7}218;q0 z+V~)hH!hRGCK&RQ&wZ!Jd7EmyJ3aGZ#I1G)s@q8jE2H*mOj_keN83;8tQf1uzP|VX zZ9=>d;~m~dnHEu8I-Y6j2pM_Q$I18-t9Fo}=_3=u_#!xbCR11!Ct%;`<@88s?lc4) zJL%`H3}>svZ;CfRrvG!vi9g&b^tAVjS2ib@H&;%Q+@6x-b{r1v{$k$D6G%F*yzRUu z`?>74(F09>o}65Nk|Uwl4ISZSs3GYl2vW%Nte+aUj5kmsyk+yO(ypZG`4Wj71+x<} zFUK9%TV=zxI*mHNj3+*-l!+5Z)d$I?kZr^G3t@9yH>B@_vVt4U1y>HnevscT+8zb% z6nmDE?X8G4R?4g%oI_%vk54qgWj94!^=@Y%sV3tA!x!274b_4qtK`9jp^1+fsr>bu zS0TpHW9vdo6Izb~SZFvU&!}MVBL_TaYsT*Tjsn*}oq_Qzd)6riDz~SGsU^G1NzLGlsBe zzJD0jBoT~ao8&mxZhZB&%Y3H9!se_VxNlRCR=dK=pHa_don@NtJh#$)#Jp~y)cuAk zo5PR3uds)i9X}{Q>>GNwW!F9`

w(HCK;ou6E>)SuBgs#l$?3iDTmgQ9h~B$~J%n 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%0DT&9-0oDx-R4$bpap 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

xG0tB%kCDti!(HHk9#4*m($~ikfo#p@ZJAHpd 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%0Au`2BNnEKKQxgX*^k= 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%0ARSpO|juPo0)%3uiEICsX?xgau#W*@h^mN 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%0A+FHX5ARK}6<%FWjoJ^nT<1W>zg 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

-
- - - - - Copy Server Entry - - - - - - Copy Servers File - -
) : ( <> @@ -319,22 +290,6 @@ const Sidebar = ({ className="font-mono" />
-
- -
+ + Copy Server Entry + + + + + + Copy Servers File + +
+ {/* Configuration */}
}> + + + ); + } + return (
{ Roots + + + Auth +
@@ -689,15 +797,36 @@ const App = () => { setRoots={setRoots} onRootsChange={handleRootsChange} /> + )}
+ ) : isAuthDebuggerVisible ? ( + (window.location.hash = value)} + > + + ) : ( -
+

Connect to an MCP server to start inspecting

+
+

+ Need to configure authentication? +

+ +
)}
diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx new file mode 100644 index 00000000..fa863373 --- /dev/null +++ b/client/src/components/AuthDebugger.tsx @@ -0,0 +1,260 @@ +import { useCallback, useMemo } from "react"; +import { Button } from "@/components/ui/button"; +import { DebugInspectorOAuthClientProvider } from "../lib/auth"; +import { auth } from "@modelcontextprotocol/sdk/client/auth.js"; +import { AlertCircle } from "lucide-react"; +import { AuthDebuggerState } from "../lib/auth-types"; +import { OAuthFlowProgress } from "./OAuthFlowProgress"; +import { OAuthStateMachine } from "../lib/oauth-state-machine"; + +export interface AuthDebuggerProps { + serverUrl: string; + onBack: () => void; + authState: AuthDebuggerState; + updateAuthState: (updates: Partial) => void; +} + +interface StatusMessageProps { + message: { type: "error" | "success" | "info"; message: string }; +} + +const StatusMessage = ({ message }: StatusMessageProps) => { + let bgColor: string; + let textColor: string; + let borderColor: string; + + switch (message.type) { + case "error": + bgColor = "bg-red-50"; + textColor = "text-red-700"; + borderColor = "border-red-200"; + break; + case "success": + bgColor = "bg-green-50"; + textColor = "text-green-700"; + borderColor = "border-green-200"; + break; + case "info": + default: + bgColor = "bg-blue-50"; + textColor = "text-blue-700"; + borderColor = "border-blue-200"; + break; + } + + return ( +
+
+ +

{message.message}

+
+
+ ); +}; + +const AuthDebugger = ({ + serverUrl: serverUrl, + onBack, + authState, + updateAuthState, +}: AuthDebuggerProps) => { + const startOAuthFlow = useCallback(() => { + if (!serverUrl) { + updateAuthState({ + statusMessage: { + type: "error", + message: + "Please enter a server URL in the sidebar before authenticating", + }, + }); + return; + } + + updateAuthState({ + oauthStep: "metadata_discovery", + authorizationUrl: null, + statusMessage: null, + latestError: null, + }); + }, [serverUrl, updateAuthState]); + + const stateMachine = useMemo( + () => new OAuthStateMachine(serverUrl, updateAuthState), + [serverUrl, updateAuthState], + ); + + const proceedToNextStep = useCallback(async () => { + if (!serverUrl) return; + + try { + updateAuthState({ + isInitiatingAuth: true, + statusMessage: null, + latestError: null, + }); + + await stateMachine.executeStep(authState); + } catch (error) { + console.error("OAuth flow error:", error); + updateAuthState({ + latestError: error instanceof Error ? error : new Error(String(error)), + }); + } finally { + updateAuthState({ isInitiatingAuth: false }); + } + }, [serverUrl, authState, updateAuthState, stateMachine]); + + const handleQuickOAuth = useCallback(async () => { + if (!serverUrl) { + updateAuthState({ + statusMessage: { + type: "error", + message: + "Please enter a server URL in the sidebar before authenticating", + }, + }); + return; + } + + updateAuthState({ isInitiatingAuth: true, statusMessage: null }); + try { + const serverAuthProvider = new DebugInspectorOAuthClientProvider( + serverUrl, + ); + await auth(serverAuthProvider, { serverUrl: serverUrl }); + updateAuthState({ + statusMessage: { + type: "info", + message: "Starting OAuth authentication process...", + }, + }); + } catch (error) { + console.error("OAuth initialization error:", error); + updateAuthState({ + statusMessage: { + type: "error", + message: `Failed to start OAuth flow: ${error instanceof Error ? error.message : String(error)}`, + }, + }); + } finally { + updateAuthState({ isInitiatingAuth: false }); + } + }, [serverUrl, updateAuthState]); + + const handleClearOAuth = useCallback(() => { + if (serverUrl) { + const serverAuthProvider = new DebugInspectorOAuthClientProvider( + serverUrl, + ); + serverAuthProvider.clear(); + updateAuthState({ + oauthTokens: null, + oauthStep: "metadata_discovery", + latestError: null, + oauthClientInfo: null, + authorizationCode: "", + validationError: null, + oauthMetadata: null, + statusMessage: { + type: "success", + message: "OAuth tokens cleared successfully", + }, + }); + + // Clear success message after 3 seconds + setTimeout(() => { + updateAuthState({ statusMessage: null }); + }, 3000); + } + }, [serverUrl, updateAuthState]); + + return ( +
+
+

Authentication Settings

+ +
+ +
+
+
+

+ Configure authentication settings for your MCP server connection. +

+ +
+

OAuth Authentication

+

+ Use OAuth to securely authenticate with the MCP server. +

+ + {authState.statusMessage && ( + + )} + + {authState.loading ? ( +

Loading authentication status...

+ ) : ( +
+ {authState.oauthTokens && ( +
+

Access Token:

+
+ {authState.oauthTokens.access_token.substring(0, 25)}... +
+
+ )} + +
+ + + + + +
+ +

+ Choose "Guided" for step-by-step instructions or "Quick" for + the standard automatic flow. +

+
+ )} +
+ + +
+
+
+
+ ); +}; + +export default AuthDebugger; diff --git a/client/src/components/OAuthDebugCallback.tsx b/client/src/components/OAuthDebugCallback.tsx new file mode 100644 index 00000000..88d931c0 --- /dev/null +++ b/client/src/components/OAuthDebugCallback.tsx @@ -0,0 +1,92 @@ +import { useEffect } from "react"; +import { SESSION_KEYS } from "../lib/constants"; +import { + generateOAuthErrorDescription, + parseOAuthCallbackParams, +} from "@/utils/oauthUtils.ts"; + +interface OAuthCallbackProps { + onConnect: ({ + authorizationCode, + errorMsg, + }: { + authorizationCode?: string; + errorMsg?: string; + }) => void; +} + +const OAuthDebugCallback = ({ onConnect }: OAuthCallbackProps) => { + useEffect(() => { + let isProcessed = false; + + const handleCallback = async () => { + // Skip if we've already processed this callback + if (isProcessed) { + return; + } + isProcessed = true; + + const params = parseOAuthCallbackParams(window.location.search); + if (!params.successful) { + const errorMsg = generateOAuthErrorDescription(params); + onConnect({ errorMsg }); + return; + } + + const serverUrl = sessionStorage.getItem(SESSION_KEYS.SERVER_URL); + + // ServerURL isn't set, this can happen if we've opened the + // authentication request in a new tab, so we don't have the same + // session storage + if (!serverUrl) { + // If there's no server URL, we're likely in a new tab + // Just display the code for manual copying + return; + } + + if (!params.code) { + onConnect({ errorMsg: "Missing authorization code" }); + return; + } + + // Instead of storing in sessionStorage, pass the code directly + // to the auth state manager through onConnect + onConnect({ authorizationCode: params.code }); + }; + + handleCallback().finally(() => { + // Only redirect if we have the URL set, otherwise assume this was + // in a new tab + if (sessionStorage.getItem(SESSION_KEYS.SERVER_URL)) { + window.history.replaceState({}, document.title, "/"); + } + }); + + return () => { + isProcessed = true; + }; + }, [onConnect]); + + const callbackParams = parseOAuthCallbackParams(window.location.search); + + return ( +
+
+

+ Please copy this authorization code and return to the Auth Debugger: +

+ + {callbackParams.successful && "code" in callbackParams + ? callbackParams.code + : `No code found: ${callbackParams.error}, ${callbackParams.error_description}`} + +

+ Close this tab and paste the code in the OAuth flow to complete + authentication. +

+
+
+ ); +}; + +export default OAuthDebugCallback; diff --git a/client/src/components/OAuthFlowProgress.tsx b/client/src/components/OAuthFlowProgress.tsx new file mode 100644 index 00000000..f604fc73 --- /dev/null +++ b/client/src/components/OAuthFlowProgress.tsx @@ -0,0 +1,259 @@ +import { AuthDebuggerState, OAuthStep } from "@/lib/auth-types"; +import { CheckCircle2, Circle, ExternalLink } from "lucide-react"; +import { Button } from "./ui/button"; +import { DebugInspectorOAuthClientProvider } from "@/lib/auth"; + +interface OAuthStepProps { + label: string; + isComplete: boolean; + isCurrent: boolean; + error?: Error | null; + children?: React.ReactNode; +} + +const OAuthStepDetails = ({ + label, + isComplete, + isCurrent, + error, + children, +}: OAuthStepProps) => { + return ( +
+
+ {isComplete ? ( + + ) : ( + + )} + {label} +
+ + {/* Show children if current step or complete and children exist */} + {(isCurrent || isComplete) && children && ( +
{children}
+ )} + + {/* Display error if current step and an error exists */} + {isCurrent && error && ( +
+

Error:

+

{error.message}

+
+ )} +
+ ); +}; + +interface OAuthFlowProgressProps { + serverUrl: string; + authState: AuthDebuggerState; + updateAuthState: (updates: Partial) => void; + proceedToNextStep: () => Promise; +} + +export const OAuthFlowProgress = ({ + serverUrl, + authState, + updateAuthState, + proceedToNextStep, +}: OAuthFlowProgressProps) => { + const provider = new DebugInspectorOAuthClientProvider(serverUrl); + + const steps: Array = [ + "metadata_discovery", + "client_registration", + "authorization_redirect", + "authorization_code", + "token_request", + "complete", + ]; + const currentStepIdx = steps.findIndex((s) => s === authState.oauthStep); + + // Helper to get step props + const getStepProps = (stepName: OAuthStep) => ({ + isComplete: + currentStepIdx > steps.indexOf(stepName) || + currentStepIdx === steps.length - 1, // last step is "complete" + isCurrent: authState.oauthStep === stepName, + error: authState.oauthStep === stepName ? authState.latestError : null, + }); + + return ( +
+

OAuth Flow Progress

+

+ Follow these steps to complete OAuth authentication with the server. +

+ +
+ + {provider.getServerMetadata() && ( +
+ + Retrieved OAuth Metadata from {serverUrl} + /.well-known/oauth-authorization-server + +
+                {JSON.stringify(provider.getServerMetadata(), null, 2)}
+              
+
+ )} +
+ + + {authState.oauthClientInfo && ( +
+ + Registered Client Information + +
+                {JSON.stringify(authState.oauthClientInfo, null, 2)}
+              
+
+ )} +
+ + + {authState.authorizationUrl && ( +
+

Authorization URL:

+
+

+ Click the link to authorize in your browser. After + authorization, you'll be redirected back to continue the flow. +

+
+ )} + + + +
+ +
+ { + updateAuthState({ + authorizationCode: e.target.value, + validationError: null, + }); + }} + placeholder="Enter the code from the authorization server" + className={`flex h-9 w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${ + authState.validationError ? "border-red-500" : "border-input" + }`} + /> +
+ {authState.validationError && ( +

+ {authState.validationError} +

+ )} +

+ Once you've completed authorization in the link, paste the code + here. +

+
+
+ + + {authState.oauthMetadata && ( +
+ + Token Request Details + +
+

Token Endpoint:

+ + {authState.oauthMetadata.token_endpoint} + +
+
+ )} +
+ + + {authState.oauthTokens && ( +
+ + Access Tokens + +

+ Authentication successful! You can now use the authenticated + connection. These tokens will be used automatically for server + requests. +

+
+                {JSON.stringify(authState.oauthTokens, null, 2)}
+              
+
+ )} +
+
+ +
+ {authState.oauthStep !== "complete" && ( + <> + + + )} + + {authState.oauthStep === "authorization_redirect" && + authState.authorizationUrl && ( + + )} +
+
+ ); +}; diff --git a/client/src/components/__tests__/AuthDebugger.test.tsx b/client/src/components/__tests__/AuthDebugger.test.tsx new file mode 100644 index 00000000..469c1ba1 --- /dev/null +++ b/client/src/components/__tests__/AuthDebugger.test.tsx @@ -0,0 +1,382 @@ +import { + render, + screen, + fireEvent, + waitFor, + act, +} from "@testing-library/react"; +import "@testing-library/jest-dom"; +import { describe, it, beforeEach, jest } from "@jest/globals"; +import AuthDebugger, { AuthDebuggerProps } from "../AuthDebugger"; +import { TooltipProvider } from "@/components/ui/tooltip"; +import { SESSION_KEYS } from "@/lib/constants"; + +const mockOAuthTokens = { + access_token: "test_access_token", + token_type: "Bearer", + expires_in: 3600, + refresh_token: "test_refresh_token", + scope: "test_scope", +}; + +const mockOAuthMetadata = { + issuer: "https://oauth.example.com", + authorization_endpoint: "https://oauth.example.com/authorize", + token_endpoint: "https://oauth.example.com/token", + response_types_supported: ["code"], + grant_types_supported: ["authorization_code"], +}; + +const mockOAuthClientInfo = { + client_id: "test_client_id", + client_secret: "test_client_secret", + redirect_uris: ["http://localhost:3000/oauth/callback/debug"], +}; + +// Mock MCP SDK functions - must be before imports +jest.mock("@modelcontextprotocol/sdk/client/auth.js", () => ({ + auth: jest.fn(), + discoverOAuthMetadata: jest.fn(), + registerClient: jest.fn(), + startAuthorization: jest.fn(), + exchangeAuthorization: jest.fn(), +})); + +// Import the functions to get their types +import { + discoverOAuthMetadata, + registerClient, + startAuthorization, + exchangeAuthorization, +} from "@modelcontextprotocol/sdk/client/auth.js"; +import { OAuthMetadata } from "@modelcontextprotocol/sdk/shared/auth.js"; + +// Type the mocked functions properly +const mockDiscoverOAuthMetadata = discoverOAuthMetadata as jest.MockedFunction< + typeof discoverOAuthMetadata +>; +const mockRegisterClient = registerClient as jest.MockedFunction< + typeof registerClient +>; +const mockStartAuthorization = startAuthorization as jest.MockedFunction< + typeof startAuthorization +>; +const mockExchangeAuthorization = exchangeAuthorization as jest.MockedFunction< + typeof exchangeAuthorization +>; + +const sessionStorageMock = { + getItem: jest.fn(), + setItem: jest.fn(), + removeItem: jest.fn(), + clear: jest.fn(), +}; +Object.defineProperty(window, "sessionStorage", { + value: sessionStorageMock, +}); + +Object.defineProperty(window, "location", { + value: { + origin: "http://localhost:3000", + }, +}); + +describe("AuthDebugger", () => { + const defaultAuthState = { + isInitiatingAuth: false, + oauthTokens: null, + loading: false, + oauthStep: "metadata_discovery" as const, + oauthMetadata: null, + oauthClientInfo: null, + authorizationUrl: null, + authorizationCode: "", + latestError: null, + statusMessage: null, + validationError: null, + }; + + const defaultProps = { + serverUrl: "https://example.com", + onBack: jest.fn(), + authState: defaultAuthState, + updateAuthState: jest.fn(), + }; + + beforeEach(() => { + jest.clearAllMocks(); + sessionStorageMock.getItem.mockReturnValue(null); + + mockDiscoverOAuthMetadata.mockResolvedValue(mockOAuthMetadata); + mockRegisterClient.mockResolvedValue(mockOAuthClientInfo); + mockStartAuthorization.mockImplementation(async (_sseUrl, options) => { + const authUrl = new URL("https://oauth.example.com/authorize"); + + if (options.scope) { + authUrl.searchParams.set("scope", options.scope); + } + + return { + authorizationUrl: authUrl, + codeVerifier: "test_verifier", + }; + }); + mockExchangeAuthorization.mockResolvedValue(mockOAuthTokens); + }); + + const renderAuthDebugger = (props: Partial = {}) => { + const mergedProps = { + ...defaultProps, + ...props, + authState: { ...defaultAuthState, ...(props.authState || {}) }, + }; + return render( + + + , + ); + }; + + describe("Initial Rendering", () => { + it("should render the component with correct title", async () => { + await act(async () => { + renderAuthDebugger(); + }); + expect(screen.getByText("Authentication Settings")).toBeInTheDocument(); + }); + + it("should call onBack when Back button is clicked", async () => { + const onBack = jest.fn(); + await act(async () => { + renderAuthDebugger({ onBack }); + }); + fireEvent.click(screen.getByText("Back to Connect")); + expect(onBack).toHaveBeenCalled(); + }); + }); + + describe("OAuth Flow", () => { + it("should start OAuth flow when 'Guided OAuth Flow' is clicked", async () => { + await act(async () => { + renderAuthDebugger(); + }); + + await act(async () => { + fireEvent.click(screen.getByText("Guided OAuth Flow")); + }); + + expect(screen.getByText("OAuth Flow Progress")).toBeInTheDocument(); + }); + + it("should show error when OAuth flow is started without sseUrl", async () => { + const updateAuthState = jest.fn(); + await act(async () => { + renderAuthDebugger({ serverUrl: "", updateAuthState }); + }); + + await act(async () => { + fireEvent.click(screen.getByText("Guided OAuth Flow")); + }); + + expect(updateAuthState).toHaveBeenCalledWith({ + statusMessage: { + type: "error", + message: + "Please enter a server URL in the sidebar before authenticating", + }, + }); + }); + }); + + describe("Session Storage Integration", () => { + it("should load OAuth tokens from session storage", async () => { + // Mock the specific key for tokens with server URL + sessionStorageMock.getItem.mockImplementation((key) => { + if (key === "[https://example.com] mcp_tokens") { + return JSON.stringify(mockOAuthTokens); + } + return null; + }); + + await act(async () => { + renderAuthDebugger({ + authState: { + ...defaultAuthState, + oauthTokens: mockOAuthTokens, + }, + }); + }); + + await waitFor(() => { + expect(screen.getByText(/Access Token:/)).toBeInTheDocument(); + }); + }); + + it("should handle errors loading OAuth tokens from session storage", async () => { + // Mock console to avoid cluttering test output + const originalError = console.error; + console.error = jest.fn(); + + // Mock getItem to return invalid JSON for tokens + sessionStorageMock.getItem.mockImplementation((key) => { + if (key === "[https://example.com] mcp_tokens") { + return "invalid json"; + } + return null; + }); + + await act(async () => { + renderAuthDebugger(); + }); + + // Component should still render despite the error + expect(screen.getByText("Authentication Settings")).toBeInTheDocument(); + + // Restore console.error + console.error = originalError; + }); + }); + + describe("OAuth State Management", () => { + it("should clear OAuth state when Clear button is clicked", async () => { + const updateAuthState = jest.fn(); + // Mock the session storage to return tokens for the specific key + sessionStorageMock.getItem.mockImplementation((key) => { + if (key === "[https://example.com] mcp_tokens") { + return JSON.stringify(mockOAuthTokens); + } + return null; + }); + + await act(async () => { + renderAuthDebugger({ + authState: { + ...defaultAuthState, + oauthTokens: mockOAuthTokens, + }, + updateAuthState, + }); + }); + + await act(async () => { + fireEvent.click(screen.getByText("Clear OAuth State")); + }); + + expect(updateAuthState).toHaveBeenCalledWith({ + oauthTokens: null, + oauthStep: "metadata_discovery", + latestError: null, + oauthClientInfo: null, + oauthMetadata: null, + authorizationCode: "", + validationError: null, + statusMessage: { + type: "success", + message: "OAuth tokens cleared successfully", + }, + }); + + // Verify session storage was cleared + expect(sessionStorageMock.removeItem).toHaveBeenCalled(); + }); + }); + + describe("OAuth Flow Steps", () => { + it("should handle OAuth flow step progression", async () => { + const updateAuthState = jest.fn(); + await act(async () => { + renderAuthDebugger({ + updateAuthState, + authState: { + ...defaultAuthState, + isInitiatingAuth: false, // Changed to false so button is enabled + oauthStep: "metadata_discovery", + }, + }); + }); + + // Verify metadata discovery step + expect(screen.getByText("Metadata Discovery")).toBeInTheDocument(); + + // Click Continue - this should trigger metadata discovery + await act(async () => { + fireEvent.click(screen.getByText("Continue")); + }); + + expect(mockDiscoverOAuthMetadata).toHaveBeenCalledWith( + "https://example.com", + ); + }); + + // Setup helper for OAuth authorization tests + const setupAuthorizationUrlTest = async (metadata: OAuthMetadata) => { + const updateAuthState = jest.fn(); + + // Mock the session storage to return metadata + sessionStorageMock.getItem.mockImplementation((key) => { + if (key === `[https://example.com] ${SESSION_KEYS.SERVER_METADATA}`) { + return JSON.stringify(metadata); + } + if ( + key === `[https://example.com] ${SESSION_KEYS.CLIENT_INFORMATION}` + ) { + return JSON.stringify(mockOAuthClientInfo); + } + return null; + }); + + await act(async () => { + renderAuthDebugger({ + updateAuthState, + authState: { + ...defaultAuthState, + isInitiatingAuth: false, + oauthStep: "authorization_redirect", + oauthMetadata: metadata, + oauthClientInfo: mockOAuthClientInfo, + }, + }); + }); + + // Click Continue to trigger authorization + await act(async () => { + fireEvent.click(screen.getByText("Continue")); + }); + + return updateAuthState; + }; + + it("should include scope in authorization URL when scopes_supported is present", async () => { + const metadataWithScopes = { + ...mockOAuthMetadata, + scopes_supported: ["read", "write", "admin"], + }; + + const updateAuthState = + await setupAuthorizationUrlTest(metadataWithScopes); + + // Wait for the updateAuthState to be called + await waitFor(() => { + expect(updateAuthState).toHaveBeenCalledWith( + expect.objectContaining({ + authorizationUrl: expect.stringContaining("scope="), + }), + ); + }); + }); + + it("should not include scope in authorization URL when scopes_supported is not present", async () => { + const updateAuthState = + await setupAuthorizationUrlTest(mockOAuthMetadata); + + // Wait for the updateAuthState to be called + await waitFor(() => { + expect(updateAuthState).toHaveBeenCalledWith( + expect.objectContaining({ + authorizationUrl: expect.not.stringContaining("scope="), + }), + ); + }); + }); + }); +}); diff --git a/client/src/lib/auth-types.ts b/client/src/lib/auth-types.ts new file mode 100644 index 00000000..ef32601a --- /dev/null +++ b/client/src/lib/auth-types.ts @@ -0,0 +1,38 @@ +import { + OAuthMetadata, + OAuthClientInformationFull, + OAuthClientInformation, + OAuthTokens, +} from "@modelcontextprotocol/sdk/shared/auth.js"; + +// OAuth flow steps +export type OAuthStep = + | "metadata_discovery" + | "client_registration" + | "authorization_redirect" + | "authorization_code" + | "token_request" + | "complete"; + +// Message types for inline feedback +export type MessageType = "success" | "error" | "info"; + +export interface StatusMessage { + type: MessageType; + message: string; +} + +// Single state interface for OAuth state +export interface AuthDebuggerState { + isInitiatingAuth: boolean; + oauthTokens: OAuthTokens | null; + loading: boolean; + oauthStep: OAuthStep; + oauthMetadata: OAuthMetadata | null; + oauthClientInfo: OAuthClientInformationFull | OAuthClientInformation | null; + authorizationUrl: string | null; + authorizationCode: string; + latestError: Error | null; + statusMessage: StatusMessage | null; + validationError: string | null; +} diff --git a/client/src/lib/auth.ts b/client/src/lib/auth.ts index 7ef31822..3e3516e0 100644 --- a/client/src/lib/auth.ts +++ b/client/src/lib/auth.ts @@ -4,11 +4,13 @@ import { OAuthClientInformation, OAuthTokens, OAuthTokensSchema, + OAuthClientMetadata, + OAuthMetadata, } from "@modelcontextprotocol/sdk/shared/auth.js"; import { SESSION_KEYS, getServerSpecificKey } from "./constants"; export class InspectorOAuthClientProvider implements OAuthClientProvider { - constructor(private serverUrl: string) { + constructor(public serverUrl: string) { // Save the server URL to session storage sessionStorage.setItem(SESSION_KEYS.SERVER_URL, serverUrl); } @@ -17,7 +19,7 @@ export class InspectorOAuthClientProvider implements OAuthClientProvider { return window.location.origin + "/oauth/callback"; } - get clientMetadata() { + get clientMetadata(): OAuthClientMetadata { return { redirect_uris: [this.redirectUrl], token_endpoint_auth_method: "none", @@ -101,3 +103,38 @@ export class InspectorOAuthClientProvider implements OAuthClientProvider { ); } } + +// Overrides debug URL and allows saving server OAuth metadata to +// display in debug UI. +export class DebugInspectorOAuthClientProvider extends InspectorOAuthClientProvider { + get redirectUrl(): string { + return `${window.location.origin}/oauth/callback/debug`; + } + + saveServerMetadata(metadata: OAuthMetadata) { + const key = getServerSpecificKey( + SESSION_KEYS.SERVER_METADATA, + this.serverUrl, + ); + sessionStorage.setItem(key, JSON.stringify(metadata)); + } + + getServerMetadata(): OAuthMetadata | null { + const key = getServerSpecificKey( + SESSION_KEYS.SERVER_METADATA, + this.serverUrl, + ); + const metadata = sessionStorage.getItem(key); + if (!metadata) { + return null; + } + return JSON.parse(metadata); + } + + clear() { + super.clear(); + sessionStorage.removeItem( + getServerSpecificKey(SESSION_KEYS.SERVER_METADATA, this.serverUrl), + ); + } +} diff --git a/client/src/lib/constants.ts b/client/src/lib/constants.ts index a03239ae..4c3e27aa 100644 --- a/client/src/lib/constants.ts +++ b/client/src/lib/constants.ts @@ -6,6 +6,7 @@ export const SESSION_KEYS = { SERVER_URL: "mcp_server_url", TOKENS: "mcp_tokens", CLIENT_INFORMATION: "mcp_client_information", + SERVER_METADATA: "mcp_server_metadata", } as const; // Generate server-specific session storage keys diff --git a/client/src/lib/oauth-state-machine.ts b/client/src/lib/oauth-state-machine.ts new file mode 100644 index 00000000..0678229c --- /dev/null +++ b/client/src/lib/oauth-state-machine.ts @@ -0,0 +1,181 @@ +import { OAuthStep, AuthDebuggerState } from "./auth-types"; +import { DebugInspectorOAuthClientProvider } from "./auth"; +import { + discoverOAuthMetadata, + registerClient, + startAuthorization, + exchangeAuthorization, +} from "@modelcontextprotocol/sdk/client/auth.js"; +import { OAuthMetadataSchema } from "@modelcontextprotocol/sdk/shared/auth.js"; + +export interface StateMachineContext { + state: AuthDebuggerState; + serverUrl: string; + provider: DebugInspectorOAuthClientProvider; + updateState: (updates: Partial) => void; +} + +export interface StateTransition { + canTransition: (context: StateMachineContext) => Promise; + execute: (context: StateMachineContext) => Promise; + nextStep: OAuthStep; +} + +// State machine transitions +export const oauthTransitions: Record = { + metadata_discovery: { + canTransition: async () => true, + execute: async (context) => { + const metadata = await discoverOAuthMetadata(context.serverUrl); + if (!metadata) { + throw new Error("Failed to discover OAuth metadata"); + } + const parsedMetadata = await OAuthMetadataSchema.parseAsync(metadata); + context.provider.saveServerMetadata(parsedMetadata); + context.updateState({ + oauthMetadata: parsedMetadata, + oauthStep: "client_registration", + }); + }, + nextStep: "client_registration", + }, + + client_registration: { + canTransition: async (context) => !!context.state.oauthMetadata, + execute: async (context) => { + const metadata = context.state.oauthMetadata!; + const clientMetadata = context.provider.clientMetadata; + + // Add all supported scopes to client registration + if (metadata.scopes_supported) { + clientMetadata.scope = metadata.scopes_supported.join(" "); + } + + const fullInformation = await registerClient(context.serverUrl, { + metadata, + clientMetadata, + }); + + context.provider.saveClientInformation(fullInformation); + context.updateState({ + oauthClientInfo: fullInformation, + oauthStep: "authorization_redirect", + }); + }, + nextStep: "authorization_redirect", + }, + + authorization_redirect: { + canTransition: async (context) => + !!context.state.oauthMetadata && !!context.state.oauthClientInfo, + execute: async (context) => { + const metadata = context.state.oauthMetadata!; + const clientInformation = context.state.oauthClientInfo!; + + let scope: string | undefined = undefined; + if (metadata.scopes_supported) { + scope = metadata.scopes_supported.join(" "); + } + + const { authorizationUrl, codeVerifier } = await startAuthorization( + context.serverUrl, + { + metadata, + clientInformation, + redirectUrl: context.provider.redirectUrl, + scope, + }, + ); + + context.provider.saveCodeVerifier(codeVerifier); + context.updateState({ + authorizationUrl: authorizationUrl.toString(), + oauthStep: "authorization_code", + }); + }, + nextStep: "authorization_code", + }, + + authorization_code: { + canTransition: async () => true, + execute: async (context) => { + if ( + !context.state.authorizationCode || + context.state.authorizationCode.trim() === "" + ) { + context.updateState({ + validationError: "You need to provide an authorization code", + }); + // Don't advance if no code + throw new Error("Authorization code required"); + } + context.updateState({ + validationError: null, + oauthStep: "token_request", + }); + }, + nextStep: "token_request", + }, + + token_request: { + canTransition: async (context) => { + return ( + !!context.state.authorizationCode && + !!context.provider.getServerMetadata() && + !!(await context.provider.clientInformation()) + ); + }, + execute: async (context) => { + const codeVerifier = context.provider.codeVerifier(); + const metadata = context.provider.getServerMetadata()!; + const clientInformation = (await context.provider.clientInformation())!; + + const tokens = await exchangeAuthorization(context.serverUrl, { + metadata, + clientInformation, + authorizationCode: context.state.authorizationCode, + codeVerifier, + redirectUri: context.provider.redirectUrl, + }); + + context.provider.saveTokens(tokens); + context.updateState({ + oauthTokens: tokens, + oauthStep: "complete", + }); + }, + nextStep: "complete", + }, + + complete: { + canTransition: async () => false, + execute: async () => { + // No-op for complete state + }, + nextStep: "complete", + }, +}; + +export class OAuthStateMachine { + constructor( + private serverUrl: string, + private updateState: (updates: Partial) => void, + ) {} + + async executeStep(state: AuthDebuggerState): Promise { + const provider = new DebugInspectorOAuthClientProvider(this.serverUrl); + const context: StateMachineContext = { + state, + serverUrl: this.serverUrl, + provider, + updateState: this.updateState, + }; + + const transition = oauthTransitions[state.oauthStep]; + if (!(await transition.canTransition(context))) { + throw new Error(`Cannot transition from ${state.oauthStep}`); + } + + await transition.execute(context); + } +} diff --git a/package-lock.json b/package-lock.json index e0e23c9f..92e89f74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@modelcontextprotocol/inspector-cli": "^0.12.0", "@modelcontextprotocol/inspector-client": "^0.12.0", "@modelcontextprotocol/inspector-server": "^0.12.0", - "@modelcontextprotocol/sdk": "^1.11.0", + "@modelcontextprotocol/sdk": "^1.11.2", "concurrently": "^9.0.1", "open": "^10.1.0", "shell-quote": "^1.8.2", @@ -43,7 +43,7 @@ "version": "0.12.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.10.2", + "@modelcontextprotocol/sdk": "^1.11.0", "commander": "^13.1.0", "spawn-rx": "^5.1.2" }, @@ -66,7 +66,7 @@ "version": "0.12.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.10.2", + "@modelcontextprotocol/sdk": "^1.11.0", "@radix-ui/react-checkbox": "^1.1.4", "@radix-ui/react-dialog": "^1.1.3", "@radix-ui/react-icons": "^1.3.0", @@ -2004,10 +2004,9 @@ "link": true }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.0.tgz", - "integrity": "sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==", - "license": "MIT", + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", + "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", @@ -10937,7 +10936,7 @@ "version": "0.12.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.10.2", + "@modelcontextprotocol/sdk": "^1.11.0", "cors": "^2.8.5", "express": "^5.1.0", "ws": "^8.18.0", diff --git a/package.json b/package.json index 01beeac4..dcbd3bf1 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@modelcontextprotocol/inspector-cli": "^0.12.0", "@modelcontextprotocol/inspector-client": "^0.12.0", "@modelcontextprotocol/inspector-server": "^0.12.0", - "@modelcontextprotocol/sdk": "^1.11.0", + "@modelcontextprotocol/sdk": "^1.11.2", "concurrently": "^9.0.1", "open": "^10.1.0", "shell-quote": "^1.8.2", From e3076ae05ca91962d5f9db7bb1db4d69f6c5fe05 Mon Sep 17 00:00:00 2001 From: sumeetpardeshi Date: Tue, 13 May 2025 17:09:02 -0700 Subject: [PATCH 067/135] fixing indentation --- client/src/components/Sidebar.tsx | 4 ++-- client/src/components/__tests__/Sidebar.test.tsx | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index 358aa9c9..40b04310 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -139,7 +139,7 @@ const Sidebar = ({ // Memoized config entry generator const generateMCPServerEntry = useCallback(() => { - return JSON.stringify(generateServerConfig(), null, 2); + return JSON.stringify(generateServerConfig(), null, 4); }, [generateServerConfig]); // Memoized config file generator @@ -151,7 +151,7 @@ const Sidebar = ({ }, }, null, - 2, + 4, ); }, [generateServerConfig]); diff --git a/client/src/components/__tests__/Sidebar.test.tsx b/client/src/components/__tests__/Sidebar.test.tsx index 5b907104..47c19b17 100644 --- a/client/src/components/__tests__/Sidebar.test.tsx +++ b/client/src/components/__tests__/Sidebar.test.tsx @@ -700,7 +700,7 @@ describe("Sidebar Environment Variables", () => { env, }, null, - 2, + 4, ); expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); }); @@ -735,7 +735,7 @@ describe("Sidebar Environment Variables", () => { }, }, null, - 2, + 4, ); expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); }); @@ -758,7 +758,7 @@ describe("Sidebar Environment Variables", () => { note: "For SSE connections, add this URL directly in Client", }, null, - 2, + 4, ); expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); }); @@ -785,7 +785,7 @@ describe("Sidebar Environment Variables", () => { }, }, null, - 2, + 4, ); expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); }); @@ -808,7 +808,7 @@ describe("Sidebar Environment Variables", () => { note: "For Streamable HTTP connections, add this URL directly in Client", }, null, - 2, + 4, ); expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); }); @@ -835,7 +835,7 @@ describe("Sidebar Environment Variables", () => { }, }, null, - 2, + 4, ); expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); }); @@ -864,7 +864,7 @@ describe("Sidebar Environment Variables", () => { env: {}, }, null, - 2, + 4, ); expect(mockClipboardWrite).toHaveBeenCalledWith(expectedConfig); }); From d40140c2e896716709f51c075bdeeb6c14216fff Mon Sep 17 00:00:00 2001 From: sumeetpardeshi Date: Wed, 14 May 2025 19:01:22 -0700 Subject: [PATCH 068/135] fixing lint error --- client/src/components/Sidebar.tsx | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index 40b04310..a7668d42 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -103,13 +103,16 @@ const Sidebar = ({ const { toast } = useToast(); // Reusable error reporter for copy actions - function reportError(error: unknown) { - toast({ - title: "Error", - description: `Failed to copy config: ${error instanceof Error ? error.message : String(error)}`, - variant: "destructive", - }); - } + const reportError = useCallback( + (error: unknown) => { + toast({ + title: "Error", + description: `Failed to copy config: ${error instanceof Error ? error.message : String(error)}`, + variant: "destructive", + }); + }, + [toast], + ); // Shared utility function to generate server config const generateServerConfig = useCallback(() => { @@ -182,7 +185,7 @@ const Sidebar = ({ } catch (error) { reportError(error); } - }, [generateMCPServerEntry, transportType, toast]); + }, [generateMCPServerEntry, transportType, toast, reportError]); const handleCopyServerFile = useCallback(() => { try { @@ -208,7 +211,7 @@ const Sidebar = ({ } catch (error) { reportError(error); } - }, [generateMCPServerFile, toast]); + }, [generateMCPServerFile, toast, reportError]); return (
From c6fad3f92343ccce99ac2ad9e635a08279e09ec6 Mon Sep 17 00:00:00 2001 From: Kamal Fariz Mahyuddin Date: Fri, 16 May 2025 08:22:39 -0700 Subject: [PATCH 069/135] fix: quick oauth flow could not transition to token_request due to missing server metadata (#407) * fix: quick oauth flow could not transition to token_request due to missing server metadata * chore: prettier fix --- client/src/components/AuthDebugger.tsx | 14 ++++- .../__tests__/AuthDebugger.test.tsx | 59 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index fa863373..a2f20e26 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -1,7 +1,11 @@ import { useCallback, useMemo } from "react"; import { Button } from "@/components/ui/button"; import { DebugInspectorOAuthClientProvider } from "../lib/auth"; -import { auth } from "@modelcontextprotocol/sdk/client/auth.js"; +import { + auth, + discoverOAuthMetadata, +} from "@modelcontextprotocol/sdk/client/auth.js"; +import { OAuthMetadataSchema } from "@modelcontextprotocol/sdk/shared/auth.js"; import { AlertCircle } from "lucide-react"; import { AuthDebuggerState } from "../lib/auth-types"; import { OAuthFlowProgress } from "./OAuthFlowProgress"; @@ -123,6 +127,14 @@ const AuthDebugger = ({ const serverAuthProvider = new DebugInspectorOAuthClientProvider( serverUrl, ); + // First discover OAuth metadata separately so we can save it + const metadata = await discoverOAuthMetadata(serverUrl); + if (!metadata) { + throw new Error("Failed to discover OAuth metadata"); + } + const parsedMetadata = await OAuthMetadataSchema.parseAsync(metadata); + serverAuthProvider.saveServerMetadata(parsedMetadata); + await auth(serverAuthProvider, { serverUrl: serverUrl }); updateAuthState({ statusMessage: { diff --git a/client/src/components/__tests__/AuthDebugger.test.tsx b/client/src/components/__tests__/AuthDebugger.test.tsx index 469c1ba1..aa206ecc 100644 --- a/client/src/components/__tests__/AuthDebugger.test.tsx +++ b/client/src/components/__tests__/AuthDebugger.test.tsx @@ -48,6 +48,7 @@ import { registerClient, startAuthorization, exchangeAuthorization, + auth, } from "@modelcontextprotocol/sdk/client/auth.js"; import { OAuthMetadata } from "@modelcontextprotocol/sdk/shared/auth.js"; @@ -64,6 +65,7 @@ const mockStartAuthorization = startAuthorization as jest.MockedFunction< const mockExchangeAuthorization = exchangeAuthorization as jest.MockedFunction< typeof exchangeAuthorization >; +const mockAuth = auth as jest.MockedFunction; const sessionStorageMock = { getItem: jest.fn(), @@ -186,6 +188,63 @@ describe("AuthDebugger", () => { }, }); }); + + it("should start quick OAuth flow and properly fetch and save metadata", async () => { + // Setup the auth mock + mockAuth.mockResolvedValue("AUTHORIZED"); + + const updateAuthState = jest.fn(); + await act(async () => { + renderAuthDebugger({ updateAuthState }); + }); + + await act(async () => { + fireEvent.click(screen.getByText("Quick OAuth Flow")); + }); + + // Should first discover and save OAuth metadata + expect(mockDiscoverOAuthMetadata).toHaveBeenCalledWith( + "https://example.com", + ); + + // Then should call auth with the server provider + expect(mockAuth).toHaveBeenCalled(); + + // Check that updateAuthState was called with the right info message + expect(updateAuthState).toHaveBeenCalledWith( + expect.objectContaining({ + statusMessage: { + type: "info", + message: "Starting OAuth authentication process...", + }, + }), + ); + }); + + it("should show error when quick OAuth flow fails to discover metadata", async () => { + mockDiscoverOAuthMetadata.mockRejectedValue( + new Error("Metadata discovery failed"), + ); + + const updateAuthState = jest.fn(); + await act(async () => { + renderAuthDebugger({ updateAuthState }); + }); + + await act(async () => { + fireEvent.click(screen.getByText("Quick OAuth Flow")); + }); + + // Check that updateAuthState was called with an error message + expect(updateAuthState).toHaveBeenCalledWith( + expect.objectContaining({ + statusMessage: { + type: "error", + message: expect.stringContaining("Failed to start OAuth flow"), + }, + }), + ); + }); }); describe("Session Storage Integration", () => { From fa236ea2c7bf519ab40f6dcef8a7e9fdb4bbe665 Mon Sep 17 00:00:00 2001 From: Shane Date: Tue, 6 May 2025 15:36:18 -0700 Subject: [PATCH 070/135] handle the case that client disconnects so that the server does not crash --- server/src/index.ts | 62 ++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index c967b60c..587911bb 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -141,7 +141,7 @@ let backingServerTransport: Transport | undefined; app.get("/mcp", async (req, res) => { const sessionId = req.headers["mcp-session-id"] as string; - console.log(`Received GET message for sessionId ${sessionId}`); + console.log(`GET /mcp for sessionId ${sessionId}`); try { const transport = webAppTransports.get( sessionId, @@ -160,7 +160,7 @@ app.get("/mcp", async (req, res) => { app.post("/mcp", async (req, res) => { const sessionId = req.headers["mcp-session-id"] as string | undefined; - console.log(`Received POST message for sessionId ${sessionId}`); + console.log(`POST /mcp for sessionId ${sessionId}`); if (!sessionId) { try { console.log("New streamable-http connection"); @@ -228,7 +228,7 @@ app.post("/mcp", async (req, res) => { app.get("/stdio", async (req, res) => { try { - console.log("New connection"); + console.log("GET /stdio"); try { await backingServerTransport?.close(); @@ -254,18 +254,44 @@ app.get("/stdio", async (req, res) => { console.log("Created web app transport"); await webAppTransport.start(); - (backingServerTransport as StdioClientTransport).stderr!.on( - "data", - (chunk) => { - webAppTransport.send({ - jsonrpc: "2.0", - method: "notifications/stderr", - params: { - content: chunk.toString(), - }, - }); - }, - ); + + // Handle client disconnection + res.on('close', () => { + console.log(`Client disconnected from session ${webAppTransport.sessionId}`); + // Clean up the transport map + webAppTransports.delete(webAppTransport.sessionId); + }); + + // Create a stderr handler that checks connection state + const stderrHandler = (chunk: Buffer) => { + try { + // Only send if the transport exists in our map (meaning it's still active) + if (webAppTransports.has(webAppTransport.sessionId)) { + webAppTransport.send({ + jsonrpc: "2.0", + method: "notifications/stderr", + params: { + content: chunk.toString(), + }, + }); + } + } catch (error: any) { + console.log(`Error sending stderr data to client: ${error.message}`); + // If we hit an error sending, clean up the transport + webAppTransports.delete(webAppTransport.sessionId); + } + }; + + if ((backingServerTransport as StdioClientTransport).stderr) { + (backingServerTransport as StdioClientTransport).stderr!.on("data", stderrHandler); + + // Store the handler reference so we can remove it when client disconnects + res.on('close', () => { + if ((backingServerTransport as StdioClientTransport).stderr) { + (backingServerTransport as StdioClientTransport).stderr!.removeListener("data", stderrHandler); + } + }); + } mcpProxy({ transportToClient: webAppTransport, @@ -282,7 +308,7 @@ app.get("/stdio", async (req, res) => { app.get("/sse", async (req, res) => { try { console.log( - "New SSE connection. NOTE: The sse transport is deprecated and has been replaced by streamable-http", + "GET /sse (NOTE: The sse transport is deprecated and has been replaced by streamable-http)", ); try { @@ -324,7 +350,7 @@ app.get("/sse", async (req, res) => { app.post("/message", async (req, res) => { try { const sessionId = req.query.sessionId; - console.log(`Received message for sessionId ${sessionId}`); + console.log(`POST /message for sessionId ${sessionId}`); const transport = webAppTransports.get( sessionId as string, @@ -341,6 +367,7 @@ app.post("/message", async (req, res) => { }); app.get("/health", (req, res) => { + console.log("GET /health"); res.json({ status: "ok", }); @@ -348,6 +375,7 @@ app.get("/health", (req, res) => { app.get("/config", (req, res) => { try { + console.log("GET /config"); res.json({ defaultEnvironment, defaultCommand: values.env, From b9b3682350bf3ae45636a9704ff501fdcfcab870 Mon Sep 17 00:00:00 2001 From: Shane Date: Tue, 6 May 2025 15:44:58 -0700 Subject: [PATCH 071/135] format fix --- server/src/index.ts | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index 587911bb..afd30243 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -254,14 +254,16 @@ app.get("/stdio", async (req, res) => { console.log("Created web app transport"); await webAppTransport.start(); - + // Handle client disconnection - res.on('close', () => { - console.log(`Client disconnected from session ${webAppTransport.sessionId}`); + res.on("close", () => { + console.log( + `Client disconnected from session ${webAppTransport.sessionId}`, + ); // Clean up the transport map webAppTransports.delete(webAppTransport.sessionId); }); - + // Create a stderr handler that checks connection state const stderrHandler = (chunk: Buffer) => { try { @@ -281,14 +283,19 @@ app.get("/stdio", async (req, res) => { webAppTransports.delete(webAppTransport.sessionId); } }; - + if ((backingServerTransport as StdioClientTransport).stderr) { - (backingServerTransport as StdioClientTransport).stderr!.on("data", stderrHandler); + (backingServerTransport as StdioClientTransport).stderr!.on( + "data", + stderrHandler, + ); // Store the handler reference so we can remove it when client disconnects - res.on('close', () => { + res.on("close", () => { if ((backingServerTransport as StdioClientTransport).stderr) { - (backingServerTransport as StdioClientTransport).stderr!.removeListener("data", stderrHandler); + ( + backingServerTransport as StdioClientTransport + ).stderr!.removeListener("data", stderrHandler); } }); } From 7df1936b3c7125600420808fc92fead1265f53c6 Mon Sep 17 00:00:00 2001 From: Shane Date: Sun, 18 May 2025 23:33:19 -0700 Subject: [PATCH 072/135] fixed the error handling in async call --- server/src/index.ts | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index afd30243..3ea88f44 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -266,21 +266,20 @@ app.get("/stdio", async (req, res) => { // Create a stderr handler that checks connection state const stderrHandler = (chunk: Buffer) => { - try { - // Only send if the transport exists in our map (meaning it's still active) - if (webAppTransports.has(webAppTransport.sessionId)) { - webAppTransport.send({ - jsonrpc: "2.0", - method: "notifications/stderr", - params: { - content: chunk.toString(), - }, - }); - } - } catch (error: any) { - console.log(`Error sending stderr data to client: ${error.message}`); - // If we hit an error sending, clean up the transport - webAppTransports.delete(webAppTransport.sessionId); + // Only send if the transport exists in our map (meaning it's still active) + if (webAppTransports.has(webAppTransport.sessionId)) { + webAppTransport.send({ + jsonrpc: "2.0", + method: "notifications/stderr", + params: { + content: chunk.toString(), + }, + }) + .catch((error: any) => { + console.error(`Error sending stderr data to client: ${error.message}`); + // If we hit an error sending, clean up the transport + webAppTransports.delete(webAppTransport.sessionId); + }); } }; From 13eb077329d3f8b7db5599da2fd9a5749c3ab386 Mon Sep 17 00:00:00 2001 From: ihrpr Date: Mon, 19 May 2025 18:29:42 +0100 Subject: [PATCH 073/135] fix auth conect --- client/src/App.tsx | 1 - client/src/lib/hooks/useConnection.ts | 33 +++++++++++++++++---------- package-lock.json | 9 -------- server/src/mcpProxy.ts | 17 +++++++++++++- 4 files changed, 37 insertions(+), 23 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index c32f4840..68065e24 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -234,7 +234,6 @@ const App = () => { const onOAuthConnect = useCallback( (serverUrl: string) => { setSseUrl(serverUrl); - setTransportType("sse"); setIsAuthDebuggerVisible(false); void connectMcpServer(); }, diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index 4ced90e4..6d328033 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -250,8 +250,12 @@ export function useConnection({ }; const handleAuthError = async (error: unknown) => { - if (error instanceof SseError && error.code === 401) { - // Create a new auth provider with the current server URL + const is401Error = + (error instanceof SseError && error.code === 401) || + (error instanceof Error && error.message.includes('401')) || + (error instanceof Error && error.message.includes('Unauthorized')); + + if (is401Error) { const serverAuthProvider = new InspectorOAuthClientProvider(sseUrl); const result = await auth(serverAuthProvider, { serverUrl: sseUrl }); @@ -330,7 +334,6 @@ export function useConnection({ mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/sse`); mcpProxyServerUrl.searchParams.append("url", sseUrl); transportOptions = { - authProvider: serverAuthProvider, eventSourceInit: { fetch: ( url: string | URL | globalThis.Request, @@ -347,7 +350,6 @@ export function useConnection({ mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/mcp`); mcpProxyServerUrl.searchParams.append("url", sseUrl); transportOptions = { - authProvider: serverAuthProvider, eventSourceInit: { fetch: ( url: string | URL | globalThis.Request, @@ -375,9 +377,9 @@ export function useConnection({ const clientTransport = transportType === "streamable-http" ? new StreamableHTTPClientTransport(mcpProxyServerUrl as URL, { - sessionId: undefined, - ...transportOptions, - }) + sessionId: undefined, + ...transportOptions, + }) : new SSEClientTransport(mcpProxyServerUrl as URL, transportOptions); if (onNotification) { @@ -425,12 +427,19 @@ export function useConnection({ `Failed to connect to MCP Server via the MCP Inspector Proxy: ${mcpProxyServerUrl}:`, error, ); - const shouldRetry = await handleAuthError(error); - if (shouldRetry) { - return connect(undefined, retryCount + 1); - } - if (error instanceof SseError && error.code === 401) { + // Check for auth-related errors + const is401Error = + (error instanceof SseError && error.code === 401) || + (error instanceof Error && error.message.includes('401')) || + (error instanceof Error && error.message.includes('Unauthorized')); + + if (is401Error) { + console.log("Detected 401 error, attempting OAuth flow"); + const shouldRetry = await handleAuthError(error); + if (shouldRetry) { + return connect(undefined, retryCount + 1); + } // Don't set error state if we're about to redirect for auth return; } diff --git a/package-lock.json b/package-lock.json index 92e89f74..46beb270 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8407,15 +8407,6 @@ "node": "20 || >=22" } }, - "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", diff --git a/server/src/mcpProxy.ts b/server/src/mcpProxy.ts index b93c0cdf..4e81fd59 100644 --- a/server/src/mcpProxy.ts +++ b/server/src/mcpProxy.ts @@ -1,4 +1,5 @@ import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; +import { isJSONRPCRequest } from "@modelcontextprotocol/sdk/types.js"; function onClientError(error: Error) { console.error("Error from inspector client:", error); @@ -19,7 +20,21 @@ export default function mcpProxy({ let transportToServerClosed = false; transportToClient.onmessage = (message) => { - transportToServer.send(message).catch(onServerError); + transportToServer.send(message).catch((error) => { + // Send error response back to client if it was a request (has id) and connection is still open + if (isJSONRPCRequest(message) && !transportToClientClosed) { + const errorResponse = { + jsonrpc: "2.0" as const, + id: message.id, + error: { + code: -32001, + message: error.message, + data: error + } + }; + transportToClient.send(errorResponse).catch(onClientError); + } + }); }; transportToServer.onmessage = (message) => { From 85ae0ede85ba42de9a5ed7f9438267f103cf06d8 Mon Sep 17 00:00:00 2001 From: ihrpr Date: Mon, 19 May 2025 18:36:50 +0100 Subject: [PATCH 074/135] small fix --- client/src/lib/hooks/useConnection.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index 6d328033..14a53e15 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -428,19 +428,18 @@ export function useConnection({ error, ); - // Check for auth-related errors + const shouldRetry = await handleAuthError(error); + if (shouldRetry) { + return connect(undefined, retryCount + 1); + } const is401Error = (error instanceof SseError && error.code === 401) || (error instanceof Error && error.message.includes('401')) || (error instanceof Error && error.message.includes('Unauthorized')); if (is401Error) { - console.log("Detected 401 error, attempting OAuth flow"); - const shouldRetry = await handleAuthError(error); - if (shouldRetry) { - return connect(undefined, retryCount + 1); - } // Don't set error state if we're about to redirect for auth + return; } throw error; From 2f6a9fca112cf4e3570b92bfa62df0934aba180c Mon Sep 17 00:00:00 2001 From: ihrpr Date: Mon, 19 May 2025 19:03:22 +0100 Subject: [PATCH 075/135] format --- client/src/lib/hooks/useConnection.ts | 14 +++++++------- server/src/mcpProxy.ts | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index 14a53e15..50ef88ca 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -252,8 +252,8 @@ export function useConnection({ const handleAuthError = async (error: unknown) => { const is401Error = (error instanceof SseError && error.code === 401) || - (error instanceof Error && error.message.includes('401')) || - (error instanceof Error && error.message.includes('Unauthorized')); + (error instanceof Error && error.message.includes("401")) || + (error instanceof Error && error.message.includes("Unauthorized")); if (is401Error) { const serverAuthProvider = new InspectorOAuthClientProvider(sseUrl); @@ -377,9 +377,9 @@ export function useConnection({ const clientTransport = transportType === "streamable-http" ? new StreamableHTTPClientTransport(mcpProxyServerUrl as URL, { - sessionId: undefined, - ...transportOptions, - }) + sessionId: undefined, + ...transportOptions, + }) : new SSEClientTransport(mcpProxyServerUrl as URL, transportOptions); if (onNotification) { @@ -434,8 +434,8 @@ export function useConnection({ } const is401Error = (error instanceof SseError && error.code === 401) || - (error instanceof Error && error.message.includes('401')) || - (error instanceof Error && error.message.includes('Unauthorized')); + (error instanceof Error && error.message.includes("401")) || + (error instanceof Error && error.message.includes("Unauthorized")); if (is401Error) { // Don't set error state if we're about to redirect for auth diff --git a/server/src/mcpProxy.ts b/server/src/mcpProxy.ts index 4e81fd59..12660504 100644 --- a/server/src/mcpProxy.ts +++ b/server/src/mcpProxy.ts @@ -29,8 +29,8 @@ export default function mcpProxy({ error: { code: -32001, message: error.message, - data: error - } + data: error, + }, }; transportToClient.send(errorResponse).catch(onClientError); } From 6b19ac3e3dddfef9704a3ee4d12ec7bdb586862b Mon Sep 17 00:00:00 2001 From: ihrpr Date: Mon, 19 May 2025 19:21:58 +0100 Subject: [PATCH 076/135] random issue when running build --- client/src/components/ToolsTab.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index aa67bfcf..8b625567 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -82,7 +82,7 @@ const ToolsTab = ({ Success )} - {structuredResult.content.map((item, index) => ( + {structuredResult.content?.map((item, index) => (
{item.type === "text" && ( From 618f24a9acb25222b01dec19e773362bb36c7abb Mon Sep 17 00:00:00 2001 From: xiaoli Date: Tue, 13 May 2025 23:38:19 +0800 Subject: [PATCH 077/135] feat: support custom authorization headers, fix #395 --- client/src/lib/hooks/useConnection.ts | 7 ++++++- server/src/index.ts | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index 4ced90e4..501c8359 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -297,7 +297,12 @@ export function useConnection({ bearerToken || (await serverAuthProvider.tokens())?.access_token; if (token) { const authHeaderName = headerName || "Authorization"; - headers[authHeaderName] = `Bearer ${token}`; + headers[authHeaderName] = token; + + // Add custom header name as a special request header to let the server know which header to pass through + if (headerName && headerName.toLowerCase() !== "authorization") { + headers["x-custom-auth-header"] = headerName; + } } // Create appropriate transport diff --git a/server/src/index.ts b/server/src/index.ts index c967b60c..766d2df4 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -91,6 +91,15 @@ const createTransport = async (req: express.Request): Promise => { const value = req.headers[key]; headers[key] = Array.isArray(value) ? value[value.length - 1] : value; } + + // If the header "x-custom-auth-header" is present, use its value as the custom header name. + if (req.headers["x-custom-auth-header"] !== undefined) { + const customHeaderName = req.headers["x-custom-auth-header"] as string; + if (req.headers[customHeaderName.toLowerCase()] !== undefined) { + const value = req.headers[customHeaderName.toLowerCase()]; + headers[customHeaderName] = Array.isArray(value) ? value[value.length - 1] : value as string; + } + } console.log(`SSE transport: url=${url}, headers=${Object.keys(headers)}`); @@ -119,6 +128,15 @@ const createTransport = async (req: express.Request): Promise => { const value = req.headers[key]; headers[key] = Array.isArray(value) ? value[value.length - 1] : value; } + + // If the header "x-custom-auth-header" is present, use its value as the custom header name. + if (req.headers["x-custom-auth-header"] !== undefined) { + const customHeaderName = req.headers["x-custom-auth-header"] as string; + if (req.headers[customHeaderName.toLowerCase()] !== undefined) { + const value = req.headers[customHeaderName.toLowerCase()]; + headers[customHeaderName] = Array.isArray(value) ? value[value.length - 1] : value as string; + } + } const transport = new StreamableHTTPClientTransport( new URL(query.url as string), From 13f736033a98b4502af2b7d47cf630fde1e72b3a Mon Sep 17 00:00:00 2001 From: xiaoli Date: Tue, 20 May 2025 13:10:55 +0800 Subject: [PATCH 078/135] fix: fix review comments - Avoid calling .lowerCase twice - Keep 'Bearer ' prefix when header equals 'Authorization' - Remove unnecessary Array type checks --- client/src/lib/hooks/useConnection.ts | 10 +++++++--- server/src/index.ts | 12 ++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index 501c8359..f1f7ab9e 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -297,11 +297,15 @@ export function useConnection({ bearerToken || (await serverAuthProvider.tokens())?.access_token; if (token) { const authHeaderName = headerName || "Authorization"; - headers[authHeaderName] = token; // Add custom header name as a special request header to let the server know which header to pass through - if (headerName && headerName.toLowerCase() !== "authorization") { - headers["x-custom-auth-header"] = headerName; + if (authHeaderName.toLowerCase() !== "authorization") { + headers[authHeaderName] = token; + if (headerName) { + headers["x-custom-auth-header"] = headerName; + } + } else { + headers[authHeaderName] = `Bearer ${token}`; } } diff --git a/server/src/index.ts b/server/src/index.ts index 766d2df4..fd28a807 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -95,9 +95,9 @@ const createTransport = async (req: express.Request): Promise => { // If the header "x-custom-auth-header" is present, use its value as the custom header name. if (req.headers["x-custom-auth-header"] !== undefined) { const customHeaderName = req.headers["x-custom-auth-header"] as string; - if (req.headers[customHeaderName.toLowerCase()] !== undefined) { - const value = req.headers[customHeaderName.toLowerCase()]; - headers[customHeaderName] = Array.isArray(value) ? value[value.length - 1] : value as string; + if (req.headers[customHeaderName] !== undefined) { + const value = req.headers[customHeaderName]; + headers[customHeaderName] = value as string; } } @@ -132,9 +132,9 @@ const createTransport = async (req: express.Request): Promise => { // If the header "x-custom-auth-header" is present, use its value as the custom header name. if (req.headers["x-custom-auth-header"] !== undefined) { const customHeaderName = req.headers["x-custom-auth-header"] as string; - if (req.headers[customHeaderName.toLowerCase()] !== undefined) { - const value = req.headers[customHeaderName.toLowerCase()]; - headers[customHeaderName] = Array.isArray(value) ? value[value.length - 1] : value as string; + if (req.headers[customHeaderName] !== undefined) { + const value = req.headers[customHeaderName]; + headers[customHeaderName] = value as string; } } From 014ef7d35e2f509919de2e19d431cba0c7a18732 Mon Sep 17 00:00:00 2001 From: ihrpr Date: Tue, 20 May 2025 17:25:44 +0100 Subject: [PATCH 079/135] refactor --- client/src/lib/hooks/useConnection.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index 50ef88ca..9c825318 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -249,13 +249,16 @@ export function useConnection({ } }; - const handleAuthError = async (error: unknown) => { - const is401Error = + const is401Error = (error: unknown): boolean => { + return ( (error instanceof SseError && error.code === 401) || (error instanceof Error && error.message.includes("401")) || - (error instanceof Error && error.message.includes("Unauthorized")); + (error instanceof Error && error.message.includes("Unauthorized")) + ); + }; - if (is401Error) { + const handleAuthError = async (error: unknown) => { + if (is401Error(error)) { const serverAuthProvider = new InspectorOAuthClientProvider(sseUrl); const result = await auth(serverAuthProvider, { serverUrl: sseUrl }); @@ -432,12 +435,7 @@ export function useConnection({ if (shouldRetry) { return connect(undefined, retryCount + 1); } - const is401Error = - (error instanceof SseError && error.code === 401) || - (error instanceof Error && error.message.includes("401")) || - (error instanceof Error && error.message.includes("Unauthorized")); - - if (is401Error) { + if (is401Error(error)) { // Don't set error state if we're about to redirect for auth return; From a61a1b0df2b557653f55933f98e9781b14ec98c2 Mon Sep 17 00:00:00 2001 From: Shane Date: Tue, 20 May 2025 09:25:47 -0700 Subject: [PATCH 080/135] format update with prettier --- server/src/index.ts | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index 3ea88f44..955d0267 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -268,18 +268,21 @@ app.get("/stdio", async (req, res) => { const stderrHandler = (chunk: Buffer) => { // Only send if the transport exists in our map (meaning it's still active) if (webAppTransports.has(webAppTransport.sessionId)) { - webAppTransport.send({ - jsonrpc: "2.0", - method: "notifications/stderr", - params: { - content: chunk.toString(), - }, - }) - .catch((error: any) => { - console.error(`Error sending stderr data to client: ${error.message}`); - // If we hit an error sending, clean up the transport - webAppTransports.delete(webAppTransport.sessionId); - }); + webAppTransport + .send({ + jsonrpc: "2.0", + method: "notifications/stderr", + params: { + content: chunk.toString(), + }, + }) + .catch((error: any) => { + console.error( + `Error sending stderr data to client: ${error.message}`, + ); + // If we hit an error sending, clean up the transport + webAppTransports.delete(webAppTransport.sessionId); + }); } }; From 8ab5ac14769b2b05759d1a62729eb5ee96eb914c Mon Sep 17 00:00:00 2001 From: ihrpr Date: Tue, 20 May 2025 18:21:33 +0100 Subject: [PATCH 081/135] remove null check --- client/src/components/ToolsTab.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index 8b625567..aa67bfcf 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -82,7 +82,7 @@ const ToolsTab = ({ Success )} - {structuredResult.content?.map((item, index) => ( + {structuredResult.content.map((item, index) => (
{item.type === "text" && ( From df9ea1e8a4127a4ed4ac0dd405bcf30db8c4c288 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Tue, 20 May 2025 19:51:48 +0100 Subject: [PATCH 082/135] rework naming --- client/src/components/Sidebar.tsx | 6 +++--- client/src/components/__tests__/Sidebar.test.tsx | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index a7668d42..516f48d5 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -127,14 +127,14 @@ const Sidebar = ({ return { type: "sse", url: sseUrl, - note: "For SSE connections, add this URL directly in Client", + note: "For SSE connections, add this URL directly in your MCP Client", }; } if (transportType === "streamable-http") { return { type: "streamable-http", url: sseUrl, - note: "For Streamable HTTP connections, add this URL directly in Client", + note: "For Streamable HTTP connections, add this URL directly in your MCP Client", }; } return {}; @@ -172,7 +172,7 @@ const Sidebar = ({ description: transportType === "stdio" ? "Server configuration has been copied to clipboard. Add this to your mcp.json inside the 'mcpServers' object with your preferred server name." - : "SSE URL has been copied. Use this URL in Cursor directly.", + : "SSE URL has been copied. Use this URL directly in your MCP Client.", }); setTimeout(() => { diff --git a/client/src/components/__tests__/Sidebar.test.tsx b/client/src/components/__tests__/Sidebar.test.tsx index 47c19b17..ba03d180 100644 --- a/client/src/components/__tests__/Sidebar.test.tsx +++ b/client/src/components/__tests__/Sidebar.test.tsx @@ -755,7 +755,7 @@ describe("Sidebar Environment Variables", () => { { type: "sse", url: sseUrl, - note: "For SSE connections, add this URL directly in Client", + note: "For SSE connections, add this URL directly in your MCP Client", }, null, 4, @@ -780,7 +780,7 @@ describe("Sidebar Environment Variables", () => { "default-server": { type: "sse", url: sseUrl, - note: "For SSE connections, add this URL directly in Client", + note: "For SSE connections, add this URL directly in your MCP Client", }, }, }, @@ -805,7 +805,7 @@ describe("Sidebar Environment Variables", () => { { type: "streamable-http", url: sseUrl, - note: "For Streamable HTTP connections, add this URL directly in Client", + note: "For Streamable HTTP connections, add this URL directly in your MCP Client", }, null, 4, @@ -830,7 +830,7 @@ describe("Sidebar Environment Variables", () => { "default-server": { type: "streamable-http", url: sseUrl, - note: "For Streamable HTTP connections, add this URL directly in Client", + note: "For Streamable HTTP connections, add this URL directly in your MCP Client", }, }, }, From 80377bc914bb6f05a3a695cf3d2d99439e582b4d Mon Sep 17 00:00:00 2001 From: Shane Date: Tue, 20 May 2025 22:28:26 -0700 Subject: [PATCH 083/135] fix the PR build error --- client/src/components/ToolsTab.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index aa67bfcf..8b625567 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -82,7 +82,7 @@ const ToolsTab = ({ Success )} - {structuredResult.content.map((item, index) => ( + {structuredResult.content?.map((item, index) => (
{item.type === "text" && ( From 3232c0e11eab10b50b01238a0b26b476f56fae1b Mon Sep 17 00:00:00 2001 From: Shane Date: Wed, 21 May 2025 10:21:39 -0700 Subject: [PATCH 084/135] Revert "fix the PR build error" This reverts commit 80377bc914bb6f05a3a695cf3d2d99439e582b4d. --- client/src/components/ToolsTab.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index 8b625567..aa67bfcf 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -82,7 +82,7 @@ const ToolsTab = ({ Success )} - {structuredResult.content?.map((item, index) => ( + {structuredResult.content.map((item, index) => (
{item.type === "text" && ( From b0db14c3a710f045f6bfdd2a29ac144645380120 Mon Sep 17 00:00:00 2001 From: ihrpr Date: Wed, 21 May 2025 20:33:19 +0100 Subject: [PATCH 085/135] 0.13.0 bump version --- cli/package.json | 2 +- client/package.json | 2 +- package-lock.json | 10 +++++----- package.json | 2 +- server/package.json | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cli/package.json b/cli/package.json index 53f2aa6b..8e4b9b19 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector-cli", - "version": "0.12.0", + "version": "0.13.0", "description": "CLI for the Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", diff --git a/client/package.json b/client/package.json index 2bcf2b03..de5b9261 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector-client", - "version": "0.12.0", + "version": "0.13.0", "description": "Client-side application for the Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", diff --git a/package-lock.json b/package-lock.json index 46beb270..2f6cfdfb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@modelcontextprotocol/inspector", - "version": "0.12.0", + "version": "0.13.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@modelcontextprotocol/inspector", - "version": "0.12.0", + "version": "0.13.0", "license": "MIT", "workspaces": [ "client", @@ -40,7 +40,7 @@ }, "cli": { "name": "@modelcontextprotocol/inspector-cli", - "version": "0.12.0", + "version": "0.13.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.11.0", @@ -63,7 +63,7 @@ }, "client": { "name": "@modelcontextprotocol/inspector-client", - "version": "0.12.0", + "version": "0.13.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.11.0", @@ -10924,7 +10924,7 @@ }, "server": { "name": "@modelcontextprotocol/inspector-server", - "version": "0.12.0", + "version": "0.13.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.11.0", diff --git a/package.json b/package.json index dcbd3bf1..00b48c86 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector", - "version": "0.12.0", + "version": "0.13.0", "description": "Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", diff --git a/server/package.json b/server/package.json index 72723d3f..f7d47cb2 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector-server", - "version": "0.12.0", + "version": "0.13.0", "description": "Server-side application for the Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", From bbdbd3afb9c7a9beff40e48a986dcd181babf18f Mon Sep 17 00:00:00 2001 From: ihrpr Date: Wed, 21 May 2025 20:37:20 +0100 Subject: [PATCH 086/135] update dependencies as well --- package-lock.json | 6 +++--- package.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f6cfdfb..fef7b7c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,9 +14,9 @@ "cli" ], "dependencies": { - "@modelcontextprotocol/inspector-cli": "^0.12.0", - "@modelcontextprotocol/inspector-client": "^0.12.0", - "@modelcontextprotocol/inspector-server": "^0.12.0", + "@modelcontextprotocol/inspector-cli": "^0.13.0", + "@modelcontextprotocol/inspector-client": "^0.13.0", + "@modelcontextprotocol/inspector-server": "^0.13.0", "@modelcontextprotocol/sdk": "^1.11.2", "concurrently": "^9.0.1", "open": "^10.1.0", diff --git a/package.json b/package.json index 00b48c86..f1ba80de 100644 --- a/package.json +++ b/package.json @@ -40,9 +40,9 @@ "publish-all": "npm publish --workspaces --access public && npm publish --access public" }, "dependencies": { - "@modelcontextprotocol/inspector-cli": "^0.12.0", - "@modelcontextprotocol/inspector-client": "^0.12.0", - "@modelcontextprotocol/inspector-server": "^0.12.0", + "@modelcontextprotocol/inspector-cli": "^0.13.0", + "@modelcontextprotocol/inspector-client": "^0.13.0", + "@modelcontextprotocol/inspector-server": "^0.13.0", "@modelcontextprotocol/sdk": "^1.11.2", "concurrently": "^9.0.1", "open": "^10.1.0", From 7cf85b526a22f07b5f0da910fb8561be89411014 Mon Sep 17 00:00:00 2001 From: ihrpr Date: Wed, 21 May 2025 20:56:25 +0100 Subject: [PATCH 087/135] update TS sdk --- cli/package.json | 2 +- client/package.json | 2 +- package-lock.json | 66 ++++++++++++++++++++++++++++++++++++++------- package.json | 2 +- server/package.json | 2 +- 5 files changed, 61 insertions(+), 13 deletions(-) diff --git a/cli/package.json b/cli/package.json index 8e4b9b19..55f12e15 100644 --- a/cli/package.json +++ b/cli/package.json @@ -21,7 +21,7 @@ }, "devDependencies": {}, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.0", + "@modelcontextprotocol/sdk": "^1.11.5", "commander": "^13.1.0", "spawn-rx": "^5.1.2" } diff --git a/client/package.json b/client/package.json index de5b9261..5b5ec19a 100644 --- a/client/package.json +++ b/client/package.json @@ -23,7 +23,7 @@ "test:watch": "jest --config jest.config.cjs --watch" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.0", + "@modelcontextprotocol/sdk": "^1.11.5", "@radix-ui/react-checkbox": "^1.1.4", "@radix-ui/react-dialog": "^1.1.3", "@radix-ui/react-icons": "^1.3.0", diff --git a/package-lock.json b/package-lock.json index fef7b7c2..0274b038 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@modelcontextprotocol/inspector-cli": "^0.13.0", "@modelcontextprotocol/inspector-client": "^0.13.0", "@modelcontextprotocol/inspector-server": "^0.13.0", - "@modelcontextprotocol/sdk": "^1.11.2", + "@modelcontextprotocol/sdk": "^1.11.5", "concurrently": "^9.0.1", "open": "^10.1.0", "shell-quote": "^1.8.2", @@ -43,7 +43,7 @@ "version": "0.13.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.0", + "@modelcontextprotocol/sdk": "^1.11.5", "commander": "^13.1.0", "spawn-rx": "^5.1.2" }, @@ -66,7 +66,7 @@ "version": "0.13.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.0", + "@modelcontextprotocol/sdk": "^1.11.5", "@radix-ui/react-checkbox": "^1.1.4", "@radix-ui/react-dialog": "^1.1.3", "@radix-ui/react-icons": "^1.3.0", @@ -2004,13 +2004,15 @@ "link": true }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", - "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.5.tgz", + "integrity": "sha512-gS7Q7IHpKxjVaNLMUZyTtatZ63ca3h418zPPntAhu/MvG5yfz/8HMcDAOpvpQfx3V3dsw9QQxk8RuFNrQhLlgA==", + "license": "MIT", "dependencies": { + "ajv": "^8.17.1", "content-type": "^1.0.5", "cors": "^2.8.5", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", @@ -2023,6 +2025,28 @@ "node": ">=18" } }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -5652,7 +5676,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-glob": { @@ -5697,6 +5720,22 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -9028,6 +9067,15 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -10927,7 +10975,7 @@ "version": "0.13.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.0", + "@modelcontextprotocol/sdk": "^1.11.5", "cors": "^2.8.5", "express": "^5.1.0", "ws": "^8.18.0", diff --git a/package.json b/package.json index f1ba80de..d46b3ef8 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@modelcontextprotocol/inspector-cli": "^0.13.0", "@modelcontextprotocol/inspector-client": "^0.13.0", "@modelcontextprotocol/inspector-server": "^0.13.0", - "@modelcontextprotocol/sdk": "^1.11.2", + "@modelcontextprotocol/sdk": "^1.11.5", "concurrently": "^9.0.1", "open": "^10.1.0", "shell-quote": "^1.8.2", diff --git a/server/package.json b/server/package.json index f7d47cb2..a3333da0 100644 --- a/server/package.json +++ b/server/package.json @@ -27,7 +27,7 @@ "typescript": "^5.6.2" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.0", + "@modelcontextprotocol/sdk": "^1.11.5", "cors": "^2.8.5", "express": "^5.1.0", "ws": "^8.18.0", From f04470ace7080f53233d1387e2dbb4d232bd5f7d Mon Sep 17 00:00:00 2001 From: cliffhall Date: Wed, 21 May 2025 17:45:19 -0400 Subject: [PATCH 088/135] Allow multiple client connections to the MCP server, by making a unique server tranpsort for each web app transport. * In server/src/index.ts - add serverTransports map - remove backingServerTransport var - in /mcp POST handler, when a new connection is being made - create a server transport - map the server transport using the session id from the web app connection - pass serverTransport to the mcpProxy instead of backingServerTransport - in /stdio GET handler, when a new connection is being made - create a server transport - map the server transport using the session id from the web app connection - pass serverTransport to the mcpProxy instead of backingServerTransport - in /sse GET handler, when a new connection is being made - create a server transport - map the server transport using the session id from the web app connection - pass serverTransport to the mcpProxy instead of backingServerTransport --- server/src/index.ts | 57 +++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index c967b60c..8bc8a53c 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -48,7 +48,8 @@ app.use((req, res, next) => { next(); }); -const webAppTransports: Map = new Map(); // Transports by sessionId +const webAppTransports: Map = new Map(); // Web app transports by web app sessionId +const serverTransports: Map = new Map(); // Server Transports by web app sessionId const createTransport = async (req: express.Request): Promise => { const query = req.query; @@ -137,8 +138,6 @@ const createTransport = async (req: express.Request): Promise => { } }; -let backingServerTransport: Transport | undefined; - app.get("/mcp", async (req, res) => { const sessionId = req.headers["mcp-session-id"] as string; console.log(`Received GET message for sessionId ${sessionId}`); @@ -161,12 +160,12 @@ app.get("/mcp", async (req, res) => { app.post("/mcp", async (req, res) => { const sessionId = req.headers["mcp-session-id"] as string | undefined; console.log(`Received POST message for sessionId ${sessionId}`); + let serverTransport: Transport | undefined; if (!sessionId) { try { console.log("New streamable-http connection"); try { - await backingServerTransport?.close(); - backingServerTransport = await createTransport(req); + serverTransport = await createTransport(req); } catch (error) { if (error instanceof SseError && error.code === 401) { console.error( @@ -180,12 +179,13 @@ app.post("/mcp", async (req, res) => { throw error; } - console.log("Connected MCP client to backing server transport"); + console.log("Connected MCP client to server transport"); const webAppTransport = new StreamableHTTPServerTransport({ sessionIdGenerator: randomUUID, onsessioninitialized: (sessionId) => { webAppTransports.set(sessionId, webAppTransport); + serverTransports.set(sessionId, serverTransport!); console.log("Created streamable web app transport " + sessionId); }, }); @@ -194,7 +194,7 @@ app.post("/mcp", async (req, res) => { mcpProxy({ transportToClient: webAppTransport, - transportToServer: backingServerTransport, + transportToServer: serverTransport, }); await (webAppTransport as StreamableHTTPServerTransport).handleRequest( @@ -229,10 +229,9 @@ app.post("/mcp", async (req, res) => { app.get("/stdio", async (req, res) => { try { console.log("New connection"); - + let serverTransport: Transport | undefined; try { - await backingServerTransport?.close(); - backingServerTransport = await createTransport(req); + serverTransport = await createTransport(req); } catch (error) { if (error instanceof SseError && error.code === 401) { console.error( @@ -250,26 +249,24 @@ app.get("/stdio", async (req, res) => { const webAppTransport = new SSEServerTransport("/message", res); webAppTransports.set(webAppTransport.sessionId, webAppTransport); - - console.log("Created web app transport"); + serverTransports.set(webAppTransport.sessionId, serverTransport); + console.log("Created client/server transports"); await webAppTransport.start(); - (backingServerTransport as StdioClientTransport).stderr!.on( - "data", - (chunk) => { - webAppTransport.send({ - jsonrpc: "2.0", - method: "notifications/stderr", - params: { - content: chunk.toString(), - }, - }); - }, - ); + + (serverTransport as StdioClientTransport).stderr!.on("data", (chunk) => { + webAppTransport.send({ + jsonrpc: "2.0", + method: "notifications/stderr", + params: { + content: chunk.toString(), + }, + }); + }); mcpProxy({ transportToClient: webAppTransport, - transportToServer: backingServerTransport, + transportToServer: serverTransport, }); console.log("Set up MCP proxy"); @@ -284,10 +281,9 @@ app.get("/sse", async (req, res) => { console.log( "New SSE connection. NOTE: The sse transport is deprecated and has been replaced by streamable-http", ); - + let serverTransport: SSEServerTransport | undefined; try { - await backingServerTransport?.close(); - backingServerTransport = await createTransport(req); + serverTransport = (await createTransport(req)) as SSEServerTransport; } catch (error) { if (error instanceof SseError && error.code === 401) { console.error( @@ -305,13 +301,14 @@ app.get("/sse", async (req, res) => { const webAppTransport = new SSEServerTransport("/message", res); webAppTransports.set(webAppTransport.sessionId, webAppTransport); - console.log("Created web app transport"); + serverTransports.set(webAppTransport.sessionId, serverTransport); + console.log("Created client/server transports"); await webAppTransport.start(); mcpProxy({ transportToClient: webAppTransport, - transportToServer: backingServerTransport, + transportToServer: serverTransport, }); console.log("Set up MCP proxy"); From 2870441fea8206625142f9d6b15ffe9904b82377 Mon Sep 17 00:00:00 2001 From: xiaoli Date: Sun, 25 May 2025 11:17:37 +0800 Subject: [PATCH 089/135] =?UTF-8?q?fix:=20fix=20review=20comments,=20again?= =?UTF-8?q?=F0=9F=98=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove unnecessary auth header name check - Extract operations on headers into a function --- client/src/lib/hooks/useConnection.ts | 3 - server/src/index.ts | 80 +++++++++++++-------------- 2 files changed, 39 insertions(+), 44 deletions(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index f1f7ab9e..84956942 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -301,9 +301,6 @@ export function useConnection({ // Add custom header name as a special request header to let the server know which header to pass through if (authHeaderName.toLowerCase() !== "authorization") { headers[authHeaderName] = token; - if (headerName) { - headers["x-custom-auth-header"] = headerName; - } } else { headers[authHeaderName] = `Bearer ${token}`; } diff --git a/server/src/index.ts b/server/src/index.ts index fd28a807..de14e286 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -41,6 +41,43 @@ const { values } = parseArgs({ }, }); +// Function to get HTTP headers. +// Supports only "sse" and "streamable-http" transport types. +const getHttpHeaders = ( + req: express.Request, + transportType: string, +): HeadersInit => { + const headers: HeadersInit = { + Accept: + transportType === "sse" + ? "text/event-stream" + : "text/event-stream, application/json", + }; + const defaultHeaders = + transportType === "sse" + ? SSE_HEADERS_PASSTHROUGH + : STREAMABLE_HTTP_HEADERS_PASSTHROUGH; + + for (const key of defaultHeaders) { + if (req.headers[key] === undefined) { + continue; + } + + const value = req.headers[key]; + headers[key] = Array.isArray(value) ? value[value.length - 1] : value; + } + + // If the header "x-custom-auth-header" is present, use its value as the custom header name. + if (req.headers["x-custom-auth-header"] !== undefined) { + const customHeaderName = req.headers["x-custom-auth-header"] as string; + if (req.headers[customHeaderName] !== undefined) { + const value = req.headers[customHeaderName]; + headers[customHeaderName] = value as string; + } + } + return headers; +}; + const app = express(); app.use(cors()); app.use((req, res, next) => { @@ -79,27 +116,8 @@ const createTransport = async (req: express.Request): Promise => { return transport; } else if (transportType === "sse") { const url = query.url as string; - const headers: HeadersInit = { - Accept: "text/event-stream", - }; - for (const key of SSE_HEADERS_PASSTHROUGH) { - if (req.headers[key] === undefined) { - continue; - } - - const value = req.headers[key]; - headers[key] = Array.isArray(value) ? value[value.length - 1] : value; - } - - // If the header "x-custom-auth-header" is present, use its value as the custom header name. - if (req.headers["x-custom-auth-header"] !== undefined) { - const customHeaderName = req.headers["x-custom-auth-header"] as string; - if (req.headers[customHeaderName] !== undefined) { - const value = req.headers[customHeaderName]; - headers[customHeaderName] = value as string; - } - } + const headers = getHttpHeaders(req, transportType); console.log(`SSE transport: url=${url}, headers=${Object.keys(headers)}`); @@ -116,27 +134,7 @@ const createTransport = async (req: express.Request): Promise => { console.log("Connected to SSE transport"); return transport; } else if (transportType === "streamable-http") { - const headers: HeadersInit = { - Accept: "text/event-stream, application/json", - }; - - for (const key of STREAMABLE_HTTP_HEADERS_PASSTHROUGH) { - if (req.headers[key] === undefined) { - continue; - } - - const value = req.headers[key]; - headers[key] = Array.isArray(value) ? value[value.length - 1] : value; - } - - // If the header "x-custom-auth-header" is present, use its value as the custom header name. - if (req.headers["x-custom-auth-header"] !== undefined) { - const customHeaderName = req.headers["x-custom-auth-header"] as string; - if (req.headers[customHeaderName] !== undefined) { - const value = req.headers[customHeaderName]; - headers[customHeaderName] = value as string; - } - } + const headers = getHttpHeaders(req, transportType); const transport = new StreamableHTTPClientTransport( new URL(query.url as string), From 21833f91022539ce6093a112cbe5b204f67ccd9a Mon Sep 17 00:00:00 2001 From: Balaj Marius Date: Tue, 27 May 2025 11:48:03 +0300 Subject: [PATCH 090/135] feat: improve color contrast and readability in dark mode --- client/src/App.tsx | 8 ++++---- client/src/components/History.tsx | 12 ++++++++---- client/src/components/ListPane.tsx | 6 +++--- client/src/components/PromptsTab.tsx | 6 +++--- client/src/components/ResourcesTab.tsx | 6 +++--- client/src/components/Sidebar.tsx | 4 ++-- client/src/components/ToolsTab.tsx | 8 ++++---- client/src/index.css | 4 ++-- 8 files changed, 29 insertions(+), 25 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 68065e24..be4347ca 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -608,7 +608,7 @@ const App = () => { className="w-full p-4" onValueChange={(value) => (window.location.hash = value)} > - + { !serverCapabilities?.tools ? ( <>
-

+

The connected server does not support any MCP capabilities

@@ -811,7 +811,7 @@ const App = () => { ) : (
-

+

Connect to an MCP server to start inspecting

@@ -836,7 +836,7 @@ const App = () => { }} >
diff --git a/client/src/components/History.tsx b/client/src/components/History.tsx index 0b05b55d..78394dea 100644 --- a/client/src/components/History.tsx +++ b/client/src/components/History.tsx @@ -29,7 +29,9 @@ const HistoryAndNotifications = ({

History

{requestHistory.length === 0 ? ( -

No history yet

+

+ No history yet +

) : (
    {requestHistory @@ -38,7 +40,7 @@ const HistoryAndNotifications = ({ .map((request, index) => (
  • Server Notifications

    {serverNotifications.length === 0 ? ( -

    No notifications yet

    +

    + No notifications yet +

    ) : (
      {serverNotifications @@ -102,7 +106,7 @@ const HistoryAndNotifications = ({ .map((notification, index) => (
    • ({ buttonText, isButtonDisabled, }: ListPaneProps) => ( -
      -
      +
      +

      {title}

      @@ -46,7 +46,7 @@ const ListPane = ({ {items.map((item, index) => (
      setSelectedItem(item)} > {renderItem(item)} diff --git a/client/src/components/PromptsTab.tsx b/client/src/components/PromptsTab.tsx index 5fdad823..66c15d8f 100644 --- a/client/src/components/PromptsTab.tsx +++ b/client/src/components/PromptsTab.tsx @@ -110,8 +110,8 @@ const PromptsTab = ({ isButtonDisabled={!nextCursor && prompts.length > 0} /> -
      -
      +
      +

      {selectedPrompt ? selectedPrompt.name : "Select a prompt"}

      @@ -126,7 +126,7 @@ const PromptsTab = ({ ) : selectedPrompt ? (
      {selectedPrompt.description && ( -

      +

      {selectedPrompt.description}

      )} diff --git a/client/src/components/ResourcesTab.tsx b/client/src/components/ResourcesTab.tsx index c0f8203f..35742799 100644 --- a/client/src/components/ResourcesTab.tsx +++ b/client/src/components/ResourcesTab.tsx @@ -173,8 +173,8 @@ const ResourcesTab = ({ isButtonDisabled={!nextTemplateCursor && resourceTemplates.length > 0} /> -
      -
      +
      +

      ) : selectedTemplate ? (
      -

      +

      {selectedTemplate.description}

      {selectedTemplate.uriTemplate diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index 516f48d5..eee8eeaa 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -215,7 +215,7 @@ const Sidebar = ({ return (
      -
      +

      MCP Inspector v{version} @@ -646,7 +646,7 @@ const Sidebar = ({ } })()}`} /> - + {(() => { switch (connectionStatus) { case "connected": diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index aa67bfcf..16d53848 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -145,8 +145,8 @@ const ToolsTab = ({ isButtonDisabled={!nextCursor && tools.length > 0} /> -
      -
      +
      +

      {selectedTool ? selectedTool.name : "Select a tool"}

      @@ -154,7 +154,7 @@ const ToolsTab = ({
      {selectedTool ? (
      -

      +

      {selectedTool.description}

      {Object.entries(selectedTool.inputSchema.properties ?? []).map( @@ -164,7 +164,7 @@ const ToolsTab = ({
      diff --git a/client/src/index.css b/client/src/index.css index 11c6f23d..c3f30b97 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -93,8 +93,8 @@ h1 { --accent-foreground: 210 40% 98%; --destructive: 0 62.8% 30.6%; --destructive-foreground: 210 40% 98%; - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; + --border: 217.2, 24%, 24%; + --input: 217.2 24% 24%; --ring: 212.7 26.8% 83.9%; --chart-1: 220 70% 50%; --chart-2: 160 60% 45%; From 7b1299c730d34594b85c44bd6eb42ff22f04701c Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Tue, 27 May 2025 11:36:19 +0100 Subject: [PATCH 091/135] [auth debugger] Make the quick flow use the same state machine as the step-by-step flow (#426) * use state machine in quick flow * clean up test * rm some comments --- client/src/components/AuthDebugger.tsx | 50 ++++++++++------ client/src/components/OAuthFlowProgress.tsx | 57 +++++++++++++++---- .../__tests__/AuthDebugger.test.tsx | 8 +-- 3 files changed, 80 insertions(+), 35 deletions(-) diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index a2f20e26..d0b0432d 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -1,11 +1,6 @@ import { useCallback, useMemo } from "react"; import { Button } from "@/components/ui/button"; import { DebugInspectorOAuthClientProvider } from "../lib/auth"; -import { - auth, - discoverOAuthMetadata, -} from "@modelcontextprotocol/sdk/client/auth.js"; -import { OAuthMetadataSchema } from "@modelcontextprotocol/sdk/shared/auth.js"; import { AlertCircle } from "lucide-react"; import { AuthDebuggerState } from "../lib/auth-types"; import { OAuthFlowProgress } from "./OAuthFlowProgress"; @@ -124,22 +119,43 @@ const AuthDebugger = ({ updateAuthState({ isInitiatingAuth: true, statusMessage: null }); try { - const serverAuthProvider = new DebugInspectorOAuthClientProvider( - serverUrl, - ); - // First discover OAuth metadata separately so we can save it - const metadata = await discoverOAuthMetadata(serverUrl); - if (!metadata) { - throw new Error("Failed to discover OAuth metadata"); + // Step through the OAuth flow using the state machine instead of the auth() function + let currentState: AuthDebuggerState = { + ...authState, + oauthStep: "metadata_discovery", + authorizationUrl: null, + latestError: null, + }; + + const oauthMachine = new OAuthStateMachine(serverUrl, (updates) => { + // Update our temporary state during the process + currentState = { ...currentState, ...updates }; + // But don't call updateAuthState yet + }); + + // Manually step through each stage of the OAuth flow + while (currentState.oauthStep !== "complete") { + await oauthMachine.executeStep(currentState); + // In quick mode, we'll just redirect to the authorization URL + if ( + currentState.oauthStep === "authorization_code" && + currentState.authorizationUrl + ) { + // Open the authorization URL automatically + window.location.href = currentState.authorizationUrl; + break; + } } - const parsedMetadata = await OAuthMetadataSchema.parseAsync(metadata); - serverAuthProvider.saveServerMetadata(parsedMetadata); - await auth(serverAuthProvider, { serverUrl: serverUrl }); + // After the flow completes or reaches a user-input step, update the app state updateAuthState({ + ...currentState, statusMessage: { type: "info", - message: "Starting OAuth authentication process...", + message: + currentState.oauthStep === "complete" + ? "Authentication completed successfully" + : "Please complete authentication in the opened window and enter the code", }, }); } catch (error) { @@ -153,7 +169,7 @@ const AuthDebugger = ({ } finally { updateAuthState({ isInitiatingAuth: false }); } - }, [serverUrl, updateAuthState]); + }, [serverUrl, updateAuthState, authState]); const handleClearOAuth = useCallback(() => { if (serverUrl) { diff --git a/client/src/components/OAuthFlowProgress.tsx b/client/src/components/OAuthFlowProgress.tsx index f604fc73..396af142 100644 --- a/client/src/components/OAuthFlowProgress.tsx +++ b/client/src/components/OAuthFlowProgress.tsx @@ -2,6 +2,8 @@ import { AuthDebuggerState, OAuthStep } from "@/lib/auth-types"; import { CheckCircle2, Circle, ExternalLink } from "lucide-react"; import { Button } from "./ui/button"; import { DebugInspectorOAuthClientProvider } from "@/lib/auth"; +import { useEffect, useMemo, useState } from "react"; +import { OAuthClientInformation } from "@modelcontextprotocol/sdk/shared/auth.js"; interface OAuthStepProps { label: string; @@ -54,24 +56,57 @@ interface OAuthFlowProgressProps { proceedToNextStep: () => Promise; } +const steps: Array = [ + "metadata_discovery", + "client_registration", + "authorization_redirect", + "authorization_code", + "token_request", + "complete", +]; + export const OAuthFlowProgress = ({ serverUrl, authState, updateAuthState, proceedToNextStep, }: OAuthFlowProgressProps) => { - const provider = new DebugInspectorOAuthClientProvider(serverUrl); + const provider = useMemo( + () => new DebugInspectorOAuthClientProvider(serverUrl), + [serverUrl], + ); + const [clientInfo, setClientInfo] = useState( + null, + ); - const steps: Array = [ - "metadata_discovery", - "client_registration", - "authorization_redirect", - "authorization_code", - "token_request", - "complete", - ]; const currentStepIdx = steps.findIndex((s) => s === authState.oauthStep); + useEffect(() => { + const fetchClientInfo = async () => { + if (authState.oauthClientInfo) { + setClientInfo(authState.oauthClientInfo); + } else { + try { + const info = await provider.clientInformation(); + if (info) { + setClientInfo(info); + } + } catch (error) { + console.error("Failed to fetch client information:", error); + } + } + }; + + if (currentStepIdx > steps.indexOf("client_registration")) { + fetchClientInfo(); + } + }, [ + provider, + authState.oauthStep, + authState.oauthClientInfo, + currentStepIdx, + ]); + // Helper to get step props const getStepProps = (stepName: OAuthStep) => ({ isComplete: @@ -110,13 +145,13 @@ export const OAuthFlowProgress = ({ label="Client Registration" {...getStepProps("client_registration")} > - {authState.oauthClientInfo && ( + {clientInfo && (
      Registered Client Information
      -                {JSON.stringify(authState.oauthClientInfo, null, 2)}
      +                {JSON.stringify(clientInfo, null, 2)}
                     
      )} diff --git a/client/src/components/__tests__/AuthDebugger.test.tsx b/client/src/components/__tests__/AuthDebugger.test.tsx index aa206ecc..7c539661 100644 --- a/client/src/components/__tests__/AuthDebugger.test.tsx +++ b/client/src/components/__tests__/AuthDebugger.test.tsx @@ -207,16 +207,10 @@ describe("AuthDebugger", () => { "https://example.com", ); - // Then should call auth with the server provider - expect(mockAuth).toHaveBeenCalled(); - // Check that updateAuthState was called with the right info message expect(updateAuthState).toHaveBeenCalledWith( expect.objectContaining({ - statusMessage: { - type: "info", - message: "Starting OAuth authentication process...", - }, + oauthStep: "authorization_code", }), ); }); From 66bb9c896b0f3961d9edc88f845ccdd6b9d39cfb Mon Sep 17 00:00:00 2001 From: David Sanftenberg Date: Wed, 28 May 2025 12:22:22 +0100 Subject: [PATCH 092/135] Add quick start example --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index d7c34b97..8d0de6f8 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,16 @@ The MCP inspector is a developer tool for testing and debugging MCP servers. - Node.js: ^22.7.5 +### Quick Start (UI mode) + +To get up and running right away with the UI, just execute the following: + +```bash +npx @modelcontextprotocol/inspector +``` + +The server will start up and the UI will be accessible at `http://localhost:6274`. + ### From an MCP server repository To inspect an MCP server implementation, there's no need to clone this repo. Instead, use `npx`. For example, if your server is built at `build/index.js`: From 692c863f5beaeeecd6bcba56a05d362bb46ec980 Mon Sep 17 00:00:00 2001 From: Cliff Hall Date: Wed, 28 May 2025 12:56:55 -0400 Subject: [PATCH 093/135] Revert "fix: handle the client disconnect so that the server does not crash." --- server/src/index.ts | 71 +++++++++++---------------------------------- 1 file changed, 17 insertions(+), 54 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index 955d0267..c967b60c 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -141,7 +141,7 @@ let backingServerTransport: Transport | undefined; app.get("/mcp", async (req, res) => { const sessionId = req.headers["mcp-session-id"] as string; - console.log(`GET /mcp for sessionId ${sessionId}`); + console.log(`Received GET message for sessionId ${sessionId}`); try { const transport = webAppTransports.get( sessionId, @@ -160,7 +160,7 @@ app.get("/mcp", async (req, res) => { app.post("/mcp", async (req, res) => { const sessionId = req.headers["mcp-session-id"] as string | undefined; - console.log(`POST /mcp for sessionId ${sessionId}`); + console.log(`Received POST message for sessionId ${sessionId}`); if (!sessionId) { try { console.log("New streamable-http connection"); @@ -228,7 +228,7 @@ app.post("/mcp", async (req, res) => { app.get("/stdio", async (req, res) => { try { - console.log("GET /stdio"); + console.log("New connection"); try { await backingServerTransport?.close(); @@ -254,53 +254,18 @@ app.get("/stdio", async (req, res) => { console.log("Created web app transport"); await webAppTransport.start(); - - // Handle client disconnection - res.on("close", () => { - console.log( - `Client disconnected from session ${webAppTransport.sessionId}`, - ); - // Clean up the transport map - webAppTransports.delete(webAppTransport.sessionId); - }); - - // Create a stderr handler that checks connection state - const stderrHandler = (chunk: Buffer) => { - // Only send if the transport exists in our map (meaning it's still active) - if (webAppTransports.has(webAppTransport.sessionId)) { - webAppTransport - .send({ - jsonrpc: "2.0", - method: "notifications/stderr", - params: { - content: chunk.toString(), - }, - }) - .catch((error: any) => { - console.error( - `Error sending stderr data to client: ${error.message}`, - ); - // If we hit an error sending, clean up the transport - webAppTransports.delete(webAppTransport.sessionId); - }); - } - }; - - if ((backingServerTransport as StdioClientTransport).stderr) { - (backingServerTransport as StdioClientTransport).stderr!.on( - "data", - stderrHandler, - ); - - // Store the handler reference so we can remove it when client disconnects - res.on("close", () => { - if ((backingServerTransport as StdioClientTransport).stderr) { - ( - backingServerTransport as StdioClientTransport - ).stderr!.removeListener("data", stderrHandler); - } - }); - } + (backingServerTransport as StdioClientTransport).stderr!.on( + "data", + (chunk) => { + webAppTransport.send({ + jsonrpc: "2.0", + method: "notifications/stderr", + params: { + content: chunk.toString(), + }, + }); + }, + ); mcpProxy({ transportToClient: webAppTransport, @@ -317,7 +282,7 @@ app.get("/stdio", async (req, res) => { app.get("/sse", async (req, res) => { try { console.log( - "GET /sse (NOTE: The sse transport is deprecated and has been replaced by streamable-http)", + "New SSE connection. NOTE: The sse transport is deprecated and has been replaced by streamable-http", ); try { @@ -359,7 +324,7 @@ app.get("/sse", async (req, res) => { app.post("/message", async (req, res) => { try { const sessionId = req.query.sessionId; - console.log(`POST /message for sessionId ${sessionId}`); + console.log(`Received message for sessionId ${sessionId}`); const transport = webAppTransports.get( sessionId as string, @@ -376,7 +341,6 @@ app.post("/message", async (req, res) => { }); app.get("/health", (req, res) => { - console.log("GET /health"); res.json({ status: "ok", }); @@ -384,7 +348,6 @@ app.get("/health", (req, res) => { app.get("/config", (req, res) => { try { - console.log("GET /config"); res.json({ defaultEnvironment, defaultCommand: values.env, From bc90f11dc88ae15de0adc059164ea35ed7f77d48 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Wed, 28 May 2025 13:44:55 -0400 Subject: [PATCH 094/135] Address [comment](https://github.com/modelcontextprotocol/inspector/pull/428/files/f04470ace7080f53233d1387e2dbb4d232bd5f7d#r2109509222) by @olaservo --- server/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index 8bc8a53c..c4345ae6 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -281,9 +281,9 @@ app.get("/sse", async (req, res) => { console.log( "New SSE connection. NOTE: The sse transport is deprecated and has been replaced by streamable-http", ); - let serverTransport: SSEServerTransport | undefined; + let serverTransport: Transport | undefined; try { - serverTransport = (await createTransport(req)) as SSEServerTransport; + serverTransport = (await createTransport(req)); } catch (error) { if (error instanceof SseError && error.code === 401) { console.error( From 9bc6bd725ee5e974047d2949644355dac5615828 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Wed, 28 May 2025 13:46:58 -0400 Subject: [PATCH 095/135] Address [comment](https://github.com/modelcontextprotocol/inspector/pull/428/files/f04470ace7080f53233d1387e2dbb4d232bd5f7d#r2109509222) [by](https://github.com/modelcontextprotocol/inspector/pull/428/files/f04470ace7080f53233d1387e2dbb4d232bd5f7d#r2108137150) @olaservo --- server/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/index.ts b/server/src/index.ts index c4345ae6..0b2aeec9 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -301,8 +301,9 @@ app.get("/sse", async (req, res) => { const webAppTransport = new SSEServerTransport("/message", res); webAppTransports.set(webAppTransport.sessionId, webAppTransport); + console.log("Created client transport"); serverTransports.set(webAppTransport.sessionId, serverTransport); - console.log("Created client/server transports"); + console.log("Created server transport"); await webAppTransport.start(); From de84c472ce2862abc77b7e9e98377b6583785adb Mon Sep 17 00:00:00 2001 From: Basil Hosmer Date: Tue, 27 May 2025 16:39:39 -0400 Subject: [PATCH 096/135] feat: Add structured output support to browser UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds comprehensive support for structured output validation in tool calls, following the MCP specification for tools with output schemas. UI Changes: 1. Output Schema Display: - Added collapsible output schema section in ToolsTab - Shows output schemas after input fields, before the Run Tool button - Default view shows 8 lines with scrolling, expandable to full view - Expand/Collapse button with chevron icons for better UX 2. Structured Content Display: - New "Structured Content" section when tools return structuredContent - Shows structured data in a formatted JSON view - Validation status indicator (green checkmark for valid, red X for errors) - Detailed validation error messages when content doesn't match schema 3. Unstructured Content Labeling: - Added "Unstructured Content" heading when both structured and unstructured content exist - Only shows label when structured content is also present - Maintains clean UI when only unstructured content exists 4. Compatibility Checking: - Checks if unstructured content matches structured content (when output schema exists) - Shows compatibility status with blue (compatible) or yellow (incompatible) indicators - Detailed messages explain why content doesn't match - Only runs compatibility check for tools with output schemas 5. Validation Error Handling: - Shows error when tool with output schema doesn't return structured content - Clear error messages for schema validation failures - Maintains proper error state display Technical Implementation: - Added schema validation utilities using Ajv (same as SDK) - Caches compiled validators for performance - Validates on tool result display, not during the call - Follows SDK's Client.callTool validation pattern 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- client/src/App.tsx | 5 + client/src/components/ToolsTab.tsx | 170 +++++++++++++++++++++++++++-- client/src/utils/schemaUtils.ts | 74 +++++++++++++ 3 files changed, 242 insertions(+), 7 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 68065e24..cb411452 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -20,6 +20,7 @@ import { import { OAuthTokensSchema } from "@modelcontextprotocol/sdk/shared/auth.js"; import { SESSION_KEYS, getServerSpecificKey } from "./lib/constants"; import { AuthDebuggerState } from "./lib/auth-types"; +import { cacheToolOutputSchemas } from "./utils/schemaUtils"; import React, { Suspense, useCallback, @@ -473,6 +474,8 @@ const App = () => { ); setTools(response.tools); setNextToolCursor(response.nextCursor); + // Cache output schemas for validation + cacheToolOutputSchemas(response.tools); }; const callTool = async (name: string, params: Record) => { @@ -759,6 +762,8 @@ const App = () => { clearTools={() => { setTools([]); setNextToolCursor(undefined); + // Clear cached output schemas + cacheToolOutputSchemas([]); }} callTool={async (name, params) => { clearError("tools"); diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index aa67bfcf..4f4e235f 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -7,14 +7,14 @@ import { TabsContent } from "@/components/ui/tabs"; import { Textarea } from "@/components/ui/textarea"; import DynamicJsonForm from "./DynamicJsonForm"; import type { JsonValue, JsonSchemaType } from "@/utils/jsonUtils"; -import { generateDefaultValue } from "@/utils/schemaUtils"; +import { generateDefaultValue, validateToolOutput, hasOutputSchema } from "@/utils/schemaUtils"; import { CallToolResultSchema, CompatibilityCallToolResult, ListToolsResult, Tool, } from "@modelcontextprotocol/sdk/types.js"; -import { Loader2, Send } from "lucide-react"; +import { Loader2, Send, ChevronDown, ChevronUp } from "lucide-react"; import { useEffect, useState } from "react"; import ListPane from "./ListPane"; import JsonView from "./JsonView"; @@ -41,6 +41,7 @@ const ToolsTab = ({ }) => { const [params, setParams] = useState>({}); const [isToolRunning, setIsToolRunning] = useState(false); + const [isOutputSchemaExpanded, setIsOutputSchemaExpanded] = useState(false); useEffect(() => { const params = Object.entries( @@ -52,6 +53,53 @@ const ToolsTab = ({ setParams(Object.fromEntries(params)); }, [selectedTool]); + // Check compatibility between structured and unstructured content + const checkContentCompatibility = ( + structuredContent: unknown, + unstructuredContent: Array<{ type: string; text?: string; [key: string]: unknown }> + ): { isCompatible: boolean; message: string } => { + // Check if unstructured content is a single text block + if (unstructuredContent.length !== 1 || unstructuredContent[0].type !== "text") { + return { + isCompatible: false, + message: "Unstructured content is not a single text block" + }; + } + + const textContent = unstructuredContent[0].text; + if (!textContent) { + return { + isCompatible: false, + message: "Text content is empty" + }; + } + + try { + // Try to parse the text as JSON + const parsedContent = JSON.parse(textContent); + + // Deep equality check + const isEqual = JSON.stringify(parsedContent) === JSON.stringify(structuredContent); + + if (isEqual) { + return { + isCompatible: true, + message: "Unstructured content matches structured content" + }; + } else { + return { + isCompatible: false, + message: "Parsed JSON does not match structured content" + }; + } + } catch (e) { + return { + isCompatible: false, + message: "Unstructured content is not valid JSON" + }; + } + }; + const renderToolResult = () => { if (!toolResult) return null; @@ -72,6 +120,36 @@ const ToolsTab = ({ const structuredResult = parsedResult.data; const isError = structuredResult.isError ?? false; + // Validate structured content if present and tool has output schema + let validationResult = null; + const toolHasOutputSchema = selectedTool && hasOutputSchema(selectedTool.name); + + if (toolHasOutputSchema) { + if (!structuredResult.structuredContent && !isError) { + // Tool has output schema but didn't return structured content (and it's not an error) + validationResult = { + isValid: false, + error: "Tool has an output schema but did not return structured content" + }; + } else if (structuredResult.structuredContent) { + // Validate the structured content + validationResult = validateToolOutput(selectedTool.name, structuredResult.structuredContent); + } + } + + // Check compatibility if both structured and unstructured content exist + // AND the tool has an output schema + let compatibilityResult = null; + if (structuredResult.structuredContent && + structuredResult.content.length > 0 && + selectedTool && + hasOutputSchema(selectedTool.name)) { + compatibilityResult = checkContentCompatibility( + structuredResult.structuredContent, + structuredResult.content + ); + } + return ( <>

      @@ -82,11 +160,57 @@ const ToolsTab = ({ Success )}

      - {structuredResult.content.map((item, index) => ( -
      - {item.type === "text" && ( - + {structuredResult.structuredContent && ( +
      +
      Structured Content:
      +
      + + {validationResult && ( +
      + {validationResult.isValid ? ( + "✓ Valid according to output schema" + ) : ( + <> + ✗ Validation Error: {validationResult.error} + + )} +
      + )} +
      +
      + )} + {!structuredResult.structuredContent && validationResult && !validationResult.isValid && ( +
      +
      + ✗ Validation Error: {validationResult.error} +
      +
      + )} + {structuredResult.content.length > 0 && ( +
      + {structuredResult.structuredContent && ( + <> +
      Unstructured Content:
      + {compatibilityResult && ( +
      + {compatibilityResult.isCompatible ? "✓" : "⚠"} {compatibilityResult.message} +
      + )} + )} + {structuredResult.content.map((item, index) => ( +
      + {item.type === "text" && ( + + )} {item.type === "image" && ( ))} +
      + ))}
      - ))} + )} ); } else if ("toolResult" in toolResult) { @@ -262,6 +388,36 @@ const ToolsTab = ({ ); }, )} + {selectedTool.outputSchema && ( +
      +
      +

      Output Schema:

      + +
      +
      + +
      +
      + )}

      {structuredResult.structuredContent && (
      -
      Structured Content:
      +
      + Structured Content: +
      {validationResult && ( -
      +
      {validationResult.isValid ? ( "✓ Valid according to output schema" ) : ( - <> - ✗ Validation Error: {validationResult.error} - + <>✗ Validation Error: {validationResult.error} )}
      )}
      )} - {!structuredResult.structuredContent && validationResult && !validationResult.isValid && ( -
      -
      - ✗ Validation Error: {validationResult.error} + {!structuredResult.structuredContent && + validationResult && + !validationResult.isValid && ( +
      +
      + ✗ Validation Error: {validationResult.error} +
      -
      - )} + )} {structuredResult.content.length > 0 && (
      {structuredResult.structuredContent && ( <> -
      Unstructured Content:
      +
      + Unstructured Content: +
      {compatibilityResult && ( -
      - {compatibilityResult.isCompatible ? "✓" : "⚠"} {compatibilityResult.message} +
      + {compatibilityResult.isCompatible ? "✓" : "⚠"}{" "} + {compatibilityResult.message}
      )} @@ -211,25 +239,25 @@ const ToolsTab = ({ {item.type === "text" && ( )} - {item.type === "image" && ( - Tool result image - )} - {item.type === "resource" && - (item.resource?.mimeType?.startsWith("audio/") ? ( - - ) : ( - - ))} + {item.type === "image" && ( + Tool result image + )} + {item.type === "resource" && + (item.resource?.mimeType?.startsWith("audio/") ? ( + + ) : ( + + ))}
      ))}
      @@ -395,7 +423,9 @@ const ToolsTab = ({
      -
      +
      diff --git a/client/src/utils/schemaUtils.ts b/client/src/utils/schemaUtils.ts index db620e28..d2440875 100644 --- a/client/src/utils/schemaUtils.ts +++ b/client/src/utils/schemaUtils.ts @@ -22,7 +22,10 @@ export function cacheToolOutputSchemas(tools: Tool[]): void { const validator = ajv.compile(tool.outputSchema); toolOutputValidators.set(tool.name, validator); } catch (error) { - console.warn(`Failed to compile output schema for tool ${tool.name}:`, error); + console.warn( + `Failed to compile output schema for tool ${tool.name}:`, + error, + ); } } } @@ -34,7 +37,9 @@ export function cacheToolOutputSchemas(tools: Tool[]): void { * @param toolName Name of the tool * @returns The compiled validator function, or undefined if not found */ -export function getToolOutputValidator(toolName: string): ValidateFunction | undefined { +export function getToolOutputValidator( + toolName: string, +): ValidateFunction | undefined { return toolOutputValidators.get(toolName); } @@ -47,7 +52,7 @@ export function getToolOutputValidator(toolName: string): ValidateFunction | und */ export function validateToolOutput( toolName: string, - structuredContent: unknown + structuredContent: unknown, ): { isValid: boolean; error?: string } { const validator = getToolOutputValidator(toolName); if (!validator) { From e7e47454641535b4c936b5b15543d554f0119b0f Mon Sep 17 00:00:00 2001 From: Basil Hosmer Date: Tue, 27 May 2025 19:19:40 -0400 Subject: [PATCH 099/135] fix: Fix TypeScript build errors in ToolsTab tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous test implementation caused build failures due to Jest hoisting issues with mock variables. This commit fixes the build by removing mocking in favor of using real schema validation. - Remove jest.mock() of schemaUtils module that caused initialization errors - Add beforeEach to clear schema cache between tests - Use cacheToolOutputSchemas() to set up test scenarios - Let real validation logic run for more accurate tests - All tests pass and build succeeds 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../components/__tests__/ToolsTab.test.tsx | 50 ++++--------------- 1 file changed, 10 insertions(+), 40 deletions(-) diff --git a/client/src/components/__tests__/ToolsTab.test.tsx b/client/src/components/__tests__/ToolsTab.test.tsx index 828808bb..c9f9b315 100644 --- a/client/src/components/__tests__/ToolsTab.test.tsx +++ b/client/src/components/__tests__/ToolsTab.test.tsx @@ -1,36 +1,15 @@ import { render, screen, fireEvent, act } from "@testing-library/react"; -import { describe, it, expect, jest } from "@jest/globals"; import "@testing-library/jest-dom"; +import { describe, it, jest, beforeEach } from "@jest/globals"; import ToolsTab from "../ToolsTab"; import { Tool } from "@modelcontextprotocol/sdk/types.js"; import { Tabs } from "@/components/ui/tabs"; -import * as schemaUtils from "@/utils/schemaUtils"; - -// Mock the schemaUtils module -// Note: hasOutputSchema checks if a tool's output schema validator has been compiled and cached -// by cacheToolOutputSchemas. In these tests, we mock it to avoid needing to call -// cacheToolOutputSchemas for every test that uses tools with output schemas. -// This keeps the tests focused on the component's behavior rather than schema compilation. -jest.mock("@/utils/schemaUtils", () => ({ - ...jest.requireActual("@/utils/schemaUtils"), - hasOutputSchema: jest.fn(), - validateToolOutput: jest.fn(), -})); +import { cacheToolOutputSchemas } from "@/utils/schemaUtils"; describe("ToolsTab", () => { beforeEach(() => { - jest.clearAllMocks(); - // Reset to default behavior - (schemaUtils.hasOutputSchema as jest.Mock).mockImplementation( - (toolName) => { - // Only tools with outputSchema property should return true - return false; - }, - ); - (schemaUtils.validateToolOutput as jest.Mock).mockReturnValue({ - isValid: true, - error: null, - }); + // Clear the output schema cache before each test + cacheToolOutputSchemas([]); }); const mockTools: Tool[] = [ @@ -250,8 +229,8 @@ describe("ToolsTab", () => { }; it("should display structured content when present", () => { - // Mock hasOutputSchema to return true for this tool - (schemaUtils.hasOutputSchema as jest.Mock).mockReturnValue(true); + // Cache the tool's output schema so hasOutputSchema returns true + cacheToolOutputSchemas([toolWithOutputSchema]); const structuredResult = { content: [], @@ -272,13 +251,7 @@ describe("ToolsTab", () => { }); it("should show validation error for invalid structured content", () => { - // Mock hasOutputSchema to return true for this tool - (schemaUtils.hasOutputSchema as jest.Mock).mockReturnValue(true); - // Mock the validation to fail - (schemaUtils.validateToolOutput as jest.Mock).mockReturnValue({ - isValid: false, - error: "temperature must be number", - }); + cacheToolOutputSchemas([toolWithOutputSchema]); const invalidResult = { content: [], @@ -296,8 +269,7 @@ describe("ToolsTab", () => { }); it("should show error when tool with output schema doesn't return structured content", () => { - // Mock hasOutputSchema to return true for this tool - (schemaUtils.hasOutputSchema as jest.Mock).mockReturnValue(true); + cacheToolOutputSchemas([toolWithOutputSchema]); const resultWithoutStructured = { content: [{ type: "text", text: "some result" }], @@ -317,8 +289,7 @@ describe("ToolsTab", () => { }); it("should show unstructured content title when both structured and unstructured exist", () => { - // Mock hasOutputSchema to return true for this tool - (schemaUtils.hasOutputSchema as jest.Mock).mockReturnValue(true); + cacheToolOutputSchemas([toolWithOutputSchema]); const resultWithBoth = { content: [{ type: "text", text: '{"temperature": 25}' }], @@ -350,8 +321,7 @@ describe("ToolsTab", () => { }); it("should show compatibility check when tool has output schema", () => { - // Mock hasOutputSchema to return true for this tool - (schemaUtils.hasOutputSchema as jest.Mock).mockReturnValue(true); + cacheToolOutputSchemas([toolWithOutputSchema]); const compatibleResult = { content: [{ type: "text", text: '{"temperature": 25}' }], From 5a628c7a00e7efcedd8b9351b907f8a2f81cbd48 Mon Sep 17 00:00:00 2001 From: Basil Hosmer Date: Tue, 27 May 2025 19:35:43 -0400 Subject: [PATCH 100/135] fix: Fix lint errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove unused catch parameter in ToolsTab.tsx - Replace 'as any' with @ts-expect-error in test for invalid schema 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- client/src/components/ToolsTab.tsx | 2 +- client/src/utils/__tests__/schemaUtils.test.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index ecadc8b9..01ea25f7 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -104,7 +104,7 @@ const ToolsTab = ({ message: "Parsed JSON does not match structured content", }; } - } catch (e) { + } catch { return { isCompatible: false, message: "Unstructured content is not valid JSON", diff --git a/client/src/utils/__tests__/schemaUtils.test.ts b/client/src/utils/__tests__/schemaUtils.test.ts index f908bf51..ca6b65ca 100644 --- a/client/src/utils/__tests__/schemaUtils.test.ts +++ b/client/src/utils/__tests__/schemaUtils.test.ts @@ -231,7 +231,8 @@ describe("Output Schema Validation", () => { description: "Tool with invalid schema", inputSchema: { type: "object", properties: {} }, outputSchema: { - type: "invalid-type" as any, + // @ts-expect-error Testing with invalid type + type: "invalid-type", }, }, ]; From 0c1962c2d06e11f7dab395a38c7104a9c0121640 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Wed, 28 May 2025 15:46:07 -0400 Subject: [PATCH 101/135] prettier --- server/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/index.ts b/server/src/index.ts index 0b2aeec9..73288f67 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -283,7 +283,7 @@ app.get("/sse", async (req, res) => { ); let serverTransport: Transport | undefined; try { - serverTransport = (await createTransport(req)); + serverTransport = await createTransport(req); } catch (error) { if (error instanceof SseError && error.code === 401) { console.error( From d8a2821344d1d06225c01a12bf13d91863fe20b3 Mon Sep 17 00:00:00 2001 From: Basil Hosmer Date: Wed, 28 May 2025 22:18:19 -0400 Subject: [PATCH 102/135] refactor: Address PR comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Extract tool results rendering into separate ToolResults component - Hoist checkContentCompatibility function to module level following codebase conventions - Add ajv@6.12.6 as direct dependency to client package.json - All tests pass and linting is clean 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- client/package.json | 1 + client/src/components/ToolResults.tsx | 221 ++++++++++++++++++++++++ client/src/components/ToolsTab.tsx | 231 +------------------------- client/src/utils/schemaUtils.ts | 1 - package-lock.json | 6 +- 5 files changed, 229 insertions(+), 231 deletions(-) create mode 100644 client/src/components/ToolResults.tsx diff --git a/client/package.json b/client/package.json index 5b5ec19a..ee54df3d 100644 --- a/client/package.json +++ b/client/package.json @@ -25,6 +25,7 @@ "dependencies": { "@modelcontextprotocol/sdk": "^1.11.5", "@radix-ui/react-checkbox": "^1.1.4", + "ajv": "^6.12.6", "@radix-ui/react-dialog": "^1.1.3", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-label": "^2.1.0", diff --git a/client/src/components/ToolResults.tsx b/client/src/components/ToolResults.tsx new file mode 100644 index 00000000..c6d90700 --- /dev/null +++ b/client/src/components/ToolResults.tsx @@ -0,0 +1,221 @@ +import JsonView from "./JsonView"; +import { + CallToolResultSchema, + CompatibilityCallToolResult, + Tool, +} from "@modelcontextprotocol/sdk/types.js"; +import { validateToolOutput, hasOutputSchema } from "@/utils/schemaUtils"; + +interface ToolResultsProps { + toolResult: CompatibilityCallToolResult | null; + selectedTool: Tool | null; +} + +const checkContentCompatibility = ( + structuredContent: unknown, + unstructuredContent: Array<{ + type: string; + text?: string; + [key: string]: unknown; + }>, +): { isCompatible: boolean; message: string } => { + if ( + unstructuredContent.length !== 1 || + unstructuredContent[0].type !== "text" + ) { + return { + isCompatible: false, + message: "Unstructured content is not a single text block", + }; + } + + const textContent = unstructuredContent[0].text; + if (!textContent) { + return { + isCompatible: false, + message: "Text content is empty", + }; + } + + try { + const parsedContent = JSON.parse(textContent); + const isEqual = + JSON.stringify(parsedContent) === JSON.stringify(structuredContent); + + if (isEqual) { + return { + isCompatible: true, + message: "Unstructured content matches structured content", + }; + } else { + return { + isCompatible: false, + message: "Parsed JSON does not match structured content", + }; + } + } catch { + return { + isCompatible: false, + message: "Unstructured content is not valid JSON", + }; + } +}; + +const ToolResults = ({ toolResult, selectedTool }: ToolResultsProps) => { + if (!toolResult) return null; + + if ("content" in toolResult) { + const parsedResult = CallToolResultSchema.safeParse(toolResult); + if (!parsedResult.success) { + return ( + <> +

      Invalid Tool Result:

      + +

      Errors:

      + {parsedResult.error.errors.map((error, idx) => ( + + ))} + + ); + } + const structuredResult = parsedResult.data; + const isError = structuredResult.isError ?? false; + + let validationResult = null; + const toolHasOutputSchema = + selectedTool && hasOutputSchema(selectedTool.name); + + if (toolHasOutputSchema) { + if (!structuredResult.structuredContent && !isError) { + validationResult = { + isValid: false, + error: + "Tool has an output schema but did not return structured content", + }; + } else if (structuredResult.structuredContent) { + validationResult = validateToolOutput( + selectedTool.name, + structuredResult.structuredContent, + ); + } + } + + let compatibilityResult = null; + if ( + structuredResult.structuredContent && + structuredResult.content.length > 0 && + selectedTool && + hasOutputSchema(selectedTool.name) + ) { + compatibilityResult = checkContentCompatibility( + structuredResult.structuredContent, + structuredResult.content, + ); + } + + return ( + <> +

      + Tool Result:{" "} + {isError ? ( + Error + ) : ( + Success + )} +

      + {structuredResult.structuredContent && ( +
      +
      Structured Content:
      +
      + + {validationResult && ( +
      + {validationResult.isValid ? ( + "✓ Valid according to output schema" + ) : ( + <>✗ Validation Error: {validationResult.error} + )} +
      + )} +
      +
      + )} + {!structuredResult.structuredContent && + validationResult && + !validationResult.isValid && ( +
      +
      + ✗ Validation Error: {validationResult.error} +
      +
      + )} + {structuredResult.content.length > 0 && ( +
      + {structuredResult.structuredContent && ( + <> +
      + Unstructured Content: +
      + {compatibilityResult && ( +
      + {compatibilityResult.isCompatible ? "✓" : "⚠"}{" "} + {compatibilityResult.message} +
      + )} + + )} + {structuredResult.content.map((item, index) => ( +
      + {item.type === "text" && ( + + )} + {item.type === "image" && ( + Tool result image + )} + {item.type === "resource" && + (item.resource?.mimeType?.startsWith("audio/") ? ( + + ) : ( + + ))} +
      + ))} +
      + )} + + ); + } else if ("toolResult" in toolResult) { + return ( + <> +

      Tool Result (Legacy):

      + + + ); + } + + return null; +}; + +export default ToolResults; diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index 01ea25f7..8c72bd2a 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -7,13 +7,8 @@ import { TabsContent } from "@/components/ui/tabs"; import { Textarea } from "@/components/ui/textarea"; import DynamicJsonForm from "./DynamicJsonForm"; import type { JsonValue, JsonSchemaType } from "@/utils/jsonUtils"; +import { generateDefaultValue } from "@/utils/schemaUtils"; import { - generateDefaultValue, - validateToolOutput, - hasOutputSchema, -} from "@/utils/schemaUtils"; -import { - CallToolResultSchema, CompatibilityCallToolResult, ListToolsResult, Tool, @@ -22,6 +17,7 @@ import { Loader2, Send, ChevronDown, ChevronUp } from "lucide-react"; import { useEffect, useState } from "react"; import ListPane from "./ListPane"; import JsonView from "./JsonView"; +import ToolResults from "./ToolResults"; const ToolsTab = ({ tools, @@ -57,224 +53,6 @@ const ToolsTab = ({ setParams(Object.fromEntries(params)); }, [selectedTool]); - // Check compatibility between structured and unstructured content - const checkContentCompatibility = ( - structuredContent: unknown, - unstructuredContent: Array<{ - type: string; - text?: string; - [key: string]: unknown; - }>, - ): { isCompatible: boolean; message: string } => { - // Check if unstructured content is a single text block - if ( - unstructuredContent.length !== 1 || - unstructuredContent[0].type !== "text" - ) { - return { - isCompatible: false, - message: "Unstructured content is not a single text block", - }; - } - - const textContent = unstructuredContent[0].text; - if (!textContent) { - return { - isCompatible: false, - message: "Text content is empty", - }; - } - - try { - // Try to parse the text as JSON - const parsedContent = JSON.parse(textContent); - - // Deep equality check - const isEqual = - JSON.stringify(parsedContent) === JSON.stringify(structuredContent); - - if (isEqual) { - return { - isCompatible: true, - message: "Unstructured content matches structured content", - }; - } else { - return { - isCompatible: false, - message: "Parsed JSON does not match structured content", - }; - } - } catch { - return { - isCompatible: false, - message: "Unstructured content is not valid JSON", - }; - } - }; - - const renderToolResult = () => { - if (!toolResult) return null; - - if ("content" in toolResult) { - const parsedResult = CallToolResultSchema.safeParse(toolResult); - if (!parsedResult.success) { - return ( - <> -

      Invalid Tool Result:

      - -

      Errors:

      - {parsedResult.error.errors.map((error, idx) => ( - - ))} - - ); - } - const structuredResult = parsedResult.data; - const isError = structuredResult.isError ?? false; - - // Validate structured content if present and tool has output schema - let validationResult = null; - const toolHasOutputSchema = - selectedTool && hasOutputSchema(selectedTool.name); - - if (toolHasOutputSchema) { - if (!structuredResult.structuredContent && !isError) { - // Tool has output schema but didn't return structured content (and it's not an error) - validationResult = { - isValid: false, - error: - "Tool has an output schema but did not return structured content", - }; - } else if (structuredResult.structuredContent) { - // Validate the structured content - validationResult = validateToolOutput( - selectedTool.name, - structuredResult.structuredContent, - ); - } - } - - // Check compatibility if both structured and unstructured content exist - // AND the tool has an output schema - let compatibilityResult = null; - if ( - structuredResult.structuredContent && - structuredResult.content.length > 0 && - selectedTool && - hasOutputSchema(selectedTool.name) - ) { - compatibilityResult = checkContentCompatibility( - structuredResult.structuredContent, - structuredResult.content, - ); - } - - return ( - <> -

      - Tool Result:{" "} - {isError ? ( - Error - ) : ( - Success - )} -

      - {structuredResult.structuredContent && ( -
      -
      - Structured Content: -
      -
      - - {validationResult && ( -
      - {validationResult.isValid ? ( - "✓ Valid according to output schema" - ) : ( - <>✗ Validation Error: {validationResult.error} - )} -
      - )} -
      -
      - )} - {!structuredResult.structuredContent && - validationResult && - !validationResult.isValid && ( -
      -
      - ✗ Validation Error: {validationResult.error} -
      -
      - )} - {structuredResult.content.length > 0 && ( -
      - {structuredResult.structuredContent && ( - <> -
      - Unstructured Content: -
      - {compatibilityResult && ( -
      - {compatibilityResult.isCompatible ? "✓" : "⚠"}{" "} - {compatibilityResult.message} -
      - )} - - )} - {structuredResult.content.map((item, index) => ( -
      - {item.type === "text" && ( - - )} - {item.type === "image" && ( - Tool result image - )} - {item.type === "resource" && - (item.resource?.mimeType?.startsWith("audio/") ? ( - - ) : ( - - ))} -
      - ))} -
      - )} - - ); - } else if ("toolResult" in toolResult) { - return ( - <> -

      Tool Result (Legacy):

      - - - - ); - } - }; - return (
      @@ -475,7 +253,10 @@ const ToolsTab = ({ )} - {toolResult && renderToolResult()} +
      ) : ( diff --git a/client/src/utils/schemaUtils.ts b/client/src/utils/schemaUtils.ts index d2440875..30210532 100644 --- a/client/src/utils/schemaUtils.ts +++ b/client/src/utils/schemaUtils.ts @@ -3,7 +3,6 @@ import Ajv from "ajv"; import type { ValidateFunction } from "ajv"; import type { Tool } from "@modelcontextprotocol/sdk/types.js"; -// Create a single Ajv instance following the SDK pattern const ajv = new Ajv(); // Cache for compiled validators diff --git a/package-lock.json b/package-lock.json index 0274b038..2920ca59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,6 +77,7 @@ "@radix-ui/react-tabs": "^1.1.1", "@radix-ui/react-toast": "^1.2.6", "@radix-ui/react-tooltip": "^1.1.8", + "ajv": "^6.12.6", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "^1.0.4", @@ -4002,7 +4003,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -5710,7 +5710,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { @@ -7740,7 +7739,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { @@ -8812,7 +8810,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -10488,7 +10485,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" From 10e3202832c51add7e0fdb8ab16cecde2646c47e Mon Sep 17 00:00:00 2001 From: xiaoli Date: Thu, 29 May 2025 11:49:57 +0800 Subject: [PATCH 103/135] fix: Fix the issue of accidentally losing 'x-custom-auth-header' --- client/src/lib/hooks/useConnection.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index 84956942..f1c29b2d 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -301,6 +301,7 @@ export function useConnection({ // Add custom header name as a special request header to let the server know which header to pass through if (authHeaderName.toLowerCase() !== "authorization") { headers[authHeaderName] = token; + headers["x-custom-auth-header"] = authHeaderName; } else { headers[authHeaderName] = `Bearer ${token}`; } From 46d3d844f8884f2099a5e3fb078b5bf337ab2a9f Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Fri, 16 May 2025 19:20:40 +0100 Subject: [PATCH 104/135] reset authorization url --- client/src/components/AuthDebugger.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index d0b0432d..98d58e23 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -183,6 +183,7 @@ const AuthDebugger = ({ latestError: null, oauthClientInfo: null, authorizationCode: "", + authorizationUrl: "", validationError: null, oauthMetadata: null, statusMessage: { From befadc0042ac31ad649dca02f31097cb387541cd Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Fri, 16 May 2025 20:53:21 +0100 Subject: [PATCH 105/135] very wip draft auth spec support --- client/src/App.tsx | 3 +- client/src/components/AuthDebugger.tsx | 2 +- client/src/components/OAuthFlowProgress.tsx | 25 +++++++++++++++++ client/src/lib/auth-types.ts | 3 ++ client/src/lib/oauth-state-machine.ts | 31 +++++++++++++++------ 5 files changed, 53 insertions(+), 11 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index cb411452..a30dcc9c 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -125,8 +125,9 @@ const App = () => { isInitiatingAuth: false, oauthTokens: null, loading: true, - oauthStep: "metadata_discovery", + oauthStep: "resource_metadata_discovery", oauthMetadata: null, + resourceMetadata: null, oauthClientInfo: null, authorizationUrl: null, authorizationCode: "", diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index 98d58e23..083fc39b 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -179,7 +179,7 @@ const AuthDebugger = ({ serverAuthProvider.clear(); updateAuthState({ oauthTokens: null, - oauthStep: "metadata_discovery", + oauthStep: "resource_metadata_discovery", latestError: null, oauthClientInfo: null, authorizationCode: "", diff --git a/client/src/components/OAuthFlowProgress.tsx b/client/src/components/OAuthFlowProgress.tsx index 396af142..8167afa6 100644 --- a/client/src/components/OAuthFlowProgress.tsx +++ b/client/src/components/OAuthFlowProgress.tsx @@ -79,6 +79,16 @@ export const OAuthFlowProgress = ({ null, ); + const steps: Array = [ + "resource_metadata_discovery", + "metadata_discovery", + "client_registration", + "authorization_redirect", + "authorization_code", + "token_request", + "complete", + ]; + const currentStepIdx = steps.findIndex((s) => s === authState.oauthStep); useEffect(() => { @@ -124,6 +134,21 @@ export const OAuthFlowProgress = ({

      + + {authState.resourceMetadata && ( +
      + + Retrieved OAuth Resource Metadata from {(new URL('/.well-known/oauth-protected-resource', serverUrl)).href} + +
      +                {JSON.stringify(authState.resourceMetadata, null, 2)}
      +              
      +
      + )} +
      Promise; execute: (context: StateMachineContext) => Promise; - nextStep: OAuthStep; } // State machine transitions export const oauthTransitions: Record = { - metadata_discovery: { + resource_metadata_discovery: { canTransition: async () => true, execute: async (context) => { - const metadata = await discoverOAuthMetadata(context.serverUrl); + // TODO: use sdk + const url = new URL("/.well-known/oauth-protected-resource", context.serverUrl); + const response = await fetch(url); + + const resourceMetadata = await response.json(); + context.updateState({ + resourceMetadata: resourceMetadata, + oauthStep: "metadata_discovery", + }); + }, + }, + + metadata_discovery: { + canTransition: async (context) => !!context.state.resourceMetadata, + execute: async (context) => { + // TODO: use sdk + let authServerUrl = context.serverUrl; + if (context.state.resourceMetadata?.authorization_servers?.[0]) { + authServerUrl = context.state.resourceMetadata.authorization_servers[0]; + } + const metadata = await discoverOAuthMetadata(authServerUrl); if (!metadata) { throw new Error("Failed to discover OAuth metadata"); } @@ -37,7 +56,6 @@ export const oauthTransitions: Record = { oauthStep: "client_registration", }); }, - nextStep: "client_registration", }, client_registration: { @@ -62,7 +80,6 @@ export const oauthTransitions: Record = { oauthStep: "authorization_redirect", }); }, - nextStep: "authorization_redirect", }, authorization_redirect: { @@ -93,7 +110,6 @@ export const oauthTransitions: Record = { oauthStep: "authorization_code", }); }, - nextStep: "authorization_code", }, authorization_code: { @@ -114,7 +130,6 @@ export const oauthTransitions: Record = { oauthStep: "token_request", }); }, - nextStep: "token_request", }, token_request: { @@ -144,7 +159,6 @@ export const oauthTransitions: Record = { oauthStep: "complete", }); }, - nextStep: "complete", }, complete: { @@ -152,7 +166,6 @@ export const oauthTransitions: Record = { execute: async () => { // No-op for complete state }, - nextStep: "complete", }, }; From 00893afc0be1577748cac65fc3f95cae2713051c Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 22 May 2025 18:36:48 +0100 Subject: [PATCH 106/135] wip new metadata --- client/src/App.tsx | 2 +- client/src/components/AuthDebugger.tsx | 2 +- client/src/components/OAuthFlowProgress.tsx | 20 ++----------- client/src/lib/auth-types.ts | 1 - client/src/lib/oauth-state-machine.ts | 32 +++++++++------------ 5 files changed, 19 insertions(+), 38 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index a30dcc9c..4708f08e 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -125,7 +125,7 @@ const App = () => { isInitiatingAuth: false, oauthTokens: null, loading: true, - oauthStep: "resource_metadata_discovery", + oauthStep: "metadata_discovery", oauthMetadata: null, resourceMetadata: null, oauthClientInfo: null, diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index 083fc39b..98d58e23 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -179,7 +179,7 @@ const AuthDebugger = ({ serverAuthProvider.clear(); updateAuthState({ oauthTokens: null, - oauthStep: "resource_metadata_discovery", + oauthStep: "metadata_discovery", latestError: null, oauthClientInfo: null, authorizationCode: "", diff --git a/client/src/components/OAuthFlowProgress.tsx b/client/src/components/OAuthFlowProgress.tsx index 8167afa6..9f079dde 100644 --- a/client/src/components/OAuthFlowProgress.tsx +++ b/client/src/components/OAuthFlowProgress.tsx @@ -57,6 +57,7 @@ interface OAuthFlowProgressProps { } const steps: Array = [ + "resource_metadata_discovery", "metadata_discovery", "client_registration", "authorization_redirect", @@ -79,16 +80,6 @@ export const OAuthFlowProgress = ({ null, ); - const steps: Array = [ - "resource_metadata_discovery", - "metadata_discovery", - "client_registration", - "authorization_redirect", - "authorization_code", - "token_request", - "complete", - ]; - const currentStepIdx = steps.findIndex((s) => s === authState.oauthStep); useEffect(() => { @@ -135,8 +126,8 @@ export const OAuthFlowProgress = ({
      {authState.resourceMetadata && (
      @@ -148,11 +139,6 @@ export const OAuthFlowProgress = ({
      )} -
      - {provider.getServerMetadata() && (
      diff --git a/client/src/lib/auth-types.ts b/client/src/lib/auth-types.ts index 87e8f8bc..2a9171f0 100644 --- a/client/src/lib/auth-types.ts +++ b/client/src/lib/auth-types.ts @@ -7,7 +7,6 @@ import { // OAuth flow steps export type OAuthStep = - | "resource_metadata_discovery" | "metadata_discovery" | "client_registration" | "authorization_redirect" diff --git a/client/src/lib/oauth-state-machine.ts b/client/src/lib/oauth-state-machine.ts index bef728d7..a48b32e1 100644 --- a/client/src/lib/oauth-state-machine.ts +++ b/client/src/lib/oauth-state-machine.ts @@ -20,31 +20,26 @@ export interface StateTransition { execute: (context: StateMachineContext) => Promise; } +const fetchProtectedResourceMetadata = async (serverUrl: string): Promise => { + // TODO: use sdk + const url = new URL("/.well-known/oauth-protected-resource", serverUrl); + const response = await fetch(url); + const resourceMetadata = await response.json(); + + return resourceMetadata; +} + // State machine transitions export const oauthTransitions: Record = { - resource_metadata_discovery: { + metadata_discovery: { canTransition: async () => true, execute: async (context) => { - // TODO: use sdk - const url = new URL("/.well-known/oauth-protected-resource", context.serverUrl); - const response = await fetch(url); - const resourceMetadata = await response.json(); - context.updateState({ - resourceMetadata: resourceMetadata, - oauthStep: "metadata_discovery", - }); - }, - }, + try { - metadata_discovery: { - canTransition: async (context) => !!context.state.resourceMetadata, - execute: async (context) => { - // TODO: use sdk - let authServerUrl = context.serverUrl; - if (context.state.resourceMetadata?.authorization_servers?.[0]) { - authServerUrl = context.state.resourceMetadata.authorization_servers[0]; } + const resourceMetadata = fetchProtectedResourceMetadata(serverUrl) + const metadata = await discoverOAuthMetadata(authServerUrl); if (!metadata) { throw new Error("Failed to discover OAuth metadata"); @@ -52,6 +47,7 @@ export const oauthTransitions: Record = { const parsedMetadata = await OAuthMetadataSchema.parseAsync(metadata); context.provider.saveServerMetadata(parsedMetadata); context.updateState({ + resourceMetadata, oauthMetadata: parsedMetadata, oauthStep: "client_registration", }); From c6ddcf4c90951319f9b6bce72c1d3b3ca72c9d9b Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 22 May 2025 18:40:27 +0100 Subject: [PATCH 107/135] fix --- client/src/lib/oauth-state-machine.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/client/src/lib/oauth-state-machine.ts b/client/src/lib/oauth-state-machine.ts index a48b32e1..ca473b49 100644 --- a/client/src/lib/oauth-state-machine.ts +++ b/client/src/lib/oauth-state-machine.ts @@ -34,11 +34,15 @@ export const oauthTransitions: Record = { metadata_discovery: { canTransition: async () => true, execute: async (context) => { - - try { - - } - const resourceMetadata = fetchProtectedResourceMetadata(serverUrl) + const authServerUrl = context.serverUrl; + // try { + // const resourceMetadata = await fetchProtectedResourceMetadata(context.serverUrl); + // if (resourceMetadata && resourceMetadata) { + // authServerUrl = resourceMetadata + // } + // } catch (_error) { + // // pass + // } const metadata = await discoverOAuthMetadata(authServerUrl); if (!metadata) { From b2fa99668efae6b1b0e82d3df854b6546755c765 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 10:19:39 +0100 Subject: [PATCH 108/135] bump typescript sdk --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d46b3ef8..a5e09c6a 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@modelcontextprotocol/inspector-cli": "^0.13.0", "@modelcontextprotocol/inspector-client": "^0.13.0", "@modelcontextprotocol/inspector-server": "^0.13.0", - "@modelcontextprotocol/sdk": "^1.11.5", + "@modelcontextprotocol/sdk": "^1.12.0", "concurrently": "^9.0.1", "open": "^10.1.0", "shell-quote": "^1.8.2", From 73fde03aa4e7d9f5b91bcc5c92d4fd9872b0158d Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 10:56:09 +0100 Subject: [PATCH 109/135] working metadata fetch --- client/src/App.tsx | 17 +----- client/src/components/AuthDebugger.tsx | 11 +--- client/src/components/OAuthFlowProgress.tsx | 14 ++++- .../__tests__/AuthDebugger.test.tsx | 15 +---- client/src/lib/auth-types.ts | 21 ++++++- client/src/lib/oauth-state-machine.ts | 39 +++++++------ package-lock.json | 58 ++----------------- 7 files changed, 63 insertions(+), 112 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 4708f08e..55a4541e 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -19,7 +19,7 @@ import { } from "@modelcontextprotocol/sdk/types.js"; import { OAuthTokensSchema } from "@modelcontextprotocol/sdk/shared/auth.js"; import { SESSION_KEYS, getServerSpecificKey } from "./lib/constants"; -import { AuthDebuggerState } from "./lib/auth-types"; +import { AuthDebuggerState, EMPTY_DEBUGGER_STATE } from "./lib/auth-types"; import { cacheToolOutputSchemas } from "./utils/schemaUtils"; import React, { Suspense, @@ -121,20 +121,7 @@ const App = () => { const [isAuthDebuggerVisible, setIsAuthDebuggerVisible] = useState(false); // Auth debugger state - const [authState, setAuthState] = useState({ - isInitiatingAuth: false, - oauthTokens: null, - loading: true, - oauthStep: "metadata_discovery", - oauthMetadata: null, - resourceMetadata: null, - oauthClientInfo: null, - authorizationUrl: null, - authorizationCode: "", - latestError: null, - statusMessage: null, - validationError: null, - }); + const [authState, setAuthState] = useState(EMPTY_DEBUGGER_STATE); // Helper function to update specific auth state properties const updateAuthState = (updates: Partial) => { diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index 98d58e23..5565a77a 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -2,7 +2,7 @@ import { useCallback, useMemo } from "react"; import { Button } from "@/components/ui/button"; import { DebugInspectorOAuthClientProvider } from "../lib/auth"; import { AlertCircle } from "lucide-react"; -import { AuthDebuggerState } from "../lib/auth-types"; +import { AuthDebuggerState, EMPTY_DEBUGGER_STATE } from "../lib/auth-types"; import { OAuthFlowProgress } from "./OAuthFlowProgress"; import { OAuthStateMachine } from "../lib/oauth-state-machine"; @@ -178,14 +178,7 @@ const AuthDebugger = ({ ); serverAuthProvider.clear(); updateAuthState({ - oauthTokens: null, - oauthStep: "metadata_discovery", - latestError: null, - oauthClientInfo: null, - authorizationCode: "", - authorizationUrl: "", - validationError: null, - oauthMetadata: null, + ...EMPTY_DEBUGGER_STATE, statusMessage: { type: "success", message: "OAuth tokens cleared successfully", diff --git a/client/src/components/OAuthFlowProgress.tsx b/client/src/components/OAuthFlowProgress.tsx index 9f079dde..6bd50bcb 100644 --- a/client/src/components/OAuthFlowProgress.tsx +++ b/client/src/components/OAuthFlowProgress.tsx @@ -57,7 +57,6 @@ interface OAuthFlowProgressProps { } const steps: Array = [ - "resource_metadata_discovery", "metadata_discovery", "client_registration", "authorization_redirect", @@ -139,6 +138,19 @@ export const OAuthFlowProgress = ({ )} + {authState.resourceMetadataError && ( +
      +

      + Failed to retrieve resource metadata, falling back to /.well-known/oauth-authorization-server: +

      +

      + {authState.resourceMetadataError.message} + {authState.resourceMetadataError instanceof TypeError + ? " (This could indicate the endpoint doesn't exist or does not have CORS configured)" + : authState.resourceMetadataError['status'] && ` (${authState.resourceMetadataError['status']})`} +

      +
      + )} {provider.getServerMetadata() && (
      diff --git a/client/src/components/__tests__/AuthDebugger.test.tsx b/client/src/components/__tests__/AuthDebugger.test.tsx index 7c539661..42a289ff 100644 --- a/client/src/components/__tests__/AuthDebugger.test.tsx +++ b/client/src/components/__tests__/AuthDebugger.test.tsx @@ -51,6 +51,7 @@ import { auth, } from "@modelcontextprotocol/sdk/client/auth.js"; import { OAuthMetadata } from "@modelcontextprotocol/sdk/shared/auth.js"; +import { EMPTY_DEBUGGER_STATE } from "@/lib/auth-types"; // Type the mocked functions properly const mockDiscoverOAuthMetadata = discoverOAuthMetadata as jest.MockedFunction< @@ -84,19 +85,7 @@ Object.defineProperty(window, "location", { }); describe("AuthDebugger", () => { - const defaultAuthState = { - isInitiatingAuth: false, - oauthTokens: null, - loading: false, - oauthStep: "metadata_discovery" as const, - oauthMetadata: null, - oauthClientInfo: null, - authorizationUrl: null, - authorizationCode: "", - latestError: null, - statusMessage: null, - validationError: null, - }; + const defaultAuthState = EMPTY_DEBUGGER_STATE; const defaultProps = { serverUrl: "https://example.com", diff --git a/client/src/lib/auth-types.ts b/client/src/lib/auth-types.ts index 2a9171f0..40262601 100644 --- a/client/src/lib/auth-types.ts +++ b/client/src/lib/auth-types.ts @@ -3,6 +3,7 @@ import { OAuthClientInformationFull, OAuthClientInformation, OAuthTokens, + OAuthProtectedResourceMetadata, } from "@modelcontextprotocol/sdk/shared/auth.js"; // OAuth flow steps @@ -28,8 +29,8 @@ export interface AuthDebuggerState { oauthTokens: OAuthTokens | null; loading: boolean; oauthStep: OAuthStep; - // TODO: use sdk type - resourceMetadata: object | null; + resourceMetadata: OAuthProtectedResourceMetadata | null; + resourceMetadataError: Error | { status: number; statusText: string; message: string } | null; oauthMetadata: OAuthMetadata | null; oauthClientInfo: OAuthClientInformationFull | OAuthClientInformation | null; authorizationUrl: string | null; @@ -38,3 +39,19 @@ export interface AuthDebuggerState { statusMessage: StatusMessage | null; validationError: string | null; } + +export const EMPTY_DEBUGGER_STATE: AuthDebuggerState = { + isInitiatingAuth: false, + oauthTokens: null, + loading: true, + oauthStep: "metadata_discovery", + oauthMetadata: null, + resourceMetadata: null, + resourceMetadataError: null, + oauthClientInfo: null, + authorizationUrl: null, + authorizationCode: "", + latestError: null, + statusMessage: null, + validationError: null, +} diff --git a/client/src/lib/oauth-state-machine.ts b/client/src/lib/oauth-state-machine.ts index ca473b49..5b2925ac 100644 --- a/client/src/lib/oauth-state-machine.ts +++ b/client/src/lib/oauth-state-machine.ts @@ -5,8 +5,9 @@ import { registerClient, startAuthorization, exchangeAuthorization, + discoverOAuthProtectedResourceMetadata, } from "@modelcontextprotocol/sdk/client/auth.js"; -import { OAuthMetadataSchema } from "@modelcontextprotocol/sdk/shared/auth.js"; +import { OAuthMetadataSchema, OAuthProtectedResourceMetadata } from "@modelcontextprotocol/sdk/shared/auth.js"; export interface StateMachineContext { state: AuthDebuggerState; @@ -20,29 +21,28 @@ export interface StateTransition { execute: (context: StateMachineContext) => Promise; } -const fetchProtectedResourceMetadata = async (serverUrl: string): Promise => { - // TODO: use sdk - const url = new URL("/.well-known/oauth-protected-resource", serverUrl); - const response = await fetch(url); - const resourceMetadata = await response.json(); - - return resourceMetadata; -} - // State machine transitions export const oauthTransitions: Record = { metadata_discovery: { canTransition: async () => true, execute: async (context) => { - const authServerUrl = context.serverUrl; - // try { - // const resourceMetadata = await fetchProtectedResourceMetadata(context.serverUrl); - // if (resourceMetadata && resourceMetadata) { - // authServerUrl = resourceMetadata - // } - // } catch (_error) { - // // pass - // } + let authServerUrl = context.serverUrl; + let resourceMetadata: OAuthProtectedResourceMetadata | null = null; + let resourceMetadataError: Error | null = null; + try { + resourceMetadata = await discoverOAuthProtectedResourceMetadata(context.serverUrl); + if (resourceMetadata && resourceMetadata.authorization_servers?.length) { + authServerUrl = resourceMetadata.authorization_servers[0]; + } + } catch (e) { + console.info(`Failed to find protected resource metadata: ${e}`); + console.log(e); + if (e instanceof Error) { + resourceMetadataError = e; + } else { + resourceMetadataError = new Error(String(e)); + } + } const metadata = await discoverOAuthMetadata(authServerUrl); if (!metadata) { @@ -52,6 +52,7 @@ export const oauthTransitions: Record = { context.provider.saveServerMetadata(parsedMetadata); context.updateState({ resourceMetadata, + resourceMetadataError, oauthMetadata: parsedMetadata, oauthStep: "client_registration", }); diff --git a/package-lock.json b/package-lock.json index 2920ca59..6e5d73f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@modelcontextprotocol/inspector-cli": "^0.13.0", "@modelcontextprotocol/inspector-client": "^0.13.0", "@modelcontextprotocol/inspector-server": "^0.13.0", - "@modelcontextprotocol/sdk": "^1.11.5", + "@modelcontextprotocol/sdk": "^1.12.0", "concurrently": "^9.0.1", "open": "^10.1.0", "shell-quote": "^1.8.2", @@ -2005,12 +2005,11 @@ "link": true }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.5.tgz", - "integrity": "sha512-gS7Q7IHpKxjVaNLMUZyTtatZ63ca3h418zPPntAhu/MvG5yfz/8HMcDAOpvpQfx3V3dsw9QQxk8RuFNrQhLlgA==", - "license": "MIT", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.12.0.tgz", + "integrity": "sha512-m//7RlINx1F3sz3KqwY1WWzVgTcYX52HYk4bJ1hkBXV3zccAEth+jRvG8DBRrdaQuRsPAJOx2MH3zaHNCKL7Zg==", "dependencies": { - "ajv": "^8.17.1", + "ajv": "^6.12.6", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", @@ -2026,28 +2025,6 @@ "node": ">=18" } }, - "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -5719,22 +5696,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -9064,15 +9025,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", From 82858bed30fd5f93192f65c9dc7ea6e6deadbfdf Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 11:17:21 +0100 Subject: [PATCH 110/135] show proper authserverurl --- client/src/components/OAuthFlowProgress.tsx | 72 +++++++++++++-------- client/src/lib/auth-types.ts | 2 + client/src/lib/oauth-state-machine.ts | 5 +- 3 files changed, 49 insertions(+), 30 deletions(-) diff --git a/client/src/components/OAuthFlowProgress.tsx b/client/src/components/OAuthFlowProgress.tsx index 6bd50bcb..2e74bf68 100644 --- a/client/src/components/OAuthFlowProgress.tsx +++ b/client/src/components/OAuthFlowProgress.tsx @@ -128,38 +128,54 @@ export const OAuthFlowProgress = ({ label="Metadata Discovery" {...getStepProps("metadata_discovery")} > - {authState.resourceMetadata && ( -
      - - Retrieved OAuth Resource Metadata from {(new URL('/.well-known/oauth-protected-resource', serverUrl)).href} - -
      -                {JSON.stringify(authState.resourceMetadata, null, 2)}
      -              
      -
      - )} - {authState.resourceMetadataError && ( -
      -

      - Failed to retrieve resource metadata, falling back to /.well-known/oauth-authorization-server: -

      -

      - {authState.resourceMetadataError.message} - {authState.resourceMetadataError instanceof TypeError - ? " (This could indicate the endpoint doesn't exist or does not have CORS configured)" - : authState.resourceMetadataError['status'] && ` (${authState.resourceMetadataError['status']})`} -

      -
      - )} {provider.getServerMetadata() && (
      - Retrieved OAuth Metadata from {serverUrl} - /.well-known/oauth-authorization-server + OAuth Metadata Sources + {!authState.resourceMetadata && " ℹ️"} -
      -                {JSON.stringify(provider.getServerMetadata(), null, 2)}
      -              
      + + {authState.resourceMetadata && ( +
      +

      Resource Metadata:

      +

      + From {new URL('/.well-known/oauth-protected-resource', serverUrl).href} +

      +
      +                    {JSON.stringify(authState.resourceMetadata, null, 2)}
      +                  
      +
      + )} + + {authState.resourceMetadataError && ( +
      +

      + ℹ️ No resource metadata available from {' '} + + {new URL('/.well-known/oauth-protected-resource', serverUrl).href} + +

      +

      + Resource metadata was added in the 2025-DRAFT-v2 specification update +
      + {authState.resourceMetadataError.message} + {authState.resourceMetadataError instanceof TypeError + && " (This could indicate the endpoint doesn't exist or does not have CORS configured)"} +

      +
      + )} + + {provider.getServerMetadata() && ( +
      +

      Authorization Server Metadata:

      + {authState.authServerUrl &&

      + From {new URL('/.well-known/oauth-authorization-server', authState.authServerUrl).href} +

      } +
      +                    {JSON.stringify(provider.getServerMetadata(), null, 2)}
      +                  
      +
      + )}
      )} diff --git a/client/src/lib/auth-types.ts b/client/src/lib/auth-types.ts index 40262601..2541e822 100644 --- a/client/src/lib/auth-types.ts +++ b/client/src/lib/auth-types.ts @@ -31,6 +31,7 @@ export interface AuthDebuggerState { oauthStep: OAuthStep; resourceMetadata: OAuthProtectedResourceMetadata | null; resourceMetadataError: Error | { status: number; statusText: string; message: string } | null; + authServerUrl: URL | null; oauthMetadata: OAuthMetadata | null; oauthClientInfo: OAuthClientInformationFull | OAuthClientInformation | null; authorizationUrl: string | null; @@ -48,6 +49,7 @@ export const EMPTY_DEBUGGER_STATE: AuthDebuggerState = { oauthMetadata: null, resourceMetadata: null, resourceMetadataError: null, + authServerUrl: null, oauthClientInfo: null, authorizationUrl: null, authorizationCode: "", diff --git a/client/src/lib/oauth-state-machine.ts b/client/src/lib/oauth-state-machine.ts index 5b2925ac..939e5d6c 100644 --- a/client/src/lib/oauth-state-machine.ts +++ b/client/src/lib/oauth-state-machine.ts @@ -26,13 +26,13 @@ export const oauthTransitions: Record = { metadata_discovery: { canTransition: async () => true, execute: async (context) => { - let authServerUrl = context.serverUrl; + let authServerUrl = new URL(context.serverUrl); let resourceMetadata: OAuthProtectedResourceMetadata | null = null; let resourceMetadataError: Error | null = null; try { resourceMetadata = await discoverOAuthProtectedResourceMetadata(context.serverUrl); if (resourceMetadata && resourceMetadata.authorization_servers?.length) { - authServerUrl = resourceMetadata.authorization_servers[0]; + authServerUrl = new URL(resourceMetadata.authorization_servers[0]); } } catch (e) { console.info(`Failed to find protected resource metadata: ${e}`); @@ -53,6 +53,7 @@ export const oauthTransitions: Record = { context.updateState({ resourceMetadata, resourceMetadataError, + authServerUrl, oauthMetadata: parsedMetadata, oauthStep: "client_registration", }); From 0dbf75a66427f1f430095d567595e373fcaf185b Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 11:50:09 +0100 Subject: [PATCH 111/135] store state before redirect --- client/src/App.tsx | 31 +++++++++++++++----- client/src/components/AuthDebugger.tsx | 6 ++++ client/src/components/OAuthDebugCallback.tsx | 19 ++++++++++-- client/src/lib/constants.ts | 1 + 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 55a4541e..8be23a5b 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -234,21 +234,36 @@ const App = () => { ({ authorizationCode, errorMsg, + restoredState, }: { authorizationCode?: string; errorMsg?: string; + restoredState?: AuthDebuggerState; }) => { setIsAuthDebuggerVisible(true); - if (authorizationCode) { + + if (restoredState) { + // Restore the previous auth state updateAuthState({ - authorizationCode, - oauthStep: "token_request", - }); - } - if (errorMsg) { - updateAuthState({ - latestError: new Error(errorMsg), + ...restoredState, + // Update with the new authorization code if provided + authorizationCode: authorizationCode || restoredState.authorizationCode, + oauthStep: authorizationCode ? "token_request" : restoredState.oauthStep, + latestError: errorMsg ? new Error(errorMsg) : restoredState.latestError, }); + } else { + // Fallback to the original behavior if no state was restored + if (authorizationCode) { + updateAuthState({ + authorizationCode, + oauthStep: "token_request", + }); + } + if (errorMsg) { + updateAuthState({ + latestError: new Error(errorMsg), + }); + } } }, [], diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index 5565a77a..0ef8e70b 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -5,6 +5,7 @@ import { AlertCircle } from "lucide-react"; import { AuthDebuggerState, EMPTY_DEBUGGER_STATE } from "../lib/auth-types"; import { OAuthFlowProgress } from "./OAuthFlowProgress"; import { OAuthStateMachine } from "../lib/oauth-state-machine"; +import { SESSION_KEYS } from "../lib/constants"; export interface AuthDebuggerProps { serverUrl: string; @@ -141,6 +142,11 @@ const AuthDebugger = ({ currentState.oauthStep === "authorization_code" && currentState.authorizationUrl ) { + // Store the current auth state before redirecting + sessionStorage.setItem( + SESSION_KEYS.AUTH_DEBUGGER_STATE, + JSON.stringify(currentState) + ); // Open the authorization URL automatically window.location.href = currentState.authorizationUrl; break; diff --git a/client/src/components/OAuthDebugCallback.tsx b/client/src/components/OAuthDebugCallback.tsx index 88d931c0..af9944ac 100644 --- a/client/src/components/OAuthDebugCallback.tsx +++ b/client/src/components/OAuthDebugCallback.tsx @@ -9,9 +9,11 @@ interface OAuthCallbackProps { onConnect: ({ authorizationCode, errorMsg, + restoredState, }: { authorizationCode?: string; errorMsg?: string; + restoredState?: any; }) => void; } @@ -34,6 +36,19 @@ const OAuthDebugCallback = ({ onConnect }: OAuthCallbackProps) => { } const serverUrl = sessionStorage.getItem(SESSION_KEYS.SERVER_URL); + + // Try to restore the auth state + const storedState = sessionStorage.getItem(SESSION_KEYS.AUTH_DEBUGGER_STATE); + let restoredState = null; + if (storedState) { + try { + restoredState = JSON.parse(storedState); + // Clean up the stored state + sessionStorage.removeItem(SESSION_KEYS.AUTH_DEBUGGER_STATE); + } catch (e) { + console.error("Failed to parse stored auth state:", e); + } + } // ServerURL isn't set, this can happen if we've opened the // authentication request in a new tab, so we don't have the same @@ -50,8 +65,8 @@ const OAuthDebugCallback = ({ onConnect }: OAuthCallbackProps) => { } // Instead of storing in sessionStorage, pass the code directly - // to the auth state manager through onConnect - onConnect({ authorizationCode: params.code }); + // to the auth state manager through onConnect, along with restored state + onConnect({ authorizationCode: params.code, restoredState }); }; handleCallback().finally(() => { diff --git a/client/src/lib/constants.ts b/client/src/lib/constants.ts index 4c3e27aa..3acbda91 100644 --- a/client/src/lib/constants.ts +++ b/client/src/lib/constants.ts @@ -7,6 +7,7 @@ export const SESSION_KEYS = { TOKENS: "mcp_tokens", CLIENT_INFORMATION: "mcp_client_information", SERVER_METADATA: "mcp_server_metadata", + AUTH_DEBUGGER_STATE: "mcp_auth_debugger_state", } as const; // Generate server-specific session storage keys From 20e961ce5c2286de5eee0503a85cc8e0005547ff Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 12:09:52 +0100 Subject: [PATCH 112/135] resumption working --- client/src/App.tsx | 72 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 8be23a5b..f3f1180e 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -20,6 +20,7 @@ import { import { OAuthTokensSchema } from "@modelcontextprotocol/sdk/shared/auth.js"; import { SESSION_KEYS, getServerSpecificKey } from "./lib/constants"; import { AuthDebuggerState, EMPTY_DEBUGGER_STATE } from "./lib/auth-types"; +import { OAuthStateMachine } from "./lib/oauth-state-machine"; import { cacheToolOutputSchemas } from "./utils/schemaUtils"; import React, { Suspense, @@ -231,7 +232,7 @@ const App = () => { // Update OAuth debug state during debug callback const onOAuthDebugConnect = useCallback( - ({ + async ({ authorizationCode, errorMsg, restoredState, @@ -241,29 +242,64 @@ const App = () => { restoredState?: AuthDebuggerState; }) => { setIsAuthDebuggerVisible(true); - - if (restoredState) { - // Restore the previous auth state + + if (errorMsg) { updateAuthState({ - ...restoredState, - // Update with the new authorization code if provided - authorizationCode: authorizationCode || restoredState.authorizationCode, - oauthStep: authorizationCode ? "token_request" : restoredState.oauthStep, - latestError: errorMsg ? new Error(errorMsg) : restoredState.latestError, + latestError: new Error(errorMsg), }); - } else { - // Fallback to the original behavior if no state was restored - if (authorizationCode) { - updateAuthState({ - authorizationCode, - oauthStep: "token_request", + return; + } + + if (restoredState && authorizationCode) { + // Restore the previous auth state and continue the OAuth flow + let currentState: AuthDebuggerState = { + ...restoredState, + authorizationCode, + oauthStep: "token_request", + isInitiatingAuth: true, + statusMessage: null, + latestError: null, + }; + + try { + // Create a new state machine instance to continue the flow + const stateMachine = new OAuthStateMachine(sseUrl, (updates) => { + currentState = { ...currentState, ...updates }; }); - } - if (errorMsg) { + + // Continue stepping through the OAuth flow from where we left off + while (currentState.oauthStep !== "complete" && currentState.oauthStep !== "authorization_code") { + await stateMachine.executeStep(currentState); + } + + if (currentState.oauthStep === "complete") { + // After the flow completes or reaches a user-input step, update the app state + updateAuthState({ + ...currentState, + statusMessage: { + type: "success", + message: "Authentication completed successfully", + }, + isInitiatingAuth: false, + }); + } + } catch (error) { + console.error("OAuth continuation error:", error); updateAuthState({ - latestError: new Error(errorMsg), + latestError: error instanceof Error ? error : new Error(String(error)), + statusMessage: { + type: "error", + message: `Failed to complete OAuth flow: ${error instanceof Error ? error.message : String(error)}`, + }, + isInitiatingAuth: false, }); } + } else if (authorizationCode) { + // Fallback to the original behavior if no state was restored + updateAuthState({ + authorizationCode, + oauthStep: "token_request", + }); } }, [], From 35eab580efa9010c88ff43dd91b483e61bcc43a1 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 12:26:53 +0100 Subject: [PATCH 113/135] switch to metadata from state --- client/src/components/AuthDebugger.tsx | 19 ++++++++++++++++++- client/src/components/OAuthFlowProgress.tsx | 6 +++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index 0ef8e70b..a90b1061 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -1,4 +1,4 @@ -import { useCallback, useMemo } from "react"; +import { useCallback, useMemo, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { DebugInspectorOAuthClientProvider } from "../lib/auth"; import { AlertCircle } from "lucide-react"; @@ -60,6 +60,23 @@ const AuthDebugger = ({ authState, updateAuthState, }: AuthDebuggerProps) => { + // Initialize loading state + useEffect(() => { + if (authState.loading && serverUrl) { + // Check if we have existing tokens + const checkTokens = async () => { + const provider = new DebugInspectorOAuthClientProvider(serverUrl); + const existingTokens = await provider.tokens(); + + updateAuthState({ + loading: false, + oauthTokens: existingTokens || null, + }); + }; + + checkTokens(); + } + }, [serverUrl, authState.loading, updateAuthState]); const startOAuthFlow = useCallback(() => { if (!serverUrl) { updateAuthState({ diff --git a/client/src/components/OAuthFlowProgress.tsx b/client/src/components/OAuthFlowProgress.tsx index 2e74bf68..f86ceec8 100644 --- a/client/src/components/OAuthFlowProgress.tsx +++ b/client/src/components/OAuthFlowProgress.tsx @@ -128,7 +128,7 @@ export const OAuthFlowProgress = ({ label="Metadata Discovery" {...getStepProps("metadata_discovery")} > - {provider.getServerMetadata() && ( + {authState.oauthMetadata && (
      OAuth Metadata Sources @@ -165,14 +165,14 @@ export const OAuthFlowProgress = ({ )} - {provider.getServerMetadata() && ( + {authState.oauthMetadata && (

      Authorization Server Metadata:

      {authState.authServerUrl &&

      From {new URL('/.well-known/oauth-authorization-server', authState.authServerUrl).href}

      }
      -                    {JSON.stringify(provider.getServerMetadata(), null, 2)}
      +                    {JSON.stringify(authState.oauthMetadata, null, 2)}
                         
      )} From cc49358f5ab7c037fd7349031512b4caac345795 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 13:42:54 +0100 Subject: [PATCH 114/135] add test + prettier --- client/src/App.tsx | 11 +++- client/src/components/AuthDebugger.tsx | 6 +- client/src/components/OAuthDebugCallback.tsx | 6 +- client/src/components/OAuthFlowProgress.tsx | 52 ++++++++++++--- .../__tests__/AuthDebugger.test.tsx | 66 +++++++++++++++++++ client/src/lib/auth-types.ts | 7 +- client/src/lib/oauth-state-machine.ts | 14 +++- 7 files changed, 139 insertions(+), 23 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index f3f1180e..74cdca19 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -122,7 +122,8 @@ const App = () => { const [isAuthDebuggerVisible, setIsAuthDebuggerVisible] = useState(false); // Auth debugger state - const [authState, setAuthState] = useState(EMPTY_DEBUGGER_STATE); + const [authState, setAuthState] = + useState(EMPTY_DEBUGGER_STATE); // Helper function to update specific auth state properties const updateAuthState = (updates: Partial) => { @@ -268,7 +269,10 @@ const App = () => { }); // Continue stepping through the OAuth flow from where we left off - while (currentState.oauthStep !== "complete" && currentState.oauthStep !== "authorization_code") { + while ( + currentState.oauthStep !== "complete" && + currentState.oauthStep !== "authorization_code" + ) { await stateMachine.executeStep(currentState); } @@ -286,7 +290,8 @@ const App = () => { } catch (error) { console.error("OAuth continuation error:", error); updateAuthState({ - latestError: error instanceof Error ? error : new Error(String(error)), + latestError: + error instanceof Error ? error : new Error(String(error)), statusMessage: { type: "error", message: `Failed to complete OAuth flow: ${error instanceof Error ? error.message : String(error)}`, diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index a90b1061..b88758d4 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -67,13 +67,13 @@ const AuthDebugger = ({ const checkTokens = async () => { const provider = new DebugInspectorOAuthClientProvider(serverUrl); const existingTokens = await provider.tokens(); - + updateAuthState({ loading: false, oauthTokens: existingTokens || null, }); }; - + checkTokens(); } }, [serverUrl, authState.loading, updateAuthState]); @@ -162,7 +162,7 @@ const AuthDebugger = ({ // Store the current auth state before redirecting sessionStorage.setItem( SESSION_KEYS.AUTH_DEBUGGER_STATE, - JSON.stringify(currentState) + JSON.stringify(currentState), ); // Open the authorization URL automatically window.location.href = currentState.authorizationUrl; diff --git a/client/src/components/OAuthDebugCallback.tsx b/client/src/components/OAuthDebugCallback.tsx index af9944ac..17705abb 100644 --- a/client/src/components/OAuthDebugCallback.tsx +++ b/client/src/components/OAuthDebugCallback.tsx @@ -36,9 +36,11 @@ const OAuthDebugCallback = ({ onConnect }: OAuthCallbackProps) => { } const serverUrl = sessionStorage.getItem(SESSION_KEYS.SERVER_URL); - + // Try to restore the auth state - const storedState = sessionStorage.getItem(SESSION_KEYS.AUTH_DEBUGGER_STATE); + const storedState = sessionStorage.getItem( + SESSION_KEYS.AUTH_DEBUGGER_STATE, + ); let restoredState = null; if (storedState) { try { diff --git a/client/src/components/OAuthFlowProgress.tsx b/client/src/components/OAuthFlowProgress.tsx index f86ceec8..b9b67c6c 100644 --- a/client/src/components/OAuthFlowProgress.tsx +++ b/client/src/components/OAuthFlowProgress.tsx @@ -139,7 +139,13 @@ export const OAuthFlowProgress = ({

      Resource Metadata:

      - From {new URL('/.well-known/oauth-protected-resource', serverUrl).href} + From{" "} + { + new URL( + "/.well-known/oauth-protected-resource", + serverUrl, + ).href + }

                           {JSON.stringify(authState.resourceMetadata, null, 2)}
      @@ -150,17 +156,35 @@ export const OAuthFlowProgress = ({
                     {authState.resourceMetadataError && (
                       

      - ℹ️ No resource metadata available from {' '} - - {new URL('/.well-known/oauth-protected-resource', serverUrl).href} + ℹ️ No resource metadata available from{" "} + + { + new URL( + "/.well-known/oauth-protected-resource", + serverUrl, + ).href + }

      - Resource metadata was added in the 2025-DRAFT-v2 specification update + Resource metadata was added in the{" "} + + 2025-DRAFT-v2 specification update +
      {authState.resourceMetadataError.message} - {authState.resourceMetadataError instanceof TypeError - && " (This could indicate the endpoint doesn't exist or does not have CORS configured)"} + {authState.resourceMetadataError instanceof TypeError && + " (This could indicate the endpoint doesn't exist or does not have CORS configured)"}

      )} @@ -168,9 +192,17 @@ export const OAuthFlowProgress = ({ {authState.oauthMetadata && (

      Authorization Server Metadata:

      - {authState.authServerUrl &&

      - From {new URL('/.well-known/oauth-authorization-server', authState.authServerUrl).href} -

      } + {authState.authServerUrl && ( +

      + From{" "} + { + new URL( + "/.well-known/oauth-authorization-server", + authState.authServerUrl, + ).href + } +

      + )}
                           {JSON.stringify(authState.oauthMetadata, null, 2)}
                         
      diff --git a/client/src/components/__tests__/AuthDebugger.test.tsx b/client/src/components/__tests__/AuthDebugger.test.tsx index 42a289ff..fe5a94f9 100644 --- a/client/src/components/__tests__/AuthDebugger.test.tsx +++ b/client/src/components/__tests__/AuthDebugger.test.tsx @@ -40,6 +40,7 @@ jest.mock("@modelcontextprotocol/sdk/client/auth.js", () => ({ registerClient: jest.fn(), startAuthorization: jest.fn(), exchangeAuthorization: jest.fn(), + discoverOAuthProtectedResourceMetadata: jest.fn(), })); // Import the functions to get their types @@ -49,6 +50,7 @@ import { startAuthorization, exchangeAuthorization, auth, + discoverOAuthProtectedResourceMetadata, } from "@modelcontextprotocol/sdk/client/auth.js"; import { OAuthMetadata } from "@modelcontextprotocol/sdk/shared/auth.js"; import { EMPTY_DEBUGGER_STATE } from "@/lib/auth-types"; @@ -67,6 +69,10 @@ const mockExchangeAuthorization = exchangeAuthorization as jest.MockedFunction< typeof exchangeAuthorization >; const mockAuth = auth as jest.MockedFunction; +const mockDiscoverOAuthProtectedResourceMetadata = + discoverOAuthProtectedResourceMetadata as jest.MockedFunction< + typeof discoverOAuthProtectedResourceMetadata + >; const sessionStorageMock = { getItem: jest.fn(), @@ -100,6 +106,7 @@ describe("AuthDebugger", () => { mockDiscoverOAuthMetadata.mockResolvedValue(mockOAuthMetadata); mockRegisterClient.mockResolvedValue(mockOAuthClientInfo); + mockDiscoverOAuthProtectedResourceMetadata.mockResolvedValue(null); mockStartAuthorization.mockImplementation(async (_sseUrl, options) => { const authUrl = new URL("https://oauth.example.com/authorize"); @@ -421,4 +428,63 @@ describe("AuthDebugger", () => { }); }); }); + + describe("OAuth State Persistence", () => { + it("should store auth state to sessionStorage before redirect in Quick OAuth Flow", async () => { + const updateAuthState = jest.fn(); + + // Mock window.location.href setter + delete (window as any).location; + window.location = { href: "" } as any; + + // Setup mocks for OAuth flow + mockStartAuthorization.mockResolvedValue({ + authorizationUrl: new URL( + "https://oauth.example.com/authorize?client_id=test_client_id&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Foauth%2Fcallback%2Fdebug", + ), + codeVerifier: "test_verifier", + }); + + await act(async () => { + renderAuthDebugger({ + updateAuthState, + authState: { ...defaultAuthState, loading: false }, + }); + }); + + // Click Quick OAuth Flow + await act(async () => { + fireEvent.click(screen.getByText("Quick OAuth Flow")); + }); + + // Wait for the flow to reach the authorization step + await waitFor(() => { + expect(sessionStorage.setItem).toHaveBeenCalledWith( + SESSION_KEYS.AUTH_DEBUGGER_STATE, + expect.stringContaining('"oauthStep":"authorization_code"'), + ); + }); + + // Verify the stored state includes all the accumulated data + const storedStateCall = ( + sessionStorage.setItem as jest.Mock + ).mock.calls.find((call) => call[0] === SESSION_KEYS.AUTH_DEBUGGER_STATE); + + expect(storedStateCall).toBeDefined(); + const storedState = JSON.parse(storedStateCall![1]); + + expect(storedState).toMatchObject({ + oauthStep: "authorization_code", + authorizationUrl: expect.stringMatching( + /^https:\/\/oauth\.example\.com\/authorize/, + ), + oauthMetadata: expect.objectContaining({ + token_endpoint: "https://oauth.example.com/token", + }), + oauthClientInfo: expect.objectContaining({ + client_id: "test_client_id", + }), + }); + }); + }); }); diff --git a/client/src/lib/auth-types.ts b/client/src/lib/auth-types.ts index 2541e822..e69dcd12 100644 --- a/client/src/lib/auth-types.ts +++ b/client/src/lib/auth-types.ts @@ -30,7 +30,10 @@ export interface AuthDebuggerState { loading: boolean; oauthStep: OAuthStep; resourceMetadata: OAuthProtectedResourceMetadata | null; - resourceMetadataError: Error | { status: number; statusText: string; message: string } | null; + resourceMetadataError: + | Error + | { status: number; statusText: string; message: string } + | null; authServerUrl: URL | null; oauthMetadata: OAuthMetadata | null; oauthClientInfo: OAuthClientInformationFull | OAuthClientInformation | null; @@ -56,4 +59,4 @@ export const EMPTY_DEBUGGER_STATE: AuthDebuggerState = { latestError: null, statusMessage: null, validationError: null, -} +}; diff --git a/client/src/lib/oauth-state-machine.ts b/client/src/lib/oauth-state-machine.ts index 939e5d6c..d05369c4 100644 --- a/client/src/lib/oauth-state-machine.ts +++ b/client/src/lib/oauth-state-machine.ts @@ -7,7 +7,10 @@ import { exchangeAuthorization, discoverOAuthProtectedResourceMetadata, } from "@modelcontextprotocol/sdk/client/auth.js"; -import { OAuthMetadataSchema, OAuthProtectedResourceMetadata } from "@modelcontextprotocol/sdk/shared/auth.js"; +import { + OAuthMetadataSchema, + OAuthProtectedResourceMetadata, +} from "@modelcontextprotocol/sdk/shared/auth.js"; export interface StateMachineContext { state: AuthDebuggerState; @@ -30,8 +33,13 @@ export const oauthTransitions: Record = { let resourceMetadata: OAuthProtectedResourceMetadata | null = null; let resourceMetadataError: Error | null = null; try { - resourceMetadata = await discoverOAuthProtectedResourceMetadata(context.serverUrl); - if (resourceMetadata && resourceMetadata.authorization_servers?.length) { + resourceMetadata = await discoverOAuthProtectedResourceMetadata( + context.serverUrl, + ); + if ( + resourceMetadata && + resourceMetadata.authorization_servers?.length + ) { authServerUrl = new URL(resourceMetadata.authorization_servers[0]); } } catch (e) { From 03bb303bf9f1c07fba565c7771c5ad5d0c1ae70e Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 14:10:32 +0100 Subject: [PATCH 115/135] rm loading, prm test --- client/src/App.tsx | 2 - client/src/components/AuthDebugger.tsx | 26 ++-- .../__tests__/AuthDebugger.test.tsx | 123 +++++++++++++++++- client/src/lib/auth-types.ts | 2 - 4 files changed, 131 insertions(+), 22 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 74cdca19..a332f9aa 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -329,8 +329,6 @@ const App = () => { } } catch (error) { console.error("Error loading OAuth tokens:", error); - } finally { - updateAuthState({ loading: false }); } }; diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index b88758d4..9757af95 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -60,23 +60,23 @@ const AuthDebugger = ({ authState, updateAuthState, }: AuthDebuggerProps) => { - // Initialize loading state + // Check for existing tokens on mount useEffect(() => { - if (authState.loading && serverUrl) { - // Check if we have existing tokens + if (serverUrl && !authState.oauthTokens) { const checkTokens = async () => { const provider = new DebugInspectorOAuthClientProvider(serverUrl); const existingTokens = await provider.tokens(); - - updateAuthState({ - loading: false, - oauthTokens: existingTokens || null, - }); + if (existingTokens) { + updateAuthState({ + oauthTokens: existingTokens, + oauthStep: "complete", + }); + } }; - checkTokens(); } - }, [serverUrl, authState.loading, updateAuthState]); + }, [serverUrl]); // Only run when serverUrl changes + const startOAuthFlow = useCallback(() => { if (!serverUrl) { updateAuthState({ @@ -241,10 +241,7 @@ const AuthDebugger = ({ )} - {authState.loading ? ( -

      Loading authentication status...

      - ) : ( -
      +
      {authState.oauthTokens && (

      Access Token:

      @@ -286,7 +283,6 @@ const AuthDebugger = ({ the standard automatic flow.

      - )}
      { mockDiscoverOAuthMetadata.mockResolvedValue(mockOAuthMetadata); mockRegisterClient.mockResolvedValue(mockOAuthClientInfo); - mockDiscoverOAuthProtectedResourceMetadata.mockResolvedValue(null); + mockDiscoverOAuthProtectedResourceMetadata.mockRejectedValue( + new Error("No protected resource metadata found") + ); mockStartAuthorization.mockImplementation(async (_sseUrl, options) => { const authUrl = new URL("https://oauth.example.com/authorize"); @@ -448,7 +450,7 @@ describe("AuthDebugger", () => { await act(async () => { renderAuthDebugger({ updateAuthState, - authState: { ...defaultAuthState, loading: false }, + authState: { ...defaultAuthState }, }); }); @@ -471,7 +473,7 @@ describe("AuthDebugger", () => { ).mock.calls.find((call) => call[0] === SESSION_KEYS.AUTH_DEBUGGER_STATE); expect(storedStateCall).toBeDefined(); - const storedState = JSON.parse(storedStateCall![1]); + const storedState = JSON.parse(storedStateCall![1] as string); expect(storedState).toMatchObject({ oauthStep: "authorization_code", @@ -487,4 +489,119 @@ describe("AuthDebugger", () => { }); }); }); + + describe("OAuth Protected Resource Metadata", () => { + it("should successfully fetch and display protected resource metadata", async () => { + const updateAuthState = jest.fn(); + const mockResourceMetadata = { + resource: "https://example.com/api", + authorization_servers: ["https://custom-auth.example.com"], + bearer_methods_supported: ["header", "body"], + resource_documentation: "https://example.com/api/docs", + resource_policy_uri: "https://example.com/api/policy", + }; + + // Mock successful metadata discovery + mockDiscoverOAuthProtectedResourceMetadata.mockResolvedValue( + mockResourceMetadata + ); + mockDiscoverOAuthMetadata.mockResolvedValue(mockOAuthMetadata); + + await act(async () => { + renderAuthDebugger({ + updateAuthState, + authState: { ...defaultAuthState }, + }); + }); + + // Click Guided OAuth Flow to start the process + await act(async () => { + fireEvent.click(screen.getByText("Guided OAuth Flow")); + }); + + // Verify that the flow started with metadata discovery + expect(updateAuthState).toHaveBeenCalledWith({ + oauthStep: "metadata_discovery", + authorizationUrl: null, + statusMessage: null, + latestError: null, + }); + + // Click Continue to trigger metadata discovery + const continueButton = await screen.findByText("Continue"); + await act(async () => { + fireEvent.click(continueButton); + }); + + // Wait for the metadata to be fetched + await waitFor(() => { + expect(mockDiscoverOAuthProtectedResourceMetadata).toHaveBeenCalledWith( + "https://example.com" + ); + }); + + // Verify the state was updated with the resource metadata + await waitFor(() => { + expect(updateAuthState).toHaveBeenCalledWith( + expect.objectContaining({ + resourceMetadata: mockResourceMetadata, + authServerUrl: new URL("https://custom-auth.example.com"), + oauthStep: "client_registration", + }) + ); + }); + }); + + it("should handle protected resource metadata fetch failure gracefully", async () => { + const updateAuthState = jest.fn(); + const mockError = new Error("Failed to fetch resource metadata"); + + // Mock failed metadata discovery + mockDiscoverOAuthProtectedResourceMetadata.mockRejectedValue(mockError); + // But OAuth metadata should still work with the original URL + mockDiscoverOAuthMetadata.mockResolvedValue(mockOAuthMetadata); + + await act(async () => { + renderAuthDebugger({ + updateAuthState, + authState: { ...defaultAuthState }, + }); + }); + + // Click Guided OAuth Flow + await act(async () => { + fireEvent.click(screen.getByText("Guided OAuth Flow")); + }); + + // Click Continue to trigger metadata discovery + const continueButton = await screen.findByText("Continue"); + await act(async () => { + fireEvent.click(continueButton); + }); + + // Wait for the metadata fetch to fail + await waitFor(() => { + expect(mockDiscoverOAuthProtectedResourceMetadata).toHaveBeenCalledWith( + "https://example.com" + ); + }); + + // Verify the flow continues despite the error + await waitFor(() => { + expect(updateAuthState).toHaveBeenCalledWith( + expect.objectContaining({ + resourceMetadataError: mockError, + // Should use the original server URL as fallback + authServerUrl: new URL("https://example.com"), + oauthStep: "client_registration", + }) + ); + }); + + // Verify that regular OAuth metadata discovery was still called + expect(mockDiscoverOAuthMetadata).toHaveBeenCalledWith( + new URL("https://example.com") + ); + }); + }); }); diff --git a/client/src/lib/auth-types.ts b/client/src/lib/auth-types.ts index e69dcd12..daf1bc15 100644 --- a/client/src/lib/auth-types.ts +++ b/client/src/lib/auth-types.ts @@ -27,7 +27,6 @@ export interface StatusMessage { export interface AuthDebuggerState { isInitiatingAuth: boolean; oauthTokens: OAuthTokens | null; - loading: boolean; oauthStep: OAuthStep; resourceMetadata: OAuthProtectedResourceMetadata | null; resourceMetadataError: @@ -47,7 +46,6 @@ export interface AuthDebuggerState { export const EMPTY_DEBUGGER_STATE: AuthDebuggerState = { isInitiatingAuth: false, oauthTokens: null, - loading: true, oauthStep: "metadata_discovery", oauthMetadata: null, resourceMetadata: null, From 11bc04364bfc012b2170be97ce530af1c118e547 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 14:11:01 +0100 Subject: [PATCH 116/135] whitespace --- client/src/components/AuthDebugger.tsx | 72 +++++++++---------- .../__tests__/AuthDebugger.test.tsx | 14 ++-- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index 9757af95..48c9cb00 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -242,47 +242,47 @@ const AuthDebugger = ({ )}
      - {authState.oauthTokens && ( -
      -

      Access Token:

      -
      - {authState.oauthTokens.access_token.substring(0, 25)}... -
      + {authState.oauthTokens && ( +
      +

      Access Token:

      +
      + {authState.oauthTokens.access_token.substring(0, 25)}...
      - )} - -
      - +
      + )} - +
      + - -
      + -

      - Choose "Guided" for step-by-step instructions or "Quick" for - the standard automatic flow. -

      +
      + +

      + Choose "Guided" for step-by-step instructions or "Quick" for + the standard automatic flow. +

      +
      { mockDiscoverOAuthMetadata.mockResolvedValue(mockOAuthMetadata); mockRegisterClient.mockResolvedValue(mockOAuthClientInfo); mockDiscoverOAuthProtectedResourceMetadata.mockRejectedValue( - new Error("No protected resource metadata found") + new Error("No protected resource metadata found"), ); mockStartAuthorization.mockImplementation(async (_sseUrl, options) => { const authUrl = new URL("https://oauth.example.com/authorize"); @@ -503,7 +503,7 @@ describe("AuthDebugger", () => { // Mock successful metadata discovery mockDiscoverOAuthProtectedResourceMetadata.mockResolvedValue( - mockResourceMetadata + mockResourceMetadata, ); mockDiscoverOAuthMetadata.mockResolvedValue(mockOAuthMetadata); @@ -536,7 +536,7 @@ describe("AuthDebugger", () => { // Wait for the metadata to be fetched await waitFor(() => { expect(mockDiscoverOAuthProtectedResourceMetadata).toHaveBeenCalledWith( - "https://example.com" + "https://example.com", ); }); @@ -547,7 +547,7 @@ describe("AuthDebugger", () => { resourceMetadata: mockResourceMetadata, authServerUrl: new URL("https://custom-auth.example.com"), oauthStep: "client_registration", - }) + }), ); }); }); @@ -582,7 +582,7 @@ describe("AuthDebugger", () => { // Wait for the metadata fetch to fail await waitFor(() => { expect(mockDiscoverOAuthProtectedResourceMetadata).toHaveBeenCalledWith( - "https://example.com" + "https://example.com", ); }); @@ -594,13 +594,13 @@ describe("AuthDebugger", () => { // Should use the original server URL as fallback authServerUrl: new URL("https://example.com"), oauthStep: "client_registration", - }) + }), ); }); // Verify that regular OAuth metadata discovery was still called expect(mockDiscoverOAuthMetadata).toHaveBeenCalledWith( - new URL("https://example.com") + new URL("https://example.com"), ); }); }); From e74f80db8591c288c394d7912b57e18bf93e4b78 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Thu, 29 May 2025 14:26:29 +0100 Subject: [PATCH 117/135] fix tests --- client/src/components/AuthDebugger.tsx | 20 +++++++++++-------- .../__tests__/AuthDebugger.test.tsx | 9 +++++++-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/client/src/components/AuthDebugger.tsx b/client/src/components/AuthDebugger.tsx index 48c9cb00..ec09963e 100644 --- a/client/src/components/AuthDebugger.tsx +++ b/client/src/components/AuthDebugger.tsx @@ -64,18 +64,22 @@ const AuthDebugger = ({ useEffect(() => { if (serverUrl && !authState.oauthTokens) { const checkTokens = async () => { - const provider = new DebugInspectorOAuthClientProvider(serverUrl); - const existingTokens = await provider.tokens(); - if (existingTokens) { - updateAuthState({ - oauthTokens: existingTokens, - oauthStep: "complete", - }); + try { + const provider = new DebugInspectorOAuthClientProvider(serverUrl); + const existingTokens = await provider.tokens(); + if (existingTokens) { + updateAuthState({ + oauthTokens: existingTokens, + oauthStep: "complete", + }); + } + } catch (error) { + console.error("Failed to load existing OAuth tokens:", error); } }; checkTokens(); } - }, [serverUrl]); // Only run when serverUrl changes + }, [serverUrl, updateAuthState, authState.oauthTokens]); const startOAuthFlow = useCallback(() => { if (!serverUrl) { diff --git a/client/src/components/__tests__/AuthDebugger.test.tsx b/client/src/components/__tests__/AuthDebugger.test.tsx index b0df65eb..b2fa4c61 100644 --- a/client/src/components/__tests__/AuthDebugger.test.tsx +++ b/client/src/components/__tests__/AuthDebugger.test.tsx @@ -202,7 +202,7 @@ describe("AuthDebugger", () => { // Should first discover and save OAuth metadata expect(mockDiscoverOAuthMetadata).toHaveBeenCalledWith( - "https://example.com", + new URL("https://example.com"), ); // Check that updateAuthState was called with the right info message @@ -314,6 +314,11 @@ describe("AuthDebugger", () => { }); expect(updateAuthState).toHaveBeenCalledWith({ + authServerUrl: null, + authorizationUrl: null, + isInitiatingAuth: false, + resourceMetadata: null, + resourceMetadataError: null, oauthTokens: null, oauthStep: "metadata_discovery", latestError: null, @@ -355,7 +360,7 @@ describe("AuthDebugger", () => { }); expect(mockDiscoverOAuthMetadata).toHaveBeenCalledWith( - "https://example.com", + new URL("https://example.com"), ); }); From 2e5cc87659ea77bb26db342af2097abb7d95d20b Mon Sep 17 00:00:00 2001 From: Balaj Marius Date: Thu, 29 May 2025 18:30:13 +0300 Subject: [PATCH 118/135] Update index.css Co-authored-by: Ola Hungerford --- client/src/index.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/index.css b/client/src/index.css index c3f30b97..858f9e7f 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -93,7 +93,7 @@ h1 { --accent-foreground: 210 40% 98%; --destructive: 0 62.8% 30.6%; --destructive-foreground: 210 40% 98%; - --border: 217.2, 24%, 24%; + --border: 217.2 24% 24%; --input: 217.2 24% 24%; --ring: 212.7 26.8% 83.9%; --chart-1: 220 70% 50%; From 02aacb46a2851cf6c5066659f1bc3b56a44d3c76 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Thu, 29 May 2025 19:54:36 -0400 Subject: [PATCH 119/135] Send HTTP/DELETE when disconnecting client * In server/src/index.ts - add delete handler for /mcp endpoint - gets the server transport for the sessionId - calls terminateSession on it - removes the webapp and server transports for the sessionId from the maps - returns status 200 to the client. * In client/src/lib/hooks/useConnection.ts - import Transport - add useState for clientTransport, type Transport or null initialized to null - in connect() function - move creation of client transport down a ways, just before calling client.connect with it - immendiately efter calling client.connect, call setClientTransport with the connected transport (has to happen after, so that what's saved has the abort controller, etc. otherwise it doesn't work to save it prior. - in disconnect() function - immediately call clientTransport.terminateSession if transportType is "streamable-http" - setClientTransport to null --- client/src/lib/hooks/useConnection.ts | 32 +++++++++++++++++++-------- server/src/index.ts | 27 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index 9c825318..39da55cb 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -45,6 +45,7 @@ import { } from "@/utils/configUtils"; import { getMCPServerRequestTimeout } from "@/utils/configUtils"; import { InspectorConfig } from "../configurationTypes"; +import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; interface UseConnectionOptions { transportType: "stdio" | "sse" | "streamable-http"; @@ -83,6 +84,9 @@ export function useConnection({ const [serverCapabilities, setServerCapabilities] = useState(null); const [mcpClient, setMcpClient] = useState(null); + const [clientTransport, setClientTransport] = useState( + null, + ); const [requestHistory, setRequestHistory] = useState< { request: string; response?: string }[] >([]); @@ -377,14 +381,6 @@ export function useConnection({ transportType, ); - const clientTransport = - transportType === "streamable-http" - ? new StreamableHTTPClientTransport(mcpProxyServerUrl as URL, { - sessionId: undefined, - ...transportOptions, - }) - : new SSEClientTransport(mcpProxyServerUrl as URL, transportOptions); - if (onNotification) { [ CancelledNotificationSchema, @@ -414,7 +410,20 @@ export function useConnection({ let capabilities; try { - await client.connect(clientTransport); + const transport = + transportType === "streamable-http" + ? new StreamableHTTPClientTransport(mcpProxyServerUrl as URL, { + sessionId: undefined, + ...transportOptions, + }) + : new SSEClientTransport( + mcpProxyServerUrl as URL, + transportOptions, + ); + + await client.connect(transport as Transport); + + setClientTransport(transport); capabilities = client.getServerCapabilities(); const initializeRequest = { @@ -468,10 +477,15 @@ export function useConnection({ }; const disconnect = async () => { + if (transportType === "streamable-http") + await ( + clientTransport as StreamableHTTPClientTransport + ).terminateSession(); await mcpClient?.close(); const authProvider = new InspectorOAuthClientProvider(sseUrl); authProvider.clear(); setMcpClient(null); + setClientTransport(null); setConnectionStatus("disconnected"); setCompletionsSupported(false); setServerCapabilities(null); diff --git a/server/src/index.ts b/server/src/index.ts index 73288f67..1586d0a0 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -226,6 +226,33 @@ app.post("/mcp", async (req, res) => { } }); +app.delete("/mcp", async (req, res) => { + const sessionId = req.headers["mcp-session-id"] as string | undefined; + console.log(`Received DELETE message for sessionId ${sessionId}`); + let serverTransport: Transport | undefined; + if (sessionId) { + try { + serverTransport = serverTransports.get( + sessionId, + ) as StreamableHTTPClientTransport; + if (!serverTransport) { + res.status(404).end("Transport not found for sessionId " + sessionId); + } else { + await ( + serverTransport as StreamableHTTPClientTransport + ).terminateSession(); + webAppTransports.delete(sessionId); + serverTransports.delete(sessionId); + console.log(`Transports removed for sessionId ${sessionId}`); + } + res.status(200).end(); + } catch (error) { + console.error("Error in /mcp route:", error); + res.status(500).json(error); + } + } +}); + app.get("/stdio", async (req, res) => { try { console.log("New connection"); From b51ee625cddcf76608873c381c069a07195ace73 Mon Sep 17 00:00:00 2001 From: xiaoli Date: Fri, 30 May 2025 10:14:03 +0800 Subject: [PATCH 120/135] style: fix code style to pass CI checks --- client/src/lib/hooks/useConnection.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index fae904da..e4f1bc50 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -304,8 +304,8 @@ export function useConnection({ bearerToken || (await serverAuthProvider.tokens())?.access_token; if (token) { const authHeaderName = headerName || "Authorization"; - - // Add custom header name as a special request header to let the server know which header to pass through + + // Add custom header name as a special request header to let the server know which header to pass through if (authHeaderName.toLowerCase() !== "authorization") { headers[authHeaderName] = token; headers["x-custom-auth-header"] = authHeaderName; From 3510e1a56128a094638290531fec59fc820ffa2e Mon Sep 17 00:00:00 2001 From: xiaoli Date: Fri, 30 May 2025 14:43:09 +0800 Subject: [PATCH 121/135] fix: preserve capitalization in custom headers Express converts all header names to lowercase, which prevents custom headers with uppercase characters from being properly passed to the target service. This fix ensures that custom headers preserve their original capitalization when forwarded through the proxy. --- server/src/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index de14e286..962c90e8 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -70,8 +70,9 @@ const getHttpHeaders = ( // If the header "x-custom-auth-header" is present, use its value as the custom header name. if (req.headers["x-custom-auth-header"] !== undefined) { const customHeaderName = req.headers["x-custom-auth-header"] as string; - if (req.headers[customHeaderName] !== undefined) { - const value = req.headers[customHeaderName]; + const lowerCaseHeaderName = customHeaderName.toLowerCase(); + if (req.headers[lowerCaseHeaderName] !== undefined) { + const value = req.headers[lowerCaseHeaderName]; headers[customHeaderName] = value as string; } } From 11757ef6154283a0e5bacf04b61dfeda5d9e4cfe Mon Sep 17 00:00:00 2001 From: olaservo Date: Fri, 30 May 2025 07:46:28 -0700 Subject: [PATCH 122/135] Add simple architecture overview --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index d7c34b97..99356536 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,15 @@ The MCP inspector is a developer tool for testing and debugging MCP servers. ![MCP Inspector Screenshot](https://raw.githubusercontent.com/modelcontextprotocol/inspector/main/mcp-inspector.png) +## Architecture Overview + +The MCP Inspector consists of two main components that work together: + +- **MCP Inspector Client (MCPI)**: A React-based web UI that provides an interactive interface for testing and debugging MCP servers +- **MCP Proxy (MCPP)**: A Node.js server that acts as a protocol bridge, connecting the web UI to MCP servers via various transport methods (stdio, SSE, streamable-http) + +Note that the proxy is not a network proxy for intercepting traffic. Instead, it functions as both an MCP client (connecting to your MCP server) and an HTTP server (serving the web UI), enabling browser-based interaction with MCP servers that use different transport protocols. + ## Running the Inspector ### Requirements From 2d7936d10b7abeed521091cb3c3173230847abe7 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Mon, 2 Jun 2025 16:20:16 +0100 Subject: [PATCH 123/135] fix type errors --- client/src/components/OAuthDebugCallback.tsx | 3 ++- .../src/components/__tests__/AuthDebugger.test.tsx | 12 ++++++++++-- client/src/lib/auth-types.ts | 5 +---- package.json | 1 + 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/client/src/components/OAuthDebugCallback.tsx b/client/src/components/OAuthDebugCallback.tsx index 17705abb..99774297 100644 --- a/client/src/components/OAuthDebugCallback.tsx +++ b/client/src/components/OAuthDebugCallback.tsx @@ -4,6 +4,7 @@ import { generateOAuthErrorDescription, parseOAuthCallbackParams, } from "@/utils/oauthUtils.ts"; +import { AuthDebuggerState } from "@/lib/auth-types"; interface OAuthCallbackProps { onConnect: ({ @@ -13,7 +14,7 @@ interface OAuthCallbackProps { }: { authorizationCode?: string; errorMsg?: string; - restoredState?: any; + restoredState?: AuthDebuggerState; }) => void; } diff --git a/client/src/components/__tests__/AuthDebugger.test.tsx b/client/src/components/__tests__/AuthDebugger.test.tsx index b2fa4c61..772b3d43 100644 --- a/client/src/components/__tests__/AuthDebugger.test.tsx +++ b/client/src/components/__tests__/AuthDebugger.test.tsx @@ -441,8 +441,16 @@ describe("AuthDebugger", () => { const updateAuthState = jest.fn(); // Mock window.location.href setter - delete (window as any).location; - window.location = { href: "" } as any; + const originalLocation = window.location; + const locationMock = { + ...originalLocation, + href: "", + origin: "http://localhost:3000" + }; + Object.defineProperty(window, 'location', { + writable: true, + value: locationMock + }); // Setup mocks for OAuth flow mockStartAuthorization.mockResolvedValue({ diff --git a/client/src/lib/auth-types.ts b/client/src/lib/auth-types.ts index daf1bc15..5e8113ef 100644 --- a/client/src/lib/auth-types.ts +++ b/client/src/lib/auth-types.ts @@ -29,10 +29,7 @@ export interface AuthDebuggerState { oauthTokens: OAuthTokens | null; oauthStep: OAuthStep; resourceMetadata: OAuthProtectedResourceMetadata | null; - resourceMetadataError: - | Error - | { status: number; statusText: string; message: string } - | null; + resourceMetadataError: Error | null; authServerUrl: URL | null; oauthMetadata: OAuthMetadata | null; oauthClientInfo: OAuthClientInformationFull | OAuthClientInformation | null; diff --git a/package.json b/package.json index a5e09c6a..6ee5719e 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "test-cli": "cd cli && npm run test", "prettier-fix": "prettier --write .", "prettier-check": "prettier --check .", + "lint": "prettier --check . && cd client && npm run lint", "prepare": "npm run build", "publish-all": "npm publish --workspaces --access public && npm publish --access public" }, From 98668507c798ce7010e209557ff35be2ebcad92e Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Mon, 2 Jun 2025 16:20:36 +0100 Subject: [PATCH 124/135] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6ee5719e..c0f7cf73 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@modelcontextprotocol/inspector-cli": "^0.13.0", "@modelcontextprotocol/inspector-client": "^0.13.0", "@modelcontextprotocol/inspector-server": "^0.13.0", - "@modelcontextprotocol/sdk": "^1.12.0", + "@modelcontextprotocol/sdk": "^1.12.1", "concurrently": "^9.0.1", "open": "^10.1.0", "shell-quote": "^1.8.2", From fa01fafa59e34285bd5e5580201dc4b3ec13ce18 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Mon, 2 Jun 2025 16:21:55 +0100 Subject: [PATCH 125/135] version bump + lint --- client/src/components/__tests__/AuthDebugger.test.tsx | 6 +++--- package-lock.json | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/components/__tests__/AuthDebugger.test.tsx b/client/src/components/__tests__/AuthDebugger.test.tsx index 772b3d43..3727128a 100644 --- a/client/src/components/__tests__/AuthDebugger.test.tsx +++ b/client/src/components/__tests__/AuthDebugger.test.tsx @@ -445,11 +445,11 @@ describe("AuthDebugger", () => { const locationMock = { ...originalLocation, href: "", - origin: "http://localhost:3000" + origin: "http://localhost:3000", }; - Object.defineProperty(window, 'location', { + Object.defineProperty(window, "location", { writable: true, - value: locationMock + value: locationMock, }); // Setup mocks for OAuth flow diff --git a/package-lock.json b/package-lock.json index 6e5d73f0..36588354 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@modelcontextprotocol/inspector-cli": "^0.13.0", "@modelcontextprotocol/inspector-client": "^0.13.0", "@modelcontextprotocol/inspector-server": "^0.13.0", - "@modelcontextprotocol/sdk": "^1.12.0", + "@modelcontextprotocol/sdk": "^1.12.1", "concurrently": "^9.0.1", "open": "^10.1.0", "shell-quote": "^1.8.2", @@ -2005,9 +2005,9 @@ "link": true }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.12.0.tgz", - "integrity": "sha512-m//7RlINx1F3sz3KqwY1WWzVgTcYX52HYk4bJ1hkBXV3zccAEth+jRvG8DBRrdaQuRsPAJOx2MH3zaHNCKL7Zg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.12.1.tgz", + "integrity": "sha512-KG1CZhZfWg+u8pxeM/mByJDScJSrjjxLc8fwQqbsS8xCjBmQfMNEBTotYdNanKekepnfRI85GtgQlctLFpcYPw==", "dependencies": { "ajv": "^6.12.6", "content-type": "^1.0.5", From 9371006838de8224046eb8c0d3656b7eb9355af4 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Tue, 3 Jun 2025 11:02:34 +0100 Subject: [PATCH 126/135] less noisy errors --- client/src/components/__tests__/AuthDebugger.test.tsx | 7 +++++++ client/src/lib/oauth-state-machine.ts | 2 -- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/client/src/components/__tests__/AuthDebugger.test.tsx b/client/src/components/__tests__/AuthDebugger.test.tsx index 3727128a..2130e68b 100644 --- a/client/src/components/__tests__/AuthDebugger.test.tsx +++ b/client/src/components/__tests__/AuthDebugger.test.tsx @@ -104,6 +104,9 @@ describe("AuthDebugger", () => { jest.clearAllMocks(); sessionStorageMock.getItem.mockReturnValue(null); + // Supress + jest.spyOn(console, "error").mockImplementation(() => {}); + mockDiscoverOAuthMetadata.mockResolvedValue(mockOAuthMetadata); mockRegisterClient.mockResolvedValue(mockOAuthClientInfo); mockDiscoverOAuthProtectedResourceMetadata.mockRejectedValue( @@ -124,6 +127,10 @@ describe("AuthDebugger", () => { mockExchangeAuthorization.mockResolvedValue(mockOAuthTokens); }); + afterEach(() => { + jest.restoreAllMocks(); + }); + const renderAuthDebugger = (props: Partial = {}) => { const mergedProps = { ...defaultProps, diff --git a/client/src/lib/oauth-state-machine.ts b/client/src/lib/oauth-state-machine.ts index d05369c4..101a33cf 100644 --- a/client/src/lib/oauth-state-machine.ts +++ b/client/src/lib/oauth-state-machine.ts @@ -43,8 +43,6 @@ export const oauthTransitions: Record = { authServerUrl = new URL(resourceMetadata.authorization_servers[0]); } } catch (e) { - console.info(`Failed to find protected resource metadata: ${e}`); - console.log(e); if (e instanceof Error) { resourceMetadataError = e; } else { From e2d3989bb219cd34d249cb1d2cc4c5169e85ae30 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Tue, 3 Jun 2025 11:05:10 +0100 Subject: [PATCH 127/135] use scopes from PRM if available --- client/src/lib/oauth-state-machine.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/src/lib/oauth-state-machine.ts b/client/src/lib/oauth-state-machine.ts index 101a33cf..5f10a783 100644 --- a/client/src/lib/oauth-state-machine.ts +++ b/client/src/lib/oauth-state-machine.ts @@ -72,9 +72,13 @@ export const oauthTransitions: Record = { const metadata = context.state.oauthMetadata!; const clientMetadata = context.provider.clientMetadata; + // Prefer scopes from resource metadata if available + const scopesSupported = + context.state.resourceMetadata?.scopes_supported || + metadata.scopes_supported; // Add all supported scopes to client registration - if (metadata.scopes_supported) { - clientMetadata.scope = metadata.scopes_supported.join(" "); + if (scopesSupported) { + clientMetadata.scope = scopesSupported.join(" "); } const fullInformation = await registerClient(context.serverUrl, { From a387c6ad7e5f006a3138aff5235e42d187cbb8e9 Mon Sep 17 00:00:00 2001 From: Paul Carleton Date: Tue, 3 Jun 2025 17:29:22 +0100 Subject: [PATCH 128/135] hook warning --- client/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 00d3bb48..2fbc7494 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -307,7 +307,7 @@ const App = () => { }); } }, - [], + [sseUrl], ); // Load OAuth tokens when sseUrl changes From 2f50a4ba0eecc2774b4ac6544b10149452b96835 Mon Sep 17 00:00:00 2001 From: dr3s Date: Tue, 3 Jun 2025 13:58:33 -0400 Subject: [PATCH 129/135] fix: Resource template query parameters not appended to request URI #450 --- client/src/components/ResourcesTab.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/client/src/components/ResourcesTab.tsx b/client/src/components/ResourcesTab.tsx index 35742799..1293a0f8 100644 --- a/client/src/components/ResourcesTab.tsx +++ b/client/src/components/ResourcesTab.tsx @@ -16,6 +16,7 @@ import ListPane from "./ListPane"; import { useEffect, useState } from "react"; import { useCompletionState } from "@/lib/hooks/useCompletionState"; import JsonView from "./JsonView"; +import { UriTemplate } from "@modelcontextprotocol/sdk/shared/uriTemplate.js"; const ResourcesTab = ({ resources, @@ -79,10 +80,10 @@ const ResourcesTab = ({ template: string, values: Record, ): string => { - return template.replace( - /{([^}]+)}/g, - (_, key) => values[key] || `{${key}}`, - ); + console.log("Expanding template:", template, "with values:", values); + const result = new UriTemplate(template).expand(values); + console.log("Filled template:", result); + return result; }; const handleTemplateValueChange = async (key: string, value: string) => { @@ -240,7 +241,8 @@ const ResourcesTab = ({ {selectedTemplate.uriTemplate .match(/{([^}]+)}/g) ?.map((param) => { - const key = param.slice(1, -1); + // Remove leading operator characters (?, &, /, #, ;, +, .) from variable name + const key = param.slice(1, -1).replace(/^[?&/#;+.]/, ""); return (
      From f1650d06e3d3a835ecdafe65c8e7ce19f129c317 Mon Sep 17 00:00:00 2001 From: dr3s Date: Tue, 3 Jun 2025 13:58:33 -0400 Subject: [PATCH 130/135] use UriTemplate variable names --- client/src/components/ResourcesTab.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/client/src/components/ResourcesTab.tsx b/client/src/components/ResourcesTab.tsx index 1293a0f8..dd40d1b8 100644 --- a/client/src/components/ResourcesTab.tsx +++ b/client/src/components/ResourcesTab.tsx @@ -238,11 +238,8 @@ const ResourcesTab = ({

      {selectedTemplate.description}

      - {selectedTemplate.uriTemplate - .match(/{([^}]+)}/g) - ?.map((param) => { - // Remove leading operator characters (?, &, /, #, ;, +, .) from variable name - const key = param.slice(1, -1).replace(/^[?&/#;+.]/, ""); + {new UriTemplate(selectedTemplate.uriTemplate).variableNames + ?.map((key) => { return (
      From 07f3e4593b8bb2ffc9cee99fb7813a08ca85f27b Mon Sep 17 00:00:00 2001 From: dr3s Date: Tue, 3 Jun 2025 13:58:33 -0400 Subject: [PATCH 131/135] remove logs --- client/src/components/ResourcesTab.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/client/src/components/ResourcesTab.tsx b/client/src/components/ResourcesTab.tsx index dd40d1b8..8795e46b 100644 --- a/client/src/components/ResourcesTab.tsx +++ b/client/src/components/ResourcesTab.tsx @@ -80,10 +80,7 @@ const ResourcesTab = ({ template: string, values: Record, ): string => { - console.log("Expanding template:", template, "with values:", values); - const result = new UriTemplate(template).expand(values); - console.log("Filled template:", result); - return result; + return new UriTemplate(template).expand(values); }; const handleTemplateValueChange = async (key: string, value: string) => { From 26f744866aefde5acaec7a2da6314b8c915ec9be Mon Sep 17 00:00:00 2001 From: dr3s Date: Tue, 3 Jun 2025 13:58:33 -0400 Subject: [PATCH 132/135] formatting --- client/src/components/ResourcesTab.tsx | 41 +++++++++++++------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/client/src/components/ResourcesTab.tsx b/client/src/components/ResourcesTab.tsx index 8795e46b..8ec3f91b 100644 --- a/client/src/components/ResourcesTab.tsx +++ b/client/src/components/ResourcesTab.tsx @@ -235,26 +235,27 @@ const ResourcesTab = ({

      {selectedTemplate.description}

      - {new UriTemplate(selectedTemplate.uriTemplate).variableNames - ?.map((key) => { - return ( -
      - - - handleTemplateValueChange(key, value) - } - onInputChange={(value) => - handleTemplateValueChange(key, value) - } - options={completions[key] || []} - /> -
      - ); - })} + {new UriTemplate( + selectedTemplate.uriTemplate, + ).variableNames?.map((key) => { + return ( +
      + + + handleTemplateValueChange(key, value) + } + onInputChange={(value) => + handleTemplateValueChange(key, value) + } + options={completions[key] || []} + /> +
      + ); + })} + ), +})); + +describe("ResourcesTab - Template Query Parameters", () => { + const mockListResources = jest.fn(); + const mockClearResources = jest.fn(); + const mockListResourceTemplates = jest.fn(); + const mockClearResourceTemplates = jest.fn(); + const mockReadResource = jest.fn(); + const mockSetSelectedResource = jest.fn(); + const mockHandleCompletion = jest.fn(); + const mockSubscribeToResource = jest.fn(); + const mockUnsubscribeFromResource = jest.fn(); + + const mockResourceTemplate: ResourceTemplate = { + name: "Users API", + uriTemplate: "test://users{?name,limit,offset}", + description: "Fetch users with optional filtering and pagination", + }; + + const mockResource: Resource = { + uri: "test://users?name=john&limit=10&offset=0", + name: "Users Resource", + description: "Expanded users resource", + }; + + const defaultProps = { + resources: [], + resourceTemplates: [mockResourceTemplate], + listResources: mockListResources, + clearResources: mockClearResources, + listResourceTemplates: mockListResourceTemplates, + clearResourceTemplates: mockClearResourceTemplates, + readResource: mockReadResource, + selectedResource: null, + setSelectedResource: mockSetSelectedResource, + handleCompletion: mockHandleCompletion, + completionsSupported: true, + resourceContent: "", + nextCursor: undefined, + nextTemplateCursor: undefined, + error: null, + resourceSubscriptionsSupported: false, + resourceSubscriptions: new Set(), + subscribeToResource: mockSubscribeToResource, + unsubscribeFromResource: mockUnsubscribeFromResource, + }; + + const renderResourcesTab = (props = {}) => + render( + + + , + ); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("should parse and display template variables from URI template", () => { + renderResourcesTab(); + + // Click on the resource template to select it + fireEvent.click(screen.getByText("Users API")); + + // Check that input fields are rendered for each template variable + expect(screen.getByTestId("combobox-name")).toBeInTheDocument(); + expect(screen.getByTestId("combobox-limit")).toBeInTheDocument(); + expect(screen.getByTestId("combobox-offset")).toBeInTheDocument(); + }); + + it("should display template description when template is selected", () => { + renderResourcesTab(); + + // Click on the resource template to select it + fireEvent.click(screen.getByText("Users API")); + + expect(screen.getByText("Fetch users with optional filtering and pagination")).toBeInTheDocument(); + }); + + it("should handle template value changes", () => { + renderResourcesTab(); + + // Click on the resource template to select it + fireEvent.click(screen.getByText("Users API")); + + // Find and fill template value inputs + const nameInput = screen.getByTestId("combobox-name"); + const limitInput = screen.getByTestId("combobox-limit"); + const offsetInput = screen.getByTestId("combobox-offset"); + + fireEvent.change(nameInput, { target: { value: "john" } }); + fireEvent.change(limitInput, { target: { value: "10" } }); + fireEvent.change(offsetInput, { target: { value: "0" } }); + + expect(nameInput).toHaveValue("john"); + expect(limitInput).toHaveValue("10"); + expect(offsetInput).toHaveValue("0"); + }); + + it("should expand template and read resource when Read Resource button is clicked", async () => { + renderResourcesTab(); + + // Click on the resource template to select it + fireEvent.click(screen.getByText("Users API")); + + // Fill template values + const nameInput = screen.getByTestId("combobox-name"); + const limitInput = screen.getByTestId("combobox-limit"); + const offsetInput = screen.getByTestId("combobox-offset"); + + fireEvent.change(nameInput, { target: { value: "john" } }); + fireEvent.change(limitInput, { target: { value: "10" } }); + fireEvent.change(offsetInput, { target: { value: "0" } }); + + // Click Read Resource button + const readResourceButton = screen.getByText("Read Resource"); + expect(readResourceButton).not.toBeDisabled(); + + fireEvent.click(readResourceButton); + + // Verify that readResource was called with the expanded URI + expect(mockReadResource).toHaveBeenCalledWith("test://users?name=john&limit=10&offset=0"); + + // Verify that setSelectedResource was called with the expanded resource + expect(mockSetSelectedResource).toHaveBeenCalledWith({ + uri: "test://users?name=john&limit=10&offset=0", + name: "test://users?name=john&limit=10&offset=0" + }); + }); + + it("should disable Read Resource button when no template values are provided", () => { + renderResourcesTab(); + + // Click on the resource template to select it + fireEvent.click(screen.getByText("Users API")); + + // Read Resource button should be disabled when no values are provided + const readResourceButton = screen.getByText("Read Resource"); + expect(readResourceButton).toBeDisabled(); + }); + + it("should handle partial template values correctly", () => { + renderResourcesTab(); + + // Click on the resource template to select it + fireEvent.click(screen.getByText("Users API")); + + // Fill only some template values + const nameInput = screen.getByTestId("combobox-name"); + fireEvent.change(nameInput, { target: { value: "john" } }); + + // Read Resource button should be enabled with partial values + const readResourceButton = screen.getByText("Read Resource"); + expect(readResourceButton).not.toBeDisabled(); + + fireEvent.click(readResourceButton); + + // Should expand with only the provided values + expect(mockReadResource).toHaveBeenCalledWith("test://users?name=john"); + }); + + it("should handle special characters in template values", () => { + renderResourcesTab(); + + // Click on the resource template to select it + fireEvent.click(screen.getByText("Users API")); + + // Fill template values with special characters + const nameInput = screen.getByTestId("combobox-name"); + fireEvent.change(nameInput, { target: { value: "john doe" } }); + + fireEvent.click(screen.getByText("Read Resource")); + + // Should properly encode special characters + expect(mockReadResource).toHaveBeenCalledWith("test://users?name=john%20doe"); + }); + + it("should clear template values when switching between templates", () => { + const anotherTemplate: ResourceTemplate = { + name: "Posts API", + uriTemplate: "test://posts{?author,category}", + description: "Fetch posts by author and category", + }; + + renderResourcesTab({ + resourceTemplates: [mockResourceTemplate, anotherTemplate] + }); + + // Select first template and fill values + fireEvent.click(screen.getByText("Users API")); + const nameInput = screen.getByTestId("combobox-name"); + fireEvent.change(nameInput, { target: { value: "john" } }); + + // Switch to second template + fireEvent.click(screen.getByText("Posts API")); + + // Should show new template fields and clear previous values + expect(screen.getByTestId("combobox-author")).toBeInTheDocument(); + expect(screen.getByTestId("combobox-category")).toBeInTheDocument(); + expect(screen.queryByTestId("combobox-name")).not.toBeInTheDocument(); + }); + + it("should display resource content when a resource is selected", () => { + const resourceContent = '{"users": [{"id": 1, "name": "John"}]}'; + + renderResourcesTab({ + selectedResource: mockResource, + resourceContent: resourceContent + }); + + expect(screen.getByTestId("json-view")).toBeInTheDocument(); + expect(screen.getByText(resourceContent)).toBeInTheDocument(); + }); + + it("should show alert when no resource or template is selected", () => { + renderResourcesTab(); + + expect(screen.getByText("Select a resource or template from the list to view its contents")).toBeInTheDocument(); + }); +}); From 9508cc46271b5965accda35e98c3a93f5cc4de96 Mon Sep 17 00:00:00 2001 From: dr3s Date: Wed, 4 Jun 2025 14:44:15 -0400 Subject: [PATCH 134/135] pretty --- .../__tests__/ResourcesTab.test.tsx | 51 ++++++++++++++----- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/client/src/components/__tests__/ResourcesTab.test.tsx b/client/src/components/__tests__/ResourcesTab.test.tsx index dd12cced..d564b02c 100644 --- a/client/src/components/__tests__/ResourcesTab.test.tsx +++ b/client/src/components/__tests__/ResourcesTab.test.tsx @@ -20,7 +20,12 @@ jest.mock("../JsonView", () => { }); jest.mock("@/components/ui/combobox", () => ({ - Combobox: ({ id, value, onChange, placeholder }: { + Combobox: ({ + id, + value, + onChange, + placeholder, + }: { id: string; value: string; onChange: (value: string) => void; @@ -37,7 +42,10 @@ jest.mock("@/components/ui/combobox", () => ({ })); jest.mock("@/components/ui/label", () => ({ - Label: ({ htmlFor, children }: { + Label: ({ + htmlFor, + children, + }: { htmlFor: string; children: React.ReactNode; }) => ( @@ -48,7 +56,12 @@ jest.mock("@/components/ui/label", () => ({ })); jest.mock("@/components/ui/button", () => ({ - Button: ({ children, onClick, disabled, ...props }: { + Button: ({ + children, + onClick, + disabled, + ...props + }: { children: React.ReactNode; onClick?: () => void; disabled?: boolean; @@ -139,7 +152,9 @@ describe("ResourcesTab - Template Query Parameters", () => { // Click on the resource template to select it fireEvent.click(screen.getByText("Users API")); - expect(screen.getByText("Fetch users with optional filtering and pagination")).toBeInTheDocument(); + expect( + screen.getByText("Fetch users with optional filtering and pagination"), + ).toBeInTheDocument(); }); it("should handle template value changes", () => { @@ -180,16 +195,18 @@ describe("ResourcesTab - Template Query Parameters", () => { // Click Read Resource button const readResourceButton = screen.getByText("Read Resource"); expect(readResourceButton).not.toBeDisabled(); - + fireEvent.click(readResourceButton); // Verify that readResource was called with the expanded URI - expect(mockReadResource).toHaveBeenCalledWith("test://users?name=john&limit=10&offset=0"); - + expect(mockReadResource).toHaveBeenCalledWith( + "test://users?name=john&limit=10&offset=0", + ); + // Verify that setSelectedResource was called with the expanded resource expect(mockSetSelectedResource).toHaveBeenCalledWith({ uri: "test://users?name=john&limit=10&offset=0", - name: "test://users?name=john&limit=10&offset=0" + name: "test://users?name=john&limit=10&offset=0", }); }); @@ -217,7 +234,7 @@ describe("ResourcesTab - Template Query Parameters", () => { // Read Resource button should be enabled with partial values const readResourceButton = screen.getByText("Read Resource"); expect(readResourceButton).not.toBeDisabled(); - + fireEvent.click(readResourceButton); // Should expand with only the provided values @@ -237,7 +254,9 @@ describe("ResourcesTab - Template Query Parameters", () => { fireEvent.click(screen.getByText("Read Resource")); // Should properly encode special characters - expect(mockReadResource).toHaveBeenCalledWith("test://users?name=john%20doe"); + expect(mockReadResource).toHaveBeenCalledWith( + "test://users?name=john%20doe", + ); }); it("should clear template values when switching between templates", () => { @@ -248,7 +267,7 @@ describe("ResourcesTab - Template Query Parameters", () => { }; renderResourcesTab({ - resourceTemplates: [mockResourceTemplate, anotherTemplate] + resourceTemplates: [mockResourceTemplate, anotherTemplate], }); // Select first template and fill values @@ -267,10 +286,10 @@ describe("ResourcesTab - Template Query Parameters", () => { it("should display resource content when a resource is selected", () => { const resourceContent = '{"users": [{"id": 1, "name": "John"}]}'; - + renderResourcesTab({ selectedResource: mockResource, - resourceContent: resourceContent + resourceContent: resourceContent, }); expect(screen.getByTestId("json-view")).toBeInTheDocument(); @@ -280,6 +299,10 @@ describe("ResourcesTab - Template Query Parameters", () => { it("should show alert when no resource or template is selected", () => { renderResourcesTab(); - expect(screen.getByText("Select a resource or template from the list to view its contents")).toBeInTheDocument(); + expect( + screen.getByText( + "Select a resource or template from the list to view its contents", + ), + ).toBeInTheDocument(); }); }); From 8ef91e359ecd5d51af8aa0dd315080b47389e19e Mon Sep 17 00:00:00 2001 From: cliffhall Date: Wed, 4 Jun 2025 16:13:35 -0400 Subject: [PATCH 135/135] Bump Inspector packages to 0.14.0, and sdk to 1.12.1 --- cli/package.json | 4 ++-- client/package.json | 4 ++-- package-lock.json | 22 +++++++++++----------- package.json | 8 ++++---- server/package.json | 4 ++-- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/cli/package.json b/cli/package.json index 55f12e15..bd027bfe 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector-cli", - "version": "0.13.0", + "version": "0.14.0", "description": "CLI for the Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", @@ -21,7 +21,7 @@ }, "devDependencies": {}, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.5", + "@modelcontextprotocol/sdk": "^1.12.1", "commander": "^13.1.0", "spawn-rx": "^5.1.2" } diff --git a/client/package.json b/client/package.json index ee54df3d..daf549fc 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector-client", - "version": "0.13.0", + "version": "0.14.0", "description": "Client-side application for the Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", @@ -23,7 +23,7 @@ "test:watch": "jest --config jest.config.cjs --watch" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.5", + "@modelcontextprotocol/sdk": "^1.12.1", "@radix-ui/react-checkbox": "^1.1.4", "ajv": "^6.12.6", "@radix-ui/react-dialog": "^1.1.3", diff --git a/package-lock.json b/package-lock.json index 36588354..846d2eaa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@modelcontextprotocol/inspector", - "version": "0.13.0", + "version": "0.14.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@modelcontextprotocol/inspector", - "version": "0.13.0", + "version": "0.14.0", "license": "MIT", "workspaces": [ "client", @@ -14,9 +14,9 @@ "cli" ], "dependencies": { - "@modelcontextprotocol/inspector-cli": "^0.13.0", - "@modelcontextprotocol/inspector-client": "^0.13.0", - "@modelcontextprotocol/inspector-server": "^0.13.0", + "@modelcontextprotocol/inspector-cli": "^0.14.0", + "@modelcontextprotocol/inspector-client": "^0.14.0", + "@modelcontextprotocol/inspector-server": "^0.14.0", "@modelcontextprotocol/sdk": "^1.12.1", "concurrently": "^9.0.1", "open": "^10.1.0", @@ -40,10 +40,10 @@ }, "cli": { "name": "@modelcontextprotocol/inspector-cli", - "version": "0.13.0", + "version": "0.14.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.5", + "@modelcontextprotocol/sdk": "^1.12.1", "commander": "^13.1.0", "spawn-rx": "^5.1.2" }, @@ -63,10 +63,10 @@ }, "client": { "name": "@modelcontextprotocol/inspector-client", - "version": "0.13.0", + "version": "0.14.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.5", + "@modelcontextprotocol/sdk": "^1.12.1", "@radix-ui/react-checkbox": "^1.1.4", "@radix-ui/react-dialog": "^1.1.3", "@radix-ui/react-icons": "^1.3.0", @@ -10920,10 +10920,10 @@ }, "server": { "name": "@modelcontextprotocol/inspector-server", - "version": "0.13.0", + "version": "0.14.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.5", + "@modelcontextprotocol/sdk": "^1.12.1", "cors": "^2.8.5", "express": "^5.1.0", "ws": "^8.18.0", diff --git a/package.json b/package.json index c0f7cf73..8742cc8b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector", - "version": "0.13.0", + "version": "0.14.0", "description": "Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", @@ -41,9 +41,9 @@ "publish-all": "npm publish --workspaces --access public && npm publish --access public" }, "dependencies": { - "@modelcontextprotocol/inspector-cli": "^0.13.0", - "@modelcontextprotocol/inspector-client": "^0.13.0", - "@modelcontextprotocol/inspector-server": "^0.13.0", + "@modelcontextprotocol/inspector-cli": "^0.14.0", + "@modelcontextprotocol/inspector-client": "^0.14.0", + "@modelcontextprotocol/inspector-server": "^0.14.0", "@modelcontextprotocol/sdk": "^1.12.1", "concurrently": "^9.0.1", "open": "^10.1.0", diff --git a/server/package.json b/server/package.json index a3333da0..50d74cfc 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector-server", - "version": "0.13.0", + "version": "0.14.0", "description": "Server-side application for the Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", @@ -27,7 +27,7 @@ "typescript": "^5.6.2" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.5", + "@modelcontextprotocol/sdk": "^1.12.1", "cors": "^2.8.5", "express": "^5.1.0", "ws": "^8.18.0",