feat(mcp): add WorkBuddy client config template

This commit is contained in:
t8y2
2026-09-16 11:15:40 +08:00
parent c2f4c6e2be
commit e916e9e927
14 changed files with 59 additions and 4 deletions
@@ -181,7 +181,20 @@ import { currentExecutableStatementRange, type SqlTextRange } from "@/lib/sql/sq
import { executableStatementRangeCacheForDoc, executableStatementRangeStartingAt, type ExecutableStatementRangeCache } from "@/lib/sql/executableStatementRangeCache";
import { EMPTY_TABLE_COLUMN_TEMPLATE_DATA_TYPE, parseTableColumnTemplateFields, TABLE_COLUMN_TEMPLATE_DATABASE_TYPES, tableColumnTemplateRowsToSettings } from "@/lib/table/tableColumnTemplates";
import { DEFAULT_SQL_VARIABLE_SYNTAX_TOGGLES, normalizeSqlVariableSyntaxOverrides, SQL_VARIABLE_SYNTAX_DATABASE_TYPES, SQL_VARIABLE_SYNTAX_KEYS, SQL_VARIABLE_SYNTAX_TOKENS, type SqlVariableSyntaxOverrides, type SqlVariableSyntaxToggles } from "@/lib/sql/sqlVariableSyntax";
import { buildMcpCherryStudioConfig, buildMcpCodexConfig, buildMcpDeepSeekHarnessConfig, buildMcpJsonConfig, buildMcpOpenCodeConfig, buildMcpPiConfig, buildMcpQoderConfig, buildMcpTraeConfig, buildMcpVsCodeConfig, mcpWebBackendUrl, type McpLaunchConfig } from "@/lib/mcp/mcpConfigTemplates";
import {
buildMcpCherryStudioConfig,
buildMcpCodexConfig,
buildMcpDeepSeekHarnessConfig,
buildMcpJsonConfig,
buildMcpOpenCodeConfig,
buildMcpPiConfig,
buildMcpQoderConfig,
buildMcpTraeConfig,
buildMcpVsCodeConfig,
buildMcpWorkBuddyConfig,
mcpWebBackendUrl,
type McpLaunchConfig,
} from "@/lib/mcp/mcpConfigTemplates";
import { beginMcpStatusRequest, mcpUpdateAvailability } from "@/lib/mcp/mcpUpdateStatus";
import { isMcpPolicyMutationBlocked, MCP_CAPABILITY_ROWS, MCP_EXECUTION_MODE_COLUMNS, MCP_TOOL_OPTIONS, mcpExecutionModeFromPolicy, mcpPolicyFieldsForExecutionMode, toggleMcpAllowedToolName, type McpExecutionMode } from "@/lib/mcp/mcpPolicySelection";
import { isMacOS, isWindows } from "@/lib/backend/platform";
@@ -2630,7 +2643,7 @@ async function exportDebugLogs() {
}
// ---------- MCP Server ----------
type McpConfigTab = "claude" | "cursor" | "codebuddy" | "zcode" | "trae" | "vscode" | "windsurf" | "codex" | "deepseek-harness" | "opencode" | "pi" | "cherry-studio" | "qoder";
type McpConfigTab = "claude" | "cursor" | "codebuddy" | "zcode" | "trae" | "vscode" | "windsurf" | "codex" | "deepseek-harness" | "opencode" | "pi" | "cherry-studio" | "qoder" | "workbuddy";
type McpCopyKind = "install" | "uninstall" | "http-endpoint" | "http-token" | "http-config" | `${McpConfigTab}-config`;
type McpTransportTab = "stdio" | "http";
type McpManagementTab = "access" | "permissions";
@@ -3214,6 +3227,7 @@ const mcpDeepSeekHarnessRecommendedConfig = computed(() => buildMcpDeepSeekHarne
const mcpOpenCodeRecommendedConfig = computed(() => buildMcpOpenCodeConfig(mcpLaunchConfig.value));
const mcpPiRecommendedConfig = computed(() => buildMcpPiConfig(mcpLaunchConfig.value));
const mcpWorkBuddyRecommendedConfig = computed(() => buildMcpWorkBuddyConfig(mcpLaunchConfig.value));
const mcpStatusTone = computed<"ok" | "warning" | "muted">(() => {
if (!mcpStatus.value) return "muted";
@@ -9107,6 +9121,7 @@ LIMIT 100;</pre
<TabsTrigger value="pi" class="settings-mcp-config-tab h-7 flex-none shrink-0 px-2.5">Pi</TabsTrigger>
<TabsTrigger value="cherry-studio" class="settings-mcp-config-tab h-7 flex-none shrink-0 px-2.5">Cherry Studio</TabsTrigger>
<TabsTrigger value="qoder" class="settings-mcp-config-tab h-7 flex-none shrink-0 px-2.5">Qoder</TabsTrigger>
<TabsTrigger value="workbuddy" class="settings-mcp-config-tab h-7 flex-none shrink-0 px-2.5">WorkBuddy</TabsTrigger>
</TabsList>
<TabsContent value="claude" class="m-0">
@@ -9298,6 +9313,21 @@ LIMIT 100;</pre
</div>
</div>
</TabsContent>
<TabsContent value="workbuddy" class="m-0">
<div class="space-y-2">
<div class="rounded-md border bg-muted/20 px-3 py-2 text-xs text-muted-foreground">
{{ t("settings.mcpWorkBuddyConfigPath") }}
</div>
<div class="relative rounded-md border bg-background p-3">
<pre class="overflow-x-auto whitespace-pre text-xs leading-relaxed"><code>{{ mcpWorkBuddyRecommendedConfig }}</code></pre>
<Button type="button" variant="outline" size="icon" class="absolute right-2 top-2 h-7 w-7" :title="t('common.copy')" @click="copyMcpText('workbuddy-config', mcpWorkBuddyRecommendedConfig)">
<CheckCircle2 v-if="mcpCopied === 'workbuddy-config'" class="h-3.5 w-3.5 text-green-500" />
<Copy v-else class="h-3.5 w-3.5" />
</Button>
</div>
</div>
</TabsContent>
</Tabs>
</div>
+1
View File
@@ -7537,6 +7537,7 @@ export default withEnglishFallback({
mcpZCodeConfigPath: "ZCode: Parametrlər > MCP serverləri > Yeni MCP serveri > Tam konfiqurasiya; İstifadəçi və ya İş sahəsi əhatəsini seçin, sonra JSON konfiqurasiyasını yerləşdirin.",
mcpTraeConfigPath: "TRAE: Parametrlər > MCP > Əlavə et > Əl ilə əlavə et, sonra JSON konfiqurasiyasını yerləşdirin.",
mcpQoderConfigPath: "Qoder: Parametrlər > MCP > Əl ilə əlavə et, sonra JSON konfiqurasiyasını yerləşdirin.",
mcpWorkBuddyConfigPath: "WorkBuddy: yan paneldə Qoşmaları açın, MCP Servers (yuxarı sağ) > MCP-ni Konfiqurasiya et ilə JSON-u yerləşdirin; ya da ~/.workbuddy/mcp.json (qlobal) və ya layihədəki .workbuddy/mcp.json faylına saxlayın.",
mcpCherryStudioConfigPath: "Cherry Studio: Parametrlər > MCP serverləri > Server əlavə et > JSON idxal et, sonra konfiqurasiyanı yerləşdirin.",
mcpVsCodeConfigPath: "VS Code/Copilot iş sahəsində .vscode/mcp.json və ya istifadəçi profilində mcp.json faylından istifadə edə bilər.",
mcpWindsurfConfigPath: "Windsurf ~/.codeium/windsurf/mcp_config.json faylından istifadə edə bilər.",
+1
View File
@@ -7722,6 +7722,7 @@ export default {
mcpZCodeConfigPath: "ZCode: Settings > MCP Servers > New MCP Server > Full configuration; choose the User or Workspace scope, then paste the JSON configuration.",
mcpTraeConfigPath: "TRAE: Settings > MCP > Add > Add Manually, then paste the JSON configuration.",
mcpQoderConfigPath: "Qoder: Settings > MCP > Add Manually, then paste the JSON configuration.",
mcpWorkBuddyConfigPath: "WorkBuddy: open Plugins in the sidebar, click MCP Servers (top right) > Configure MCP and paste the JSON; or save it to ~/.workbuddy/mcp.json (global) or .workbuddy/mcp.json in your project.",
mcpCherryStudioConfigPath: "Cherry Studio: Settings > MCP Servers > Add Server > Import JSON, then paste the configuration.",
mcpVsCodeConfigPath: "VS Code/Copilot can use .vscode/mcp.json in the workspace or mcp.json in the user profile.",
mcpWindsurfConfigPath: "Windsurf can use ~/.codeium/windsurf/mcp_config.json.",
+1
View File
@@ -7231,6 +7231,7 @@ export default withEnglishFallback({
mcpZCodeConfigPath: "ZCode: Configuración > Servidores MCP > Nuevo servidor MCP > Configuración completa; elige el ámbito Usuario o Espacio de trabajo y pega la configuración JSON.",
mcpTraeConfigPath: "TRAE: Configuración > MCP > Agregar > Agregar manualmente; luego pega la configuración JSON.",
mcpQoderConfigPath: "Qoder: Configuración > MCP > Agregar manualmente; luego pega la configuración JSON.",
mcpWorkBuddyConfigPath: "WorkBuddy: abre Plugins en la barra lateral, haz clic en MCP Servers (arriba a la derecha) > Configurar MCP y pega el JSON; o guárdalo en ~/.workbuddy/mcp.json (global) o en .workbuddy/mcp.json del proyecto.",
mcpCherryStudioConfigPath: "Cherry Studio: Configuración > Servidores MCP > Agregar servidor > Importar JSON; luego pega la configuración.",
mcpVsCodeConfigPath: "VS Code/Copilot puede usar .vscode/mcp.json en el espacio de trabajo o mcp.json en el perfil de usuario.",
mcpWindsurfConfigPath: "Windsurf puede usar ~/.codeium/windsurf/mcp_config.json.",
+1
View File
@@ -7231,6 +7231,7 @@ export default withEnglishFallback({
mcpZCodeConfigPath: "ZCode: Impostazioni > Server MCP > Nuovo server MCP > Configurazione completa; scegli l'ambito Utente o Area di lavoro, quindi incolla la configurazione JSON.",
mcpTraeConfigPath: "TRAE: Impostazioni > MCP > Aggiungi > Aggiungi manualmente, poi incolla la configurazione JSON.",
mcpQoderConfigPath: "Qoder: Impostazioni > MCP > Aggiungi manualmente, poi incolla la configurazione JSON.",
mcpWorkBuddyConfigPath: "WorkBuddy: apri Plugin nella barra laterale, clicca MCP Servers (in alto a destra) > Configura MCP e incolla il JSON; oppure salvalo in ~/.workbuddy/mcp.json (globale) o in .workbuddy/mcp.json del progetto.",
mcpCherryStudioConfigPath: "Cherry Studio: Impostazioni > Server MCP > Aggiungi server > Importa JSON, quindi incolla la configurazione.",
mcpVsCodeConfigPath: "VS Code/Copilot può usare .vscode/mcp.json nell'area di lavoro o mcp.json nel profilo utente.",
mcpWindsurfConfigPath: "Windsurf può usare ~/.codeium/windsurf/mcp_config.json.",
+1
View File
@@ -7236,6 +7236,7 @@ export default withEnglishFallback({
mcpZCodeConfigPath: "ZCode:設定 > MCP サーバー > 新しい MCP サーバー > 完全な設定を開き、ユーザーまたはワークスペースのスコープを選択して JSON 設定を貼り付けます。",
mcpTraeConfigPath: "TRAE: 設定 > MCP > 追加 > 手動で追加 からJSON設定を貼り付けます。",
mcpQoderConfigPath: "Qoder: 設定 > MCP > 手動で追加 からJSON設定を貼り付けます。",
mcpWorkBuddyConfigPath: "WorkBuddy: サイドバーのプラグイン → 右上の MCP サーバー → MCP を設定 に JSON を貼り付けて保存します。または ~/.workbuddy/mcp.json(グローバル)またはプロジェクト内の .workbuddy/mcp.json に保存してください。",
mcpCherryStudioConfigPath: "Cherry Studio: 設定 > MCPサーバー > サーバーを追加 > JSONをインポート から設定を貼り付けます。",
mcpVsCodeConfigPath: "VS Code/Copilotはワークスペースの .vscode/mcp.json またはユーザープロファイルの mcp.json を使用できます。",
mcpWindsurfConfigPath: "Windsurfは ~/.codeium/windsurf/mcp_config.json を使用できます。",
+1
View File
@@ -7001,6 +7001,7 @@ export default withEnglishFallback({
mcpZCodeConfigPath: "ZCode: 설정 > MCP 서버 > 새 MCP 서버 > 전체 구성에서 사용자 또는 작업 영역 범위를 선택한 다음 JSON 구성을 붙여넣으세요.",
mcpTraeConfigPath: "TRAE: 설정 > MCP > 추가 > 수동 추가 후 JSON 설정을 붙여넣으세요.",
mcpQoderConfigPath: "Qoder: 설정 > MCP > 수동 추가 후 JSON 설정을 붙여넣으세요.",
mcpWorkBuddyConfigPath: "WorkBuddy: 사이드바의 플러그인 → 오른쪽 위 MCP 서버 > MCP 구성에 JSON을 붙여넣어 저장하세요. 또는 ~/.workbuddy/mcp.json(전역) 또는 프로젝트의 .workbuddy/mcp.json에 저장하세요.",
mcpCherryStudioConfigPath: "Cherry Studio: 설정 > MCP 서버 > 서버 추가 > JSON 가져오기 후 설정을 붙여넣으세요.",
mcpVsCodeConfigPath: "VS Code/Copilot은 작업 영역의 .vscode/mcp.json 또는 사용자 프로필의 mcp.json을 사용할 수 있습니다.",
mcpWindsurfConfigPath: "Windsurf는 ~/.codeium/windsurf/mcp_config.json을 사용할 수 있습니다.",
+1
View File
@@ -7233,6 +7233,7 @@ export default withEnglishFallback({
mcpZCodeConfigPath: "ZCode: Configurações > Servidores MCP > Novo servidor MCP > Configuração completa; escolha o escopo Usuário ou Espaço de trabalho e cole a configuração JSON.",
mcpTraeConfigPath: "TRAE: Configurações > MCP > Adicionar > Adicionar manualmente; depois cole a configuração JSON.",
mcpQoderConfigPath: "Qoder: Configurações > MCP > Adicionar manualmente; depois cole a configuração JSON.",
mcpWorkBuddyConfigPath: "WorkBuddy: abra Plugins na barra lateral, clique em MCP Servers (canto superior direito) > Configurar MCP e cole o JSON; ou salve em ~/.workbuddy/mcp.json (global) ou em .workbuddy/mcp.json do projeto.",
mcpCherryStudioConfigPath: "Cherry Studio: Configurações > Servidores MCP > Adicionar servidor > Importar JSON; depois cole a configuração.",
mcpVsCodeConfigPath: "O VS Code/Copilot pode usar .vscode/mcp.json no workspace ou mcp.json no perfil do usuário.",
mcpWindsurfConfigPath: "O Windsurf pode usar ~/.codeium/windsurf/mcp_config.json.",
+1
View File
@@ -7418,6 +7418,7 @@ export default withEnglishFallback({
mcpZCodeConfigPath: "ZCode: Ayarlar > MCP Sunucuları > Yeni MCP Sunucusu > Tam yapılandırma; Kullanıcı ya da Çalışma Alanı kapsamını seçip JSON yapılandırmasını yapıştırın.",
mcpTraeConfigPath: "TRAE: Ayarlar > MCP > Ekle > Elle Ekle, ardından JSON yapılandırmasını yapıştırın.",
mcpQoderConfigPath: "Qoder: Ayarlar > MCP > Elle Ekle, ardından JSON yapılandırmasını yapıştırın.",
mcpWorkBuddyConfigPath: "WorkBuddy: kenar çubuğunda Eklentiler'i açın, MCP Servers (sağ üst) > MCP'yi Yapılandır ile JSON'u yapıştırın; ya da ~/.workbuddy/mcp.json (genel) veya proje içindeki .workbuddy/mcp.json dosyasına kaydedin.",
mcpCherryStudioConfigPath: "Cherry Studio: Ayarlar > MCP Sunucuları > Sunucu Ekle > JSON İçe Aktar, ardından yapılandırmayı yapıştırın.",
mcpVsCodeConfigPath: "VS Code/Copilot, çalışma alanında .vscode/mcp.json ya da kullanıcı profilinde mcp.json kullanabilir.",
mcpWindsurfConfigPath: "Windsurf, ~/.codeium/windsurf/mcp_config.json kullanabilir.",
+1
View File
@@ -7698,6 +7698,7 @@ export default withEnglishFallback({
mcpZCodeConfigPath: "ZCode:设置 > MCP 服务器 > 新建 MCP 服务器 > 完整配置,选择用户或工作区作用域后粘贴 JSON 配置。",
mcpTraeConfigPath: "TRAE:设置 > MCP > 添加 > 手动添加,然后粘贴 JSON 配置。",
mcpQoderConfigPath: "Qoder:设置 > MCP > 手动添加,然后粘贴 JSON 配置。",
mcpWorkBuddyConfigPath: "WorkBuddy:侧边栏 插件 → 右上角 MCP 服务器 → 配置 MCP,粘贴 JSON 保存;或写入 ~/.workbuddy/mcp.json(全局)或项目目录 .workbuddy/mcp.json。",
mcpCherryStudioConfigPath: "Cherry Studio:设置 > MCP 服务器 > 添加服务器 > 导入 JSON,然后粘贴配置。",
mcpVsCodeConfigPath: "VS Code/Copilot 可放在工作区 .vscode/mcp.json 或用户配置文件 mcp.json。",
mcpWindsurfConfigPath: "Windsurf 可放在 ~/.codeium/windsurf/mcp_config.json。",
+1
View File
@@ -6590,6 +6590,7 @@ export default withEnglishFallback({
mcpZCodeConfigPath: "ZCode:設定 > MCP 伺服器 > 新增 MCP 伺服器 > 完整設定,選擇使用者或工作區範圍後貼上 JSON 設定。",
mcpTraeConfigPath: "TRAE:設定 > MCP > 新增 > 手動新增,然後貼上 JSON 設定。",
mcpQoderConfigPath: "Qoder:設定 > MCP > 手動新增,然後貼上 JSON 設定。",
mcpWorkBuddyConfigPath: "WorkBuddy:側邊欄 插件 → 右上角 MCP 伺服器 → 設定 MCP,貼上 JSON 儲存;或寫入 ~/.workbuddy/mcp.json(全域)或專案目錄 .workbuddy/mcp.json。",
mcpCherryStudioConfigPath: "Cherry Studio:設定 > MCP 伺服器 > 新增伺服器 > 匯入 JSON,然後貼上設定。",
mcpVsCodeConfigPath: "VS Code/Copilot 可放在工作區 .vscode/mcp.json 或使用者設定檔 mcp.json。",
mcpWindsurfConfigPath: "Windsurf 可放在 ~/.codeium/windsurf/mcp_config.json。",
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
import { buildMcpCherryStudioConfig, buildMcpCodexConfig, buildMcpDeepSeekHarnessConfig, buildMcpJsonConfig, buildMcpOpenCodeConfig, buildMcpPiConfig, buildMcpQoderConfig, buildMcpTraeConfig, buildMcpVsCodeConfig, mcpWebBackendUrl } from "@/lib/mcp/mcpConfigTemplates";
import { buildMcpCherryStudioConfig, buildMcpCodexConfig, buildMcpDeepSeekHarnessConfig, buildMcpJsonConfig, buildMcpOpenCodeConfig, buildMcpPiConfig, buildMcpQoderConfig, buildMcpTraeConfig, buildMcpVsCodeConfig, buildMcpWorkBuddyConfig, mcpWebBackendUrl } from "@/lib/mcp/mcpConfigTemplates";
describe("MCP config templates", () => {
it("builds the standard mcpServers JSON used by Claude, Cursor, TRAE, and Windsurf", () => {
@@ -37,6 +37,16 @@ describe("MCP config templates", () => {
expect(buildMcpPiConfig({ command: "npx", args: ["-y", "@dbx-app/mcp-server"] })).toContain('"npx"');
});
it("builds the standard mcpServers JSON used by WorkBuddy", () => {
const launch = { command: "dbx-mcp-server", env: { DBX_DATA_DIR: "D:\\DBX Data" } };
expect(JSON.parse(buildMcpWorkBuddyConfig(launch))).toEqual({
mcpServers: {
dbx: launch,
},
});
});
it("builds standard JSON configs with a direct node launch command", () => {
const config = JSON.parse(buildMcpJsonConfig({ command: "C:\\Program Files\\nodejs\\node.exe", args: ["C:\\Users\\zhiyo\\AppData\\Roaming\\npm\\node_modules\\@dbx-app\\mcp-server\\dist\\index.js"] }));
@@ -165,11 +165,12 @@ describe("MCP policy settings state", () => {
expect(tabsSource).toContain("overscroll-x-contain");
expect(tabsSource).not.toContain("flex-wrap");
expect(tabsSource).not.toContain("grid-cols-");
expect(tabsSource.match(/flex-none shrink-0/g)).toHaveLength(13);
expect(tabsSource.match(/flex-none shrink-0/g)).toHaveLength(14);
expect(tabsSource).toContain('<TabsTrigger value="deepseek-harness"');
expect(tabsSource).toContain('<TabsTrigger value="codebuddy"');
expect(tabsSource).toContain('<TabsTrigger value="zcode"');
expect(tabsSource).toContain('<TabsTrigger value="qoder"');
expect(tabsSource).toContain('<TabsTrigger value="workbuddy"');
expect(tabsSource).not.toContain("min-w-0 px-");
const codeBuddyStart = settingsDialogSource.indexOf('<TabsContent value="codebuddy"', tabsEnd);
@@ -123,3 +123,7 @@ export function buildMcpOpenCodeConfig(config?: McpLaunchConfig): string {
export function buildMcpPiConfig(config?: McpLaunchConfig): string {
return buildMcpJsonConfig(config);
}
export function buildMcpWorkBuddyConfig(config?: McpLaunchConfig): string {
return buildMcpJsonConfig(config);
}