From 76feaefdfe73688bf4f70bd892550a2027be6eda Mon Sep 17 00:00:00 2001 From: Gabriel Gordon-Hall Date: Wed, 7 Jan 2026 16:30:39 +0000 Subject: [PATCH] feat: add Exa and Chrome DevTools as one-click MCP server options (Vibe Kanban) (#1801) * I've added the Exa Code MCP server as a one-click install option. Here's what was configured: **Changes made to `crates/executors/default_mcp.json`:** 1. **Server configuration** (lines 23-33): - Command: `npx -y exa-mcp-server` - Tools enabled: `web_search_exa` and `get_code_context_exa` (as requested) - Environment variable: `EXA_API_KEY` (required for authentication) 2. **Metadata** (lines 53-58): - Name: "Exa" - Description: "Web search and code context retrieval powered by Exa AI" - URL: https://docs.exa.ai/reference/exa-mcp - Icon: `mcp/exa_logo.svg` (already exists) The Exa MCP server icon was already present in the frontend public assets at `frontend/public/mcp/exa_logo.svg`. * Done. I've added Chrome DevTools MCP as a one-click install option: **Server configuration** (lines 34-39): - Command: `npx chrome-devtools-mcp@latest` - No environment variables required **Metadata** (lines 65-70): - Name: "Chrome DevTools" - Description: "Browser automation, debugging and performance analysis with Chrome DevTools" - URL: https://github.com/ChromeDevTools/chrome-devtools-mcp - Icon: `mcp/chrome_devtools_logo.svg` * The issue was that `justify-center` and `gap-3` were interfering with Embla Carousel's scroll calculations. Embla uses a specific margin/padding system (`-ml-4` on the content container and `pl-4` on items) to handle spacing and scroll positions. Adding `justify-center` shifts items in a way that breaks the scroll math, making it impossible to scroll to the leftmost items. The fix removes these conflicting classes from `CarouselContent`. --- crates/executors/default_mcp.json | 29 ++++++++++++++++++++ frontend/public/mcp/chrome_devtools_logo.svg | 1 + frontend/public/mcp/exa_logo.svg | 1 + frontend/src/pages/settings/McpSettings.tsx | 2 +- 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 frontend/public/mcp/chrome_devtools_logo.svg create mode 100644 frontend/public/mcp/exa_logo.svg diff --git a/crates/executors/default_mcp.json b/crates/executors/default_mcp.json index 345067b7..8d3a2d1a 100644 --- a/crates/executors/default_mcp.json +++ b/crates/executors/default_mcp.json @@ -20,6 +20,23 @@ "@playwright/mcp@latest" ] }, + "exa": { + "command": "npx", + "args": [ + "-y", + "exa-mcp-server", + "tools=web_search_exa,get_code_context_exa" + ], + "env": { + "EXA_API_KEY": "YOUR_API_KEY" + } + }, + "chrome_devtools": { + "command": "npx", + "args": [ + "chrome-devtools-mcp@latest" + ] + }, "meta": { "vibe_kanban": { "name": "Vibe Kanban", @@ -38,6 +55,18 @@ "description": "Browser automation with Playwright", "url": "https://github.com/microsoft/playwright-mcp", "icon": "mcp/playwright_logo_icon.svg" + }, + "exa": { + "name": "Exa", + "description": "Web search and code context retrieval powered by Exa AI", + "url": "https://docs.exa.ai/reference/exa-mcp", + "icon": "mcp/exa_logo.svg" + }, + "chrome_devtools": { + "name": "Chrome DevTools", + "description": "Browser automation, debugging and performance analysis with Chrome DevTools", + "url": "https://github.com/ChromeDevTools/chrome-devtools-mcp", + "icon": "mcp/chrome_devtools_logo.svg" } } } diff --git a/frontend/public/mcp/chrome_devtools_logo.svg b/frontend/public/mcp/chrome_devtools_logo.svg new file mode 100644 index 00000000..4ff6ab6b --- /dev/null +++ b/frontend/public/mcp/chrome_devtools_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/mcp/exa_logo.svg b/frontend/public/mcp/exa_logo.svg new file mode 100644 index 00000000..7b89500d --- /dev/null +++ b/frontend/public/mcp/exa_logo.svg @@ -0,0 +1 @@ +Exa \ No newline at end of file diff --git a/frontend/src/pages/settings/McpSettings.tsx b/frontend/src/pages/settings/McpSettings.tsx index 3d65c9af..950726c9 100644 --- a/frontend/src/pages/settings/McpSettings.tsx +++ b/frontend/src/pages/settings/McpSettings.tsx @@ -368,7 +368,7 @@ export function McpSettings() {
- + {Object.entries(servers).map(([key]) => { const metaObj = getMetaFor(key) as { name?: string;