@cloudbase/cloudbase-mcp 1.6.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,84 @@
1
- import CloudBase from "@cloudbase/manager-node";
2
1
  import { getLoginState } from './auth.js';
3
- export async function getCloudBaseManager() {
4
- const loginState = await getLoginState();
5
- const { envId, secretId, secretKey, token } = loginState;
6
- const cloudbase = new CloudBase({
7
- envId: process.env.CLOUDBASE_ENV_ID || envId,
8
- secretId,
9
- secretKey,
10
- token
2
+ import { ensureEnvId, autoSetupEnvironmentId } from './tools/interactive.js';
3
+ import CloudBase from "@cloudbase/manager-node";
4
+ import { debug, error } from './utils/logger.js';
5
+ let initializationPromise = null;
6
+ let noEnvIdInitializationPromise = null;
7
+ const INITIALIZATION_TIMEOUT = 30000; // 30 seconds
8
+ export function getCloudBaseManager(options = {}) {
9
+ const { requireEnvId = true } = options;
10
+ if (requireEnvId) {
11
+ if (initializationPromise) {
12
+ return initializationPromise;
13
+ }
14
+ const executor = async () => {
15
+ try {
16
+ // 检查并确保环境ID已配置
17
+ let userEnvId = await ensureEnvId();
18
+ if (!userEnvId) {
19
+ debug("未找到环境ID,尝试自动设置...");
20
+ userEnvId = await autoSetupEnvironmentId();
21
+ if (!userEnvId) {
22
+ throw new Error("CloudBase Environment ID not found after auto setup. Please set CLOUDBASE_ENV_ID or run setupEnvironmentId tool.");
23
+ }
24
+ }
25
+ const loginState = await getLoginState();
26
+ const { envId, secretId, secretKey, token } = loginState;
27
+ const manager = new CloudBase({
28
+ secretId,
29
+ secretKey,
30
+ envId: userEnvId,
31
+ token,
32
+ proxy: process.env.http_proxy
33
+ });
34
+ return manager;
35
+ }
36
+ catch (err) {
37
+ error('Failed to initialize CloudBase Manager:', err);
38
+ throw err;
39
+ }
40
+ };
41
+ const timeoutPromise = new Promise((_, reject) => {
42
+ const id = setTimeout(() => {
43
+ clearTimeout(id);
44
+ reject(new Error(`CloudBase Manager initialization timed out after ${INITIALIZATION_TIMEOUT / 1000} seconds.`));
45
+ }, INITIALIZATION_TIMEOUT);
46
+ });
47
+ initializationPromise = Promise.race([executor(), timeoutPromise]);
48
+ initializationPromise.catch(() => {
49
+ initializationPromise = null;
50
+ });
51
+ return initializationPromise;
52
+ }
53
+ if (noEnvIdInitializationPromise) {
54
+ return noEnvIdInitializationPromise;
55
+ }
56
+ const noEnvIdExecutor = async () => {
57
+ try {
58
+ const loginState = await getLoginState();
59
+ const { secretId, secretKey, token } = loginState;
60
+ const manager = new CloudBase({
61
+ secretId,
62
+ secretKey,
63
+ token,
64
+ proxy: process.env.http_proxy
65
+ });
66
+ return manager;
67
+ }
68
+ catch (err) {
69
+ error('Failed to initialize CloudBase Manager (no envId):', err instanceof Error ? err.message : String(err));
70
+ throw err;
71
+ }
72
+ };
73
+ const timeoutPromise = new Promise((_, reject) => {
74
+ const id = setTimeout(() => {
75
+ clearTimeout(id);
76
+ reject(new Error(`CloudBase Manager (no envId) initialization timed out after ${INITIALIZATION_TIMEOUT / 1000} seconds.`));
77
+ }, INITIALIZATION_TIMEOUT);
78
+ });
79
+ noEnvIdInitializationPromise = Promise.race([noEnvIdExecutor(), timeoutPromise]);
80
+ noEnvIdInitializationPromise.catch(() => {
81
+ noEnvIdInitializationPromise = null;
11
82
  });
12
- return cloudbase;
83
+ return noEnvIdInitializationPromise;
13
84
  }
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ import { registerDownloadTools } from "./tools/download.js";
9
9
  import { registerStorageTools } from "./tools/storage.js";
10
10
  import { registerRagTools } from './tools/rag.js';
11
11
  import { registerSetupTools } from "./tools/setup.js";
12
+ import { registerInteractiveTools } from "./tools/interactive.js";
12
13
  // Create server instance
13
14
  const server = new McpServer({
14
15
  name: "cloudbase-mcp",
@@ -36,6 +37,8 @@ registerDownloadTools(server);
36
37
  registerStorageTools(server);
37
38
  // Register setup tools
38
39
  registerSetupTools(server);
40
+ // Register interactive tools
41
+ registerInteractiveTools(server);
39
42
  async function main() {
40
43
  const transport = new StdioServerTransport();
41
44
  await server.connect(transport);