Skip to main content
Glama
index-registry.ts7.07 kB
#!/usr/bin/env node /** * @fileoverview Main entry point for the DeepSource MCP server using ToolRegistry * * @deprecated This file is deprecated. Please use src/index.ts instead. * This file is provided for backward compatibility and will be removed in the next major version. * * Migration guide: * - Import from 'deepsource-mcp-server' or './index.js' instead of './index-registry.js' * - Use DeepSourceMCPServer.create() instead of manual registry configuration * - See MIGRATION.md for detailed migration instructions */ import process from 'node:process'; import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { createLogger } from './utils/logging/logger.js'; import { VERSION } from './version.js'; // import { RepositoryFactory } from './infrastructure/factories/repository.factory.js'; import { ToolRegistry } from './server/tool-registry.js'; import { adaptQualityMetricsParams, adaptUpdateMetricThresholdParams, adaptUpdateMetricSettingParams, adaptComplianceReportParams, adaptProjectIssuesParams, adaptDependencyVulnerabilitiesParams, adaptProjectRunsParams, adaptRunParams, adaptRecentRunIssuesParams, } from './adapters/handler-adapters.js'; import { handleProjects, handleDeepsourceQualityMetrics, handleDeepsourceUpdateMetricThreshold, handleDeepsourceUpdateMetricSetting, handleDeepsourceComplianceReport, handleDeepsourceProjectIssues, handleDeepsourceDependencyVulnerabilities, handleDeepsourceProjectRuns, handleDeepsourceRun, handleDeepsourceRecentRunIssues, } from './handlers/index.js'; import { projectsToolSchema, qualityMetricsToolSchema, updateMetricThresholdToolSchema, updateMetricSettingToolSchema, complianceReportToolSchema, projectIssuesToolSchema, dependencyVulnerabilitiesToolSchema, runsToolSchema, runToolSchema, recentRunIssuesToolSchema, } from './server/tool-definitions.js'; // Environment variables are handled by the getApiKey function in config // Module logger const logger = createLogger('Main'); // Log deprecation warning logger.warn( 'DEPRECATED: index-registry.ts is deprecated and will be removed in the next major version. ' + 'Please use index.ts instead. See MIGRATION.md for migration instructions.' ); if (process.env.NODE_ENV !== 'test') { // eslint-disable-next-line no-console console.warn( '\n⚠️ WARNING: This entry point (index-registry.ts) is deprecated.\n' + 'Please use the main index.ts entry point instead.\n' + 'This file will be removed in the next major version.\n' ); } /** * Validates environment configuration */ export function validateEnvironment(): void { if (!process.env.DEEPSOURCE_API_KEY) { const errorMsg = 'DEEPSOURCE_API_KEY environment variable is required'; logger.error(errorMsg); process.exit(1); } logger.info('Environment validated', { hasApiKey: true }); } /** * Creates and configures the tool registry with all handlers */ export function createAndConfigureToolRegistry(server: McpServer): ToolRegistry { const toolRegistry = new ToolRegistry(server); // Register project listing tool toolRegistry.registerTool({ ...projectsToolSchema, handler: async () => { // No adaptation needed - no parameters return handleProjects(); }, }); // Register quality metrics tools toolRegistry.registerTool({ ...qualityMetricsToolSchema, handler: async (params) => { const adaptedParams = adaptQualityMetricsParams(params); return handleDeepsourceQualityMetrics(adaptedParams); }, }); toolRegistry.registerTool({ ...updateMetricThresholdToolSchema, handler: async (params) => { const adaptedParams = adaptUpdateMetricThresholdParams(params); return handleDeepsourceUpdateMetricThreshold(adaptedParams); }, }); toolRegistry.registerTool({ ...updateMetricSettingToolSchema, handler: async (params) => { const adaptedParams = adaptUpdateMetricSettingParams(params); return handleDeepsourceUpdateMetricSetting(adaptedParams); }, }); // Register compliance report tool toolRegistry.registerTool({ ...complianceReportToolSchema, handler: async (params) => { const adaptedParams = adaptComplianceReportParams(params); return handleDeepsourceComplianceReport(adaptedParams); }, }); // Register issue tools toolRegistry.registerTool({ ...projectIssuesToolSchema, handler: async (params) => { const adaptedParams = adaptProjectIssuesParams(params); return handleDeepsourceProjectIssues(adaptedParams); }, }); toolRegistry.registerTool({ ...dependencyVulnerabilitiesToolSchema, handler: async (params) => { const adaptedParams = adaptDependencyVulnerabilitiesParams(params); return handleDeepsourceDependencyVulnerabilities(adaptedParams); }, }); // Register run tools toolRegistry.registerTool({ ...runsToolSchema, handler: async (params) => { const adaptedParams = adaptProjectRunsParams(params); return handleDeepsourceProjectRuns(adaptedParams); }, }); toolRegistry.registerTool({ ...runToolSchema, handler: async (params) => { const adaptedParams = adaptRunParams(params); return handleDeepsourceRun(adaptedParams); }, }); toolRegistry.registerTool({ ...recentRunIssuesToolSchema, handler: async (params) => { const adaptedParams = adaptRecentRunIssuesParams(params); return handleDeepsourceRecentRunIssues(adaptedParams); }, }); logger.info('Tool registry configured', { toolCount: toolRegistry.getToolNames().length, tools: toolRegistry.getToolNames(), }); return toolRegistry; } /** * Main function that starts the MCP server */ export async function main() { logger.info('Starting DeepSource MCP Server (Registry Implementation)', { version: VERSION, }); // Validate environment validateEnvironment(); // Create MCP server const server = new McpServer({ name: 'deepsource-mcp-server', version: VERSION, }); // Create and configure tool registry createAndConfigureToolRegistry(server); // Set up transport const transport = new StdioServerTransport(); logger.info('Transport initialized', { type: 'stdio' }); // Connect server to transport await server.connect(transport); logger.info('Server connected to transport'); logger.info('DeepSource MCP Server running (Registry Implementation)'); } // Handle errors process.on('uncaughtException', (error) => { logger.error('Uncaught exception', { error: error.message, stack: error.stack, }); process.exit(1); }); process.on('unhandledRejection', (reason, promise) => { logger.error('Unhandled rejection', { reason, promise, }); process.exit(1); }); // Run the server main().catch((error) => { logger.error('Failed to start server', { error: error.message, stack: error.stack, }); process.exit(1); });

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sapientpants/deepsource-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server