diff --git a/mateclaw-ui/src/i18n/locales/en-US.ts b/mateclaw-ui/src/i18n/locales/en-US.ts index 46baeb00..40dce031 100644 --- a/mateclaw-ui/src/i18n/locales/en-US.ts +++ b/mateclaw-ui/src/i18n/locales/en-US.ts @@ -244,7 +244,9 @@ export default { connect: 'Connect', system: 'System', datasources: 'Datasources', - mcpServers: 'MCP Servers', + mcpServers: 'MCP Connections', + mcpConnections: 'MCP Connections', + toolsCatalog: 'Tools (Catalog)', settingsGroup: 'Settings', agents: 'Agents', security: 'Security', @@ -1046,9 +1048,9 @@ export default { }, mcp: { kicker: 'Capability Bridge', - title: 'MCP Server Management', + title: 'MCP Connections', desc: 'Manage MCP (Model Context Protocol) server connections', - addServer: 'Add Server', + addServer: 'Add Connection', refreshAll: 'Refresh All', columns: { name: 'Name', @@ -1071,8 +1073,8 @@ export default { streamable_http: 'HTTP', }, modal: { - newTitle: 'Add MCP Server', - editTitle: 'Edit MCP Server', + newTitle: 'Add MCP Connection', + editTitle: 'Edit MCP Connection', }, fields: { name: 'Name', @@ -1109,16 +1111,16 @@ export default { latency: 'Latency {ms}ms', }, messages: { - loadFailed: 'Failed to load MCP servers', - createSuccess: 'MCP server created', - updateSuccess: 'MCP server updated', - deleteSuccess: 'MCP server deleted', - deleteConfirm: 'Delete MCP server "{name}"?', + loadFailed: 'Failed to load MCP connections', + createSuccess: 'MCP connection created', + updateSuccess: 'MCP connection updated', + deleteSuccess: 'MCP connection deleted', + deleteConfirm: 'Delete MCP connection "{name}"?', toggleSuccess: 'Status updated', - refreshSuccess: 'All servers refreshed', + refreshSuccess: 'All connections refreshed', saveFailed: 'Failed to save', - empty: 'No MCP servers', - emptyDesc: 'Add an MCP server to extend your agents\' capabilities', + empty: 'No MCP connections', + emptyDesc: 'Add an MCP connection to extend your agents\' capabilities', }, }, sessions: { @@ -1150,8 +1152,9 @@ export default { }, }, tools: { - title: 'Tools', - desc: 'Manage tools available to your agents', + kicker: 'Developer Catalog', + title: 'Tools (Catalog)', + desc: 'Atomic actions exposed by installed skills. Use the Skills page for end-user binding.', registerButton: 'Register Tool', columns: { tool: 'Tool', diff --git a/mateclaw-ui/src/i18n/locales/zh-CN.ts b/mateclaw-ui/src/i18n/locales/zh-CN.ts index cd766db8..5fbcdecb 100644 --- a/mateclaw-ui/src/i18n/locales/zh-CN.ts +++ b/mateclaw-ui/src/i18n/locales/zh-CN.ts @@ -244,7 +244,9 @@ export default { tools: '工具', plugins: '插件', datasources: '数据源', - mcpServers: 'MCP 服务', + mcpServers: 'MCP 连接', + mcpConnections: 'MCP 连接', + toolsCatalog: '工具目录', settingsGroup: '设置', agents: '智能体', security: '安全', @@ -1046,9 +1048,9 @@ export default { }, mcp: { kicker: '能力桥接', - title: 'MCP 服务管理', + title: 'MCP 连接', desc: '管理 MCP (Model Context Protocol) 服务器连接', - addServer: '添加服务', + addServer: '添加连接', refreshAll: '全量刷新', columns: { name: '名称', @@ -1071,8 +1073,8 @@ export default { streamable_http: 'HTTP', }, modal: { - newTitle: '添加 MCP 服务', - editTitle: '编辑 MCP 服务', + newTitle: '添加 MCP 连接', + editTitle: '编辑 MCP 连接', }, fields: { name: '名称', @@ -1109,16 +1111,16 @@ export default { latency: '延迟 {ms}ms', }, messages: { - loadFailed: '加载 MCP 服务列表失败', - createSuccess: 'MCP 服务已创建', - updateSuccess: 'MCP 服务已更新', - deleteSuccess: 'MCP 服务已删除', - deleteConfirm: '确认删除 MCP 服务 "{name}" 吗?', + loadFailed: '加载 MCP 连接列表失败', + createSuccess: 'MCP 连接已创建', + updateSuccess: 'MCP 连接已更新', + deleteSuccess: 'MCP 连接已删除', + deleteConfirm: '确认删除 MCP 连接 "{name}" 吗?', toggleSuccess: '状态已更新', refreshSuccess: '全量刷新完成', saveFailed: '保存失败', - empty: '暂无 MCP 服务', - emptyDesc: '添加一个 MCP 服务来扩展 Agent 的能力', + empty: '暂无 MCP 连接', + emptyDesc: '添加一个 MCP 连接来扩展 Agent 的能力', }, }, sessions: { @@ -1150,8 +1152,9 @@ export default { }, }, tools: { - title: '工具管理', - desc: '管理 Agent 可用的工具', + kicker: '开发者目录', + title: '工具目录', + desc: '已安装 Skill 暴露的原子动作。终端绑定请使用 Skills 页。', registerButton: '注册工具', columns: { tool: '工具', diff --git a/mateclaw-ui/src/router/index.ts b/mateclaw-ui/src/router/index.ts index 5f9e6af6..e7892a76 100644 --- a/mateclaw-ui/src/router/index.ts +++ b/mateclaw-ui/src/router/index.ts @@ -55,12 +55,8 @@ const router = createRouter({ component: () => import('@/views/SkillMarket.vue'), meta: { title: 'Skills' }, }, - { - path: 'tools', - name: 'Tools', - component: () => import('@/views/Tools.vue'), - meta: { title: 'Tools' }, - }, + // Tools 顶层入口已降级到 Settings ▸ Tools (Catalog) (RFC-090 Phase 1) + // 旧路径 /tools 由下方 redirect 兼容 { path: 'plugins', name: 'Plugins', @@ -157,7 +153,13 @@ const router = createRouter({ path: 'mcp-servers', name: 'SettingsMcpServers', component: () => import('@/views/McpServers.vue'), - meta: { title: 'Settings - MCP Servers' }, + meta: { title: 'Settings - MCP Connections' }, + }, + { + path: 'tools', + name: 'SettingsTools', + component: () => import('@/views/Tools.vue'), + meta: { title: 'Settings - Tools Catalog' }, }, { path: 'token-usage', @@ -209,6 +211,8 @@ const router = createRouter({ { path: 'datasources', redirect: '/settings/datasources' }, { path: 'mcp-servers', redirect: '/settings/mcp-servers' }, { path: 'token-usage', redirect: '/settings/token-usage' }, + // RFC-090 Phase 1: Tools 顶层降级到 Settings + { path: 'tools', redirect: '/settings/tools' }, ], }, { diff --git a/mateclaw-ui/src/views/Settings/Layout.vue b/mateclaw-ui/src/views/Settings/Layout.vue index 3f0a036e..3fbd1abf 100644 --- a/mateclaw-ui/src/views/Settings/Layout.vue +++ b/mateclaw-ui/src/views/Settings/Layout.vue @@ -165,9 +165,15 @@ const sections = computed(() => [ { id: 'mcp-servers', path: '/settings/mcp-servers', - label: t('nav.mcpServers'), + label: t('nav.mcpConnections'), icon: '', }, + { + id: 'tools', + path: '/settings/tools', + label: t('nav.toolsCatalog'), + icon: '', + }, { id: 'token-usage', path: '/settings/token-usage', diff --git a/mateclaw-ui/src/views/Tools.vue b/mateclaw-ui/src/views/Tools.vue index d38652f6..7cc5d29e 100644 --- a/mateclaw-ui/src/views/Tools.vue +++ b/mateclaw-ui/src/views/Tools.vue @@ -4,7 +4,7 @@
{{ t('tools.desc') }}
{{ tool.beanName }}
{{ tool.beanName }}{{ t('tools.empty') }}
@@ -221,6 +220,7 @@ async function toggleTool(tool: Tool) { .tool-name { font-weight: 500; color: var(--mc-text-primary); } .tool-desc { font-size: 12px; color: var(--mc-text-tertiary); margin-top: 1px; } .bean-name { background: var(--mc-bg-sunken); padding: 2px 8px; border-radius: 4px; font-size: 12px; color: var(--mc-text-primary); } +.tool-bean { display: inline-block; margin-top: 4px; padding: 1px 6px; background: var(--mc-bg-sunken); border-radius: 4px; font-size: 11px; color: var(--mc-text-tertiary); font-family: var(--mc-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace); } .type-badge { padding: 3px 10px; border-radius: 10px; font-size: 12px; font-weight: 500; } .type-builtin { background: var(--mc-primary-bg); color: var(--mc-primary); } .type-mcp { background: var(--mc-primary-bg); color: var(--mc-primary-hover); } diff --git a/mateclaw-ui/src/views/layout/MainLayout.vue b/mateclaw-ui/src/views/layout/MainLayout.vue index 636f1687..f4990241 100644 --- a/mateclaw-ui/src/views/layout/MainLayout.vue +++ b/mateclaw-ui/src/views/layout/MainLayout.vue @@ -338,11 +338,6 @@ const navGroups = computed(() => [ label: t('nav.skills'), icon: ``, }, - { - path: '/tools', - label: t('nav.tools'), - icon: ``, - }, { path: '/plugins', label: t('nav.plugins'),