Skip to content

Commit 7a2cece

Browse files
committed
feat(tools): merge getWebsiteConfig into envQuery for unified environment queries 🚀
1 parent 49d5036 commit 7a2cece

File tree

5 files changed

+140
-35
lines changed

5 files changed

+140
-35
lines changed

mcp/src/tools/env.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { z } from "zod";
2-
import { getCloudBaseManager, resetCloudBaseManagerCache } from '../cloudbase-manager.js'
3-
import { logout } from '../auth.js'
4-
import { clearUserEnvId, _promptAndSetEnvironmentId } from './interactive.js'
5-
import { debug } from '../utils/logger.js'
2+
import { logout } from '../auth.js';
3+
import { getCloudBaseManager, resetCloudBaseManagerCache } from '../cloudbase-manager.js';
64
import { ExtendedMcpServer } from '../server.js';
5+
import { debug } from '../utils/logger.js';
6+
import { _promptAndSetEnvironmentId, clearUserEnvId } from './interactive.js';
77

88
export function registerEnvTools(server: ExtendedMcpServer) {
99
// 获取 cloudBaseOptions,如果没有则为 undefined
@@ -109,22 +109,22 @@ export function registerEnvTools(server: ExtendedMcpServer) {
109109
}
110110
);
111111

112-
// envQuery - 环境查询(合并 listEnvs + getEnvInfo + getEnvAuthDomains)
112+
// envQuery - 环境查询(合并 listEnvs + getEnvInfo + getEnvAuthDomains + getWebsiteConfig
113113
server.registerTool?.(
114114
"envQuery",
115115
{
116116
title: "环境查询",
117-
description: "查询云开发环境相关信息,支持查询环境列表、当前环境信息和安全域名。(原工具名:listEnvs/getEnvInfo/getEnvAuthDomains,为兼容旧AI规则可继续使用这些名称)",
117+
description: "查询云开发环境相关信息,支持查询环境列表、当前环境信息、安全域名和静态网站托管配置。(原工具名:listEnvs/getEnvInfo/getEnvAuthDomains/getWebsiteConfig,为兼容旧AI规则可继续使用这些名称)",
118118
inputSchema: {
119-
action: z.enum(["list", "info", "domains"]).describe("查询类型:list=环境列表,info=当前环境信息,domains=安全域名列表")
119+
action: z.enum(["list", "info", "domains", "hosting"]).describe("查询类型:list=环境列表,info=当前环境信息,domains=安全域名列表,hosting=静态网站托管配置")
120120
},
121121
annotations: {
122122
readOnlyHint: true,
123123
openWorldHint: true,
124124
category: "env"
125125
}
126126
},
127-
async ({ action }: { action: "list" | "info" | "domains" }) => {
127+
async ({ action }: { action: "list" | "info" | "domains" | "hosting" }) => {
128128
try {
129129
let result;
130130

@@ -151,6 +151,11 @@ export function registerEnvTools(server: ExtendedMcpServer) {
151151
result = await cloudbaseDomains.env.getEnvAuthDomains();
152152
break;
153153

154+
case "hosting":
155+
const cloudbaseHosting = await getManager();
156+
result = await cloudbaseHosting.hosting.getWebsiteConfig();
157+
break;
158+
154159
default:
155160
throw new Error(`不支持的查询类型: ${action}`);
156161
}

mcp/src/tools/hosting.ts

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { z } from "zod";
2-
import { getCloudBaseManager } from '../cloudbase-manager.js'
2+
import { getCloudBaseManager } from '../cloudbase-manager.js';
33
import { ExtendedMcpServer } from '../server.js';
44

55

@@ -79,32 +79,7 @@ export function registerHostingTools(server: ExtendedMcpServer) {
7979
}
8080
);
8181

82-
// getWebsiteConfig - 获取静态网站托管配置
83-
server.registerTool?.(
84-
"getWebsiteConfig",
85-
{
86-
title: "查询静态托管配置",
87-
description: "获取静态网站托管配置",
88-
inputSchema: {},
89-
annotations: {
90-
readOnlyHint: true,
91-
openWorldHint: true,
92-
category: "hosting"
93-
}
94-
},
95-
async () => {
96-
const cloudbase = await getManager()
97-
const result = await cloudbase.hosting.getWebsiteConfig();
98-
return {
99-
content: [
100-
{
101-
type: "text",
102-
text: JSON.stringify(result, null, 2)
103-
}
104-
]
105-
};
106-
}
107-
);
82+
10883

10984
// deleteFiles - 删除静态网站托管文件
11085
server.registerTool?.(
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# 技术方案设计
2+
3+
## 架构设计
4+
5+
### 当前架构分析
6+
7+
1. **envQuery 工具** (mcp/src/tools/env.ts)
8+
- 位置:`mcp/src/tools/env.ts`
9+
- 功能:环境相关信息查询
10+
- 当前支持的操作:
11+
- `list`: 获取环境列表
12+
- `info`: 获取当前环境信息
13+
- `domains`: 获取安全域名列表
14+
15+
2. **getWebsiteConfig 工具** (mcp/src/tools/hosting.ts)
16+
- 位置:`mcp/src/tools/hosting.ts`
17+
- 功能:获取静态网站托管配置
18+
- 当前实现:调用 `cloudbase.hosting.getWebsiteConfig()`
19+
20+
### 合并方案
21+
22+
#### 方案选择:扩展 envQuery
23+
选择将 getWebsiteConfig 合并到 envQuery 中,因为:
24+
- 静态网站托管配置属于环境信息的一部分
25+
- 减少工具数量,提高 API 一致性
26+
- 符合工具合并的最佳实践
27+
28+
#### 合并后的架构
29+
30+
```
31+
envQuery (扩展后)
32+
├── action: "list" → env.listEnvs()
33+
├── action: "info" → env.getEnvInfo()
34+
├── action: "domains" → env.getEnvAuthDomains()
35+
└── action: "hosting" → hosting.getWebsiteConfig() [新增]
36+
```
37+
38+
## 技术栈
39+
40+
- **语言**:TypeScript
41+
- **框架**:MCP Server
42+
- **验证**:Zod schema validation
43+
- **CloudBase SDK**:用于云开发环境操作
44+
45+
## 数据库/接口设计
46+
47+
### 输入接口设计
48+
49+
```typescript
50+
// 扩展后的 envQuery 输入接口
51+
interface EnvQueryInput {
52+
action: "list" | "info" | "domains" | "hosting"; // 新增 "hosting"
53+
}
54+
```
55+
56+
### 输出接口设计
57+
58+
保持现有输出格式不变:
59+
```typescript
60+
interface EnvQueryOutput {
61+
content: Array<{
62+
type: "text";
63+
text: string; // JSON.stringify(result, null, 2)
64+
}>;
65+
}
66+
```
67+
68+
## 测试策略
69+
70+
1. **单元测试**:测试新增的 "hosting" action
71+
2. **集成测试**:验证与其他 action 的兼容性
72+
3. **回归测试**:确保原有功能不受影响
73+
74+
## 安全性和性能考虑
75+
76+
- **安全性**:保持现有的权限验证机制
77+
- **性能**:合并后减少网络请求次数,提高查询效率
78+
- **向后兼容**:保留原有 API 不变
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# 需求文档
2+
3+
## 介绍
4+
5+
将独立的 `getWebsiteConfig` 工具合并到现有的 `envQuery` 工具中,实现环境相关查询功能的统一管理。
6+
7+
## 需求
8+
9+
### 需求 1 - 合并工具功能
10+
11+
**用户故事:** 作为开发者,我希望将静态网站托管配置查询功能合并到 envQuery 工具中,以便在同一个工具内完成所有环境相关信息的查询。
12+
13+
#### 验收标准
14+
15+
1. envQuery 工具支持新增的 `hosting` 操作类型,用于查询静态网站托管配置
16+
2. getWebsiteConfig 工具从 hosting.ts 中移除,避免功能重复
17+
3. 合并后的工具保持原有功能的完整性,不影响现有用户的正常使用
18+
4. 合并后的 API 设计合理,符合工具合并的最佳实践
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# 实施计划
2+
3+
- [ ] 1. 更新 envQuery 输入模式
4+
- 在 envQuery 的 inputSchema 中添加 "hosting" 操作类型
5+
- 更新工具描述,说明新增的静态网站配置查询功能
6+
- _需求: 合并工具功能
7+
8+
- [ ] 2. 实现静态网站配置查询逻辑
9+
- 在 envQuery 的 switch 语句中添加 "hosting" case
10+
- 调用 cloudbase.hosting.getWebsiteConfig() 方法
11+
- 保持与其他操作一致的错误处理和返回格式
12+
- _需求: 合并工具功能
13+
14+
- [ ] 3. 从 hosting.ts 移除 getWebsiteConfig 工具
15+
- 删除 getWebsiteConfig 工具的注册代码
16+
- 清理相关的注释和接口定义
17+
- 确保不影响其他 hosting 相关工具
18+
- _需求: 合并工具功能
19+
20+
- [ ] 4. 更新文档和类型定义
21+
- 更新工具的描述文档,说明合并后的功能
22+
- 确保类型定义的一致性
23+
- _需求: 合并工具功能
24+
25+
- [ ] 5. 验证合并后的功能
26+
- 测试 envQuery 的 "hosting" 操作是否正常工作
27+
- 验证原有功能不受影响
28+
- 确认向后兼容性
29+
- _需求: 合并工具功能

0 commit comments

Comments
 (0)