MCPcopy Create free account
hub / github.com/ShipSecAI/studio / McpLibraryConfig

Function McpLibraryConfig

frontend/src/components/workflow/McpLibraryConfig.tsx:25–322  ·  view source on GitHub ↗
({ value, onChange, disabled = false }: McpLibraryConfigProps)

Source from the content-addressed store, hash-verified

23 * Fetches available servers from /api/v1/mcp-servers.
24 */
25export function McpLibraryConfig({ value, onChange, disabled = false }: McpLibraryConfigProps) {
26 const { servers, tools, isLoading, error, fetchServers, fetchAllTools } = useMcpServerStore();
27
28 // Filter out servers that belong to MCP groups - only show custom/individual servers
29 const customServers = servers.filter((s) => !s.groupId);
30
31 const [selectedServers, setSelectedServers] = useState<Set<string>>(new Set(value));
32 const [isRefreshing, setIsRefreshing] = useState(false);
33
34 // Fetch servers and tools on mount
35 useEffect(() => {
36 fetchServers();
37 fetchAllTools();
38 }, [fetchServers, fetchAllTools]);
39
40 // Sync external value changes to local state
41 useEffect(() => {
42 setSelectedServers(new Set(value));
43 }, [value]);
44
45 // Notify parent of changes
46 useEffect(() => {
47 const selectedArray = Array.from(selectedServers).sort();
48 const valueSorted = [...value].sort();
49 if (JSON.stringify(selectedArray) !== JSON.stringify(valueSorted)) {
50 onChange(selectedArray);
51 }
52 }, [selectedServers, onChange, value]);
53
54 const toggleServer = (serverId: string) => {
55 if (disabled) return;
56
57 setSelectedServers((prev) => {
58 const newSelected = new Set(prev);
59 if (newSelected.has(serverId)) {
60 newSelected.delete(serverId);
61 } else {
62 newSelected.add(serverId);
63 }
64 return newSelected;
65 });
66 };
67
68 const handleRefresh = async () => {
69 if (disabled || isRefreshing) return;
70
71 setIsRefreshing(true);
72 try {
73 await Promise.all([fetchServers({ force: true }), fetchAllTools()]);
74 } finally {
75 setIsRefreshing(false);
76 }
77 };
78
79 const getHealthIndicator = (serverId: string) => {
80 const server = servers.find((s) => s.id === serverId);
81 const status = server?.lastHealthStatus ?? 'unknown';
82 switch (status) {

Callers

nothing calls this directly

Calls 7

cnFunction · 0.90
fetchServersFunction · 0.85
fromMethod · 0.80
hasMethod · 0.80
getServerToolsFunction · 0.70
toggleServerFunction · 0.70
getHealthIndicatorFunction · 0.70

Tested by

no test coverage detected