import { useState, useEffect } from "react"; import { Send, Bell, Terminal, Files, MessageSquare, Hammer, Play, } from "lucide-react"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import ConsoleTab from "./components/ConsoleTab"; import Sidebar from "./components/Sidebar"; import RequestsTab from "./components/RequestsTabs"; import ResourcesTab, { Resource } from "./components/ResourcesTab"; import NotificationsTab from "./components/NotificationsTab"; import PromptsTab, { Prompt } from "./components/PromptsTab"; import ToolsTab, { Tool as ToolType } from "./components/ToolsTab"; import History from "./components/CommandHistory"; const App = () => { const [socket, setSocket] = useState(null); const [connectionStatus, setConnectionStatus] = useState< "disconnected" | "connected" | "error" >("disconnected"); const [resources, setResources] = useState([]); const [resourceContent, setResourceContent] = useState(""); const [prompts, setPrompts] = useState([]); const [promptContent, setPromptContent] = useState(""); const [tools, setTools] = useState([]); const [toolResult, setToolResult] = useState(""); const [error, setError] = useState(null); const [command, setCommand] = useState( "/Users/ashwin/.nvm/versions/node/v18.20.4/bin/node", ); const [args, setArgs] = useState( "/Users/ashwin/code/example-servers/build/everything/index.js", ); const [mcpConnected, setMcpConnected] = useState(false); const [requestHistory, setRequestHistory] = useState< Array<{ request: string; response: string | null }> >([]); useEffect(() => { const ws = new WebSocket("ws://localhost:3000"); ws.onopen = () => { console.log("Connected to WebSocket server"); setConnectionStatus("connected"); setSocket(ws); }; ws.onmessage = (event) => { const message = JSON.parse(event.data); console.log("Received message:", message); if (message.type === "resources") { setResources(message.data.resources); setError(null); } else if (message.type === "resource") { setResourceContent(JSON.stringify(message.data, null, 2)); setError(null); } else if (message.type === "prompts") { setPrompts(message.data.prompts); setError(null); } else if (message.type === "prompt") { setPromptContent(JSON.stringify(message.data, null, 2)); setError(null); } else if (message.type === "tools") { setTools(message.data.tools); setError(null); } else if (message.type === "toolResult") { setToolResult(JSON.stringify(message.data, null, 2)); setError(null); } else if (message.type === "error") { setError(message.message); } else if (message.type === "connected") { setMcpConnected(true); } updateRequestHistory(message); }; ws.onerror = () => { setConnectionStatus("error"); }; ws.onclose = () => { setConnectionStatus("disconnected"); setMcpConnected(false); }; return () => ws.close(); }, []); const updateRequestHistory = (response: unknown) => { setRequestHistory((prev) => { const lastRequest = prev[prev.length - 1]; if (lastRequest && lastRequest.response === null) { const updatedHistory = [...prev]; updatedHistory[updatedHistory.length - 1] = { ...lastRequest, response: JSON.stringify(response), }; return updatedHistory; } return prev; }); }; const sendWebSocketMessage = (message: object) => { if (socket) { console.log("Sending WebSocket message:", message); socket.send(JSON.stringify(message)); setRequestHistory((prev) => [ ...prev, { request: JSON.stringify(message), response: null }, ]); } }; const [selectedResource, setSelectedResource] = useState( null, ); const [selectedPrompt, setSelectedPrompt] = useState(null); const [selectedTool, setSelectedTool] = useState(null); const listResources = () => { sendWebSocketMessage({ type: "listResources" }); }; const readResource = (uri: string) => { sendWebSocketMessage({ type: "readResource", uri }); }; const listPrompts = () => { sendWebSocketMessage({ type: "listPrompts" }); }; const getPrompt = (name: string, args: Record = {}) => { sendWebSocketMessage({ type: "getPrompt", name, args }); }; const listTools = () => { sendWebSocketMessage({ type: "listTools" }); }; const callTool = (name: string, params: Record) => { sendWebSocketMessage({ type: "callTool", name, params }); }; const connectMcpServer = () => { const argsArray = args.split(" ").filter((arg) => arg.trim() !== ""); sendWebSocketMessage({ type: "connect", command, args: argsArray }); }; return (

MCP Inspector

Connect MCP Server

setCommand(e.target.value)} /> setArgs(e.target.value)} />
{mcpConnected ? ( Resources Prompts Requests Notifications Tools Console
{ setSelectedTool(tool); setToolResult(""); }} toolResult={toolResult} error={error} />
) : (

Connect to an MCP server to start inspecting

)}
); }; export default App;