Skip to content

Commit 4fc4138

Browse files
committed
feat(env): filter special environments in environment list selection
1 parent 2a72216 commit 4fc4138

File tree

2 files changed

+59
-8
lines changed

2 files changed

+59
-8
lines changed

mcp/src/tools/env.ts

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,38 @@ export function registerEnvTools(server: ExtendedMcpServer) {
127127
case "list":
128128
try {
129129
const cloudbaseList = await getCloudBaseManager({ cloudBaseOptions, requireEnvId: true });
130-
result = await cloudbaseList.env.listEnvs();
130+
// Use commonService to call DescribeEnvs with filter parameters
131+
// Filter parameters match the reference conditions provided by user
132+
result = await cloudbaseList.commonService('tcb').call({
133+
Action: 'DescribeEnvs',
134+
Param: {
135+
EnvTypes: ['weda', 'baas'], // Include weda and baas (normal) environments
136+
IsVisible: false, // Filter out invisible environments
137+
Channels: ['dcloud', 'iotenable', 'tem', 'scene_module'] // Filter special channels
138+
}
139+
});
140+
// Transform response format to match original listEnvs() format
141+
if (result && result.EnvList) {
142+
result = { EnvList: result.EnvList };
143+
} else if (result && result.Data && result.Data.EnvList) {
144+
result = { EnvList: result.Data.EnvList };
145+
} else {
146+
// Fallback to original method if format is unexpected
147+
debug('Unexpected response format, falling back to listEnvs()');
148+
result = await cloudbaseList.env.listEnvs();
149+
}
131150
} catch (error) {
132-
debug('获取环境列表时出错:', error);
133-
return { content:
134-
[{ type: "text", text: "获取环境列表时出错: " + (error instanceof Error ? error.message : String(error)) }]
135-
};
151+
debug('获取环境列表时出错,尝试降级到 listEnvs():', error);
152+
// Fallback to original method on error
153+
try {
154+
const cloudbaseList = await getCloudBaseManager({ cloudBaseOptions, requireEnvId: true });
155+
result = await cloudbaseList.env.listEnvs();
156+
} catch (fallbackError) {
157+
debug('降级到 listEnvs() 也失败:', fallbackError);
158+
return { content:
159+
[{ type: "text", text: "获取环境列表时出错: " + (fallbackError instanceof Error ? fallbackError.message : String(fallbackError)) }]
160+
};
161+
}
136162
}
137163
break;
138164

mcp/src/tools/interactive.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export async function _promptAndSetEnvironmentId(autoSelectSingle: boolean, serv
112112
return { selectedEnvId: null, cancelled: false, error: "请先登录云开发账户" };
113113
}
114114

115-
// 2. 获取可用环境列表
115+
// 2. 获取可用环境列表(使用过滤参数)
116116
// Fix: Pass cloudBaseOptions to ensure correct environment context
117117
const serverCloudBaseOptions = server?.cloudBaseOptions;
118118
const cloudbase = await getCloudBaseManager({
@@ -121,9 +121,34 @@ export async function _promptAndSetEnvironmentId(autoSelectSingle: boolean, serv
121121
});
122122
let envResult;
123123
try {
124-
envResult = await cloudbase.env.listEnvs();
124+
// Use commonService to call DescribeEnvs with filter parameters
125+
// Filter parameters match the reference conditions provided by user
126+
envResult = await cloudbase.commonService('tcb').call({
127+
Action: 'DescribeEnvs',
128+
Param: {
129+
EnvTypes: ['weda', 'baas'], // Include weda and baas (normal) environments
130+
IsVisible: false, // Filter out invisible environments
131+
Channels: ['dcloud', 'iotenable', 'tem', 'scene_module'] // Filter special channels
132+
}
133+
});
134+
// Transform response format to match original listEnvs() format
135+
if (envResult && envResult.EnvList) {
136+
envResult = { EnvList: envResult.EnvList };
137+
} else if (envResult && envResult.Data && envResult.Data.EnvList) {
138+
envResult = { EnvList: envResult.Data.EnvList };
139+
} else {
140+
// Fallback to original method if format is unexpected
141+
debug('Unexpected response format, falling back to listEnvs()');
142+
envResult = await cloudbase.env.listEnvs();
143+
}
125144
} catch (error) {
126-
debug('获取环境ID时出错:', error);
145+
debug('获取环境ID时出错,尝试降级到 listEnvs():', error);
146+
// Fallback to original method on error
147+
try {
148+
envResult = await cloudbase.env.listEnvs();
149+
} catch (fallbackError) {
150+
debug('降级到 listEnvs() 也失败:', fallbackError);
151+
}
127152
}
128153

129154
debug('envResult', envResult);

0 commit comments

Comments
 (0)