Skip to content

Commit cea277a

Browse files
authored
Ensure logo is same in MCP card as well as details page (#2566)
* Ensure logo is same in card as well as details page Signed-off-by: manaswinidas <dasmanaswini10@gmail.com> * Add server logo BFF mock data Signed-off-by: manaswinidas <dasmanaswini10@gmail.com> * Fix linting issues Signed-off-by: manaswinidas <dasmanaswini10@gmail.com> --------- Signed-off-by: manaswinidas <dasmanaswini10@gmail.com>
1 parent 7ad833e commit cea277a

3 files changed

Lines changed: 37 additions & 6 deletions

File tree

clients/ui/bff/internal/mocks/static_data_mock.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2399,6 +2399,7 @@ func GetMcpServerMocks() []models.McpServer {
23992399
Version: stringToPointer("0.9.2"),
24002400
License: stringToPointer("Apache 2.0"),
24012401
LicenseLink: stringToPointer("https://www.apache.org/licenses/LICENSE-2.0"),
2402+
Logo: stringToPointer("https://raw.githubusercontent.com/cncf/artwork/main/projects/prometheus/icon/color/prometheus-icon-color.svg"),
24022403
Tags: []string{"metrics", "monitoring", "alerting"},
24032404
ToolCount: 15,
24042405
Transports: []models.McpTransportType{models.McpTransportTypeHTTP},
@@ -2447,6 +2448,7 @@ func GetMcpServerMocks() []models.McpServer {
24472448
Version: stringToPointer("1.2.0"),
24482449
License: stringToPointer("Apache 2.0"),
24492450
LicenseLink: stringToPointer("https://www.apache.org/licenses/LICENSE-2.0"),
2451+
Logo: stringToPointer("https://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.svg"),
24502452
Tags: []string{"kubernetes", "containers", "orchestration"},
24512453
ToolCount: 23,
24522454
Transports: []models.McpTransportType{models.McpTransportTypeHTTP, models.McpTransportTypeSSE},
@@ -2533,6 +2535,7 @@ func GetMcpServerMocks() []models.McpServer {
25332535
Version: stringToPointer("1.1.0"),
25342536
License: stringToPointer("AGPL-3.0"),
25352537
LicenseLink: stringToPointer("https://www.gnu.org/licenses/agpl-3.0.html"),
2538+
Logo: stringToPointer("https://raw.githubusercontent.com/grafana/grafana/main/public/img/grafana_icon.svg"),
25362539
Tags: []string{"dashboards", "visualization", "monitoring"},
25372540
ToolCount: 12,
25382541
Transports: []models.McpTransportType{models.McpTransportTypeHTTP},
@@ -2602,6 +2605,7 @@ func GetMcpServerMocks() []models.McpServer {
26022605
Version: stringToPointer("0.8.1"),
26032606
License: stringToPointer("BSD-3-Clause"),
26042607
LicenseLink: stringToPointer("https://opensource.org/licenses/BSD-3-Clause"),
2608+
Logo: stringToPointer("https://raw.githubusercontent.com/redis/redis-io/master/public/images/redis-white.png"),
26052609
Tags: []string{"cache", "database", "messaging"},
26062610
ToolCount: 14,
26072611
Transports: []models.McpTransportType{models.McpTransportTypeHTTP, models.McpTransportTypeSSE},

clients/ui/frontend/src/app/pages/mcpCatalog/components/McpCatalogCard.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,21 @@ const McpCatalogCard: React.FC<McpCatalogCardProps> = React.memo(({ server }) =>
5252
className="pf-v6-u-mb-md"
5353
>
5454
<FlexItem>
55-
<span
56-
className="pf-v6-u-display-inline-block pf-v6-u-font-size-2xl pf-v6-u-color-200"
57-
aria-hidden
58-
>
59-
<ApplicationsIcon />
60-
</span>
55+
{server.logo ? (
56+
<img
57+
src={server.logo}
58+
alt=""
59+
style={{ height: '32px', width: '32px' }}
60+
data-testid={`mcp-catalog-card-logo-${serverId}`}
61+
/>
62+
) : (
63+
<span
64+
className="pf-v6-u-display-inline-block pf-v6-u-font-size-2xl pf-v6-u-color-200"
65+
aria-hidden
66+
>
67+
<ApplicationsIcon />
68+
</span>
69+
)}
6170
</FlexItem>
6271
{isMcpRemoteDeploymentMode(server.deploymentMode) && (
6372
<FlexItem>

clients/ui/frontend/src/app/pages/mcpCatalog/components/__tests__/McpCatalogCard.spec.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,22 @@ describe('McpCatalogCard', () => {
7979
const desc = screen.getByTestId('mcp-catalog-card-description-4');
8080
expect(desc).toBeInTheDocument();
8181
});
82+
83+
it('renders server logo when logo is provided', () => {
84+
render(
85+
<McpCatalogCard server={{ ...mockServer, id: '5', logo: 'https://example.com/logo.png' }} />,
86+
{
87+
wrapper,
88+
},
89+
);
90+
const logo = screen.getByTestId('mcp-catalog-card-logo-5');
91+
expect(logo).toBeInTheDocument();
92+
expect(logo.tagName).toBe('IMG');
93+
expect(logo).toHaveAttribute('src', 'https://example.com/logo.png');
94+
});
95+
96+
it('renders default icon when no logo is provided', () => {
97+
render(<McpCatalogCard server={mockServer} />, { wrapper });
98+
expect(screen.queryByTestId('mcp-catalog-card-logo-1')).not.toBeInTheDocument();
99+
});
82100
});

0 commit comments

Comments
 (0)