fix(config): validate MCP server fields only when active
This commit is contained in:
parent
c1442a9b42
commit
1cff4f8d5a
1 changed files with 128 additions and 114 deletions
|
|
@ -307,6 +307,8 @@ export function ConfigPage() {
|
|||
enabled: form.execEnabled,
|
||||
}
|
||||
|
||||
let mcpServersPatch: Record<string, Record<string, unknown> | null> = {}
|
||||
if (form.mcpEnabled) {
|
||||
const baselineServerNames = new Set(
|
||||
baseline.mcpServers
|
||||
.map((server) => server.name.trim())
|
||||
|
|
@ -363,12 +365,14 @@ export function ConfigPage() {
|
|||
const upsertServerEntries = normalizedServers.map((server) => {
|
||||
const deferredPatch = { deferred: server.deferredOverride }
|
||||
const baselineServer = baselineServersByName.get(server.name)
|
||||
const shouldValidateServer = server.enabled
|
||||
|
||||
if (server.type !== "stdio") {
|
||||
if (server.url === "") {
|
||||
if (shouldValidateServer && server.url === "") {
|
||||
throw new Error(`MCP server ${server.name} requires a URL.`)
|
||||
}
|
||||
|
||||
if (shouldValidateServer) {
|
||||
try {
|
||||
const parsedURL = new URL(server.url)
|
||||
if (
|
||||
|
|
@ -382,6 +386,14 @@ export function ConfigPage() {
|
|||
`MCP server ${server.name} requires a valid HTTP(S) URL.`,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const baselineHeaders = baselineServer
|
||||
? parseJSONObjectField(
|
||||
baselineServer.headersText,
|
||||
`Saved MCP server ${server.name} headers`,
|
||||
)
|
||||
: {}
|
||||
|
||||
return [
|
||||
server.name,
|
||||
|
|
@ -391,16 +403,13 @@ export function ConfigPage() {
|
|||
type: server.type,
|
||||
url: server.url,
|
||||
headers: buildStringMapMergePatch(
|
||||
parseJSONObjectField(
|
||||
shouldValidateServer
|
||||
? parseJSONObjectField(
|
||||
server.headersText,
|
||||
`MCP server ${server.name} headers`,
|
||||
),
|
||||
baselineServer
|
||||
? parseJSONObjectField(
|
||||
baselineServer.headersText,
|
||||
`Saved MCP server ${server.name} headers`,
|
||||
)
|
||||
: {},
|
||||
: baselineHeaders,
|
||||
baselineHeaders,
|
||||
),
|
||||
command: null,
|
||||
args: null,
|
||||
|
|
@ -410,10 +419,17 @@ export function ConfigPage() {
|
|||
] as const
|
||||
}
|
||||
|
||||
if (server.command === "") {
|
||||
if (shouldValidateServer && server.command === "") {
|
||||
throw new Error(`MCP server ${server.name} requires a command.`)
|
||||
}
|
||||
|
||||
const baselineEnv = baselineServer
|
||||
? parseJSONObjectField(
|
||||
baselineServer.envText,
|
||||
`Saved MCP server ${server.name} env`,
|
||||
)
|
||||
: {}
|
||||
|
||||
return [
|
||||
server.name,
|
||||
{
|
||||
|
|
@ -423,16 +439,13 @@ export function ConfigPage() {
|
|||
command: server.command,
|
||||
args: parseMultilineList(server.argsText),
|
||||
env: buildStringMapMergePatch(
|
||||
parseJSONObjectField(
|
||||
shouldValidateServer
|
||||
? parseJSONObjectField(
|
||||
server.envText,
|
||||
`MCP server ${server.name} env`,
|
||||
),
|
||||
baselineServer
|
||||
? parseJSONObjectField(
|
||||
baselineServer.envText,
|
||||
`Saved MCP server ${server.name} env`,
|
||||
)
|
||||
: {},
|
||||
: baselineEnv,
|
||||
baselineEnv,
|
||||
),
|
||||
env_file: server.envFile === "" ? null : server.envFile,
|
||||
url: null,
|
||||
|
|
@ -441,10 +454,11 @@ export function ConfigPage() {
|
|||
] as const
|
||||
})
|
||||
|
||||
const mcpServersPatch = Object.fromEntries([
|
||||
mcpServersPatch = Object.fromEntries([
|
||||
...upsertServerEntries,
|
||||
...removedServerEntries,
|
||||
])
|
||||
}
|
||||
|
||||
if (form.execEnabled) {
|
||||
execConfigPatch.allow_remote = form.allowRemote
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue