Skip to content

Commit 8298a2c

Browse files
committed
fix: review
1 parent fe7bc52 commit 8298a2c

File tree

4 files changed

+68
-50
lines changed

4 files changed

+68
-50
lines changed

docs/advanced-features/new-ai-plugin-usage.md

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -252,17 +252,32 @@ customCompatibleAIModels: [
252252
在options参数中可以通过如下参数配置MCP:
253253
- mcpConfig.mcpServers: 该参数配置添加自定义MCP 服务器,添加后的 MCP 服务器可以在AI插件的Sender输入框MCP配置中进行管理(控制服务器开关、查看并切换工具开关)。
254254
配置示例格式如下:
255-
```javascript
256-
mcpConfig: {
255+
```typescript
256+
interface McpServerConfig {
257+
type: 'SSE' | 'StreamableHttp'; // 必填,仅支持两种类型
258+
url: string; // 必填,MCP Server地址
259+
name?: string; // 可选,显示名称
260+
description?: string; // 可选,server描述
261+
icon?: string; // 可选,自定义图标URL
262+
}
263+
interface McpConfig {
257264
mcpServers: {
258-
// 支持添加自定义MCP Server服务器
259-
'img-search': {
260-
type: 'SSE', // 支持SSE和StreamableHttp两种类型
261-
icon: 'https://xxx', // 自定义图标
262-
url: 'https://xxxx/mcp' // 自定义MCP Server地址
263-
}
264-
}
265+
[serverName: string]: McpServerConfig; // server名称作为key,值为server配置
266+
};
265267
}
268+
// 使用示例
269+
const config: McpConfig = {
270+
mcpServers: {
271+
'img-search': {
272+
type: 'SSE',
273+
url: 'https://xxxx/mcp',
274+
name: '自定义MCP服务器',
275+
description: 'xxx',
276+
icon: 'https://xxx',
277+
},
278+
// 可以添加更多server配置...
279+
},
280+
};
266281
```
267282

268283
#### 自定义 Agent 模式上下文功能

packages/plugins/robot/meta.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ export default {
1919
mcpConfig: {
2020
mcpServers: {
2121
// 支持添加自定义MCP Server服务器
22-
// 'img-search': {
23-
// type: 'SSE', // 支持SSE和StreamableHttp两种类型
22+
// 'img-search': { // MCP 服务器 id, 使用英文
23+
// type: 'SSE', // 支持 SSE 和 StreamableHttp 两种类型
24+
// name: '自定义MCP服务器', // 显示名称
25+
// description: 'xxx', // 描述信息
2426
// icon: 'https://xxx', // 自定义图标
2527
// url: 'https://xxxx/mcp' // 自定义MCP Server地址
2628
// }

packages/plugins/robot/src/components/footer-extension/McpServer.vue

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
:show-market-tab="false"
1818
@plugin-expand="handlePluginExpand"
1919
@plugin-add="updateMcpServerStatus"
20-
@plugin-toggle="handlePluginToggle"
20+
@plugin-toggle="updateMcpServerToggle"
2121
@tool-toggle="updateMcpServerToolStatus"
2222
/>
2323
</div>
@@ -55,11 +55,6 @@ const {
5555
updateMcpServerToggle
5656
} = useMcpServer()
5757
58-
// 插件状态切换
59-
const handlePluginToggle = (plugin: PluginInfo, enabled: boolean) => {
60-
updateMcpServerToggle(plugin, enabled)
61-
}
62-
6358
// 插件展开状态变化
6459
const handlePluginExpand = (plugin: PluginInfo, expanded: boolean) => {
6560
const targetPlugin = installedPlugins.value.find((p) => p.id === plugin.id)

packages/plugins/robot/src/composables/features/useMcp.ts

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,21 @@ import { MCPHost } from '../../services/MCPHost'
88

99
const mcpHost = new MCPHost()
1010

11+
const defaultMcpIcon =
12+
'https://res.hc-cdn.com/lowcode-portal/1.1.80.20250515160330/assets/opentiny-tinyengine-logo-4f8a3801.svg'
13+
14+
enum PluginAddState {
15+
Added = 'added',
16+
Idle = 'idle',
17+
Loading = 'loading'
18+
}
19+
1120
const ENGINE_MCP_SERVER: PluginInfo = {
1221
id: 'tiny-engine-mcp-server',
1322
name: 'Tiny Engine MCP 工具',
14-
icon: 'https://res.hc-cdn.com/lowcode-portal/1.1.80.20250515160330/assets/opentiny-tinyengine-logo-4f8a3801.svg',
23+
icon: defaultMcpIcon,
1524
description: '使用TinyEngine设计器能力,如操作画布、编辑页面等',
16-
addState: 'added'
25+
addState: PluginAddState.Added
1726
}
1827

1928
const inUseMcpServers = ref<PluginInfo[]>([{ ...ENGINE_MCP_SERVER, enabled: true, expanded: true, tools: [] }])
@@ -94,13 +103,13 @@ const updateMcpServerToggle = async (server: PluginInfo, enabled: boolean) => {
94103

95104
const updateMcpServerStatus = async (server: PluginInfo, added: boolean) => {
96105
// 市场添加状态修改
97-
server.addState = added ? 'added' : 'idle'
106+
server.addState = added ? PluginAddState.Added : PluginAddState.Idle
98107
if (added) {
99108
const newServer: PluginInfo = {
100109
...server,
101110
id: server.id || `mcp-server-${Date.now()}`,
102111
enabled: true,
103-
addState: 'added',
112+
addState: PluginAddState.Added,
104113
expanded: false,
105114
tools: server.tools || []
106115
}
@@ -129,37 +138,34 @@ const updateMcpServerToolStatus = (currentServer: PluginInfo, toolId: string, en
129138
}
130139

131140
const updateCustomMcpServers = async () => {
132-
const customMcpServers = getRobotServiceOptions().mcpConfig?.mcpServers || {}
133-
if (Object.keys(customMcpServers).length > 0) {
134-
if (
135-
Object.values(customMcpServers).some(
136-
(server) => !['streamablehttp', 'sse'].includes(server.type?.toLowerCase()) || !server.url
137-
)
138-
) {
139-
return {
140-
result: 'failed',
141-
message: '解析JSON失败,缺少type或url字段'
142-
}
141+
const mcpServersConfig = getRobotServiceOptions().mcpConfig?.mcpServers || {}
142+
if (!Object.keys(mcpServersConfig).length) return
143+
const customMcpServers = Object.entries(mcpServersConfig).map(([id, config]) => ({ id, ...config }))
144+
const logger = console
145+
146+
customMcpServers.forEach((server) => {
147+
if (!['streamablehttp', 'sse'].includes(server.type?.toLowerCase()) || !server.url) {
148+
logger.error(`解析mcpServer: ${server.id} 配置失败,type/url字段缺失或有误.`)
149+
return
143150
}
144-
for (const [serverName, server] of Object.entries(customMcpServers)) {
145-
if (inUseMcpServers.value.find((s) => s.id === serverName)) {
146-
continue
147-
}
148-
const newServer: PluginInfo = {
149-
id: serverName,
150-
name: serverName,
151-
icon: server.icon,
152-
description: server.description,
153-
enabled: false,
154-
addState: 'added',
155-
expanded: false,
156-
type: server.type,
157-
url: server.url,
158-
tools: []
159-
}
160-
inUseMcpServers.value.push(newServer)
151+
152+
if (inUseMcpServers.value.find((s) => s.id === server.id)) {
153+
return
161154
}
162-
}
155+
const newServer: PluginInfo = {
156+
id: server.id,
157+
name: server.name || server.id,
158+
icon: server.icon || defaultMcpIcon,
159+
description: server.description || '',
160+
enabled: false,
161+
addState: PluginAddState.Added,
162+
expanded: false,
163+
type: server.type,
164+
url: server.url,
165+
tools: []
166+
}
167+
inUseMcpServers.value.push(newServer)
168+
})
163169
}
164170

165171
const connectMcpServer = (server: PluginInfo) => {

0 commit comments

Comments
 (0)