import type { MCPServer } from '~/lib/services/mcpService'; import McpStatusBadge from '~/components/@settings/tabs/mcp/McpStatusBadge'; import McpServerListItem from '~/components/@settings/tabs/mcp/McpServerListItem'; type McpServerListProps = { serverEntries: [string, MCPServer][]; expandedServer: string | null; checkingServers: boolean; onlyShowAvailableServers?: boolean; toggleServerExpanded: (serverName: string) => void; }; export default function McpServerList({ serverEntries, expandedServer, checkingServers, onlyShowAvailableServers = false, toggleServerExpanded, }: McpServerListProps) { if (serverEntries.length === 0) { return

No MCP servers configured

; } const filteredEntries = onlyShowAvailableServers ? serverEntries.filter(([, s]) => s.status === 'available') : serverEntries; return (
{filteredEntries.map(([serverName, mcpServer]) => { const isAvailable = mcpServer.status === 'available'; const isExpanded = expandedServer === serverName; const serverTools = isAvailable ? Object.entries(mcpServer.tools) : []; return (
toggleServerExpanded(serverName)} className="flex items-center gap-1.5 text-bolt-elements-textPrimary" aria-expanded={isExpanded} >
{serverName}
{mcpServer.config.type === 'sse' || mcpServer.config.type === 'streamable-http' ? ( {mcpServer.config.url} ) : ( {mcpServer.config.command} {mcpServer.config.args?.join(' ')} )}
{checkingServers ? ( ) : ( )}
{/* Error message */} {!isAvailable && mcpServer.error && (
Error: {mcpServer.error}
)} {/* Tool list */} {isExpanded && isAvailable && (
Available Tools:
{serverTools.length === 0 ? (
No tools available
) : (
{serverTools.map(([toolName, toolSchema]) => ( ))}
)}
)}
); })}
); }