@@ -99,21 +112,21 @@ export function MCPServerPermissions({
{totalCount}
-
+
{totalCount > 0 ? (
{mergedItems.map((item, index) => {
const toolsForServer = item.type === "server" ? mcpToolPermissions[item.value] : undefined;
const hasToolRestrictions = toolsForServer && toolsForServer.length > 0;
const isExpanded = expandedServers.has(item.value);
-
+
return (
-
hasToolRestrictions && toggleServerExpansion(item.value)}
className={`flex items-center gap-3 py-2 px-3 rounded-lg border border-gray-200 transition-all ${
- hasToolRestrictions
- ? 'cursor-pointer hover:bg-gray-50 hover:border-gray-300'
+ hasToolRestrictions
+ ? 'cursor-pointer hover:bg-gray-50 hover:border-gray-300'
: 'bg-white'
}`}
>
@@ -128,14 +141,14 @@ export function MCPServerPermissions({
) : (
- {getAccessGroupDisplayName(item.value)}
+ {item.value}
Group
)}
-
+
{hasToolRestrictions && (
{toolsForServer.length}
@@ -148,7 +161,7 @@ export function MCPServerPermissions({
)}
-
+
{/* Show tool permissions if expanded */}
{hasToolRestrictions && isExpanded && (
@@ -167,11 +180,66 @@ export function MCPServerPermissions({
);
})}
+
+ {/* Toolsets section */}
+ {mcpToolsets.length > 0 && mcpToolsets.map((toolsetId, index) => {
+ const detail = toolsetDetails.find((t) => t.toolset_id === toolsetId);
+ const isExpanded = expandedToolsets.has(toolsetId);
+ const toolCount = detail?.tools.length ?? 0;
+
+ return (
+
+
toolCount > 0 && toggleToolsetExpansion(toolsetId)}
+ className={`flex items-center gap-3 py-2 px-3 rounded-lg border border-purple-200 transition-all ${
+ toolCount > 0 ? 'cursor-pointer hover:bg-purple-50 hover:border-purple-300' : 'bg-white'
+ }`}
+ >
+
+
+
+ {detail?.toolset_name ?? toolsetId}
+
+
+ Toolset
+
+
+ {toolCount > 0 && (
+
+ {toolCount}
+ {toolCount === 1 ? "tool" : "tools"}
+ {isExpanded ? (
+
+ ) : (
+
+ )}
+
+ )}
+
+
+ {toolCount > 0 && isExpanded && detail && (
+
+
+ {detail.tools.map((tool, toolIndex) => (
+
+ {tool.server_id.slice(0, 6)}…
+ {tool.tool_name}
+
+ ))}
+
+
+ )}
+
+ );
+ })}
) : (