@cloudbase/cloudbase-mcp 2.3.1 → 2.4.0-alpha.0

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.
package/dist/index.js CHANGED
@@ -895,6 +895,7 @@ const fs_1 = __importDefault(__webpack_require__(421));
895
895
  const os_1 = __importDefault(__webpack_require__(116));
896
896
  const path_1 = __importDefault(__webpack_require__(521));
897
897
  const winston_1 = __importDefault(__webpack_require__(322));
898
+ const cloud_mode_js_1 = __webpack_require__(684);
898
899
  // Use require for winston-daily-rotate-file to avoid webpack bundling issues
899
900
  // Handle both CommonJS and ES module exports
900
901
  const DailyRotateFileModule = __webpack_require__(259);
@@ -946,16 +947,18 @@ if (shouldUseConsole()) {
946
947
  stderrLevels: ['error', 'warn', 'info', 'debug'], // All logs go to stderr
947
948
  }));
948
949
  }
949
- // File transport with daily rotation
950
- transports.push(new DailyRotateFile({
951
- dirname: logDir,
952
- filename: 'cloudbase-mcp-%DATE%.log',
953
- datePattern: 'YYYY-MM-DD',
954
- format: winston_1.default.format.combine(winston_1.default.format.timestamp({ format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' }), logFormat),
955
- maxFiles: '30d', // Keep logs for 30 days
956
- maxSize: '20m', // Max file size before rotation
957
- zippedArchive: false, // Don't compress old logs
958
- }));
950
+ if (!(0, cloud_mode_js_1.isCloudMode)()) {
951
+ // File transport with daily rotation
952
+ transports.push(new DailyRotateFile({
953
+ dirname: logDir,
954
+ filename: 'cloudbase-mcp-%DATE%.log',
955
+ datePattern: 'YYYY-MM-DD',
956
+ format: winston_1.default.format.combine(winston_1.default.format.timestamp({ format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' }), logFormat),
957
+ maxFiles: '30d', // Keep logs for 30 days
958
+ maxSize: '20m', // Max file size before rotation
959
+ zippedArchive: false, // Don't compress old logs
960
+ }));
961
+ }
959
962
  // Create winston logger instance
960
963
  const logger = winston_1.default.createLogger({
961
964
  level: getLogLevel(),
@@ -1577,6 +1580,7 @@ function registerDataModelTools(server) {
1577
1580
  Name: name,
1578
1581
  },
1579
1582
  });
1583
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
1580
1584
  // 只保留基础字段,过滤掉冗余信息,并简化Schema
1581
1585
  let simplifiedSchema = null;
1582
1586
  // 解析并简化Schema
@@ -1715,6 +1719,7 @@ function registerDataModelTools(server) {
1715
1719
  Action: "DescribeDataSourceList",
1716
1720
  Param: listParams,
1717
1721
  });
1722
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
1718
1723
  const models = result.Data?.Rows || [];
1719
1724
  // 只保留基础字段,list操作不返回Schema
1720
1725
  const simplifiedModels = models.map((model) => ({
@@ -1751,6 +1756,7 @@ function registerDataModelTools(server) {
1751
1756
  Name: name,
1752
1757
  },
1753
1758
  });
1759
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
1754
1760
  if (!result.Data) {
1755
1761
  throw new Error(`数据模型 ${name} 不存在`);
1756
1762
  }
@@ -1955,6 +1961,7 @@ classDiagram
1955
1961
  EnvId: currentEnvId,
1956
1962
  },
1957
1963
  });
1964
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
1958
1965
  const taskId = result.Data?.TaskId;
1959
1966
  if (!taskId) {
1960
1967
  return {
@@ -1985,6 +1992,7 @@ classDiagram
1985
1992
  TaskId: taskId,
1986
1993
  },
1987
1994
  });
1995
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, statusResult);
1988
1996
  status = statusResult.Data?.Status || "init";
1989
1997
  }
1990
1998
  // 返回最终结果
@@ -3222,6 +3230,7 @@ function registerEnvTools(server) {
3222
3230
  Channels: ['dcloud', 'iotenable', 'tem', 'scene_module'] // Filter special channels
3223
3231
  }
3224
3232
  });
3233
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3225
3234
  // Transform response format to match original listEnvs() format
3226
3235
  if (result && result.EnvList) {
3227
3236
  result = { EnvList: result.EnvList };
@@ -3233,6 +3242,7 @@ function registerEnvTools(server) {
3233
3242
  // Fallback to original method if format is unexpected
3234
3243
  (0, logger_js_1.debug)('Unexpected response format, falling back to listEnvs()');
3235
3244
  result = await cloudbaseList.env.listEnvs();
3245
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3236
3246
  }
3237
3247
  }
3238
3248
  catch (error) {
@@ -3241,10 +3251,12 @@ function registerEnvTools(server) {
3241
3251
  try {
3242
3252
  const cloudbaseList = await (0, cloudbase_manager_js_1.getCloudBaseManager)({ cloudBaseOptions, requireEnvId: true });
3243
3253
  result = await cloudbaseList.env.listEnvs();
3254
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3244
3255
  }
3245
3256
  catch (fallbackError) {
3246
3257
  (0, logger_js_1.debug)('降级到 listEnvs() 也失败:', fallbackError);
3247
- return { content: [{ type: "text", text: "获取环境列表时出错: " + (fallbackError instanceof Error ? fallbackError.message : String(fallbackError)) }]
3258
+ return {
3259
+ content: [{ type: "text", text: "获取环境列表时出错: " + (fallbackError instanceof Error ? fallbackError.message : String(fallbackError)) }]
3248
3260
  };
3249
3261
  }
3250
3262
  }
@@ -3252,14 +3264,17 @@ function registerEnvTools(server) {
3252
3264
  case "info":
3253
3265
  const cloudbaseInfo = await getManager();
3254
3266
  result = await cloudbaseInfo.env.getEnvInfo();
3267
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3255
3268
  break;
3256
3269
  case "domains":
3257
3270
  const cloudbaseDomains = await getManager();
3258
3271
  result = await cloudbaseDomains.env.getEnvAuthDomains();
3272
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3259
3273
  break;
3260
3274
  case "hosting":
3261
3275
  const cloudbaseHosting = await getManager();
3262
3276
  result = await cloudbaseHosting.hosting.getWebsiteConfig();
3277
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3263
3278
  break;
3264
3279
  default:
3265
3280
  throw new Error(`不支持的查询类型: ${action}`);
@@ -3317,9 +3332,11 @@ function registerEnvTools(server) {
3317
3332
  switch (action) {
3318
3333
  case "create":
3319
3334
  result = await cloudbase.env.createEnvDomain(domains);
3335
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3320
3336
  break;
3321
3337
  case "delete":
3322
3338
  result = await cloudbase.env.deleteEnvDomain(domains);
3339
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3323
3340
  break;
3324
3341
  default:
3325
3342
  throw new Error(`不支持的操作类型: ${action}`);
@@ -3399,8 +3416,10 @@ function registerHostingTools(server) {
3399
3416
  files,
3400
3417
  ignore
3401
3418
  });
3419
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3402
3420
  // 获取环境信息
3403
3421
  const envInfo = await cloudbase.env.getEnvInfo();
3422
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, envInfo);
3404
3423
  const staticDomain = envInfo.EnvInfo?.StaticStorages?.[0]?.StaticDomain;
3405
3424
  const accessUrl = staticDomain ? `https://${staticDomain}/${cloudPath || ''}` : "";
3406
3425
  // Send deployment notification to CodeBuddy IDE
@@ -3474,6 +3493,7 @@ function registerHostingTools(server) {
3474
3493
  cloudPath,
3475
3494
  isDir
3476
3495
  });
3496
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3477
3497
  return {
3478
3498
  content: [
3479
3499
  {
@@ -3504,6 +3524,7 @@ function registerHostingTools(server) {
3504
3524
  marker,
3505
3525
  maxKeys
3506
3526
  });
3527
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3507
3528
  return {
3508
3529
  content: [
3509
3530
  {
@@ -3569,6 +3590,7 @@ function registerHostingTools(server) {
3569
3590
  domain,
3570
3591
  certId
3571
3592
  });
3593
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3572
3594
  break;
3573
3595
  case "delete":
3574
3596
  if (!domain) {
@@ -3577,6 +3599,7 @@ function registerHostingTools(server) {
3577
3599
  result = await cloudbase.hosting.deleteHostingDomain({
3578
3600
  domain
3579
3601
  });
3602
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3580
3603
  break;
3581
3604
  case "check":
3582
3605
  if (!domains || domains.length === 0) {
@@ -3585,6 +3608,7 @@ function registerHostingTools(server) {
3585
3608
  result = await cloudbase.hosting.tcbCheckResource({
3586
3609
  domains
3587
3610
  });
3611
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3588
3612
  break;
3589
3613
  case "modify":
3590
3614
  if (!domain || domainId === undefined || !domainConfig) {
@@ -3595,6 +3619,7 @@ function registerHostingTools(server) {
3595
3619
  domainId,
3596
3620
  domainConfig
3597
3621
  });
3622
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3598
3623
  break;
3599
3624
  default:
3600
3625
  throw new Error(`不支持的操作类型: ${action}`);
@@ -3688,6 +3713,7 @@ function registerGatewayTools(server) {
3688
3713
  name,
3689
3714
  path
3690
3715
  });
3716
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
3691
3717
  return {
3692
3718
  content: [
3693
3719
  {
@@ -6273,11 +6299,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6273
6299
  };
6274
6300
  Object.defineProperty(exports, "__esModule", ({ value: true }));
6275
6301
  exports.wrapServerWithTelemetry = wrapServerWithTelemetry;
6276
- const telemetry_js_1 = __webpack_require__(880);
6277
- const logger_js_1 = __webpack_require__(39);
6302
+ const os_1 = __importDefault(__webpack_require__(116));
6278
6303
  const cloudbase_manager_js_1 = __webpack_require__(431);
6279
6304
  const cloud_mode_js_1 = __webpack_require__(684);
6280
- const os_1 = __importDefault(__webpack_require__(116));
6305
+ const logger_js_1 = __webpack_require__(39);
6306
+ const telemetry_js_1 = __webpack_require__(880);
6281
6307
  /**
6282
6308
  * 生成 GitHub Issue 创建链接
6283
6309
  * @param toolName 工具名称
@@ -6318,7 +6344,7 @@ ${envIdSection}
6318
6344
  ## 环境信息
6319
6345
  - 操作系统: ${os_1.default.type()} ${os_1.default.release()}
6320
6346
  - Node.js版本: ${process.version}
6321
- - MCP 版本:${process.env.npm_package_version || "2.3.1" || 0}
6347
+ - MCP 版本:${process.env.npm_package_version || "2.4.0-alpha.0" || 0}
6322
6348
  - 系统架构: ${os_1.default.arch()}
6323
6349
  - 时间: ${new Date().toISOString()}
6324
6350
  - 请求ID: ${requestId}
@@ -6356,10 +6382,13 @@ function createWrappedHandler(name, handler, server) {
6356
6382
  let requestId;
6357
6383
  try {
6358
6384
  (0, logger_js_1.debug)(`开始执行工具: ${name}`, { args: sanitizeArgs(args) });
6385
+ server.logger?.({ type: 'beforeToolCall', toolName: name, args: sanitizeArgs(args) });
6359
6386
  // 执行原始处理函数
6360
6387
  const result = await handler(args);
6361
6388
  success = true;
6362
- (0, logger_js_1.debug)(`工具执行成功: ${name}`, { duration: Date.now() - startTime });
6389
+ const duration = Date.now() - startTime;
6390
+ (0, logger_js_1.debug)(`工具执行成功: ${name}`, { duration });
6391
+ server.logger?.({ type: 'afterToolCall', toolName: name, args: sanitizeArgs(args), result: result, duration });
6363
6392
  return result;
6364
6393
  }
6365
6394
  catch (error) {
@@ -6370,6 +6399,7 @@ function createWrappedHandler(name, handler, server) {
6370
6399
  error: errorMessage,
6371
6400
  duration: Date.now() - startTime
6372
6401
  });
6402
+ server.logger?.({ type: 'errorToolCall', toolName: name, args: sanitizeArgs(args), message: errorMessage, duration: Date.now() - startTime });
6373
6403
  // 生成 GitHub Issue 创建链接
6374
6404
  const issueLink = await generateGitHubIssueLink(name, errorMessage, args, server.cloudBaseOptions, {
6375
6405
  requestId: (typeof error === 'object' && error && 'requestId' in error) ? error.requestId : '',
@@ -6513,6 +6543,7 @@ function registerSQLDatabaseTools(server) {
6513
6543
  },
6514
6544
  },
6515
6545
  });
6546
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
6516
6547
  return {
6517
6548
  content: [
6518
6549
  {
@@ -6576,6 +6607,7 @@ function registerSQLDatabaseTools(server) {
6576
6607
  },
6577
6608
  },
6578
6609
  });
6610
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
6579
6611
  return {
6580
6612
  content: [
6581
6613
  {
@@ -6729,7 +6761,7 @@ function parseEnabledPlugins() {
6729
6761
  * await server.connect(transport);
6730
6762
  */
6731
6763
  async function createCloudBaseMcpServer(options) {
6732
- const { name = "cloudbase-mcp", version = "1.0.0", enableTelemetry = true, cloudBaseOptions, cloudMode = false, ide, } = options ?? {};
6764
+ const { name = "cloudbase-mcp", version = "1.0.0", enableTelemetry = true, cloudBaseOptions, cloudMode = false, ide, logger, } = options ?? {};
6733
6765
  // Enable cloud mode if specified
6734
6766
  if (cloudMode) {
6735
6767
  (0, cloud_mode_js_1.enableCloudMode)();
@@ -6759,6 +6791,10 @@ async function createCloudBaseMcpServer(options) {
6759
6791
  if (ide) {
6760
6792
  server.ide = ide;
6761
6793
  }
6794
+ // Store logger in server instance for tools to access
6795
+ if (logger) {
6796
+ server.logger = logger;
6797
+ }
6762
6798
  // Enable telemetry if requested
6763
6799
  if (enableTelemetry) {
6764
6800
  (0, tool_wrapper_js_1.wrapServerWithTelemetry)(server);
@@ -6806,6 +6842,8 @@ exports.getEnvId = getEnvId;
6806
6842
  exports.resetCloudBaseManagerCache = resetCloudBaseManagerCache;
6807
6843
  exports.getCloudBaseManager = getCloudBaseManager;
6808
6844
  exports.createCloudBaseManagerWithOptions = createCloudBaseManagerWithOptions;
6845
+ exports.extractRequestId = extractRequestId;
6846
+ exports.logCloudBaseResult = logCloudBaseResult;
6809
6847
  const manager_node_1 = __importDefault(__webpack_require__(665));
6810
6848
  const auth_js_1 = __webpack_require__(291);
6811
6849
  const interactive_js_1 = __webpack_require__(461);
@@ -6968,6 +7006,39 @@ function createCloudBaseManagerWithOptions(cloudBaseOptions) {
6968
7006
  });
6969
7007
  return manager;
6970
7008
  }
7009
+ /**
7010
+ * Extract RequestId from result object
7011
+ */
7012
+ function extractRequestId(result) {
7013
+ if (!result || typeof result !== 'object') {
7014
+ return undefined;
7015
+ }
7016
+ // Try common RequestId field names
7017
+ if ('RequestId' in result && result.RequestId) {
7018
+ return String(result.RequestId);
7019
+ }
7020
+ if ('requestId' in result && result.requestId) {
7021
+ return String(result.requestId);
7022
+ }
7023
+ if ('request_id' in result && result.request_id) {
7024
+ return String(result.request_id);
7025
+ }
7026
+ return undefined;
7027
+ }
7028
+ /**
7029
+ * Log CloudBase manager call result with RequestId
7030
+ */
7031
+ function logCloudBaseResult(logger, result) {
7032
+ if (!logger) {
7033
+ return;
7034
+ }
7035
+ const requestId = extractRequestId(result);
7036
+ logger({
7037
+ type: 'capiResult',
7038
+ requestId,
7039
+ result,
7040
+ });
7041
+ }
6971
7042
 
6972
7043
 
6973
7044
  /***/ }),
@@ -7094,6 +7165,7 @@ async function _promptAndSetEnvironmentId(autoSelectSingle, server) {
7094
7165
  Channels: ['dcloud', 'iotenable', 'tem', 'scene_module'] // Filter special channels
7095
7166
  }
7096
7167
  });
7168
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server?.logger, envResult);
7097
7169
  // Transform response format to match original listEnvs() format
7098
7170
  if (envResult && envResult.EnvList) {
7099
7171
  envResult = { EnvList: envResult.EnvList };
@@ -7105,6 +7177,7 @@ async function _promptAndSetEnvironmentId(autoSelectSingle, server) {
7105
7177
  // Fallback to original method if format is unexpected
7106
7178
  (0, logger_js_1.debug)('Unexpected response format, falling back to listEnvs()');
7107
7179
  envResult = await cloudbase.env.listEnvs();
7180
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server?.logger, envResult);
7108
7181
  }
7109
7182
  }
7110
7183
  catch (error) {
@@ -7112,6 +7185,7 @@ async function _promptAndSetEnvironmentId(autoSelectSingle, server) {
7112
7185
  // Fallback to original method on error
7113
7186
  try {
7114
7187
  envResult = await cloudbase.env.listEnvs();
7188
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server?.logger, envResult);
7115
7189
  }
7116
7190
  catch (fallbackError) {
7117
7191
  (0, logger_js_1.debug)('降级到 listEnvs() 也失败:', fallbackError);
@@ -7261,6 +7335,7 @@ const IDE_TYPES = [
7261
7335
  "qoder", // Qoder AI编辑器
7262
7336
  "antigravity", // Google Antigravity AI编辑器
7263
7337
  "vscode", // Visual Studio Code
7338
+ "kiro", // Kiro AI编辑器
7264
7339
  ];
7265
7340
  // IDE到文件的映射关系
7266
7341
  // 注意:以 "/" 结尾的路径表示目录,会包含该目录下的所有文件
@@ -7294,6 +7369,7 @@ const IDE_FILE_MAPPINGS = {
7294
7369
  qoder: [".qoder/rules/"],
7295
7370
  antigravity: [".agent/rules/"],
7296
7371
  vscode: [".vscode/mcp.json", ".vscode/settings.json"],
7372
+ kiro: [".kiro/settings/mcp.json", ".kiro/steering/"],
7297
7373
  };
7298
7374
  // 所有IDE配置文件的完整列表 - 通过IDE_FILE_MAPPINGS计算得出
7299
7375
  const ALL_IDE_FILES = Array.from(new Set(Object.values(IDE_FILE_MAPPINGS).flat()));
@@ -7320,6 +7396,7 @@ const IDE_DESCRIPTIONS = {
7320
7396
  qoder: "Qoder AI编辑器",
7321
7397
  antigravity: "Google Antigravity AI编辑器",
7322
7398
  vscode: "Visual Studio Code",
7399
+ kiro: "Kiro AI编辑器",
7323
7400
  };
7324
7401
  // INTEGRATION_IDE 环境变量值到 IDE 类型的映射
7325
7402
  const INTEGRATION_IDE_MAPPING = {
@@ -7343,6 +7420,7 @@ const INTEGRATION_IDE_MAPPING = {
7343
7420
  Qoder: "qoder",
7344
7421
  Antigravity: "antigravity",
7345
7422
  VSCode: "vscode",
7423
+ Kiro: "kiro",
7346
7424
  };
7347
7425
  // 根据 INTEGRATION_IDE 环境变量获取默认 IDE 类型
7348
7426
  function getDefaultIDEFromEnv() {
@@ -7565,7 +7643,7 @@ function registerSetupTools(server) {
7565
7643
  title: "下载项目模板",
7566
7644
  description: `自动下载并部署CloudBase项目模板。⚠️ **MANDATORY FOR NEW PROJECTS** ⚠️
7567
7645
 
7568
- **CRITICAL**: This tool MUST be called FIRST when starting a new project.\n\n支持的模板:\n- react: React + CloudBase 全栈应用模板\n- vue: Vue + CloudBase 全栈应用模板\n- miniprogram: 微信小程序 + 云开发模板 \n- uniapp: UniApp + CloudBase 跨端应用模板\n- rules: 只包含AI编辑器配置文件(包含Cursor、WindSurf、CodeBuddy等所有主流编辑器配置),适合在已有项目中补充AI编辑器配置\n\n支持的IDE类型:\n- all: 下载所有IDE配置(默认)\n- cursor: Cursor AI编辑器\n- windsurf: WindSurf AI编辑器\n- codebuddy: CodeBuddy AI编辑器\n- claude-code: Claude Code AI编辑器\n- cline: Cline AI编辑器\n- gemini-cli: Gemini CLI\n- opencode: OpenCode AI编辑器\n- qwen-code: 通义灵码\n- baidu-comate: 百度Comate\n- openai-codex-cli: OpenAI Codex CLI\n- augment-code: Augment Code\n- github-copilot: GitHub Copilot\n- roocode: RooCode AI编辑器\n- tongyi-lingma: 通义灵码\n- trae: Trae AI编辑器\n- qoder: Qoder AI编辑器\n- antigravity: Google Antigravity AI编辑器\n- vscode: Visual Studio Code\n\n特别说明:\n- rules 模板会自动包含当前 mcp 版本号信息(版本号:${ true ? "2.3.1" : 0}),便于后续维护和版本追踪\n- 下载 rules 模板时,如果项目中已存在 README.md 文件,系统会自动保护该文件不被覆盖(除非设置 overwrite=true)`,
7646
+ **CRITICAL**: This tool MUST be called FIRST when starting a new project.\n\n支持的模板:\n- react: React + CloudBase 全栈应用模板\n- vue: Vue + CloudBase 全栈应用模板\n- miniprogram: 微信小程序 + 云开发模板 \n- uniapp: UniApp + CloudBase 跨端应用模板\n- rules: 只包含AI编辑器配置文件(包含Cursor、WindSurf、CodeBuddy等所有主流编辑器配置),适合在已有项目中补充AI编辑器配置\n\n支持的IDE类型:\n- all: 下载所有IDE配置(默认)\n- cursor: Cursor AI编辑器\n- windsurf: WindSurf AI编辑器\n- codebuddy: CodeBuddy AI编辑器\n- claude-code: Claude Code AI编辑器\n- cline: Cline AI编辑器\n- gemini-cli: Gemini CLI\n- opencode: OpenCode AI编辑器\n- qwen-code: 通义灵码\n- baidu-comate: 百度Comate\n- openai-codex-cli: OpenAI Codex CLI\n- augment-code: Augment Code\n- github-copilot: GitHub Copilot\n- roocode: RooCode AI编辑器\n- tongyi-lingma: 通义灵码\n- trae: Trae AI编辑器\n- qoder: Qoder AI编辑器\n- antigravity: Google Antigravity AI编辑器\n- vscode: Visual Studio Code\n\n特别说明:\n- rules 模板会自动包含当前 mcp 版本号信息(版本号:${ true ? "2.4.0-alpha.0" : 0}),便于后续维护和版本追踪\n- 下载 rules 模板时,如果项目中已存在 README.md 文件,系统会自动保护该文件不被覆盖(除非设置 overwrite=true)`,
7569
7647
  inputSchema: {
7570
7648
  template: zod_1.z
7571
7649
  .enum(["react", "vue", "miniprogram", "uniapp", "rules"])
@@ -7945,6 +8023,7 @@ function registerInviteCodeTools(server) {
7945
8023
  Action: 'ActivateInviteCode',
7946
8024
  Param: { InviteCode, EnvId }
7947
8025
  });
8026
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
7948
8027
  return {
7949
8028
  content: [
7950
8029
  {
@@ -8348,6 +8427,7 @@ function registerSecurityRuleTools(server) {
8348
8427
  EnvId: envId,
8349
8428
  },
8350
8429
  });
8430
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8351
8431
  }
8352
8432
  else if (resourceType === "function") {
8353
8433
  // 查询云函数安全规则
@@ -8358,6 +8438,7 @@ function registerSecurityRuleTools(server) {
8358
8438
  EnvId: envId,
8359
8439
  },
8360
8440
  });
8441
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8361
8442
  }
8362
8443
  else if (resourceType === "storage") {
8363
8444
  // 查询存储安全规则
@@ -8368,6 +8449,7 @@ function registerSecurityRuleTools(server) {
8368
8449
  EnvId: envId,
8369
8450
  },
8370
8451
  });
8452
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8371
8453
  }
8372
8454
  else if (resourceType === "sqlDatabase") {
8373
8455
  // TODO: 考虑是否有支持指定其他 instance、schema 的需求
@@ -8383,6 +8465,7 @@ function registerSecurityRuleTools(server) {
8383
8465
  RoleIdentityList: ["allUser"],
8384
8466
  },
8385
8467
  });
8468
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8386
8469
  }
8387
8470
  else {
8388
8471
  throw new Error(`不支持的资源类型: ${resourceType}`);
@@ -8459,6 +8542,7 @@ function registerSecurityRuleTools(server) {
8459
8542
  Rule: rule,
8460
8543
  },
8461
8544
  });
8545
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8462
8546
  }
8463
8547
  else {
8464
8548
  result = await cloudbase.commonService().call({
@@ -8469,6 +8553,7 @@ function registerSecurityRuleTools(server) {
8469
8553
  AclTag: aclTag,
8470
8554
  },
8471
8555
  });
8556
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8472
8557
  }
8473
8558
  }
8474
8559
  else if (resourceType === "function") {
@@ -8485,6 +8570,7 @@ function registerSecurityRuleTools(server) {
8485
8570
  Rule: rule,
8486
8571
  },
8487
8572
  });
8573
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8488
8574
  }
8489
8575
  else if (resourceType === "storage") {
8490
8576
  if (aclTag === "CUSTOM") {
@@ -8499,6 +8585,7 @@ function registerSecurityRuleTools(server) {
8499
8585
  Rule: rule,
8500
8586
  },
8501
8587
  });
8588
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8502
8589
  }
8503
8590
  else {
8504
8591
  result = await cloudbase.commonService().call({
@@ -8509,6 +8596,7 @@ function registerSecurityRuleTools(server) {
8509
8596
  AclTag: aclTag,
8510
8597
  },
8511
8598
  });
8599
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8512
8600
  }
8513
8601
  }
8514
8602
  else if (resourceType === "sqlDatabase") {
@@ -8541,6 +8629,7 @@ function registerSecurityRuleTools(server) {
8541
8629
  PolicyList: policyList,
8542
8630
  },
8543
8631
  });
8632
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8544
8633
  function getRowPermission(policy) {
8545
8634
  return {
8546
8635
  READONLY: [
@@ -8663,7 +8752,7 @@ class TelemetryReporter {
8663
8752
  const nodeVersion = process.version; // Node.js版本
8664
8753
  const arch = os_1.default.arch(); // 系统架构
8665
8754
  // 从构建时注入的版本号获取MCP版本信息
8666
- const mcpVersion = process.env.npm_package_version || "2.3.1" || 0;
8755
+ const mcpVersion = process.env.npm_package_version || "2.4.0-alpha.0" || 0;
8667
8756
  return {
8668
8757
  userAgent: `${osType} ${osRelease} ${arch} ${nodeVersion} CloudBase-MCP/${mcpVersion}`,
8669
8758
  deviceId: this.deviceId,
@@ -8929,6 +9018,7 @@ async function getDatabaseInstanceId(getManager) {
8929
9018
  function registerDatabaseTools(server) {
8930
9019
  // 获取 cloudBaseOptions,如果没有则为 undefined
8931
9020
  const cloudBaseOptions = server.cloudBaseOptions;
9021
+ const logger = server.logger;
8932
9022
  // 创建闭包函数来获取 CloudBase Manager
8933
9023
  const getManager = () => (0, cloudbase_manager_js_1.getCloudBaseManager)({ cloudBaseOptions });
8934
9024
  // readNoSqlDatabaseStructure
@@ -8976,6 +9066,7 @@ checkIndex: 检查索引是否存在`),
8976
9066
  MgoOffset: offset,
8977
9067
  MgoLimit: limit,
8978
9068
  });
9069
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8979
9070
  return {
8980
9071
  content: [
8981
9072
  {
@@ -8996,6 +9087,7 @@ checkIndex: 检查索引是否存在`),
8996
9087
  throw new Error("检查集合时必须提供 collectionName");
8997
9088
  }
8998
9089
  const result = await cloudbase.database.checkCollectionExists(collectionName);
9090
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
8999
9091
  return {
9000
9092
  content: [
9001
9093
  {
@@ -9017,6 +9109,7 @@ checkIndex: 检查索引是否存在`),
9017
9109
  throw new Error("查看集合详情时必须提供 collectionName");
9018
9110
  }
9019
9111
  const result = await cloudbase.database.describeCollection(collectionName);
9112
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9020
9113
  return {
9021
9114
  content: [
9022
9115
  {
@@ -9037,6 +9130,7 @@ checkIndex: 检查索引是否存在`),
9037
9130
  throw new Error("获取索引列表时必须提供 collectionName");
9038
9131
  }
9039
9132
  const result = await cloudbase.database.describeCollection(collectionName);
9133
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9040
9134
  return {
9041
9135
  content: [
9042
9136
  {
@@ -9057,6 +9151,7 @@ checkIndex: 检查索引是否存在`),
9057
9151
  throw new Error("检查索引时必须提供 collectionName 和 indexName");
9058
9152
  }
9059
9153
  const result = await cloudbase.database.checkIndexExists(collectionName, indexName);
9154
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9060
9155
  return {
9061
9156
  content: [
9062
9157
  {
@@ -9117,6 +9212,7 @@ updateCollection: 更新集合`),
9117
9212
  const cloudbase = await getManager();
9118
9213
  if (action === "createCollection") {
9119
9214
  const result = await cloudbase.database.createCollection(collectionName);
9215
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9120
9216
  return {
9121
9217
  content: [
9122
9218
  {
@@ -9136,6 +9232,7 @@ updateCollection: 更新集合`),
9136
9232
  throw new Error("更新集合时必须提供 options");
9137
9233
  }
9138
9234
  const result = await cloudbase.database.updateCollection(collectionName, updateOptions);
9235
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9139
9236
  return {
9140
9237
  content: [
9141
9238
  {
@@ -9212,6 +9309,7 @@ updateCollection: 更新集合`),
9212
9309
  Tag: instanceId,
9213
9310
  },
9214
9311
  });
9312
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9215
9313
  return {
9216
9314
  content: [
9217
9315
  {
@@ -9289,6 +9387,7 @@ deleteCollection: 删除数据`),
9289
9387
  collectionName,
9290
9388
  documents,
9291
9389
  getManager,
9390
+ logger,
9292
9391
  });
9293
9392
  return {
9294
9393
  content: [
@@ -9313,6 +9412,7 @@ deleteCollection: 删除数据`),
9313
9412
  isMulti,
9314
9413
  upsert,
9315
9414
  getManager,
9415
+ logger,
9316
9416
  });
9317
9417
  return {
9318
9418
  content: [
@@ -9332,6 +9432,7 @@ deleteCollection: 删除数据`),
9332
9432
  query,
9333
9433
  isMulti,
9334
9434
  getManager,
9435
+ logger,
9335
9436
  });
9336
9437
  return {
9337
9438
  content: [
@@ -9345,7 +9446,7 @@ deleteCollection: 删除数据`),
9345
9446
  throw new Error(`不支持的操作类型: ${action}`);
9346
9447
  });
9347
9448
  }
9348
- async function insertDocuments({ collectionName, documents, getManager, }) {
9449
+ async function insertDocuments({ collectionName, documents, getManager, logger, }) {
9349
9450
  try {
9350
9451
  const cloudbase = await getManager();
9351
9452
  const instanceId = await getDatabaseInstanceId(getManager);
@@ -9359,6 +9460,7 @@ async function insertDocuments({ collectionName, documents, getManager, }) {
9359
9460
  Tag: instanceId,
9360
9461
  },
9361
9462
  });
9463
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(logger, result);
9362
9464
  return JSON.stringify({
9363
9465
  success: true,
9364
9466
  requestId: result.RequestId,
@@ -9374,7 +9476,7 @@ async function insertDocuments({ collectionName, documents, getManager, }) {
9374
9476
  }, null, 2);
9375
9477
  }
9376
9478
  }
9377
- async function updateDocuments({ collectionName, query, update, isMulti, upsert, getManager, }) {
9479
+ async function updateDocuments({ collectionName, query, update, isMulti, upsert, getManager, logger, }) {
9378
9480
  try {
9379
9481
  const cloudbase = await getManager();
9380
9482
  const instanceId = await getDatabaseInstanceId(getManager);
@@ -9390,6 +9492,7 @@ async function updateDocuments({ collectionName, query, update, isMulti, upsert,
9390
9492
  Tag: instanceId,
9391
9493
  },
9392
9494
  });
9495
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(logger, result);
9393
9496
  return JSON.stringify({
9394
9497
  success: true,
9395
9498
  requestId: result.RequestId,
@@ -9407,7 +9510,7 @@ async function updateDocuments({ collectionName, query, update, isMulti, upsert,
9407
9510
  }, null, 2);
9408
9511
  }
9409
9512
  }
9410
- async function deleteDocuments({ collectionName, query, isMulti, getManager, }) {
9513
+ async function deleteDocuments({ collectionName, query, isMulti, getManager, logger, }) {
9411
9514
  try {
9412
9515
  const cloudbase = await getManager();
9413
9516
  const instanceId = await getDatabaseInstanceId(getManager);
@@ -9421,6 +9524,7 @@ async function deleteDocuments({ collectionName, query, isMulti, getManager, })
9421
9524
  Tag: instanceId,
9422
9525
  },
9423
9526
  });
9527
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(logger, result);
9424
9528
  return JSON.stringify({
9425
9529
  success: true,
9426
9530
  requestId: result.RequestId,
@@ -9531,6 +9635,7 @@ function registerFunctionTools(server) {
9531
9635
  const cloudbase = await getManager();
9532
9636
  if (action === "list") {
9533
9637
  const result = await cloudbase.functions.getFunctionList(limit, offset);
9638
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9534
9639
  return {
9535
9640
  content: [
9536
9641
  {
@@ -9545,6 +9650,7 @@ function registerFunctionTools(server) {
9545
9650
  throw new Error("获取函数详情时,name 参数是必需的");
9546
9651
  }
9547
9652
  const result = await cloudbase.functions.getFunctionDetail(name, codeSecret);
9653
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9548
9654
  return {
9549
9655
  content: [
9550
9656
  {
@@ -9626,6 +9732,7 @@ function registerFunctionTools(server) {
9626
9732
  functionRootPath: processedRootPath,
9627
9733
  force
9628
9734
  });
9735
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9629
9736
  return {
9630
9737
  content: [
9631
9738
  {
@@ -9673,6 +9780,7 @@ function registerFunctionTools(server) {
9673
9780
  // 使用闭包中的 cloudBaseOptions
9674
9781
  const cloudbase = await getManager();
9675
9782
  const result = await cloudbase.functions.updateFunctionCode(updateParams);
9783
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9676
9784
  return {
9677
9785
  content: [
9678
9786
  {
@@ -9713,6 +9821,7 @@ function registerFunctionTools(server) {
9713
9821
  // 使用闭包中的 cloudBaseOptions
9714
9822
  const cloudbase = await getManager();
9715
9823
  const result = await cloudbase.functions.updateFunctionConfig(funcParam);
9824
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9716
9825
  return {
9717
9826
  content: [
9718
9827
  {
@@ -9741,6 +9850,7 @@ function registerFunctionTools(server) {
9741
9850
  // 使用闭包中的 cloudBaseOptions
9742
9851
  const cloudbase = await getManager();
9743
9852
  const result = await cloudbase.functions.invokeFunction(name, params);
9853
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9744
9854
  return {
9745
9855
  content: [
9746
9856
  {
@@ -9781,6 +9891,7 @@ function registerFunctionTools(server) {
9781
9891
  }
9782
9892
  const cloudbase = await getManager();
9783
9893
  const result = await cloudbase.functions.getFunctionLogsV2({ name, offset, limit, startTime, endTime, requestId, qualifier });
9894
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9784
9895
  return {
9785
9896
  content: [
9786
9897
  {
@@ -9818,6 +9929,7 @@ function registerFunctionTools(server) {
9818
9929
  endTime,
9819
9930
  logRequestId: requestId
9820
9931
  });
9932
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9821
9933
  return {
9822
9934
  content: [
9823
9935
  {
@@ -9856,6 +9968,7 @@ function registerFunctionTools(server) {
9856
9968
  throw new Error("创建触发器时,triggers 参数是必需的");
9857
9969
  }
9858
9970
  const result = await cloudbase.functions.createFunctionTriggers(name, triggers);
9971
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9859
9972
  return {
9860
9973
  content: [
9861
9974
  {
@@ -9870,6 +9983,7 @@ function registerFunctionTools(server) {
9870
9983
  throw new Error("删除触发器时,triggerName 参数是必需的");
9871
9984
  }
9872
9985
  const result = await cloudbase.functions.deleteFunctionTrigger(name, triggerName);
9986
+ (0, cloudbase_manager_js_1.logCloudBaseResult)(server.logger, result);
9873
9987
  return {
9874
9988
  content: [
9875
9989
  {