diff --git a/client/src/App.tsx b/client/src/App.tsx index e90090f..18b5dde 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -28,15 +28,6 @@ if (window.matchMedia("(prefers-color-scheme: dark)").matches) { document.documentElement.classList.add("dark"); } -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Bell, @@ -44,12 +35,9 @@ import { Hammer, Hash, MessageSquare, - Play, Send, Terminal, FolderTree, - ChevronDown, - ChevronRight, } from "lucide-react"; import { ZodType } from "zod"; @@ -95,7 +83,6 @@ const App = () => { const [notifications, setNotifications] = useState([]); const [roots, setRoots] = useState([]); const [env, setEnv] = useState>({}); - const [showEnvVars, setShowEnvVars] = useState(false); const [pendingSampleRequests, setPendingSampleRequests] = useState< Array< @@ -353,114 +340,24 @@ const App = () => { return (
- +

MCP Inspector

-
-

Connect MCP Server

-
- - {transportType === "stdio" ? ( - <> - setCommand(e.target.value)} - /> - setArgs(e.target.value)} - /> - - ) : ( - setUrl(e.target.value)} - /> - )} - -
- {transportType === "stdio" && ( -
- - {showEnvVars && ( -
- {Object.entries(env).map(([key, value]) => ( -
- - setEnv((prev) => ({ - ...prev, - [e.target.value]: value, - })) - } - /> - - setEnv((prev) => ({ - ...prev, - [key]: e.target.value, - })) - } - /> - -
- ))} - -
- )} -
- )} -
{mcpClient ? ( diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index e6e31a4..544a4de 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -1,39 +1,196 @@ -import { Menu, Settings } from "lucide-react"; +import { useState } from "react"; + +import { Play, ChevronDown, ChevronRight, Settings } from "lucide-react"; import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; -const Sidebar = ({ connectionStatus }: { connectionStatus: string }) => ( -
-
- -

MCP Inspector

-
+interface SidebarProps { + connectionStatus: "disconnected" | "connected" | "error"; + transportType: "stdio" | "sse"; + setTransportType: (type: "stdio" | "sse") => void; + command: string; + setCommand: (command: string) => void; + args: string; + setArgs: (args: string) => void; + url: string; + setUrl: (url: string) => void; + env: Record; + setEnv: (env: Record) => void; + onConnect: () => void; +} -
-
-
- - {connectionStatus === "connected" - ? "Connected" - : connectionStatus === "error" - ? "Connection Error" - : "Disconnected"} - +const Sidebar = ({ + connectionStatus, + transportType, + setTransportType, + command, + setCommand, + args, + setArgs, + url, + setUrl, + env, + setEnv, + onConnect, +}: SidebarProps) => { + const [showEnvVars, setShowEnvVars] = useState(false); + + return ( +
+
+ +

MCP Inspector

- +
+
+
+ + +
+ {transportType === "stdio" ? ( + <> +
+ + setCommand(e.target.value)} + /> +
+
+ + setArgs(e.target.value)} + /> +
+ + ) : ( +
+ + setUrl(e.target.value)} + /> +
+ )} + {transportType === "stdio" && ( +
+ + {showEnvVars && ( +
+ {Object.entries(env).map(([key, value]) => ( +
+
+ { + const newEnv = { ...env }; + newEnv[e.target.value] = value; + setEnv(newEnv); + }} + /> + { + const newEnv = { ...env }; + newEnv[key] = e.target.value; + setEnv(newEnv); + }} + /> +
+ +
+ ))} + +
+ )} +
+ )} + +
+ + +
+
+ + {connectionStatus === "connected" + ? "Connected" + : connectionStatus === "error" + ? "Connection Error" + : "Disconnected"} + +
+
+
+
-
-); + ); +}; export default Sidebar;