mcp-server-blk
Version:
MCP server for managing blocks schemas via API
113 lines • 4.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
const logger_1 = require("./utils/logger");
const services_1 = require("./services");
const tools_1 = require("./tools");
class SchemaManagementServer {
constructor() {
this.server = new index_js_1.Server({
name: 'schema-management-server',
version: '0.1.0',
}, {
capabilities: {
tools: {},
},
});
this.blocksKey = process.env.BLOCKS_KEY;
this.username = process.env.USERNAME;
this.userkey = process.env.USER_KEY;
this.apiBaseUrl = process.env.API_BASE_URL;
(0, logger_1.debugLog)('info', 'Environment variables loaded', {
projectKey: this.blocksKey ? '[SET]' : '[NOT SET]',
username: this.username ? '[SET]' : '[NOT SET]',
userkey: this.userkey ? '[SET]' : '[NOT SET]',
apiBaseUrl: this.apiBaseUrl ? '[SET]' : '[NOT SET]'
});
const logPaths = (0, logger_1.getLogFilePaths)();
(0, logger_1.debugLog)('info', '📁 Log files initialized', logPaths);
(0, logger_1.cleanupOldLogs)(7);
this.setupToolHandlers();
(0, logger_1.debugLog)('info', 'Server initialized');
}
setupToolHandlers() {
this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
(0, logger_1.debugLog)('info', 'Received list_tools request');
const tools = [
tools_1.create_schema_tool,
tools_1.update_schema_tool
];
(0, logger_1.debugLog)('info', 'Returning tools list', { toolCount: tools.length });
return { tools };
});
this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
(0, logger_1.debugLog)('info', `Received call_tool request for: ${name}`, {
arguments: { ...args, userkey: '[HIDDEN]' }
});
try {
const promptArgs = args ?? {};
if (name === 'create_schema') {
const result = await (0, services_1.createSchema)(promptArgs);
return result;
}
else if (name === 'update_schema') {
const result = await (0, services_1.updateSchema)(promptArgs);
return result;
}
else {
(0, logger_1.debugLog)('error', `Unknown tool: ${name}`);
throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
const errorStack = error instanceof Error ? error.stack : undefined;
(0, logger_1.debugLog)('error', `Error executing ${name}`, {
error: errorMessage,
stack: errorStack
});
if (error instanceof types_js_1.McpError) {
throw error;
}
throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Error executing ${name}: ${errorMessage}`);
}
});
}
async run() {
const transport = new stdio_js_1.StdioServerTransport();
await this.server.connect(transport);
(0, logger_1.debugLog)('info', 'Schema Management MCP server running on stdio');
}
async close() {
await this.server.close();
}
}
const server = new SchemaManagementServer();
process.on('SIGINT', async () => {
(0, logger_1.debugLog)('info', 'Received SIGINT, shutting down server');
await server.close();
process.exit(0);
});
process.on('uncaughtException', (error) => {
(0, logger_1.debugLog)('error', 'Uncaught exception', {
error: error.message,
stack: error.stack
});
process.exit(1);
});
process.on('unhandledRejection', (reason, promise) => {
(0, logger_1.debugLog)('error', 'Unhandled rejection', { reason, promise });
process.exit(1);
});
server.run().catch((error) => {
(0, logger_1.debugLog)('error', 'Server startup failed', {
error: error.message,
stack: error.stack
});
process.exit(1);
});
//# sourceMappingURL=index.js.map