import React, { useState, useEffect } from "react"; import { Text, Badge } from "@tremor/react"; import { ServerIcon } from "@heroicons/react/outline"; import { Tooltip } from "antd"; import { fetchMCPServers } from "../networking"; import { MCPServer } from '../mcp_tools/types'; interface MCPServerPermissionsProps { mcpServers: string[]; accessToken?: string | null; } export function MCPServerPermissions({ mcpServers, accessToken }: MCPServerPermissionsProps) { const [mcpServerDetails, setMCPServerDetails] = useState([]); // Fetch MCP server details when component mounts useEffect(() => { const fetchMCPServerDetails = async () => { if (!accessToken || mcpServers.length === 0) return; try { const response = await fetchMCPServers(accessToken); if (response && Array.isArray(response)) { // Direct array response setMCPServerDetails(response); } else if (response.data && Array.isArray(response.data)) { // Response with data wrapper setMCPServerDetails(response.data); } } catch (error) { console.error("Error fetching MCP servers:", error); } }; fetchMCPServerDetails(); }, [accessToken, mcpServers.length]); // Function to get display name for MCP server const getMCPServerDisplayName = (serverId: string) => { const serverDetail = mcpServerDetails.find(server => server.server_id === serverId); if (serverDetail) { // Truncate server ID: first 3 chars + "..." + last 4 chars const truncatedId = serverId.length > 7 ? `${serverId.slice(0, 3)}...${serverId.slice(-4)}` : serverId; return `${serverDetail.alias} (${truncatedId})`; } return serverId; }; return (
MCP Servers {mcpServers.length}
{mcpServers.length > 0 ? (
{mcpServers.map((server, index) => (
{getMCPServerDisplayName(server)}
))}
) : (
No MCP servers configured
)}
); } export default MCPServerPermissions;