fix: make templates available in Docker by removing axios from runtime

- Move TemplateFetcher import to dynamic import in fetchAndUpdateTemplates
- Templates now work everywhere since they just read from database
- axios only loaded when actually fetching new templates
- Fixes Docker runtime error while keeping full template functionality

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
czlonkowski
2025-06-20 00:35:29 +02:00
parent 36df3ae54b
commit 12d23d65a0
2 changed files with 12 additions and 47 deletions

View File

@@ -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<any> {
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<any> {
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<any> {
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<any> {
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();