Refactor to focused n8n node documentation MCP server

Major refactoring to align with actual requirements:
- Purpose: Serve n8n node code/documentation to AI agents only
- No workflow execution or management features
- Complete node information including source code, docs, and examples

New features:
- Node documentation service with SQLite FTS5 search
- Documentation fetcher from n8n-docs repository
- Example workflow generator for each node type
- Simplified MCP tools focused on node information
- Complete database rebuild with all node data

MCP Tools:
- list_nodes: List available nodes
- get_node_info: Get complete node information
- search_nodes: Full-text search across nodes
- get_node_example: Get usage examples
- get_node_source_code: Get source code only
- get_node_documentation: Get documentation only
- rebuild_database: Rebuild entire database
- get_database_statistics: Database stats

Database schema includes:
- Node source code and metadata
- Official documentation from n8n-docs
- Generated usage examples
- Full-text search capabilities
- Category and type filtering

Updated README with:
- Clear purpose statement
- Claude Desktop installation instructions
- Complete tool documentation
- Troubleshooting guide

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
czlonkowski
2025-06-07 22:11:30 +00:00
parent 96809d0c9f
commit d32af279c0
17 changed files with 2484 additions and 359 deletions

26
tests/test-node-list.js Normal file
View File

@@ -0,0 +1,26 @@
#!/usr/bin/env node
const { NodeSourceExtractor } = require('../dist/utils/node-source-extractor');
async function testNodeList() {
console.log('Testing node list...\n');
const extractor = new NodeSourceExtractor();
try {
const nodes = await extractor.listAvailableNodes();
console.log(`Total nodes found: ${nodes.length}`);
// Show first 5 nodes
console.log('\nFirst 5 nodes:');
nodes.slice(0, 5).forEach((node, index) => {
console.log(`${index + 1}. Node:`, JSON.stringify(node, null, 2));
});
} catch (error) {
console.error('Error:', error);
}
}
testNodeList();