Skip to content

Commit 0f1ee1b

Browse files
author
Lasim
committed
fix(frontend): validate remote objects in server configuration
1 parent 0fb2c8e commit 0f1ee1b

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

services/frontend/src/components/admin/mcp-catalog/McpServerEditFormWizard.vue

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -238,17 +238,21 @@ const initializeStorageWithData = (data: McpServerFormData) => {
238238
let serverConfig: any = null
239239
240240
if (technicalData.remotes && Array.isArray(technicalData.remotes) && technicalData.remotes.length > 0) {
241-
// HTTP/SSE server from remotes
242-
const remote = technicalData.remotes[0]
243-
serverConfig = {
244-
url: remote.url,
245-
type: remote.type || 'sse',
246-
headers: remote.headers || {}
241+
// HTTP/SSE server from remotes - find first valid remote with url
242+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
243+
const remote = technicalData.remotes.find((r: any) => r && typeof r === 'object' && r.url)
244+
if (remote) {
245+
serverConfig = {
246+
url: remote.url,
247+
type: remote.type || 'sse',
248+
headers: remote.headers || {}
249+
}
247250
}
248251
} else if (technicalData.packages && Array.isArray(technicalData.packages) && technicalData.packages.length > 0) {
249-
// STDIO server from packages
250-
const pkg = technicalData.packages[0]
251-
if (pkg.transport) {
252+
// STDIO server from packages - find first valid package
253+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
254+
const pkg = technicalData.packages.find((p: any) => p && typeof p === 'object')
255+
if (pkg && pkg.transport) {
252256
serverConfig = {
253257
command: pkg.transport.command || 'npx',
254258
args: pkg.transport.args || [],

services/frontend/src/views/admin/mcp-server-catalog/view/[id].vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,12 @@ const displayRemotes = computed(() => {
102102
if (!server.value?.remotes) return []
103103
// Handle both array and JSON string formats
104104
if (Array.isArray(server.value.remotes)) {
105-
return server.value.remotes.filter(remote => remote != null)
105+
return server.value.remotes.filter(remote => remote != null && typeof remote === 'object' && remote.url)
106106
}
107107
try {
108108
// eslint-disable-next-line @typescript-eslint/no-explicit-any
109109
const parsed = JSON.parse(server.value.remotes as any)
110-
return Array.isArray(parsed) ? parsed.filter(remote => remote != null) : []
110+
return Array.isArray(parsed) ? parsed.filter(remote => remote != null && typeof remote === 'object' && remote.url) : []
111111
} catch {
112112
return []
113113
}

0 commit comments

Comments
 (0)