π File detail
migrations/migrateEnableAllProjectMcpServersToSettings.ts
π§© .tsπ 119 linesπΎ 3,977 bytesπ text
β Back to All Filesπ― Use case
This file lives under βmigrations/β, which covers version migrations for settings or on-disk data. On the API surface it exposes migrateEnableAllProjectMcpServersToSettings β mainly functions, hooks, or classes. Dependencies touch src. It composes internal code from utils (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { logEvent } from 'src/services/analytics/index.js' import { getCurrentProjectConfig, saveCurrentProjectConfig, } from '../utils/config.js'
π€ Exports (heuristic)
migrateEnableAllProjectMcpServersToSettings
π External import roots
Package roots from from "β¦" (relative paths omitted).
src
π₯οΈ Source preview
import { logEvent } from 'src/services/analytics/index.js'
import {
getCurrentProjectConfig,
saveCurrentProjectConfig,
} from '../utils/config.js'
import { logError } from '../utils/log.js'
import {
getSettingsForSource,
updateSettingsForSource,
} from '../utils/settings/settings.js'
/**
* Migration: Move MCP server approval fields from project config to local settings
* This migrates both enableAllProjectMcpServers and enabledMcpjsonServers to the
* settings system for better management and consistency.
*/
export function migrateEnableAllProjectMcpServersToSettings(): void {
const projectConfig = getCurrentProjectConfig()
// Check if any field exists in project config
const hasEnableAll = projectConfig.enableAllProjectMcpServers !== undefined
const hasEnabledServers =
projectConfig.enabledMcpjsonServers &&
projectConfig.enabledMcpjsonServers.length > 0
const hasDisabledServers =
projectConfig.disabledMcpjsonServers &&
projectConfig.disabledMcpjsonServers.length > 0
if (!hasEnableAll && !hasEnabledServers && !hasDisabledServers) {
return
}
try {
const existingSettings = getSettingsForSource('localSettings') || {}
const updates: Partial<{
enableAllProjectMcpServers: boolean
enabledMcpjsonServers: string[]
disabledMcpjsonServers: string[]
}> = {}
const fieldsToRemove: Array<
| 'enableAllProjectMcpServers'
| 'enabledMcpjsonServers'
| 'disabledMcpjsonServers'
> = []
// Migrate enableAllProjectMcpServers if it exists and hasn't been migrated
if (
hasEnableAll &&
existingSettings.enableAllProjectMcpServers === undefined
) {
updates.enableAllProjectMcpServers =
projectConfig.enableAllProjectMcpServers
fieldsToRemove.push('enableAllProjectMcpServers')
} else if (hasEnableAll) {
// Already migrated, just mark for removal
fieldsToRemove.push('enableAllProjectMcpServers')
}
// Migrate enabledMcpjsonServers if it exists
if (hasEnabledServers && projectConfig.enabledMcpjsonServers) {
const existingEnabledServers =
existingSettings.enabledMcpjsonServers || []
// Merge the servers (avoiding duplicates)
updates.enabledMcpjsonServers = [
...new Set([
...existingEnabledServers,
...projectConfig.enabledMcpjsonServers,
]),
]
fieldsToRemove.push('enabledMcpjsonServers')
}
// Migrate disabledMcpjsonServers if it exists
if (hasDisabledServers && projectConfig.disabledMcpjsonServers) {
const existingDisabledServers =
existingSettings.disabledMcpjsonServers || []
// Merge the servers (avoiding duplicates)
updates.disabledMcpjsonServers = [
...new Set([
...existingDisabledServers,
...projectConfig.disabledMcpjsonServers,
]),
]
fieldsToRemove.push('disabledMcpjsonServers')
}
// Update settings if there are any updates
if (Object.keys(updates).length > 0) {
updateSettingsForSource('localSettings', updates)
}
// Remove migrated fields from project config
if (
fieldsToRemove.includes('enableAllProjectMcpServers') ||
fieldsToRemove.includes('enabledMcpjsonServers') ||
fieldsToRemove.includes('disabledMcpjsonServers')
) {
saveCurrentProjectConfig(current => {
const {
enableAllProjectMcpServers: _enableAll,
enabledMcpjsonServers: _enabledServers,
disabledMcpjsonServers: _disabledServers,
...configWithoutFields
} = current
return configWithoutFields
})
}
// Log the migration event
logEvent('tengu_migrate_mcp_approval_fields_success', {
migratedCount: fieldsToRemove.length,
})
} catch (e: unknown) {
// Log migration failure but don't throw to avoid breaking startup
logError(e)
logEvent('tengu_migrate_mcp_approval_fields_error', {})
}
}