Skip to content

Commit b1110c4

Browse files
KavyapriyaJGKavyapriya-1804
authored andcommitted
Merge branch 'main' into feat-cli-server-request-configs
2 parents b38b6fa + 24e8861 commit b1110c4

File tree

7 files changed

+2727
-441
lines changed

7 files changed

+2727
-441
lines changed

cli/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@modelcontextprotocol/inspector-cli",
3-
"version": "0.11.0",
3+
"version": "0.12.0",
44
"description": "CLI for the Model Context Protocol inspector",
55
"license": "MIT",
66
"author": "Anthropic, PBC (https://anthropic.com)",
@@ -21,7 +21,7 @@
2121
},
2222
"devDependencies": {},
2323
"dependencies": {
24-
"@modelcontextprotocol/sdk": "^1.10.2",
24+
"@modelcontextprotocol/sdk": "^1.11.0",
2525
"commander": "^13.1.0",
2626
"spawn-rx": "^5.1.2"
2727
}

client/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@modelcontextprotocol/inspector-client",
3-
"version": "0.11.0",
3+
"version": "0.12.0",
44
"description": "Client-side application for the Model Context Protocol inspector",
55
"license": "MIT",
66
"author": "Anthropic, PBC (https://anthropic.com)",
@@ -23,7 +23,7 @@
2323
"test:watch": "jest --config jest.config.cjs --watch"
2424
},
2525
"dependencies": {
26-
"@modelcontextprotocol/sdk": "^1.10.2",
26+
"@modelcontextprotocol/sdk": "^1.11.0",
2727
"@radix-ui/react-checkbox": "^1.1.4",
2828
"@radix-ui/react-dialog": "^1.1.3",
2929
"@radix-ui/react-icons": "^1.3.0",

client/src/App.tsx

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -575,11 +575,24 @@ const App = () => {
575575
{!serverCapabilities?.resources &&
576576
!serverCapabilities?.prompts &&
577577
!serverCapabilities?.tools ? (
578-
<div className="flex items-center justify-center p-4">
579-
<p className="text-lg text-gray-500">
580-
The connected server does not support any MCP capabilities
581-
</p>
582-
</div>
578+
<>
579+
<div className="flex items-center justify-center p-4">
580+
<p className="text-lg text-gray-500">
581+
The connected server does not support any MCP
582+
capabilities
583+
</p>
584+
</div>
585+
<PingTab
586+
onPingClick={() => {
587+
void sendMCPRequest(
588+
{
589+
method: "ping" as const,
590+
},
591+
EmptyResultSchema,
592+
);
593+
}}
594+
/>
595+
</>
583596
) : (
584597
<>
585598
<ResourcesTab

client/src/lib/hooks/useConnection.ts

Lines changed: 77 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
22
import {
33
SSEClientTransport,
44
SseError,
5+
SSEClientTransportOptions,
56
} from "@modelcontextprotocol/sdk/client/sse.js";
6-
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
7+
import {
8+
StreamableHTTPClientTransport,
9+
StreamableHTTPClientTransportOptions,
10+
} from "@modelcontextprotocol/sdk/client/streamableHttp.js";
711
import {
812
ClientNotification,
913
ClientRequest,
@@ -279,29 +283,6 @@ export function useConnection({
279283
setConnectionStatus("error-connecting-to-proxy");
280284
return;
281285
}
282-
let mcpProxyServerUrl;
283-
switch (transportType) {
284-
case "stdio":
285-
mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/stdio`);
286-
mcpProxyServerUrl.searchParams.append("command", command);
287-
mcpProxyServerUrl.searchParams.append("args", args);
288-
mcpProxyServerUrl.searchParams.append("env", JSON.stringify(env));
289-
break;
290-
291-
case "sse":
292-
mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/sse`);
293-
mcpProxyServerUrl.searchParams.append("url", sseUrl);
294-
break;
295-
296-
case "streamable-http":
297-
mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/mcp`);
298-
mcpProxyServerUrl.searchParams.append("url", sseUrl);
299-
break;
300-
}
301-
(mcpProxyServerUrl as URL).searchParams.append(
302-
"transportType",
303-
transportType,
304-
);
305286

306287
try {
307288
// Inject auth manually instead of using SSEClientTransport, because we're
@@ -320,21 +301,82 @@ export function useConnection({
320301
}
321302

322303
// Create appropriate transport
323-
const transportOptions = {
324-
eventSourceInit: {
325-
fetch: (
326-
url: string | URL | globalThis.Request,
327-
init: RequestInit | undefined,
328-
) => fetch(url, { ...init, headers }),
329-
},
330-
requestInit: {
331-
headers,
332-
},
333-
};
304+
let transportOptions:
305+
| StreamableHTTPClientTransportOptions
306+
| SSEClientTransportOptions;
307+
308+
let mcpProxyServerUrl;
309+
switch (transportType) {
310+
case "stdio":
311+
mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/stdio`);
312+
mcpProxyServerUrl.searchParams.append("command", command);
313+
mcpProxyServerUrl.searchParams.append("args", args);
314+
mcpProxyServerUrl.searchParams.append("env", JSON.stringify(env));
315+
transportOptions = {
316+
authProvider: serverAuthProvider,
317+
eventSourceInit: {
318+
fetch: (
319+
url: string | URL | globalThis.Request,
320+
init: RequestInit | undefined,
321+
) => fetch(url, { ...init, headers }),
322+
},
323+
requestInit: {
324+
headers,
325+
},
326+
};
327+
break;
328+
329+
case "sse":
330+
mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/sse`);
331+
mcpProxyServerUrl.searchParams.append("url", sseUrl);
332+
transportOptions = {
333+
authProvider: serverAuthProvider,
334+
eventSourceInit: {
335+
fetch: (
336+
url: string | URL | globalThis.Request,
337+
init: RequestInit | undefined,
338+
) => fetch(url, { ...init, headers }),
339+
},
340+
requestInit: {
341+
headers,
342+
},
343+
};
344+
break;
345+
346+
case "streamable-http":
347+
mcpProxyServerUrl = new URL(`${getMCPProxyAddress(config)}/mcp`);
348+
mcpProxyServerUrl.searchParams.append("url", sseUrl);
349+
transportOptions = {
350+
authProvider: serverAuthProvider,
351+
eventSourceInit: {
352+
fetch: (
353+
url: string | URL | globalThis.Request,
354+
init: RequestInit | undefined,
355+
) => fetch(url, { ...init, headers }),
356+
},
357+
requestInit: {
358+
headers,
359+
},
360+
// TODO these should be configurable...
361+
reconnectionOptions: {
362+
maxReconnectionDelay: 30000,
363+
initialReconnectionDelay: 1000,
364+
reconnectionDelayGrowFactor: 1.5,
365+
maxRetries: 2,
366+
},
367+
};
368+
break;
369+
}
370+
(mcpProxyServerUrl as URL).searchParams.append(
371+
"transportType",
372+
transportType,
373+
);
374+
334375
const clientTransport =
335376
transportType === "streamable-http"
336377
? new StreamableHTTPClientTransport(mcpProxyServerUrl as URL, {
337378
sessionId: undefined,
379+
...transportOptions,
338380
})
339381
: new SSEClientTransport(mcpProxyServerUrl as URL, transportOptions);
340382

0 commit comments

Comments
 (0)