diff --git a/src/mcp/server-update.ts b/src/mcp/server-update.ts index b68d6c6..2b55c13 100644 --- a/src/mcp/server-update.ts +++ b/src/mcp/server-update.ts @@ -17,8 +17,7 @@ import { TaskTemplates } from '../services/task-templates'; import { ConfigValidator } from '../services/config-validator'; import { PropertyDependencies } from '../services/property-dependencies'; import { SimpleCache } from '../utils/simple-cache'; -// Type import for TypeScript, won't be included in runtime -import type { TemplateService } from '../templates/template-service'; +import { TemplateService } from '../templates/template-service'; interface NodeRow { node_type: string; @@ -91,19 +90,7 @@ export class N8NDocumentationMCPServer { try { this.db = await createDatabaseAdapter(dbPath); this.repository = new NodeRepository(this.db); - - // Only initialize template service when not in Docker (templates are pre-built in DB) - if (!process.env.IS_DOCKER) { - try { - const { TemplateService } = await import('../templates/template-service'); - this.templateService = new TemplateService(this.db); - logger.info('Template service initialized'); - } catch (error) { - logger.warn('Template service not available:', error); - // Continue without templates - not critical for operation - } - } - + this.templateService = new TemplateService(this.db); logger.info(`Initialized database from: ${dbPath}`); } catch (error) { logger.error('Failed to initialize database:', error); @@ -955,13 +942,7 @@ Full documentation is being prepared. For now, use get_node_essentials for confi // Template-related methods private async listNodeTemplates(nodeTypes: string[], limit: number = 10): Promise { await this.ensureInitialized(); - if (!this.templateService) { - return { - error: 'Template service not available', - message: 'Templates are pre-built in the database. This tool is not available in Docker mode.', - templates: [] - }; - } + if (!this.templateService) throw new Error('Template service not initialized'); const templates = await this.templateService.listNodeTemplates(nodeTypes, limit); @@ -982,12 +963,7 @@ Full documentation is being prepared. For now, use get_node_essentials for confi private async getTemplate(templateId: number): Promise { await this.ensureInitialized(); - if (!this.templateService) { - return { - error: 'Template service not available', - message: 'Templates are pre-built in the database. This tool is not available in Docker mode.' - }; - } + if (!this.templateService) throw new Error('Template service not initialized'); const template = await this.templateService.getTemplate(templateId); @@ -1006,13 +982,7 @@ Full documentation is being prepared. For now, use get_node_essentials for confi private async searchTemplates(query: string, limit: number = 20): Promise { await this.ensureInitialized(); - if (!this.templateService) { - return { - error: 'Template service not available', - message: 'Templates are pre-built in the database. This tool is not available in Docker mode.', - templates: [] - }; - } + if (!this.templateService) throw new Error('Template service not initialized'); const templates = await this.templateService.searchTemplates(query, limit); @@ -1033,13 +1003,7 @@ Full documentation is being prepared. For now, use get_node_essentials for confi private async getTemplatesForTask(task: string): Promise { await this.ensureInitialized(); - if (!this.templateService) { - return { - error: 'Template service not available', - message: 'Templates are pre-built in the database. This tool is not available in Docker mode.', - templates: [] - }; - } + if (!this.templateService) throw new Error('Template service not initialized'); const templates = await this.templateService.getTemplatesForTask(task); const availableTasks = this.templateService.listAvailableTasks(); diff --git a/src/templates/template-service.ts b/src/templates/template-service.ts index 3c52610..b00c63d 100644 --- a/src/templates/template-service.ts +++ b/src/templates/template-service.ts @@ -1,6 +1,5 @@ import { DatabaseAdapter } from '../database/database-adapter'; import { TemplateRepository, StoredTemplate } from './template-repository'; -import { TemplateFetcher } from './template-fetcher'; import { logger } from '../utils/logger'; export interface TemplateInfo { @@ -24,11 +23,9 @@ export interface TemplateWithWorkflow extends TemplateInfo { export class TemplateService { private repository: TemplateRepository; - private fetcher: TemplateFetcher; constructor(db: DatabaseAdapter) { this.repository = new TemplateRepository(db); - this.fetcher = new TemplateFetcher(); } /** @@ -102,12 +99,16 @@ export class TemplateService { progressCallback?: (message: string, current: number, total: number) => void ): Promise { try { + // Dynamically import fetcher only when needed (requires axios) + const { TemplateFetcher } = await import('./template-fetcher'); + const fetcher = new TemplateFetcher(); + // Clear existing templates this.repository.clearTemplates(); // Fetch template list logger.info('Fetching template list from n8n.io'); - const templates = await this.fetcher.fetchTemplates((current, total) => { + const templates = await fetcher.fetchTemplates((current, total) => { progressCallback?.('Fetching template list', current, total); }); @@ -115,7 +116,7 @@ export class TemplateService { // Fetch details for each template logger.info('Fetching template details'); - const details = await this.fetcher.fetchAllTemplateDetails(templates, (current, total) => { + const details = await fetcher.fetchAllTemplateDetails(templates, (current, total) => { progressCallback?.('Fetching template details', current, total); });