MCP_Playground / ui_components /add_mcp_server_button.py
Aabbhishekk's picture
Upload 3 files
e37ee12 verified
import modelscope_studio.components.antd as antd
import modelscope_studio.components.base as ms
import gradio as gr
import json
def AddMcpServerButton():
with antd.Button("添加 MCP Server", type="primary",
size="small") as add_mcp_server_btn:
with ms.Slot("icon"):
antd.Icon("PlusOutlined")
with antd.Modal(
title="添加 MCP Server",
footer=False,
styles=dict(footer=dict(display="none"))) as add_mcp_server_modal:
with antd.Tabs():
with antd.Tabs.Item(label="表单添加"):
with antd.Form(layout="vertical") as add_mcp_server_form:
with antd.Form.Item(form_name="name",
label="名称",
rules=[{
"required": True
}]):
antd.Input(placeholder="MCP Server 名称,如 fetch、time 等")
with antd.Form.Item(form_name="url",
label="SSE 链接",
rules=[{
"required": True
}]):
antd.Input(placeholder="MCP Server SSE 链接")
with antd.Flex(gap="small", justify="end"):
add_mcp_server_modal_cancel_btn = antd.Button("取消")
antd.Button("确定", html_type="submit", type="primary")
with antd.Tabs.Item(label="JSON 添加"):
with antd.Form(layout="vertical") as add_mcp_server_json_form:
with antd.Form.Item(form_name="json",
label="JSON",
rules=[{
"required":
True,
"validator":
"""(_, value) => {
if (!value) {
return Promise.reject('请输入 JSON 值');
}
try {
const parsedValue = JSON.parse(value);
if (!parsedValue.mcpServers || typeof parsedValue.mcpServers !== 'object') {
return Promise.reject('配置必须包含正确的 mcpServers 字段');
}
return Promise.resolve()
} catch {
return Promise.reject('请输入有效的 JSON 值');
}
} """
}]):
antd.Input.Textarea(
auto_size=dict(minRows=4, maxRows=8),
placeholder=json.dumps(
{
"mcpServers": {
"fetch": {
"type": "sse",
"url": "mcp server sse url"
}
}
},
indent=4))
with antd.Flex(gap="small", justify="end"):
add_mcp_server_modal_json_cancel_btn = antd.Button(
"取消")
antd.Button("确定", html_type="submit", type="primary")
add_mcp_server_btn.click(fn=lambda: gr.update(open=True),
outputs=[add_mcp_server_modal],
queue=False)
gr.on(triggers=[
add_mcp_server_modal_cancel_btn.click,
add_mcp_server_modal_json_cancel_btn.click, add_mcp_server_modal.cancel
],
queue=False,
fn=lambda: gr.update(open=False),
outputs=[add_mcp_server_modal])
add_mcp_server_form.finish(
lambda: (gr.update(value={
"name": "",
"url": "",
}), gr.update(open=False)),
outputs=[add_mcp_server_form, add_mcp_server_modal])
add_mcp_server_json_form.finish(
lambda: (gr.update(value={"json": ""}), gr.update(open=False)),
outputs=[add_mcp_server_json_form, add_mcp_server_modal])
return add_mcp_server_form, add_mcp_server_json_form