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

Function McpGroupConfig

frontend/src/components/workflow/McpGroupConfig.tsx:27–273  ·  view source on GitHub ↗
({
  groupSlug,
  value,
  onChange,
  disabled = false,
}: McpGroupConfigProps)

Source from the content-addressed store, hash-verified

25 * Fetches group servers from /api/v1/mcp-groups/{groupId}/servers.
26 */
27export function McpGroupConfig({
28 groupSlug,
29 value,
30 onChange,
31 disabled = false,
32}: McpGroupConfigProps) {
33 const [servers, setServers] = useState<McpGroupServerResponse[]>([]);
34 const [isLoading, setIsLoading] = useState(true);
35 const [error, setError] = useState<string | null>(null);
36 const [selectedServers, setSelectedServers] = useState<Set<string>>(new Set(value));
37 const [isRefreshing, setIsRefreshing] = useState(false);
38
39 // Fetch group servers on mount
40 const fetchServers = async () => {
41 try {
42 setIsLoading(true);
43 setError(null);
44
45 // First, find the group by slug
46 const groups = await mcpGroupsApi.listGroups();
47 const group = groups.find((g) => g.slug === groupSlug);
48
49 if (!group) {
50 throw new Error(`Group "${groupSlug}" not found`);
51 }
52
53 // Then fetch the servers
54 const groupServers = await mcpGroupsApi.getGroupServers(group.id);
55 setServers(groupServers.filter((s) => s.enabled));
56 } catch (err) {
57 setError(err instanceof Error ? err.message : 'Failed to load group servers');
58 setServers([]);
59 } finally {
60 setIsLoading(false);
61 }
62 };
63
64 useEffect(() => {
65 fetchServers();
66 }, [groupSlug]);
67
68 // Sync external value changes to local state
69 useEffect(() => {
70 setSelectedServers(new Set(value));
71 }, [value]);
72
73 // Notify parent of changes
74 useEffect(() => {
75 const selectedArray = Array.from(selectedServers).sort();
76 const valueSorted = [...value].sort();
77 if (JSON.stringify(selectedArray) !== JSON.stringify(valueSorted)) {
78 onChange(selectedArray);
79 }
80 }, [selectedServers, onChange, value]);
81
82 const toggleServer = (serverId: string) => {
83 if (disabled) return;
84

Callers

nothing calls this directly

Calls 6

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

Tested by

no test coverage detected