From a524f17d8074cd720672e3685d114e749b0a9de3 Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Mon, 7 Apr 2025 16:09:46 +0900 Subject: [PATCH 01/20] 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 c43f943..cb5fd52 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 35edf0e..21a4bf0 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 42fec87..ba5ae44 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 453fa71..f3663f9 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 d2cb2338a0b69f9f154c43901f75c368051534cd Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Sun, 13 Apr 2025 21:23:39 +0900 Subject: [PATCH 02/20] 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 21a4bf0..b12564f 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 03/20] 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 2ddb18d..e7d74f9 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 8e72b00..fad066f 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 7c74bb7..1b9736f 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 e7fa14c..cbfab90 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 04/20] 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 b12564f..cb0db39 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 014acecf777edbc934582be0b1230ce4cb846b70 Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Thu, 17 Apr 2025 18:13:58 +0900 Subject: [PATCH 05/20] 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 221cbd3..c34673f 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 93d77fa..8e383b3 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 dffc139..ed3bbb3 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 1b9736f..f390e6d 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 210e160..fc05c06 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 06/20] Fix format of README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b568e7c..6c042c9 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 dd6f5287ca3e87cca792a383b78412bbc394fb9d Mon Sep 17 00:00:00 2001 From: Santthosh Selvadurai Date: Wed, 30 Apr 2025 22:21:59 -0700 Subject: [PATCH 07/20] Fix to the Authorization header bug for Streamable-HTTP Reference issue [https://github.com/modelcontextprotocol/inspector/issues/369] --- 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 27bc11a..f23f449 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -335,6 +335,7 @@ export function useConnection({ transportType === "streamable-http" ? new StreamableHTTPClientTransport(mcpProxyServerUrl as URL, { sessionId: undefined, + ...transportOptions, }) : new SSEClientTransport(mcpProxyServerUrl as URL, transportOptions); From 5ad2c3c146d4002a7221bfb027ecf1d26e9a9b03 Mon Sep 17 00:00:00 2001 From: "Kent C. Dodds" Date: Thu, 1 May 2025 09:12:29 -0600 Subject: [PATCH 08/20] feat(client): Add PingTab when no server capabilities The TypeScript SDK (and presumably others) quite possibly support at least pings out of the box so including the ping tab even if a server doesn't have capabilities seems to make sense. --- client/src/App.tsx | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 7880b2a..5ccc4d2 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -575,11 +575,23 @@ const App = () => { {!serverCapabilities?.resources && !serverCapabilities?.prompts && !serverCapabilities?.tools ? ( -
-

- The connected server does not support any MCP capabilities -

-
+ <> +
+

+ The connected server does not support any MCP capabilities +

+
+ { + void sendMCPRequest( + { + method: "ping" as const, + }, + EmptyResultSchema, + ); + }} + /> + ) : ( <> Date: Fri, 2 May 2025 17:35:33 -0400 Subject: [PATCH 09/20] Use transport-specific options --- client/src/lib/hooks/useConnection.ts | 100 +++++++++++++++++--------- 1 file changed, 65 insertions(+), 35 deletions(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index f23f449..5ae9f69 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -2,8 +2,12 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { SSEClientTransport, SseError, + SSEClientTransportOptions, } from "@modelcontextprotocol/sdk/client/sse.js"; -import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; +import { + StreamableHTTPClientTransport, + StreamableHTTPClientTransportOptions, +} from "@modelcontextprotocol/sdk/client/streamableHttp.js"; import { ClientNotification, ClientRequest, @@ -279,29 +283,6 @@ export function useConnection({ setConnectionStatus("error-connecting-to-proxy"); return; } - let mcpProxyServerUrl; - switch (transportType) { - case "stdio": - mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/stdio`); - mcpProxyServerUrl.searchParams.append("command", command); - mcpProxyServerUrl.searchParams.append("args", args); - mcpProxyServerUrl.searchParams.append("env", JSON.stringify(env)); - break; - - case "sse": - mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/sse`); - mcpProxyServerUrl.searchParams.append("url", sseUrl); - break; - - case "streamable-http": - mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/mcp`); - mcpProxyServerUrl.searchParams.append("url", sseUrl); - break; - } - (mcpProxyServerUrl as URL).searchParams.append( - "transportType", - transportType, - ); try { // Inject auth manually instead of using SSEClientTransport, because we're @@ -320,17 +301,66 @@ export function useConnection({ } // Create appropriate transport - const transportOptions = { - eventSourceInit: { - fetch: ( - url: string | URL | globalThis.Request, - init: RequestInit | undefined, - ) => fetch(url, { ...init, headers }), - }, - requestInit: { - headers, - }, - }; + let transportOptions: + | StreamableHTTPClientTransportOptions + | SSEClientTransportOptions; + + let mcpProxyServerUrl; + switch (transportType) { + case "stdio": + mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/stdio`); + mcpProxyServerUrl.searchParams.append("command", command); + mcpProxyServerUrl.searchParams.append("args", args); + mcpProxyServerUrl.searchParams.append("env", JSON.stringify(env)); + transportOptions = {}; + break; + + case "sse": + mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/sse`); + mcpProxyServerUrl.searchParams.append("url", sseUrl); + transportOptions = { + authProvider: serverAuthProvider, + eventSourceInit: { + fetch: ( + url: string | URL | globalThis.Request, + init: RequestInit | undefined, + ) => fetch(url, { ...init, headers }), + }, + requestInit: { + headers, + }, + }; + break; + + case "streamable-http": + mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/mcp`); + mcpProxyServerUrl.searchParams.append("url", sseUrl); + transportOptions = { + authProvider: serverAuthProvider, + eventSourceInit: { + fetch: ( + url: string | URL | globalThis.Request, + init: RequestInit | undefined, + ) => fetch(url, { ...init, headers }), + }, + requestInit: { + headers, + }, + // TODO these should be configurable... + reconnectionOptions: { + maxReconnectionDelay: 30000, + initialReconnectionDelay: 1000, + reconnectionDelayGrowFactor: 1.5, + maxRetries: 2, + }, + }; + break; + } + (mcpProxyServerUrl as URL).searchParams.append( + "transportType", + transportType, + ); + const clientTransport = transportType === "streamable-http" ? new StreamableHTTPClientTransport(mcpProxyServerUrl as URL, { From f9cbfbe8221397952a8baadafcaa908ebb91980b Mon Sep 17 00:00:00 2001 From: cliffhall Date: Fri, 2 May 2025 17:50:00 -0400 Subject: [PATCH 10/20] Create the appropriate TransportOptions object for the selected transport * In useConnection.ts - In the case for "stdio", let the transportOptions be the same as "sse" because it will use that transport to the proxy regardless --- client/src/lib/hooks/useConnection.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts index 5ae9f69..f7554f9 100644 --- a/client/src/lib/hooks/useConnection.ts +++ b/client/src/lib/hooks/useConnection.ts @@ -312,7 +312,18 @@ export function useConnection({ mcpProxyServerUrl.searchParams.append("command", command); mcpProxyServerUrl.searchParams.append("args", args); mcpProxyServerUrl.searchParams.append("env", JSON.stringify(env)); - transportOptions = {}; + transportOptions = { + authProvider: serverAuthProvider, + eventSourceInit: { + fetch: ( + url: string | URL | globalThis.Request, + init: RequestInit | undefined, + ) => fetch(url, { ...init, headers }), + }, + requestInit: { + headers, + }, + }; break; case "sse": From 60ffece84be0e09933da2e9c86bd4d6c0d337ad4 Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Sun, 4 May 2025 19:50:05 +0900 Subject: [PATCH 11/20] Revert UI for MCP_AUTO_OPEN_ENABLED option --- 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, 4 insertions(+), 53 deletions(-) diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index 9d2ef91..6c95daa 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -405,6 +405,7 @@ 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 c7a74b1..df4ed64 100644 --- a/client/src/components/__tests__/Sidebar.test.tsx +++ b/client/src/components/__tests__/Sidebar.test.tsx @@ -576,33 +576,6 @@ 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_ENABLED-input", - ); - fireEvent.click(autoOpenDisabledInput); - const falseOption = screen.getByTestId( - "MCP_AUTO_OPEN_ENABLED-input-false", - ); - fireEvent.click(falseOption); - - expect(setConfig).toHaveBeenCalledWith( - expect.objectContaining({ - MCP_AUTO_OPEN_ENABLED: { - label: "Auto Browser Open Enabled", - description: - "Enable automatic browser opening when inspector starts", - value: false, - }, - }), - ); - }); - 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 f390e6d..7c74bb7 100644 --- a/client/src/lib/configurationTypes.ts +++ b/client/src/lib/configurationTypes.ts @@ -33,9 +33,4 @@ 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_ENABLED: ConfigItem; }; diff --git a/client/src/lib/constants.ts b/client/src/lib/constants.ts index fc05c06..a03239a 100644 --- a/client/src/lib/constants.ts +++ b/client/src/lib/constants.ts @@ -52,9 +52,4 @@ 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_ENABLED: { - label: "Auto Browser Open Enabled", - description: "Enable automatic browser opening when inspector starts", - value: true, - }, } as const; From 63cb0349438bbdf20ee28fdc9e8beaffaa1336ee Mon Sep 17 00:00:00 2001 From: "Kent C. Dodds" Date: Mon, 5 May 2025 11:20:55 -0600 Subject: [PATCH 12/20] chore(format): Format App.tsx --- client/src/App.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 5ccc4d2..d990db5 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -578,7 +578,8 @@ const App = () => { <>

- The connected server does not support any MCP capabilities + The connected server does not support any MCP + capabilities

Date: Wed, 7 May 2025 05:28:24 -0700 Subject: [PATCH 13/20] Bump version to 0.12.0 --- cli/package.json | 2 +- client/package.json | 2 +- package-lock.json | 20 ++++++++++---------- package.json | 8 ++++---- server/package.json | 2 +- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/cli/package.json b/cli/package.json index 841a023..53f2aa6 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector-cli", - "version": "0.11.0", + "version": "0.12.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 6ca90eb..2bcf2b0 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector-client", - "version": "0.11.0", + "version": "0.12.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 ed7f0aa..1cb173a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@modelcontextprotocol/inspector", - "version": "0.11.0", + "version": "0.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@modelcontextprotocol/inspector", - "version": "0.11.0", + "version": "0.12.0", "license": "MIT", "workspaces": [ "client", @@ -14,9 +14,9 @@ "cli" ], "dependencies": { - "@modelcontextprotocol/inspector-cli": "^0.11.0", - "@modelcontextprotocol/inspector-client": "^0.11.0", - "@modelcontextprotocol/inspector-server": "^0.11.0", + "@modelcontextprotocol/inspector-cli": "^0.12.0", + "@modelcontextprotocol/inspector-client": "^0.12.0", + "@modelcontextprotocol/inspector-server": "^0.12.0", "@modelcontextprotocol/sdk": "^1.11.0", "concurrently": "^9.0.1", "shell-quote": "^1.8.2", @@ -39,7 +39,7 @@ }, "cli": { "name": "@modelcontextprotocol/inspector-cli", - "version": "0.11.0", + "version": "0.12.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.10.2", @@ -62,7 +62,7 @@ }, "client": { "name": "@modelcontextprotocol/inspector-client", - "version": "0.11.0", + "version": "0.12.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.10.2", @@ -2059,8 +2059,8 @@ } }, "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.12.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "license": "MIT", "optional": true, @@ -10793,7 +10793,7 @@ }, "server": { "name": "@modelcontextprotocol/inspector-server", - "version": "0.11.0", + "version": "0.12.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.10.2", diff --git a/package.json b/package.json index d67b199..5e92409 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector", - "version": "0.11.0", + "version": "0.12.0", "description": "Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", @@ -40,9 +40,9 @@ "publish-all": "npm publish --workspaces --access public && npm publish --access public" }, "dependencies": { - "@modelcontextprotocol/inspector-cli": "^0.11.0", - "@modelcontextprotocol/inspector-client": "^0.11.0", - "@modelcontextprotocol/inspector-server": "^0.11.0", + "@modelcontextprotocol/inspector-cli": "^0.12.0", + "@modelcontextprotocol/inspector-client": "^0.12.0", + "@modelcontextprotocol/inspector-server": "^0.12.0", "@modelcontextprotocol/sdk": "^1.11.0", "concurrently": "^9.0.1", "shell-quote": "^1.8.2", diff --git a/server/package.json b/server/package.json index 24162da..72723d3 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "@modelcontextprotocol/inspector-server", - "version": "0.11.0", + "version": "0.12.0", "description": "Server-side application for the Model Context Protocol inspector", "license": "MIT", "author": "Anthropic, PBC (https://anthropic.com)", From db3f7a3542ac61b461c35d0c2d4286af6cd7c91e Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki <72325947+kawakamidev@users.noreply.github.com> Date: Wed, 7 May 2025 23:20:39 +0900 Subject: [PATCH 14/20] Update README.md Co-authored-by: Cliff Hall --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c042c9..eb78683 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,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_ENABLED` | Enable automatic browser opening when inspector starts | true | +| `MCP_AUTO_OPEN_ENABLED` | Enable automatic browser opening when inspector starts. Only as environment var, not configurable in browser.| true | These settings can be adjusted in real-time through the UI and will persist across sessions. From 3c5c38462b449487f6d5b3b12449c19b28d460f3 Mon Sep 17 00:00:00 2001 From: "Kent C. Dodds" Date: Mon, 5 May 2025 11:40:14 -0600 Subject: [PATCH 15/20] feat(client): initialize via search params --- README.md | 10 ++++++++ client/src/App.tsx | 29 +++++++++------------- client/src/utils/configUtils.ts | 43 +++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index b312f71..21b51a7 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,16 @@ Example server configuration file: } ``` +You can also set the initial `transport` type, `serverUrl`, `serverCommand`, and `serverArgs` via query params, for example: + +``` +http://localhost:6274/?transport=sse&serverUrl=http://localhost:8787/sse +http://localhost:6274/?transport=streamable-http&serverUrl=http://localhost:8787/mcp +http://localhost:6274/?transport=stdio&serverCommand=npx&serverArgs=arg1%20arg2 +``` + +Note that if both the query param and the corresponding localStorage item are set, the query param will take precedence. + ### From this repository If you're working on the inspector itself: diff --git a/client/src/App.tsx b/client/src/App.tsx index d990db5..7e6a986 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -51,7 +51,13 @@ import Sidebar from "./components/Sidebar"; import ToolsTab from "./components/ToolsTab"; import { DEFAULT_INSPECTOR_CONFIG } from "./lib/constants"; import { InspectorConfig } from "./lib/configurationTypes"; -import { getMCPProxyAddress } from "./utils/configUtils"; +import { + getMCPProxyAddress, + getInitialSseUrl, + getInitialTransportType, + getInitialCommand, + getInitialArgs, +} from "./utils/configUtils"; const CONFIG_LOCAL_STORAGE_KEY = "inspectorConfig_v1"; @@ -71,26 +77,13 @@ const App = () => { prompts: null, tools: null, }); - const [command, setCommand] = useState(() => { - return localStorage.getItem("lastCommand") || "mcp-server-everything"; - }); - const [args, setArgs] = useState(() => { - return localStorage.getItem("lastArgs") || ""; - }); + const [command, setCommand] = useState(getInitialCommand); + const [args, setArgs] = useState(getInitialArgs); - const [sseUrl, setSseUrl] = useState(() => { - return localStorage.getItem("lastSseUrl") || "http://localhost:3001/sse"; - }); + const [sseUrl, setSseUrl] = useState(getInitialSseUrl); const [transportType, setTransportType] = useState< "stdio" | "sse" | "streamable-http" - >(() => { - return ( - (localStorage.getItem("lastTransportType") as - | "stdio" - | "sse" - | "streamable-http") || "stdio" - ); - }); + >(getInitialTransportType); const [logLevel, setLogLevel] = useState("debug"); const [notifications, setNotifications] = useState([]); const [stdErrNotifications, setStdErrNotifications] = useState< diff --git a/client/src/utils/configUtils.ts b/client/src/utils/configUtils.ts index 86e1643..ef9bf38 100644 --- a/client/src/utils/configUtils.ts +++ b/client/src/utils/configUtils.ts @@ -24,3 +24,46 @@ export const getMCPServerRequestMaxTotalTimeout = ( ): number => { return config.MCP_REQUEST_MAX_TOTAL_TIMEOUT.value as number; }; + +const getSearchParam = (key: string): string | null => { + try { + const url = new URL(window.location.href); + return url.searchParams.get(key); + } catch { + return null; + } +}; + +export const getInitialTransportType = (): + | "stdio" + | "sse" + | "streamable-http" => { + const param = getSearchParam("transport"); + if (param === "stdio" || param === "sse" || param === "streamable-http") { + return param; + } + return ( + (localStorage.getItem("lastTransportType") as + | "stdio" + | "sse" + | "streamable-http") || "stdio" + ); +}; + +export const getInitialSseUrl = (): string => { + const param = getSearchParam("serverUrl"); + if (param) return param; + return localStorage.getItem("lastSseUrl") || "http://localhost:3001/sse"; +}; + +export const getInitialCommand = (): string => { + const param = getSearchParam("serverCommand"); + if (param) return param; + return localStorage.getItem("lastCommand") || "mcp-server-everything"; +}; + +export const getInitialArgs = (): string => { + const param = getSearchParam("serverArgs"); + if (param) return param; + return localStorage.getItem("lastArgs") || ""; +}; From 2915cccd852ce7a764e191f4c949fa95abf6770d Mon Sep 17 00:00:00 2001 From: "Kent C. Dodds" Date: Mon, 5 May 2025 17:44:33 -0600 Subject: [PATCH 16/20] feat(client): make all config initialize-able via search params --- README.md | 6 ++++ client/src/App.tsx | 26 +++------------ client/src/utils/configUtils.ts | 59 ++++++++++++++++++++++++++++++++- 3 files changed, 68 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 21b51a7..6239e31 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,12 @@ http://localhost:6274/?transport=streamable-http&serverUrl=http://localhost:8787 http://localhost:6274/?transport=stdio&serverCommand=npx&serverArgs=arg1%20arg2 ``` +You can also set initial config settings via query params, for example: + +``` +http://localhost:6274/?MCP_SERVER_REQUEST_TIMEOUT=10000&MCP_REQUEST_TIMEOUT_RESET_ON_PROGRESS=false&MCP_PROXY_FULL_ADDRESS=http://10.1.1.22:5577 +``` + Note that if both the query param and the corresponding localStorage item are set, the query param will take precedence. ### From this repository diff --git a/client/src/App.tsx b/client/src/App.tsx index 7e6a986..32bdcf3 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -49,7 +49,6 @@ import RootsTab from "./components/RootsTab"; import SamplingTab, { PendingRequest } from "./components/SamplingTab"; import Sidebar from "./components/Sidebar"; import ToolsTab from "./components/ToolsTab"; -import { DEFAULT_INSPECTOR_CONFIG } from "./lib/constants"; import { InspectorConfig } from "./lib/configurationTypes"; import { getMCPProxyAddress, @@ -57,6 +56,7 @@ import { getInitialTransportType, getInitialCommand, getInitialArgs, + initializeInspectorConfig, } from "./utils/configUtils"; const CONFIG_LOCAL_STORAGE_KEY = "inspectorConfig_v1"; @@ -92,27 +92,9 @@ const App = () => { const [roots, setRoots] = useState([]); const [env, setEnv] = useState>({}); - const [config, setConfig] = useState(() => { - const savedConfig = localStorage.getItem(CONFIG_LOCAL_STORAGE_KEY); - if (savedConfig) { - // merge default config with saved config - const mergedConfig = { - ...DEFAULT_INSPECTOR_CONFIG, - ...JSON.parse(savedConfig), - } as InspectorConfig; - - // update description of keys to match the new description (in case of any updates to the default config description) - Object.entries(mergedConfig).forEach(([key, value]) => { - mergedConfig[key as keyof InspectorConfig] = { - ...value, - label: DEFAULT_INSPECTOR_CONFIG[key as keyof InspectorConfig].label, - }; - }); - - return mergedConfig; - } - return DEFAULT_INSPECTOR_CONFIG; - }); + const [config, setConfig] = useState(() => + initializeInspectorConfig(CONFIG_LOCAL_STORAGE_KEY), + ); const [bearerToken, setBearerToken] = useState(() => { return localStorage.getItem("lastBearerToken") || ""; }); diff --git a/client/src/utils/configUtils.ts b/client/src/utils/configUtils.ts index ef9bf38..ae404d6 100644 --- a/client/src/utils/configUtils.ts +++ b/client/src/utils/configUtils.ts @@ -1,5 +1,8 @@ import { InspectorConfig } from "@/lib/configurationTypes"; -import { DEFAULT_MCP_PROXY_LISTEN_PORT } from "@/lib/constants"; +import { + DEFAULT_MCP_PROXY_LISTEN_PORT, + DEFAULT_INSPECTOR_CONFIG, +} from "@/lib/constants"; export const getMCPProxyAddress = (config: InspectorConfig): string => { const proxyFullAddress = config.MCP_PROXY_FULL_ADDRESS.value as string; @@ -67,3 +70,57 @@ export const getInitialArgs = (): string => { if (param) return param; return localStorage.getItem("lastArgs") || ""; }; + +// Returns a map of config key -> value from query params if present +export const getConfigOverridesFromQueryParams = ( + defaultConfig: InspectorConfig, +): Partial => { + const url = new URL(window.location.href); + const overrides: Partial = {}; + for (const key of Object.keys(defaultConfig)) { + const param = url.searchParams.get(key); + if (param !== null) { + // Try to coerce to correct type based on default value + const defaultValue = defaultConfig[key as keyof InspectorConfig].value; + let value: string | number | boolean = param; + if (typeof defaultValue === "number") { + value = Number(param); + } else if (typeof defaultValue === "boolean") { + value = param === "true"; + } + overrides[key as keyof InspectorConfig] = { + ...defaultConfig[key as keyof InspectorConfig], + value, + }; + } + } + return overrides; +}; + +export const initializeInspectorConfig = ( + localStorageKey: string, +): InspectorConfig => { + const savedConfig = localStorage.getItem(localStorageKey); + let baseConfig: InspectorConfig; + if (savedConfig) { + // merge default config with saved config + const mergedConfig = { + ...DEFAULT_INSPECTOR_CONFIG, + ...JSON.parse(savedConfig), + } as InspectorConfig; + + // update description of keys to match the new description (in case of any updates to the default config description) + for (const [key, value] of Object.entries(mergedConfig)) { + mergedConfig[key as keyof InspectorConfig] = { + ...value, + label: DEFAULT_INSPECTOR_CONFIG[key as keyof InspectorConfig].label, + }; + } + baseConfig = mergedConfig; + } else { + baseConfig = DEFAULT_INSPECTOR_CONFIG; + } + // Apply query param overrides + const overrides = getConfigOverridesFromQueryParams(DEFAULT_INSPECTOR_CONFIG); + return { ...baseConfig, ...overrides }; +}; From 83737958046ab48e39fc6e3b7518fe96208bb478 Mon Sep 17 00:00:00 2001 From: MMMarcinho <3180103523@zju.edu.cn> Date: Thu, 8 May 2025 23:15:00 +0800 Subject: [PATCH 17/20] feat: change style --- client/src/components/ToolsTab.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/components/ToolsTab.tsx b/client/src/components/ToolsTab.tsx index d9ff22a..aa67bfc 100644 --- a/client/src/components/ToolsTab.tsx +++ b/client/src/components/ToolsTab.tsx @@ -133,12 +133,12 @@ const ToolsTab = ({ }} setSelectedItem={setSelectedTool} renderItem={(tool) => ( - <> +
{tool.name} - + {tool.description} - +
)} title="Tools" buttonText={nextCursor ? "List More Tools" : "List Tools"} From 7083c7c9f25a051e8a37e59fc44005d0eb005c92 Mon Sep 17 00:00:00 2001 From: Ola Hungerford Date: Thu, 8 May 2025 13:30:52 -0700 Subject: [PATCH 18/20] Update package-lock.json --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 1cb173a..cd5837c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2059,7 +2059,7 @@ } }, "node_modules/@pkgjs/parseargs": { - "version": "0.12.0", + "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.12.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "license": "MIT", From 2731b5f7fa67664542636a1efc97dee34b3b17d8 Mon Sep 17 00:00:00 2001 From: Ola Hungerford Date: Thu, 8 May 2025 13:31:20 -0700 Subject: [PATCH 19/20] Update package-lock.json --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index cd5837c..eb373c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2060,7 +2060,7 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.12.0.tgz", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "license": "MIT", "optional": true, From eb3737d110b8b05c31a2cba62c2e58230cae7ad4 Mon Sep 17 00:00:00 2001 From: KAWAKAMI Moeki Date: Fri, 9 May 2025 10:57:24 +0900 Subject: [PATCH 20/20] Fix format --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index eb78683..56108ee 100644 --- a/README.md +++ b/README.md @@ -54,13 +54,13 @@ The MCP Inspector includes a proxy server that can run and communicate with loca The MCP Inspector supports the following configuration settings. To change them, click on the `Configuration` button in the MCP Inspector UI: -| Setting | Description | Default | -| --------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------- | -| `MCP_SERVER_REQUEST_TIMEOUT` | Timeout for requests to the MCP server (ms) | 10000 | -| `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. Only as environment var, not configurable in browser.| true | +| Setting | Description | Default | +| --------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------- | +| `MCP_SERVER_REQUEST_TIMEOUT` | Timeout for requests to the MCP server (ms) | 10000 | +| `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. Only as environment var, not configurable in browser. | true | These settings can be adjusted in real-time through the UI and will persist across sessions.