2026-01-29 14:53:06 +08:00
|
|
|
<div class="mcp-container">
|
2026-01-31 19:36:55 +08:00
|
|
|
<div class="tabs">
|
|
|
|
|
<ui-button id="tabMain" class="tab-button active">Main</ui-button>
|
|
|
|
|
<ui-button id="tabTest" class="tab-button">Tool Test</ui-button>
|
|
|
|
|
</div>
|
2026-01-31 16:48:21 +08:00
|
|
|
|
2026-01-31 19:36:55 +08:00
|
|
|
<div id="panelMain" class="tab-content active">
|
|
|
|
|
<div class="toolbar">
|
|
|
|
|
<div class="ctrl-group">
|
|
|
|
|
<span>Port:</span>
|
|
|
|
|
<ui-input id="portInput" style="width: 60px;"></ui-input>
|
|
|
|
|
<ui-button id="btnToggle">Start</ui-button>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ctrl-group" style="margin-left: 10px">
|
|
|
|
|
<ui-checkbox id="autoStartCheck">Auto Start</ui-checkbox>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="spacer"></div>
|
|
|
|
|
<ui-button id="btnClear" class="transparent">Clear</ui-button>
|
|
|
|
|
<ui-button id="btnCopy" class="transparent">Copy All</ui-button>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="logConsole" class="log-view"></div>
|
|
|
|
|
</div>
|
2026-01-29 14:53:06 +08:00
|
|
|
|
2026-01-31 19:36:55 +08:00
|
|
|
<div id="panelTest" class="tab-content">
|
|
|
|
|
<div class="test-layout">
|
|
|
|
|
<div class="left-panel" id="testLeftPanel">
|
|
|
|
|
<div class="form-item">
|
|
|
|
|
<label>工具名称:</label>
|
|
|
|
|
<ui-input id="toolName" placeholder="选中下方列表填充"></ui-input>
|
|
|
|
|
</div>
|
|
|
|
|
<label>可用工具列表:</label>
|
|
|
|
|
<div class="tools-list" id="toolsList"></div>
|
|
|
|
|
</div>
|
2026-01-31 16:48:21 +08:00
|
|
|
|
2026-01-31 19:36:55 +08:00
|
|
|
<!-- 拖动条 -->
|
|
|
|
|
<div class="resizer" id="testResizer"></div>
|
2026-01-29 14:53:06 +08:00
|
|
|
|
2026-01-31 19:36:55 +08:00
|
|
|
<div class="right-panel">
|
2026-02-01 13:30:11 +08:00
|
|
|
<div class="tool-description">
|
|
|
|
|
<label>工具说明:</label>
|
|
|
|
|
<div id="toolDescription" class="description-box">选择工具查看说明</div>
|
|
|
|
|
</div>
|
2026-01-31 19:36:55 +08:00
|
|
|
<div class="flex-v">
|
|
|
|
|
<label>工具参数 (JSON):</label>
|
|
|
|
|
<textarea id="toolParams" spellcheck="false" placeholder='{}'></textarea>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="button-group">
|
|
|
|
|
<ui-button id="testBtn" class="green">测试工具</ui-button>
|
|
|
|
|
<ui-button id="listToolsBtn">刷新列表</ui-button>
|
|
|
|
|
<ui-button id="clearTestBtn">清空结果</ui-button>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="flex-v">
|
|
|
|
|
<label>测试结果:</label>
|
|
|
|
|
<textarea id="resultContent" readonly spellcheck="false"></textarea>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-01-29 14:53:06 +08:00
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<style>
|
2026-01-31 19:36:55 +08:00
|
|
|
:host { height: 100%; display: flex; background-color: #2d2d2d; overflow: hidden; }
|
|
|
|
|
.mcp-container { display: flex; flex-direction: column; width: 100%; height: 100%; padding: 5px; box-sizing: border-box; }
|
|
|
|
|
.tabs { display: flex; border-bottom: 1px solid #444; margin-bottom: 5px; flex-shrink: 0; }
|
|
|
|
|
.tab-button { padding: 4px 12px; margin-right: 2px; background: #333; }
|
|
|
|
|
.tab-button.active { background: #4CAF50; color: white; }
|
|
|
|
|
.tab-content { display: none; flex: 1; flex-direction: column; min-height: 0; overflow: hidden; }
|
|
|
|
|
.tab-content.active { display: flex; }
|
2026-01-29 14:53:06 +08:00
|
|
|
|
2026-01-31 19:36:55 +08:00
|
|
|
/* Main Panel */
|
|
|
|
|
.toolbar { display: flex; align-items: center; padding: 5px 0; gap: 5px; flex-shrink: 0; }
|
|
|
|
|
.spacer { flex: 1; }
|
|
|
|
|
.log-view { flex: 1; background: #1a1a1a; margin-top: 5px; overflow-y: auto; padding: 8px; font-family: monospace; font-size: 11px; -webkit-user-select: text; min-height: 0; }
|
|
|
|
|
.log-item { border-left: 4px solid #555; padding-left: 8px; margin-bottom: 3px; white-space: pre-wrap; word-break: break-all; }
|
|
|
|
|
.log-item.info { border-left-color: #61afef; color: #abb2bf; }
|
|
|
|
|
.log-item.success { border-left-color: #98c379; color: #98c379; }
|
|
|
|
|
.log-item.warn { border-left-color: #e5c07b; color: #e5c07b; }
|
|
|
|
|
.log-item.error { border-left-color: #e06c75; color: #e06c75; }
|
|
|
|
|
.log-item.mcp { border-left-color: #c678dd; color: #d19a66; background: rgba(198, 120, 221, 0.05); }
|
|
|
|
|
.time { color: #5c6370; margin-right: 8px; }
|
2026-01-31 16:48:21 +08:00
|
|
|
|
2026-01-31 19:36:55 +08:00
|
|
|
/* Test Panel */
|
|
|
|
|
.test-layout { display: flex; flex: 1; min-height: 0; }
|
|
|
|
|
.left-panel { width: 250px; min-width: 150px; max-width: 500px; display: flex; flex-direction: column; flex-shrink: 0; min-height: 0; }
|
|
|
|
|
.resizer { width: 6px; cursor: col-resize; background: #1a1a1a; flex-shrink: 0; }
|
|
|
|
|
.resizer:hover { background: #4CAF50; }
|
|
|
|
|
.right-panel { flex: 1; display: flex; flex-direction: column; min-width: 0; padding-left: 5px; }
|
|
|
|
|
.tools-list { flex: 1; background: #222; border: 1px solid #444; overflow-y: auto; margin-top: 5px; }
|
|
|
|
|
.tool-item { padding: 6px; border-bottom: 1px solid #333; cursor: pointer; font-size: 11px; }
|
|
|
|
|
.tool-item:hover { background: #444; }
|
|
|
|
|
.flex-v { display: flex; flex-direction: column; flex: 1; min-height: 0; }
|
|
|
|
|
textarea { width: 100%; background: #222; color: #ccc; border: 1px solid #444; padding: 5px; font-family: monospace; resize: none; }
|
|
|
|
|
#toolParams { height: 120px; flex-shrink: 0; }
|
|
|
|
|
#resultContent { flex: 1; }
|
|
|
|
|
.button-group { display: flex; gap: 5px; padding: 5px 0; }
|
|
|
|
|
label { font-size: 11px; color: #888; margin: 4px 0; }
|
2026-02-01 13:30:11 +08:00
|
|
|
.tool-description {
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
}
|
|
|
|
|
.description-box {
|
|
|
|
|
background: #222;
|
|
|
|
|
color: #ccc;
|
|
|
|
|
border: 1px solid #444;
|
|
|
|
|
padding: 8px;
|
|
|
|
|
font-size: 11px;
|
|
|
|
|
line-height: 1.4;
|
|
|
|
|
min-height: 60px;
|
|
|
|
|
max-height: 120px;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
border-radius: 2px;
|
|
|
|
|
}
|
2026-01-31 19:36:55 +08:00
|
|
|
</style>
|