Initial commit
This commit is contained in:
78
mcp-server/tools/modules/check.js
Normal file
78
mcp-server/tools/modules/check.js
Normal file
@@ -0,0 +1,78 @@
|
||||
import { z } from "zod";
|
||||
import { withAuth, getSessionCredentials } from "../../auth/index.js";
|
||||
import { handleToolError, handleApiResponse, validateRequired } from "../helpers/errorHandler.js";
|
||||
import { AcaiHttpClient } from "../helpers/acaiHttpClient.js";
|
||||
import { withAuthParams } from "../helpers/authSchema.js";
|
||||
|
||||
export function registerCheckModuleTool(server) {
|
||||
server.tool(
|
||||
"check_module",
|
||||
"Preview how a module renders with sample data. Returns a preview (first 50 lines + summary) by default — use fullRender=true for complete output. Always shows errors in full.",
|
||||
withAuthParams({
|
||||
moduleName: z.string().describe("Module ID/name to check"),
|
||||
vars: z.record(z.string(), z.any()).describe("Object with builder variable values. Keys should match the variable names from data-field-label (without spaces/special chars)"),
|
||||
fullRender: z.boolean().optional().describe("If true, returns complete rendered HTML. Default: false (preview — first 50 lines + summary, saves tokens)."),
|
||||
}),
|
||||
{ readOnlyHint: true, destructiveHint: false },
|
||||
withAuth(async ({ moduleName, vars, fullRender }, extra) => {
|
||||
const startTime = Date.now();
|
||||
console.error(`[Tool] check_module - START: moduleName=${moduleName}, varsCount=${Object.keys(vars || {}).length}, sessionId=${extra.sessionId}`);
|
||||
|
||||
try {
|
||||
// Validate required parameters
|
||||
const validationError = validateRequired(
|
||||
{ moduleName, vars },
|
||||
['moduleName', 'vars'],
|
||||
'check_module'
|
||||
);
|
||||
if (validationError) {
|
||||
console.error(`[Tool] check_module - VALIDATION ERROR: ${validationError.content[0].text}`);
|
||||
return validationError;
|
||||
}
|
||||
|
||||
const credentials = await getSessionCredentials(extra.sessionId);
|
||||
|
||||
const payload = {
|
||||
moduleName: moduleName,
|
||||
vars: vars
|
||||
};
|
||||
|
||||
console.error(`[Tool] check_module - Calling AcaiHttpClient.checkModuleCode...`);
|
||||
const response = await AcaiHttpClient.checkModuleCode(credentials, credentials.token, payload);
|
||||
|
||||
// Check for API errors in response
|
||||
/*const apiError = handleApiResponse(response.data, 'check_module');
|
||||
if (apiError) {
|
||||
console.error(`[Tool] check_module - API ERROR: ${apiError.content[0].text}`);
|
||||
return apiError;
|
||||
}*/
|
||||
|
||||
const elapsedTime = Date.now() - startTime;
|
||||
console.error(`[Tool] check_module - SUCCESS: completed in ${elapsedTime}ms`);
|
||||
|
||||
let outputText = `Module Preview for "${moduleName}":\n\n${JSON.stringify(response.data, null, 2)}`;
|
||||
|
||||
// Preview mode (default): truncate to first 50 lines + summary
|
||||
if (!fullRender) {
|
||||
const lines = outputText.split('\n');
|
||||
const PREVIEW_LINES = 50;
|
||||
if (lines.length > PREVIEW_LINES) {
|
||||
const preview = lines.slice(0, PREVIEW_LINES).join('\n');
|
||||
outputText = `${preview}\n\n--- PREVIEW: showing ${PREVIEW_LINES} of ${lines.length} lines. Use fullRender=true for complete output. ---`;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
content: [{
|
||||
type: "text",
|
||||
text: outputText
|
||||
}],
|
||||
};
|
||||
} catch (error) {
|
||||
const elapsedTime = Date.now() - startTime;
|
||||
console.error(`[Tool] check_module - ERROR after ${elapsedTime}ms: ${error.message}`);
|
||||
return handleToolError(error, 'check_module', { moduleName, varsCount: Object.keys(vars || {}).length });
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user