Skip to content

Commit 87800f0

Browse files
committed
feat: logger callback
1 parent 3bdcd31 commit 87800f0

17 files changed

Lines changed: 452 additions & 342 deletions

mcp/src/cloudbase-manager.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import CloudBase from "@cloudbase/manager-node";
22
import { getLoginState } from './auth.js';
33
import { autoSetupEnvironmentId } from './tools/interactive.js';
4-
import { CloudBaseOptions } from './types.js';
4+
import { CloudBaseOptions, Logger } from './types.js';
55
import { debug, error } from './utils/logger.js';
66
const ENV_ID_TIMEOUT = 600000; // 10 minutes (600 seconds) - matches InteractiveServer timeout
77

@@ -192,5 +192,43 @@ export function createCloudBaseManagerWithOptions(cloudBaseOptions: CloudBaseOpt
192192
return manager;
193193
}
194194

195+
/**
196+
* Extract RequestId from result object
197+
*/
198+
export function extractRequestId(result: any): string | undefined {
199+
if (!result || typeof result !== 'object') {
200+
return undefined;
201+
}
202+
203+
// Try common RequestId field names
204+
if ('RequestId' in result && result.RequestId) {
205+
return String(result.RequestId);
206+
}
207+
if ('requestId' in result && result.requestId) {
208+
return String(result.requestId);
209+
}
210+
if ('request_id' in result && result.request_id) {
211+
return String(result.request_id);
212+
}
213+
214+
return undefined;
215+
}
216+
217+
/**
218+
* Log CloudBase manager call result with RequestId
219+
*/
220+
export function logCloudBaseResult(logger: Logger | undefined, result: any): void {
221+
if (!logger) {
222+
return;
223+
}
224+
225+
const requestId = extractRequestId(result);
226+
logger({
227+
type: 'capiResult',
228+
requestId,
229+
result,
230+
});
231+
}
232+
195233
// 导出环境管理器实例供其他地方使用
196234
export { envManager };

mcp/src/server.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { registerDataModelTools } from "./tools/dataModel.js";
1616
import { registerGatewayTools } from "./tools/gateway.js";
1717
import { registerInviteCodeTools } from "./tools/invite-code.js";
1818
import { registerSecurityRuleTools } from "./tools/security-rule.js";
19-
import { CloudBaseOptions } from "./types.js";
19+
import { CloudBaseOptions, Logger } from "./types.js";
2020
import { enableCloudMode } from "./utils/cloud-mode.js";
2121
import { info } from './utils/logger.js';
2222
import { wrapServerWithTelemetry } from "./utils/tool-wrapper.js";
@@ -101,6 +101,7 @@ function parseEnabledPlugins(): string[] {
101101
export interface ExtendedMcpServer extends McpServer {
102102
cloudBaseOptions?: CloudBaseOptions;
103103
ide?: string;
104+
logger?: Logger;
104105
}
105106

106107
/**
@@ -130,6 +131,7 @@ export async function createCloudBaseMcpServer(options?: {
130131
cloudBaseOptions?: CloudBaseOptions;
131132
cloudMode?: boolean;
132133
ide?: string;
134+
logger?: Logger;
133135
}): Promise<ExtendedMcpServer> {
134136
const {
135137
name = "cloudbase-mcp",
@@ -138,6 +140,7 @@ export async function createCloudBaseMcpServer(options?: {
138140
cloudBaseOptions,
139141
cloudMode = false,
140142
ide,
143+
logger,
141144
} = options ?? {};
142145

143146
// Enable cloud mode if specified
@@ -177,6 +180,11 @@ export async function createCloudBaseMcpServer(options?: {
177180
server.ide = ide;
178181
}
179182

183+
// Store logger in server instance for tools to access
184+
if (logger) {
185+
server.logger = logger;
186+
}
187+
180188
// Enable telemetry if requested
181189
if (enableTelemetry) {
182190
wrapServerWithTelemetry(server);

0 commit comments

Comments
 (0)