"use client"; import { Package, Star, Download, Eye, ExternalLink, CheckCircle, Zap } from "lucide-react"; import { MCPProvider } from "@/lib/types/mcp"; interface MCPCardProps { mcp: MCPProvider; onInstall: () => void; onUninstall: () => void; onViewDetails: () => void; } export function MCPCard({ mcp, onInstall, onUninstall, onViewDetails }: MCPCardProps) { const getCategoryColor = (category: string) => { switch (category) { case "map": return "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"; case "browser": return "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200"; case "office": return "bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200"; case "search": return "bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200"; case "database": return "bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-200"; case "finance": return "bg-emerald-100 text-emerald-800 dark:bg-emerald-900 dark:text-emerald-200"; case "code": return "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"; case "chart": return "bg-pink-100 text-pink-800 dark:bg-pink-900 dark:text-pink-200"; case "payment": return "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200"; default: return "bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200"; } }; const formatDownloads = (downloads: number) => { if (downloads >= 1000000) return `${(downloads / 1000000).toFixed(1)}M`; if (downloads >= 1000) return `${(downloads / 1000).toFixed(1)}K`; return downloads.toString(); }; const isOfficial = mcp.tags?.includes('official') || false; const toolCount = mcp.tools?.length || mcp.capabilities?.length || 0; return (
{/* Header */}
{mcp.iconUrl ? ( {mcp.name} { e.currentTarget.style.display = 'none'; e.currentTarget.nextElementSibling?.classList.remove('hidden'); }} /> ) : null}

{mcp.name}

{isOfficial && ( )}

by {mcp.author}

{mcp.category}
{/* Description */}

{mcp.description}

{/* Stats */}
{mcp.rating} ({mcp.totalRatings})
{formatDownloads(mcp.downloads)}
{toolCount > 0 && (
{toolCount} tools
)} v{mcp.version}
{/* Tags */}
{mcp.tags.slice(0, 3).map((tag) => ( {tag} ))} {mcp.tags.length > 3 && ( +{mcp.tags.length - 3} )}
{/* Actions */}
{mcp.installed ? ( ) : ( )}
{/* Links */} {(mcp.repository || mcp.homepage) && (
{mcp.repository && ( Repository )} {mcp.homepage && ( Homepage )}
)}
); }