12 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
n8n-mcp is a comprehensive documentation and knowledge server that provides AI assistants with complete access to n8n node information through the Model Context Protocol (MCP). It serves as a bridge between n8n's workflow automation platform and AI models, enabling them to understand and work with n8n nodes effectively.
✅ Refactor Complete (v2.3)
Latest Update (v2.3) - Universal Node.js Compatibility:
- ✅ Automatic database adapter fallback system implemented
- ✅ Works with ANY Node.js version (no more v20.17.0 requirement)
- ✅ Seamless fallback from better-sqlite3 to sql.js
- ✅ No manual configuration needed for Claude Desktop
- ✅ Maintains full functionality with either adapter
✅ Previous Achievements (v2.2)
The major refactor has been successfully completed based on IMPLEMENTATION_PLAN.md v2.2
Achieved Goals:
- ✅ Fixed property/operation extraction (452/458 nodes have properties)
- ✅ Added AI tool detection (35 AI tools detected)
- ✅ Full support for @n8n/n8n-nodes-langchain package
- ✅ Proper VersionedNodeType handling
- ✅ Fixed documentation mapping issues
Current Architecture:
src/
├── loaders/
│ └── node-loader.ts # NPM package loader for both packages
├── parsers/
│ ├── node-parser.ts # Enhanced parser with version support
│ └── property-extractor.ts # Dedicated property/operation extraction
├── mappers/
│ └── docs-mapper.ts # Documentation mapping with fixes
├── database/
│ ├── schema.sql # SQLite schema
│ ├── node-repository.ts # Data access layer
│ └── database-adapter.ts # Universal database adapter (NEW in v2.3)
├── scripts/
│ ├── rebuild.ts # Database rebuild with validation
│ ├── validate.ts # Node validation
│ └── test-nodes.ts # Critical node tests
└── mcp/
└── server.ts # MCP server with enhanced tools
Key Metrics:
- 458 nodes successfully loaded (100%)
- 452 nodes with properties (98.7%)
- 265 nodes with operations (57.9%)
- 406 nodes with documentation (88.6%)
- 35 AI-capable tools detected
- All critical nodes pass validation
Key Commands
# Development
npm install # Install dependencies
npm run build # Build TypeScript (required before running)
npm run dev # Run in development mode with auto-reload
npm test # Run Jest tests
npm run typecheck # TypeScript type checking
npm run lint # Check TypeScript types (alias for typecheck)
# Core Commands:
npm run rebuild # Rebuild node database
npm run validate # Validate critical nodes
npm run test-nodes # Test critical node properties/operations
# HTTP Server Commands:
npm run start:http # Start server in HTTP mode
npm run http # Build and start HTTP server
npm run dev:http # HTTP server with auto-reload
# Legacy Commands (deprecated):
npm run db:rebuild # Old rebuild command
npm run db:init # Initialize empty database
npm run docs:rebuild # Rebuild documentation from TypeScript source
# Production
npm start # Run built application (stdio mode)
npm run start:http # Run in HTTP mode for remote access
High-Level Architecture
The project implements MCP (Model Context Protocol) to expose n8n node documentation, source code, and examples to AI assistants. Key architectural components:
Core Services
- NodeDocumentationService (
src/services/node-documentation-service.ts): Main database service using SQLite with FTS5 for fast searching - MCP Server (
src/mcp/server.ts): Implements MCP protocol with tools for querying n8n nodes - Node Source Extractor (
src/utils/node-source-extractor.ts): Extracts node implementations from n8n packages - Enhanced Documentation Fetcher (
src/utils/enhanced-documentation-fetcher.ts): Fetches and parses official n8n documentation
MCP Tools Available
list_nodes- List all available n8n nodes with filteringget_node_info- Get comprehensive information about a specific node (properties, operations, credentials)search_nodes- Full-text search across all node documentationlist_ai_tools- List all AI-capable nodes (usableAsTool: true)get_node_documentation- Get parsed documentation from n8n-docsget_database_statistics- Get database usage statistics and metrics
Database Structure
Uses SQLite with enhanced schema:
- nodes table: Core node information with FTS5 indexing
- node_documentation: Parsed markdown documentation
- node_examples: Generated workflow examples
- node_source_code: Complete TypeScript/JavaScript implementations
Important Development Notes
Initial Setup Requirements
- Clone n8n-docs:
git clone https://github.com/n8n-io/n8n-docs.git ../n8n-docs - Install Dependencies:
npm install - Build:
npm run build - Rebuild Database:
npm run rebuild - Validate:
npm run test-nodes
Key Technical Decisions (v2.3)
-
Database Adapter Implementation:
- Created
DatabaseAdapterinterface to abstract database operations - Implemented
BetterSQLiteAdapterandSQLJSAdapterclasses - Used factory pattern in
createDatabaseAdapter()for automatic selection - Added persistence layer for sql.js with debounced saves (100ms)
- Created
-
Compatibility Strategy:
- Primary: Try better-sqlite3 first for performance
- Fallback: Catch native module errors and switch to sql.js
- Detection: Check for NODE_MODULE_VERSION errors specifically
- Logging: Clear messages about which adapter is active
-
Performance Considerations:
- better-sqlite3: ~10-50x faster for most operations
- sql.js: ~2-5x slower but acceptable for this use case
- Auto-save: 100ms debounce prevents excessive disk writes with sql.js
- Memory: sql.js uses more memory but manageable for our dataset size
Node.js Version Compatibility
The project now features automatic database adapter fallback for universal Node.js compatibility:
- Primary adapter: Uses
better-sqlite3for optimal performance when available - Fallback adapter: Automatically switches to
sql.js(pure JavaScript) if:- Native modules fail to load
- Node.js version mismatch detected
- Running in Claude Desktop or other restricted environments
This means the project works with ANY Node.js version without manual intervention. The adapter selection is automatic and transparent.
Implementation Status
- ✅ Property/operation extraction for 98.7% of nodes
- ✅ Support for both n8n-nodes-base and @n8n/n8n-nodes-langchain
- ✅ AI tool detection (35 tools with usableAsTool property)
- ✅ Versioned node support (HTTPRequest, Code, etc.)
- ✅ Documentation coverage for 88.6% of nodes
- ⏳ Version history tracking (deferred - only current version)
- ⏳ Workflow examples (deferred - using documentation)
Testing Workflow
npm run build # Always build first
npm test # Run all tests
npm run typecheck # Verify TypeScript types
Docker Development
# Local development with stdio
docker-compose -f docker-compose.local.yml up
# HTTP server mode
docker-compose -f docker-compose.http.yml up
Authentication (HTTP mode)
When running in HTTP mode, use Bearer token authentication:
Authorization: Bearer your-auth-token
Architecture Patterns
Service Layer Pattern
All major functionality is implemented as services in src/services/. When adding new features:
- Create a service class with clear responsibilities
- Use dependency injection where appropriate
- Implement proper error handling with custom error types
- Add comprehensive logging using the logger utility
MCP Tool Implementation
When adding new MCP tools:
- Define the tool in
src/mcp/tools.ts - Implement handler in
src/mcp/server.ts - Add proper input validation
- Return structured responses matching MCP expectations
Database Access Pattern
- Use prepared statements for all queries
- Implement proper transaction handling
- Use FTS5 for text searching
- Cache frequently accessed data in memory
Database Adapter Pattern (NEW in v2.3)
The project uses a database adapter pattern for universal compatibility:
- Primary adapter:
better-sqlite3- Native SQLite bindings for optimal performance - Fallback adapter:
sql.js- Pure JavaScript implementation for compatibility - Automatic selection: The system detects and handles version mismatches automatically
- Unified interface: Both adapters implement the same
DatabaseAdapterinterface - Transparent operation: Application code doesn't need to know which adapter is active
Environment Configuration
Required environment variables (see .env.example):
# Server Configuration
NODE_ENV=development
PORT=3000
AUTH_TOKEN=your-secure-token
# MCP Configuration
MCP_SERVER_NAME=n8n-documentation-mcp
MCP_SERVER_VERSION=1.0.0
# Logging
LOG_LEVEL=info
License Note
This project uses the Sustainable Use License. Key points:
- ✅ Free for internal business and personal use
- ✅ Modifications allowed for own use
- ❌ Cannot host as a service without permission
- ❌ Cannot include in commercial products without permission
HTTP Remote Deployment (v2.3.0)
✅ HTTP Server Implementation Complete
The project now includes a simplified HTTP server mode for remote deployments:
- Single-user design: Stateless architecture for private deployments
- Simple token auth: Bearer token authentication
- MCP-compatible: Works with mcp-remote adapter for Claude Desktop
- Easy deployment: Minimal configuration required
Quick Start
# Server setup
export MCP_MODE=http
export AUTH_TOKEN=$(openssl rand -base64 32)
npm run start:http
# Client setup (Claude Desktop config)
{
"mcpServers": {
"n8n-documentation": {
"command": "mcp-remote",
"args": [
"https://your-server.com/mcp",
"--header",
"Authorization: Bearer your-auth-token"
]
}
}
}
Available Scripts
npm run start:http- Start in HTTP modenpm run http- Build and start HTTP servernpm run dev:http- Development mode with auto-reload./scripts/deploy-http.sh- Deployment helper script
For detailed deployment instructions, see HTTP Deployment Guide.
Recent Problem Solutions
SQLite Version Mismatch (Solved in v2.3)
Problem: Claude Desktop bundles Node.js v16.19.1, causing NODE_MODULE_VERSION errors with better-sqlite3 compiled for different versions.
Solution: Implemented dual-adapter system:
- Database adapter abstraction layer
- Automatic fallback from better-sqlite3 to sql.js
- Transparent operation regardless of Node.js version
- No manual configuration required
Technical Details:
src/database/database-adapter.ts- Adapter interface and implementationscreateDatabaseAdapter()- Factory function with automatic selection- Modified all database operations to use adapter interface
- Added sql.js with persistence support
Property Extraction Issues (Solved in v2.2)
Problem: Many nodes had empty properties/operations arrays.
Solution: Created dedicated PropertyExtractor class that handles:
- Instance-level property extraction
- Versioned node support
- Both programmatic and declarative styles
- Complex nested property structures