import React from 'react'; import { Wrench, Search, Loader2 } from 'lucide-react'; import { Input } from '@/components/ui/input'; import { Badge } from '@/components/ui/badge'; import { Skeleton } from '@/components/ui/skeleton'; import { cn } from '@/lib/utils'; import type { McpServer, McpTool } from '@/components/hooks/useServers'; interface ToolsListProps { tools: McpTool[]; selectedTool: McpTool | null; selectedServer: McpServer | null; isLoading: boolean; error: string | null; searchQuery: string; onSearchChange: (query: string) => void; onToolSelect: (tool: McpTool) => void; } export function ToolsList({ tools, selectedTool, selectedServer, isLoading, error, searchQuery, onSearchChange, onToolSelect, }: ToolsListProps) { const filteredTools = tools.filter( (tool) => tool.name.toLowerCase().includes(searchQuery.toLowerCase()) || tool.description?.toLowerCase().includes(searchQuery.toLowerCase()) ); return (
{/* Header */}

Tools

{isLoading && tools.length === 0 && ( )} {tools.length > 0 && ( {filteredTools.length} )}
{tools.length > 0 && (
onSearchChange(e.target.value)} className="h-8 text-sm pl-7" />
)}
{/* No Server Selected */} {!selectedServer && (

Select a server

Choose a connected server to view its tools

)} {/* Server Not Connected */} {selectedServer && selectedServer.status !== 'connected' && (

Server not connected

"{selectedServer.name}" is {selectedServer.status}

)} {/* Error State */} {error && selectedServer?.status === 'connected' && !isLoading && (

Error loading tools

{error}

)} {/* Loading State */} {isLoading && selectedServer?.status === 'connected' && tools.length === 0 && (
{[1, 2, 3, 4].map((i) => (
))}
)} {/* Empty State */} {selectedServer && selectedServer.status === 'connected' && !isLoading && tools.length === 0 && !error && (

No tools available

No tools found for {selectedServer.name}

)} {/* Tools List */} {filteredTools.length > 0 && (
{filteredTools.map((tool) => ( ))}
)} {/* No Search Results */} {filteredTools.length === 0 && tools.length > 0 && (

No tools match your search

Try a different search term

)}
); }