@turbot/guardrails-mcp
Version:
MCP server for interacting with Turbot Guardrails.
83 lines (82 loc) • 3.25 kB
JavaScript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import config from "./config/env.js";
import { logger } from "./services/pinoLogger.js";
import { setupResources, resourceCapabilities } from "./resources/index.js";
import { setupResourceTemplates, resourceTemplates } from "./resourceTemplates/index.js";
import { setupTools, tools } from "./tools/index.js";
import { registerPrompts, promptCapabilities } from "./prompts/index.js";
import { readFileSync } from 'fs';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
// Load package.json
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));
// Server metadata
const SERVER_INFO = {
name: "guardrails",
version: pkg.version,
description: pkg.description,
vendor: pkg.author,
homepage: pkg.homepage,
};
// Handle graceful shutdown
function setupShutdownHandlers() {
const gracefulShutdown = async () => {
process.exit(0);
};
process.on('SIGTERM', gracefulShutdown);
process.on('SIGINT', gracefulShutdown);
}
/**
* Start the MCP server
*/
async function main() {
const startTime = Date.now();
logger.info('Starting server...');
try {
// Set up shutdown handlers
setupShutdownHandlers();
logger.info('Shutdown handlers configured');
// Initialize server
logger.info('Creating MCP server instance...');
const serverStartTime = Date.now();
const server = new McpServer(SERVER_INFO, {
capabilities: {
tools,
prompts: promptCapabilities.prompts,
resources: resourceCapabilities,
resourceTemplates
}
});
logger.info(`MCP server instance created (took ${Date.now() - serverStartTime}ms)`);
// Initialize handlers
logger.info('Setting up handlers...');
const handlersStartTime = Date.now();
setupTools(server.server);
logger.info('Tools handlers initialized');
setupResources(server.server);
logger.info('Resource handlers initialized');
setupResourceTemplates(server.server);
logger.info('Resource template handlers initialized');
registerPrompts(server);
logger.info(`All handlers initialized successfully (took ${Date.now() - handlersStartTime}ms)`);
// Connect transport
logger.info('Connecting transport...');
const transportStartTime = Date.now();
const transport = new StdioServerTransport();
await server.connect(transport);
logger.info(`Transport connected successfully (took ${Date.now() - transportStartTime}ms)`);
const totalTime = Date.now() - startTime;
logger.info(`Server started successfully (total initialization time: ${totalTime}ms)`);
logger.info(`GraphQL Endpoint: ${config.TURBOT_GRAPHQL_ENDPOINT}`);
}
catch (error) {
logger.error('Failed to start server:', error);
process.exit(1);
}
}
// Start the server
main();