diff --git a/astrbot/dashboard/routes/tools.py b/astrbot/dashboard/routes/tools.py index b35f977f..3444a36d 100644 --- a/astrbot/dashboard/routes/tools.py +++ b/astrbot/dashboard/routes/tools.py @@ -267,31 +267,6 @@ class ToolsRoute(Route): logger.error(traceback.format_exc()) return Response().error(f"删除 MCP 服务器失败: {str(e)}").__dict__ - async def get_mcp_markets(self): - page = request.args.get("page", 1, type=int) - page_size = request.args.get("page_size", 10, type=int) - BASE_URL = ( - "https://api.soulter.top/astrbot/mcpservers?page={}&page_size={}".format( - page, - page_size, - ) - ) - try: - async with aiohttp.ClientSession() as session: - async with session.get(f"{BASE_URL}") as response: - if response.status == 200: - data = await response.json() - return Response().ok(data["data"]).__dict__ - else: - return ( - Response() - .error(f"获取市场数据失败: HTTP {response.status}") - .__dict__ - ) - except Exception as _: - logger.error(traceback.format_exc()) - return Response().error("获取市场数据失败").__dict__ - async def test_mcp_connection(self): """ 测试 MCP 服务器连接 diff --git a/dashboard/src/views/ToolUsePage.vue b/dashboard/src/views/ToolUsePage.vue index 348a05db..4cb2183d 100644 --- a/dashboard/src/views/ToolUsePage.vue +++ b/dashboard/src/views/ToolUsePage.vue @@ -36,190 +36,81 @@ - - - - mdi-server - {{ tm('tabs.local') }} - - - mdi-store - {{ tm('tabs.marketplace') }} - - {{ tm('tooltip.marketplace') }} - - - + - - - - + -
- mdi-server-off -

{{ tm('mcpServers.empty') }}

-
+
+ mdi-server-off +

{{ tm('mcpServers.empty') }}

+
- - - - + + + @@ -347,106 +238,6 @@ - - - - - mdi-information-outline - {{ tm('dialogs.serverDetail.title') }} - - - mdi-close - - - - -

{{ selectedMarketplaceServer.name }}

- -
-

{{ tm('dialogs.serverDetail.installConfig') }}

-
- -
-
- -
-

- {{ tm('dialogs.serverDetail.availableTools') }} - {{ selectedMarketplaceServer.tools.length }} -

- - - - -
- mdi-function-variant - {{ tool.name }} -
-
- - -

{{ tool.description }}

- - -
-
-
-
-
- - - - - - - {{ tm('dialogs.serverDetail.buttons.close') }} - - - {{ tm('dialogs.serverDetail.buttons.importConfig') }} - - -
-
- @@ -583,7 +374,6 @@ export default { data() { return { refreshInterval: null, - activeTab: 'local', // 当前激活的标签页 mcpServers: [], tools: [], showMcpServerDialog: false, @@ -593,7 +383,6 @@ export default { mcpProviderToken: '', showSyncMcpServerDialog: false, - showServerDetailDialog: false, addServerDialogMessage: "", showToolsDialog: false, showTools: true, @@ -613,19 +402,6 @@ export default { save_message_success: "success", toolSearch: '', openedPanel: [], // 存储打开的面板索引 - - // MCP 市场相关 - marketplaceServers: [], - marketplaceLoading: false, - marketplaceSearch: '', - selectedMarketplaceServer: null, - selectedServerConfigDisplay: '', - - // 分页相关 - currentMarketPage: 1, - marketPageSize: 9, // 每页显示9个服务器,适合3列布局 - totalMarketPages: 1, - totalMarketItems: 0, } }, @@ -663,26 +439,11 @@ export default { return this.tm('mcpServers.status.noConfig'); } }, - - // 过滤后的市场服务器 - filteredMarketplaceServers() { - if (!this.marketplaceSearch.trim()) { - return this.marketplaceServers; - } - - const searchTerm = this.marketplaceSearch.toLowerCase(); - return this.marketplaceServers.filter(server => - server.name.toLowerCase().includes(searchTerm) || - (server.name_h && server.name_h.toLowerCase().includes(searchTerm)) || - (server.description && server.description.toLowerCase().includes(searchTerm)) - ); - }, }, mounted() { this.getServers(); this.getTools(); - this.fetchMarketplaceServers(); this.refreshInterval = setInterval(() => { this.getServers(); @@ -940,116 +701,7 @@ export default { this.save_message_snack = true; }, - // MCP 市场相关方法 - - // 获取市场服务器列表 - fetchMarketplaceServers(page = 1) { - this.marketplaceLoading = true; - - // 构建请求参数 - const params = { - page: page, - page_size: this.marketPageSize - }; - - // 如果有搜索关键词,添加到请求参数 - if (this.marketplaceSearch.trim()) { - params.search = this.marketplaceSearch.trim(); - } - - axios.get('/api/tools/mcp/market', { params }) - .then(response => { - this.marketplaceServers = response.data.data.mcpservers || []; - - // 更新分页信息 - if (response.data.data.pagination) { - this.totalMarketItems = response.data.data.pagination.total || 0; - this.totalMarketPages = response.data.data.pagination.totalPages || 1; - this.currentMarketPage = response.data.data.pagination.currentPage || 1; - } else { - // 如果后端没有返回分页信息,根据返回的数据量估算 - this.totalMarketPages = Math.ceil(this.marketplaceServers.length / this.marketPageSize) || 1; - } - - this.marketplaceLoading = false; - }) - .catch(error => { - this.showError(this.tm('messages.getMarketError', { error: error.message })); - this.marketplaceLoading = false; - }); - }, - - // 搜索市场服务器 - searchMarketplaceServers() { - // 重置到第一页,然后获取结果 - this.currentMarketPage = 1; - this.fetchMarketplaceServers(1); - }, - - // 切换分页 - changePage(page) { - this.fetchMarketplaceServers(page); - }, - - // 显示服务器详情 - showServerDetail(server) { - this.selectedMarketplaceServer = server; - - // 格式化服务器配置的显示 - try { - if (server.config) { - const configs = JSON.parse(server.config); - this.selectedServerConfigDisplay = JSON.stringify(configs[0], null, 2); - } else { - this.selectedServerConfigDisplay = '// ' + this.tm('messages.noAvailableConfig'); - } - } catch (e) { - this.selectedServerConfigDisplay = '// ' + this.tm('messages.configParseError', { error: e.message }); - } - - this.showServerDetailDialog = true; - }, - - // 导入服务器配置 - importServerConfig(server) { - try { - // 解析服务器配置 - if (!server.config) { - this.showError(this.tm('messages.importError.noConfig')); - return; - } - - const configs = JSON.parse(server.config); - if (!configs || !configs[0] || !configs[0].mcpServers) { - this.showError(this.tm('messages.importError.invalidFormat')); - return; - } - - // 找到服务器名称和配置 - const serverName = server.name; - const serverConfig = configs[0] - - // 设置表单数据 - this.currentServer = { - name: serverName, - active: true, - tools: [] - }; - - // 设置配置JSON - this.serverConfigJson = JSON.stringify(serverConfig, null, 2); - - // 关闭详情对话框(如果打开的话) - this.showServerDetailDialog = false; - - // 打开添加服务器对话框 - this.isEditMode = false; - this.showMcpServerDialog = true; - - } catch (e) { - this.showError(this.tm('messages.importError.failed', { error: e.message })); - } - }, + // MCP 市场相关方法已移除 // 切换工具状态 async toggleToolStatus(tool) { @@ -1158,19 +810,4 @@ export default { margin-top: 4px; overflow: hidden; } - -.marketplace-card { - position: relative; - border-radius: 8px; - transition: all 0.3s ease; -} - -.text-truncate-2 { - display: -webkit-box; - -webkit-line-clamp: 2; - line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; - text-overflow: ellipsis; -} \ No newline at end of file