diff --git a/cli/package.json b/cli/package.json
index f12600d2..bf344733 100644
--- a/cli/package.json
+++ b/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/inspector-cli",
- "version": "0.16.1",
+ "version": "0.16.2",
"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.13.1",
+ "@modelcontextprotocol/sdk": "^1.17.0",
"commander": "^13.1.0",
"spawn-rx": "^5.1.2"
}
diff --git a/client/e2e/startup-state.spec.ts b/client/e2e/startup-state.spec.ts
new file mode 100644
index 00000000..414ebd3e
--- /dev/null
+++ b/client/e2e/startup-state.spec.ts
@@ -0,0 +1,16 @@
+import { test, expect } from "@playwright/test";
+
+// Adjust the URL if your dev server runs on a different port
+const APP_URL = "http://localhost:6274/";
+
+test.describe("Startup State", () => {
+ test("should not navigate to a tab when Inspector first opens", async ({
+ page,
+ }) => {
+ await page.goto(APP_URL);
+
+ // Check that there is no hash fragment in the URL
+ const url = page.url();
+ expect(url).not.toContain("#");
+ });
+});
diff --git a/client/jest.config.cjs b/client/jest.config.cjs
index 8652eda5..9b793eae 100644
--- a/client/jest.config.cjs
+++ b/client/jest.config.cjs
@@ -32,4 +32,5 @@ module.exports = {
"/e2e/",
"\\.config\\.(js|ts|cjs|mjs)$",
],
+ randomize: true,
};
diff --git a/client/package.json b/client/package.json
index 60040866..2e725a60 100644
--- a/client/package.json
+++ b/client/package.json
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/inspector-client",
- "version": "0.16.1",
+ "version": "0.16.2",
"description": "Client-side application for the Model Context Protocol inspector",
"license": "MIT",
"author": "Anthropic, PBC (https://anthropic.com)",
@@ -25,7 +25,7 @@
"cleanup:e2e": "node e2e/global-teardown.js"
},
"dependencies": {
- "@modelcontextprotocol/sdk": "^1.14.0",
+ "@modelcontextprotocol/sdk": "^1.17.0",
"@radix-ui/react-checkbox": "^1.1.4",
"@radix-ui/react-dialog": "^1.1.3",
"@radix-ui/react-icons": "^1.3.0",
diff --git a/client/src/App.tsx b/client/src/App.tsx
index c4c89564..3836aa9b 100644
--- a/client/src/App.tsx
+++ b/client/src/App.tsx
@@ -465,10 +465,24 @@ const App = () => {
}, [roots]);
useEffect(() => {
- if (!window.location.hash) {
- window.location.hash = "resources";
+ if (mcpClient && !window.location.hash) {
+ const defaultTab = serverCapabilities?.resources
+ ? "resources"
+ : serverCapabilities?.prompts
+ ? "prompts"
+ : serverCapabilities?.tools
+ ? "tools"
+ : "ping";
+ window.location.hash = defaultTab;
+ } else if (!mcpClient && window.location.hash) {
+ // Clear hash when disconnected - completely remove the fragment
+ window.history.replaceState(
+ null,
+ "",
+ window.location.pathname + window.location.search,
+ );
}
- }, []);
+ }, [mcpClient, serverCapabilities]);
useEffect(() => {
const handleHashChange = () => {
diff --git a/client/src/__tests__/App.routing.test.tsx b/client/src/__tests__/App.routing.test.tsx
new file mode 100644
index 00000000..dbd463f9
--- /dev/null
+++ b/client/src/__tests__/App.routing.test.tsx
@@ -0,0 +1,159 @@
+import { render, waitFor } from "@testing-library/react";
+import App from "../App";
+import { useConnection } from "../lib/hooks/useConnection";
+import { Client } from "@modelcontextprotocol/sdk/client/index.js";
+
+// Mock auth dependencies first
+jest.mock("@modelcontextprotocol/sdk/client/auth.js", () => ({
+ auth: jest.fn(),
+}));
+
+jest.mock("../lib/oauth-state-machine", () => ({
+ OAuthStateMachine: jest.fn(),
+}));
+
+jest.mock("../lib/auth", () => ({
+ InspectorOAuthClientProvider: jest.fn().mockImplementation(() => ({
+ tokens: jest.fn().mockResolvedValue(null),
+ clear: jest.fn(),
+ })),
+ DebugInspectorOAuthClientProvider: jest.fn(),
+}));
+
+// Mock the config utils
+jest.mock("../utils/configUtils", () => ({
+ ...jest.requireActual("../utils/configUtils"),
+ getMCPProxyAddress: jest.fn(() => "http://localhost:6277"),
+ getMCPProxyAuthToken: jest.fn(() => ({
+ token: "",
+ header: "X-MCP-Proxy-Auth",
+ })),
+ getInitialTransportType: jest.fn(() => "stdio"),
+ getInitialSseUrl: jest.fn(() => "http://localhost:3001/sse"),
+ getInitialCommand: jest.fn(() => "mcp-server-everything"),
+ getInitialArgs: jest.fn(() => ""),
+ initializeInspectorConfig: jest.fn(() => ({})),
+ saveInspectorConfig: jest.fn(),
+}));
+
+// Default connection state is disconnected
+const disconnectedConnectionState = {
+ connectionStatus: "disconnected" as const,
+ serverCapabilities: null,
+ mcpClient: null,
+ requestHistory: [],
+ makeRequest: jest.fn(),
+ sendNotification: jest.fn(),
+ handleCompletion: jest.fn(),
+ completionsSupported: false,
+ connect: jest.fn(),
+ disconnect: jest.fn(),
+};
+
+// Connected state for tests that need an active connection
+const connectedConnectionState = {
+ ...disconnectedConnectionState,
+ connectionStatus: "connected" as const,
+ serverCapabilities: {},
+ mcpClient: {
+ request: jest.fn(),
+ notification: jest.fn(),
+ close: jest.fn(),
+ } as unknown as Client,
+};
+
+// Mock required dependencies, but unrelated to routing.
+jest.mock("../lib/hooks/useDraggablePane", () => ({
+ useDraggablePane: () => ({
+ height: 300,
+ handleDragStart: jest.fn(),
+ }),
+ useDraggableSidebar: () => ({
+ width: 320,
+ isDragging: false,
+ handleDragStart: jest.fn(),
+ }),
+}));
+
+jest.mock("../components/Sidebar", () => ({
+ __esModule: true,
+ default: () =>
Sidebar
,
+}));
+
+// Mock fetch
+global.fetch = jest.fn().mockResolvedValue({ json: () => Promise.resolve({}) });
+
+// Use an empty module mock, so that mock state can be reset between tests.
+jest.mock("../lib/hooks/useConnection", () => ({
+ useConnection: jest.fn(),
+}));
+
+describe("App - URL Fragment Routing", () => {
+ const mockUseConnection = jest.mocked(useConnection);
+
+ beforeEach(() => {
+ jest.restoreAllMocks();
+
+ // Inspector starts disconnected.
+ mockUseConnection.mockReturnValue(disconnectedConnectionState);
+ });
+
+ test("does not set hash when starting disconnected", async () => {
+ render();
+
+ await waitFor(() => {
+ expect(window.location.hash).toBe("");
+ });
+ });
+
+ test("sets default hash based on server capabilities priority", async () => {
+ // Tab priority follows UI order: Resources | Prompts | Tools | Ping | Sampling | Roots | Auth
+ //
+ // Server capabilities determine the first three tabs; if none are present, falls back to Ping.
+
+ const testCases = [
+ {
+ capabilities: { resources: { listChanged: true, subscribe: true } },
+ expected: "#resources",
+ },
+ {
+ capabilities: { prompts: { listChanged: true, subscribe: true } },
+ expected: "#prompts",
+ },
+ {
+ capabilities: { tools: { listChanged: true, subscribe: true } },
+ expected: "#tools",
+ },
+ { capabilities: {}, expected: "#ping" },
+ ];
+
+ const { rerender } = render();
+
+ for (const { capabilities, expected } of testCases) {
+ window.location.hash = "";
+ mockUseConnection.mockReturnValue({
+ ...connectedConnectionState,
+ serverCapabilities: capabilities,
+ });
+
+ rerender();
+
+ await waitFor(() => {
+ expect(window.location.hash).toBe(expected);
+ });
+ }
+ });
+
+ test("clears hash when disconnected", async () => {
+ // Start with a hash set (simulating a connection)
+ window.location.hash = "#resources";
+
+ // App starts disconnected (default mock)
+ render();
+
+ // Should clear the hash when disconnected
+ await waitFor(() => {
+ expect(window.location.hash).toBe("");
+ });
+ });
+});
diff --git a/client/src/components/PromptsTab.tsx b/client/src/components/PromptsTab.tsx
index 466b3d52..fa590558 100644
--- a/client/src/components/PromptsTab.tsx
+++ b/client/src/components/PromptsTab.tsx
@@ -48,6 +48,7 @@ const PromptsTab = ({
ref: PromptReference | ResourceReference,
argName: string,
value: string,
+ context?: Record,
) => Promise;
completionsSupported: boolean;
promptContent: string;
@@ -73,6 +74,7 @@ const PromptsTab = ({
},
argName,
value,
+ promptArgs,
);
}
};
diff --git a/client/src/components/ResourcesTab.tsx b/client/src/components/ResourcesTab.tsx
index 8ec3f91b..874e0ff7 100644
--- a/client/src/components/ResourcesTab.tsx
+++ b/client/src/components/ResourcesTab.tsx
@@ -52,6 +52,7 @@ const ResourcesTab = ({
ref: ResourceReference | PromptReference,
argName: string,
value: string,
+ context?: Record,
) => Promise;
completionsSupported: boolean;
resourceContent: string;
@@ -94,6 +95,7 @@ const ResourcesTab = ({
},
key,
value,
+ templateValues,
);
}
};
diff --git a/client/src/lib/hooks/useCompletionState.ts b/client/src/lib/hooks/useCompletionState.ts
index 71492e31..26b69a27 100644
--- a/client/src/lib/hooks/useCompletionState.ts
+++ b/client/src/lib/hooks/useCompletionState.ts
@@ -28,6 +28,7 @@ export function useCompletionState(
ref: ResourceReference | PromptReference,
argName: string,
value: string,
+ context?: Record,
signal?: AbortSignal,
) => Promise,
completionsSupported: boolean = true,
@@ -66,6 +67,7 @@ export function useCompletionState(
ref: ResourceReference | PromptReference,
argName: string,
value: string,
+ context?: Record,
) => {
if (!completionsSupported) {
return;
@@ -82,10 +84,15 @@ export function useCompletionState(
}));
try {
+ if (context !== undefined) {
+ delete context[argName];
+ }
+
const values = await handleCompletion(
ref,
argName,
value,
+ context,
abortController.signal,
);
@@ -97,6 +104,7 @@ export function useCompletionState(
}));
}
} catch {
+ console.error("completion failed");
if (!abortController.signal.aborted) {
setState((prev) => ({
...prev,
diff --git a/client/src/lib/hooks/useConnection.ts b/client/src/lib/hooks/useConnection.ts
index 849eb909..edc21d92 100644
--- a/client/src/lib/hooks/useConnection.ts
+++ b/client/src/lib/hooks/useConnection.ts
@@ -198,6 +198,7 @@ export function useConnection({
ref: ResourceReference | PromptReference,
argName: string,
value: string,
+ context?: Record,
signal?: AbortSignal,
): Promise => {
if (!mcpClient || !completionsSupported) {
@@ -215,6 +216,12 @@ export function useConnection({
},
};
+ if (context) {
+ request["params"]["context"] = {
+ arguments: context,
+ };
+ }
+
try {
const response = await makeRequest(request, CompleteResultSchema, {
signal,
diff --git a/package-lock.json b/package-lock.json
index 616e9649..53313497 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@modelcontextprotocol/inspector",
- "version": "0.16.1",
+ "version": "0.16.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@modelcontextprotocol/inspector",
- "version": "0.16.1",
+ "version": "0.16.2",
"license": "MIT",
"workspaces": [
"client",
@@ -14,10 +14,10 @@
"cli"
],
"dependencies": {
- "@modelcontextprotocol/inspector-cli": "^0.16.1",
- "@modelcontextprotocol/inspector-client": "^0.16.1",
- "@modelcontextprotocol/inspector-server": "^0.16.1",
- "@modelcontextprotocol/sdk": "^1.14.0",
+ "@modelcontextprotocol/inspector-cli": "^0.16.2",
+ "@modelcontextprotocol/inspector-client": "^0.16.2",
+ "@modelcontextprotocol/inspector-server": "^0.16.2",
+ "@modelcontextprotocol/sdk": "^1.17.0",
"concurrently": "^9.0.1",
"open": "^10.1.0",
"shell-quote": "^1.8.2",
@@ -44,10 +44,10 @@
},
"cli": {
"name": "@modelcontextprotocol/inspector-cli",
- "version": "0.16.1",
+ "version": "0.16.2",
"license": "MIT",
"dependencies": {
- "@modelcontextprotocol/sdk": "^1.13.1",
+ "@modelcontextprotocol/sdk": "^1.17.0",
"commander": "^13.1.0",
"spawn-rx": "^5.1.2"
},
@@ -67,10 +67,10 @@
},
"client": {
"name": "@modelcontextprotocol/inspector-client",
- "version": "0.16.1",
+ "version": "0.16.2",
"license": "MIT",
"dependencies": {
- "@modelcontextprotocol/sdk": "^1.14.0",
+ "@modelcontextprotocol/sdk": "^1.17.0",
"@radix-ui/react-checkbox": "^1.1.4",
"@radix-ui/react-dialog": "^1.1.3",
"@radix-ui/react-icons": "^1.3.0",
@@ -1196,9 +1196,9 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.20.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
- "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
+ "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -1211,9 +1211,9 @@
}
},
"node_modules/@eslint/config-helpers": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
- "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
+ "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -1221,9 +1221,9 @@
}
},
"node_modules/@eslint/core": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz",
- "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==",
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
+ "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -1271,13 +1271,16 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.25.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz",
- "integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==",
+ "version": "9.32.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz",
+ "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
}
},
"node_modules/@eslint/object-schema": {
@@ -1291,13 +1294,13 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz",
- "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==",
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
+ "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.13.0",
+ "@eslint/core": "^0.15.1",
"levn": "^0.4.1"
},
"engines": {
@@ -2009,9 +2012,9 @@
"link": true
},
"node_modules/@modelcontextprotocol/sdk": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.15.0.tgz",
- "integrity": "sha512-67hnl/ROKdb03Vuu0YOr+baKTvf1/5YBHBm9KnZdjdAh8hjt4FRCPD5ucwxGB237sBpzlqQsLy1PFu7z/ekZ9Q==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.0.tgz",
+ "integrity": "sha512-qFfbWFA7r1Sd8D697L7GkTd36yqDuTkvz0KfOGkgXR8EUhQn3/EDNIR/qUdQNMT8IjmasBvHWuXeisxtXTQT2g==",
"license": "MIT",
"dependencies": {
"ajv": "^6.12.6",
@@ -3819,9 +3822,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3941,9 +3944,9 @@
}
},
"node_modules/acorn": {
- "version": "8.14.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -4315,9 +4318,9 @@
}
},
"node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@@ -5343,20 +5346,20 @@
}
},
"node_modules/eslint": {
- "version": "9.25.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz",
- "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==",
+ "version": "9.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz",
+ "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.20.0",
- "@eslint/config-helpers": "^0.2.1",
- "@eslint/core": "^0.13.0",
+ "@eslint/config-array": "^0.21.0",
+ "@eslint/config-helpers": "^0.3.0",
+ "@eslint/core": "^0.15.0",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.25.1",
- "@eslint/plugin-kit": "^0.2.8",
+ "@eslint/js": "9.32.0",
+ "@eslint/plugin-kit": "^0.3.4",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
@@ -5367,9 +5370,9 @@
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.3.0",
- "eslint-visitor-keys": "^4.2.0",
- "espree": "^10.3.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
"esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -5427,9 +5430,9 @@
}
},
"node_modules/eslint-scope": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
- "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -5444,9 +5447,9 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -5457,15 +5460,15 @@
}
},
"node_modules/espree": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
- "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.14.0",
+ "acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.0"
+ "eslint-visitor-keys": "^4.2.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5761,9 +5764,9 @@
}
},
"node_modules/filelist/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5879,15 +5882,16 @@
}
},
"node_modules/form-data": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
- "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
+ "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"dev": true,
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
"mime-types": "^2.1.12"
},
"engines": {
@@ -9205,9 +9209,9 @@
}
},
"node_modules/rimraf/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9876,9 +9880,9 @@
}
},
"node_modules/sucrase/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
@@ -10989,10 +10993,10 @@
},
"server": {
"name": "@modelcontextprotocol/inspector-server",
- "version": "0.16.1",
+ "version": "0.16.2",
"license": "MIT",
"dependencies": {
- "@modelcontextprotocol/sdk": "^1.13.1",
+ "@modelcontextprotocol/sdk": "^1.17.0",
"cors": "^2.8.5",
"express": "^5.1.0",
"ws": "^8.18.0",
diff --git a/package.json b/package.json
index f9461491..df2861c8 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/inspector",
- "version": "0.16.1",
+ "version": "0.16.2",
"description": "Model Context Protocol inspector",
"license": "MIT",
"author": "Anthropic, PBC (https://anthropic.com)",
@@ -47,10 +47,10 @@
"check-version": "node scripts/check-version-consistency.js"
},
"dependencies": {
- "@modelcontextprotocol/inspector-cli": "^0.16.1",
- "@modelcontextprotocol/inspector-client": "^0.16.1",
- "@modelcontextprotocol/inspector-server": "^0.16.1",
- "@modelcontextprotocol/sdk": "^1.14.0",
+ "@modelcontextprotocol/inspector-cli": "^0.16.2",
+ "@modelcontextprotocol/inspector-client": "^0.16.2",
+ "@modelcontextprotocol/inspector-server": "^0.16.2",
+ "@modelcontextprotocol/sdk": "^1.17.0",
"concurrently": "^9.0.1",
"open": "^10.1.0",
"shell-quote": "^1.8.2",
diff --git a/server/package.json b/server/package.json
index 10574070..040fe71f 100644
--- a/server/package.json
+++ b/server/package.json
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/inspector-server",
- "version": "0.16.1",
+ "version": "0.16.2",
"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.13.1",
+ "@modelcontextprotocol/sdk": "^1.17.0",
"cors": "^2.8.5",
"express": "^5.1.0",
"ws": "^8.18.0",