Validate remote MCP URLs in config UI
This commit is contained in:
parent
bc8c08d930
commit
7c989ce26c
4 changed files with 73 additions and 0 deletions
|
|
@ -338,6 +338,20 @@ export function ConfigPage() {
|
||||||
throw new Error(`MCP server ${server.name} requires a URL.`)
|
throw new Error(`MCP server ${server.name} requires a URL.`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const parsedURL = new URL(server.url)
|
||||||
|
if (
|
||||||
|
parsedURL.protocol !== "http:" &&
|
||||||
|
parsedURL.protocol !== "https:"
|
||||||
|
) {
|
||||||
|
throw new Error("invalid protocol")
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
throw new Error(
|
||||||
|
`MCP server ${server.name} requires a valid HTTP(S) URL.`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
server.name,
|
server.name,
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -399,6 +399,42 @@ export function MCPSection({
|
||||||
onServerFieldChange(server.id, "enabled", checked)
|
onServerFieldChange(server.id, "enabled", checked)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<Select
|
||||||
|
value={
|
||||||
|
server.deferredOverride === null
|
||||||
|
? "inherit"
|
||||||
|
: server.deferredOverride
|
||||||
|
? "deferred"
|
||||||
|
: "eager"
|
||||||
|
}
|
||||||
|
onValueChange={(value) =>
|
||||||
|
onServerFieldChange(
|
||||||
|
server.id,
|
||||||
|
"deferredOverride",
|
||||||
|
value === "inherit" ? null : value === "deferred",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<SelectTrigger>
|
||||||
|
<SelectValue
|
||||||
|
placeholder={t(
|
||||||
|
"pages.config.mcp_server_discovery_mode",
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent>
|
||||||
|
<SelectItem value="inherit">
|
||||||
|
{t("pages.config.mcp_server_discovery_mode_inherit")}
|
||||||
|
</SelectItem>
|
||||||
|
<SelectItem value="deferred">
|
||||||
|
{t("pages.config.mcp_server_discovery_mode_deferred")}
|
||||||
|
</SelectItem>
|
||||||
|
<SelectItem value="eager">
|
||||||
|
{t("pages.config.mcp_server_discovery_mode_eager")}
|
||||||
|
</SelectItem>
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{server.type !== "stdio" ? (
|
{server.type !== "stdio" ? (
|
||||||
|
|
@ -442,6 +478,19 @@ export function MCPSection({
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
<Input
|
||||||
|
value={server.envFile}
|
||||||
|
placeholder={t(
|
||||||
|
"pages.config.mcp_server_env_file_placeholder",
|
||||||
|
)}
|
||||||
|
onChange={(e) =>
|
||||||
|
onServerFieldChange(
|
||||||
|
server.id,
|
||||||
|
"envFile",
|
||||||
|
e.target.value,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
/>
|
||||||
<Textarea
|
<Textarea
|
||||||
value={server.argsText}
|
value={server.argsText}
|
||||||
placeholder={t(
|
placeholder={t(
|
||||||
|
|
|
||||||
|
|
@ -720,9 +720,14 @@
|
||||||
"mcp_server_add": "Add server",
|
"mcp_server_add": "Add server",
|
||||||
"mcp_server_remove": "Remove",
|
"mcp_server_remove": "Remove",
|
||||||
"mcp_server_enabled": "Enabled",
|
"mcp_server_enabled": "Enabled",
|
||||||
|
"mcp_server_discovery_mode": "Discovery mode",
|
||||||
|
"mcp_server_discovery_mode_inherit": "Follow global discovery mode",
|
||||||
|
"mcp_server_discovery_mode_deferred": "Deferred discovery",
|
||||||
|
"mcp_server_discovery_mode_eager": "Eager registration",
|
||||||
"mcp_server_name_placeholder": "Server name (e.g. github)",
|
"mcp_server_name_placeholder": "Server name (e.g. github)",
|
||||||
"mcp_server_url_placeholder": "Server URL (e.g. https://example.com/mcp)",
|
"mcp_server_url_placeholder": "Server URL (e.g. https://example.com/mcp)",
|
||||||
"mcp_server_command_placeholder": "Command (e.g. npx)",
|
"mcp_server_command_placeholder": "Command (e.g. npx)",
|
||||||
|
"mcp_server_env_file_placeholder": "Environment file path (optional)",
|
||||||
"mcp_server_args_placeholder": "Args, one per line",
|
"mcp_server_args_placeholder": "Args, one per line",
|
||||||
"mcp_server_env_placeholder": "Environment JSON object",
|
"mcp_server_env_placeholder": "Environment JSON object",
|
||||||
"mcp_server_headers_placeholder": "Headers JSON object",
|
"mcp_server_headers_placeholder": "Headers JSON object",
|
||||||
|
|
|
||||||
|
|
@ -720,9 +720,14 @@
|
||||||
"mcp_server_add": "添加服务器",
|
"mcp_server_add": "添加服务器",
|
||||||
"mcp_server_remove": "移除",
|
"mcp_server_remove": "移除",
|
||||||
"mcp_server_enabled": "已启用",
|
"mcp_server_enabled": "已启用",
|
||||||
|
"mcp_server_discovery_mode": "发现模式",
|
||||||
|
"mcp_server_discovery_mode_inherit": "跟随全局发现模式",
|
||||||
|
"mcp_server_discovery_mode_deferred": "延迟发现",
|
||||||
|
"mcp_server_discovery_mode_eager": "立即注册",
|
||||||
"mcp_server_name_placeholder": "服务器名称(例如 github)",
|
"mcp_server_name_placeholder": "服务器名称(例如 github)",
|
||||||
"mcp_server_url_placeholder": "服务器 URL(例如 https://example.com/mcp)",
|
"mcp_server_url_placeholder": "服务器 URL(例如 https://example.com/mcp)",
|
||||||
"mcp_server_command_placeholder": "命令(例如 npx)",
|
"mcp_server_command_placeholder": "命令(例如 npx)",
|
||||||
|
"mcp_server_env_file_placeholder": "环境变量文件路径(可选)",
|
||||||
"mcp_server_args_placeholder": "参数(每行一个)",
|
"mcp_server_args_placeholder": "参数(每行一个)",
|
||||||
"mcp_server_env_placeholder": "环境变量 JSON 对象",
|
"mcp_server_env_placeholder": "环境变量 JSON 对象",
|
||||||
"mcp_server_headers_placeholder": "请求头 JSON 对象",
|
"mcp_server_headers_placeholder": "请求头 JSON 对象",
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue