UNPKG

@mcp-shark/mcp-shark

Version:

Aggregate multiple Model Context Protocol (MCP) servers into a single unified interface with a powerful monitoring UI. Prov deep visibility into every request and response.

74 lines (72 loc) 2.27 kB
import { colors } from '../../../theme'; export default function ToolItem({ tool, isSelected, onClick }) { return ( <div onClick={onClick} style={{ padding: '16px 20px', margin: '4px 8px', borderRadius: '8px', cursor: 'pointer', background: isSelected ? colors.bgSelected : colors.bgCard, border: isSelected ? `2px solid ${colors.accentBlue}` : `1px solid ${colors.borderLight}`, boxShadow: isSelected ? `0 2px 4px ${colors.shadowSm}` : 'none', transition: 'all 0.2s ease', position: 'relative', }} onMouseEnter={(e) => { if (!isSelected) { e.currentTarget.style.background = colors.bgHover; e.currentTarget.style.borderColor = colors.borderMedium; e.currentTarget.style.boxShadow = `0 2px 4px ${colors.shadowSm}`; } }} onMouseLeave={(e) => { if (!isSelected) { e.currentTarget.style.background = colors.bgCard; e.currentTarget.style.borderColor = colors.borderLight; e.currentTarget.style.boxShadow = 'none'; } }} > <div style={{ display: 'flex', alignItems: 'flex-start', gap: '12px' }}> <div style={{ width: '6px', height: '6px', borderRadius: '50%', background: isSelected ? colors.accentBlue : colors.textTertiary, marginTop: '6px', flexShrink: 0, transition: 'background 0.2s', }} /> <div style={{ flex: 1, minWidth: 0 }}> <div style={{ fontWeight: isSelected ? '600' : '500', fontSize: '14px', color: colors.textPrimary, marginBottom: tool.description ? '6px' : '0', lineHeight: '1.4', }} > {tool.name} </div> {tool.description && ( <div style={{ fontSize: '12px', color: colors.textSecondary, lineHeight: '1.5', marginTop: '4px', }} > {tool.description} </div> )} </div> </div> </div> ); }