diff --git a/flake.lock b/flake.lock
index 1150e275150..826bf4d8608 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
- "lastModified": 1763618868,
- "narHash": "sha256-v5afmLjn/uyD9EQuPBn7nZuaZVV9r+JerayK/4wvdWA=",
+ "lastModified": 1763806073,
+ "narHash": "sha256-FHsEKDvfWpzdADWj99z7vBk4D716Ujdyveo5+A048aI=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "a8d610af3f1a5fb71e23e08434d8d61a466fc942",
+ "rev": "878e468e02bfabeda08c79250f7ad583037f2227",
"type": "github"
},
"original": {
diff --git a/nix/hashes.json b/nix/hashes.json
index 6063a49bd3f..16424b3a035 100644
--- a/nix/hashes.json
+++ b/nix/hashes.json
@@ -1,3 +1,3 @@
{
- "nodeModules": "sha256-/ZkyVHgRMjhzBpnDNTR6X+TomtTMarVU7gmq9Z8Czr8="
+ "nodeModules": "sha256-m7hL9Uzqk+oa2/FtgkzEPgi+m/VZP1SvjpgYHNjiS1c="
}
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
index 9ba799f09e4..5f89e0e929e 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
@@ -18,6 +18,9 @@ export function Sidebar(props: { sessionID: string }) {
const [todoExpanded, setTodoExpanded] = createSignal(true)
const [lspExpanded, setLspExpanded] = createSignal(true)
+ // Sort MCP servers alphabetically for consistent display order
+ const mcpEntries = createMemo(() => Object.entries(sync.data.mcp).sort(([a], [b]) => a.localeCompare(b)))
+
const cost = createMemo(() => {
const total = messages().reduce((sum, x) => sum + (x.role === "assistant" ? x.cost : 0), 0)
return new Intl.NumberFormat("en-US", {
@@ -58,22 +61,22 @@ export function Sidebar(props: { sessionID: string }) {
{context()?.percentage ?? 0}% used
{cost()} spent
- 0}>
+ 0}>
Object.keys(sync.data.mcp).length > 2 && setMcpExpanded(!mcpExpanded())}
+ onMouseDown={() => mcpEntries().length > 2 && setMcpExpanded(!mcpExpanded())}
>
- 2}>
+ 2}>
{mcpExpanded() ? "▼" : "▶"}
MCP
-
-
+
+
{([key, item]) => (