Skip to content

Commit 9d75ed6

Browse files
Tools page shows popular MCPs with icons in a denser layout (CL-9782) (#1087)
* Add tests for MCP server tile icons * Tools page shows popular MCPs with icons in a denser layout * Tools page reads connected servers as rows with designer-audit polish Designer audit follow-up: Connected servers move from tiles to the shared ListCard rows idiom (Popular stays a catalog grid); sections carry counts; empties speak with one voice ('Nothing connected yet' + CTA); waiting sign-ins spin inside their disabled buttons; all page targets are lg/40px; pills share one wash+inset-ring style; rhythm is 16px cards / 32px sections; the drawer's coming-soon fallback is an honest empty. * Add E2E proof for popular MCP grid on the Tools page Popular tiles render with icon marks in a dense multi-column grid: the 12px gap and 16px tile padding fingerprint the new CSS, and every non-final row packs full. * Fix stale connected-server copy in oauth-connect E2E The Tools page now renders the singular "1 tool live" via toolCountLabel; the wait expected the old plural and timed out.
1 parent 5d39c20 commit 9d75ed6

10 files changed

Lines changed: 465 additions & 114 deletions

‎apps/web/src/bench/bench-drawer.tsx‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const DrawerTabContext = createContext<(tab: DrawerTab) => void>(() => un
2121

2222
/** The floating card in the grid column that pushes the thread left. Each
2323
* tab's body arrives as a prop keyed by tab name; a tab without one shows a
24-
* short empty state until its own ticket lands. */
24+
* short empty state. */
2525
export function BenchDrawer({
2626
open,
2727
title,
@@ -128,9 +128,7 @@ export function BenchDrawer({
128128
</div>
129129
<div className="drawer-body" role="tabpanel">
130130
<DrawerTabContext.Provider value={setTab}>
131-
{body ?? (
132-
<p className="workbench-info-empty-note">{tab} is coming to this drawer soon.</p>
133-
)}
131+
{body ?? <p className="workbench-info-empty-note">Nothing to show for {tab} yet.</p>}
134132
</DrawerTabContext.Provider>
135133
</div>
136134
</div>

‎apps/web/src/bench/tools-tab.tsx‎

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Button } from "@corbits/react-ui";
22

33
import { QueryView } from "@/lib/api-query";
4-
import { Plugs } from "@/lib/icons";
54
import { Link } from "../navigation";
5+
import { toolCountLabel } from "../tools/tool-count";
66
import { useMcpServers } from "../tools/mcp-servers-query";
77
import "../tools/tools-page.css";
88
import "./drawer.css";
@@ -20,23 +20,26 @@ export function ToolsTab({ workbenchTenantId }: { readonly workbenchTenantId: st
2020
<div className="workbench-info-panel-header">
2121
<h2>Tools</h2>
2222
</div>
23-
<p className="workbench-info-empty-note">
24-
No tools are connected in this workbench yet.
23+
<p className="drawer-about">
24+
Nothing connected yet — connect a server from the Tools page and every tool it offers
25+
shows up here.
2526
</p>
26-
<Button asChild size="sm" variant="outline">
27-
<Link to={manage}>
28-
<Plugs size={14} />
29-
Connect a tool
30-
</Link>
27+
<Button asChild size="lg">
28+
<Link to={manage}>Connect a tool</Link>
3129
</Button>
3230
</section>
3331
) : (
3432
<>
3533
{servers.map((server) => (
3634
<section key={server.credentialId} className="drawer-sec">
3735
<div className="drawer-sec-head">
38-
<h3>{server.name}</h3>
39-
<Link to={manage}>Add tools</Link>
36+
<h3>
37+
{server.name}{" "}
38+
<span className="tools-tab-count">{toolCountLabel(server.tools.length)}</span>
39+
</h3>
40+
<Link to={manage} className="tools-tab-add">
41+
Add tools
42+
</Link>
4043
</div>
4144
<ul className="drawer-list">
4245
{server.tools.map((tool) => (

0 commit comments

Comments
 (0)