- Add get_node_essentials tool for 10-20 essential properties only - Add search_node_properties for targeted property search - Add get_node_for_task with 14 pre-configured templates - Add validate_node_config for comprehensive validation - Add get_property_dependencies for visibility analysis - Implement PropertyFilter service with curated essentials - Implement ExampleGenerator with working examples - Implement TaskTemplates for common workflows - Implement ConfigValidator with security checks - Implement PropertyDependencies for dependency analysis - Enhance property descriptions to 100% coverage - Add version information to essentials response - Update documentation with new tools Response sizes reduced from 100KB+ to <5KB for better AI agent usability. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
13 KiB
MCP Tools Implementation Strategy
Executive Summary
This document outlines a comprehensive strategy to transform the n8n MCP from a documentation server into an AI-optimized workflow configuration assistant. The core issue is that get_node_info returns 100KB+ of unstructured JSON, making it nearly impossible for AI agents to efficiently build n8n workflows. Our strategy introduces new tools and restructures data to reduce complexity by 95% while maintaining full functionality.
Current State Analysis
Problems
- Data Overload: HTTP Request node returns 200+ properties when only 5-10 are needed
- Poor Structure: Properties stored as monolithic JSON blobs, not queryable
- Duplicate Properties: Same property appears 3-4 times with different conditions
- Complex Nesting: Properties buried in collections within collections
- No Prioritization: Essential properties mixed with rarely-used advanced options
Impact
- AI agents waste 90% of tokens parsing irrelevant data
- High error rates due to confusion with duplicate properties
- 5-10 minutes to configure a simple node (should be <1 minute)
- Poor developer experience leads to workflow building failures
Implementation Strategy Overview
Design Principles
- Progressive Disclosure: Start with essentials, add complexity only when needed
- Task-Oriented: Focus on what users want to do, not technical details
- Backward Compatible: Keep existing tools, add new optimized ones
- Incremental Deployment: Each phase delivers value independently
- AI-First Design: Optimize for token efficiency and clarity
Three-Phase Approach
Phase 1: Quick Wins (Week 1-2)
- Implement without database changes
- Filter existing data for essentials
- Add common examples
Phase 2: Enhanced Capabilities (Week 3-4)
- Parse property structures
- Build search and validation
- Create task templates
Phase 3: Full Optimization (Month 2)
- Database schema migration
- Property deduplication
- Dependency tracking
Phase 1: Quick Wins Implementation
1.1 get_node_essentials Tool
Purpose: Return only the 10-20 properties needed for 90% of use cases
Implementation:
interface GetNodeEssentialsInput {
nodeType: string;
}
interface GetNodeEssentialsOutput {
nodeType: string;
displayName: string;
description: string;
requiredProperties: PropertyInfo[];
commonProperties: PropertyInfo[];
examples: {
minimal: object;
common: object;
};
}
interface PropertyInfo {
name: string;
type: string;
description: string;
default?: any;
options?: string[];
placeholder?: string;
}
Technical Approach:
- Create curated lists of essential properties for top 20 nodes
- Parse existing property schema to extract required fields
- Filter properties based on usage frequency
- Return simplified structure without nested collections
Example Output:
{
"nodeType": "nodes-base.httpRequest",
"displayName": "HTTP Request",
"requiredProperties": [{
"name": "url",
"type": "string",
"description": "The URL to make the request to",
"placeholder": "https://api.example.com/endpoint"
}],
"commonProperties": [
{
"name": "method",
"type": "options",
"options": ["GET", "POST", "PUT", "DELETE"],
"default": "GET"
},
{
"name": "authentication",
"type": "options",
"options": ["none", "basicAuth", "bearerToken"],
"default": "none"
}
],
"examples": {
"minimal": { "url": "https://api.example.com/data" },
"common": {
"method": "POST",
"url": "https://api.example.com/create",
"sendBody": true,
"contentType": "json",
"jsonBody": "{ \"name\": \"example\" }"
}
}
}
1.2 Enhanced Tool Descriptions
Update all existing tool descriptions based on testing feedback to be more concise and action-oriented.
1.3 Common Examples Database
Create JSON configuration examples for the top 20 most-used nodes, stored in src/data/node-examples.json.
Phase 2: Enhanced Capabilities
2.1 search_node_properties Tool
Purpose: Find specific properties within a node without parsing everything
Implementation:
interface SearchNodePropertiesInput {
nodeType: string;
query: string; // Keyword to search for
category?: 'authentication' | 'request' | 'response' | 'advanced';
}
interface SearchNodePropertiesOutput {
query: string;
matches: PropertyMatch[];
totalMatches: number;
}
interface PropertyMatch {
name: string;
type: string;
path: string; // Dot notation path
description: string;
visibleWhen?: Record<string, any>;
category: string;
}
Technical Approach:
- Parse property schema recursively
- Build searchable index of all properties
- Include visibility conditions
- Return flattened results with paths
2.2 get_node_for_task Tool
Purpose: Return pre-configured property sets for common tasks
Implementation:
interface GetNodeForTaskInput {
task: string; // e.g., "post_json_request", "call_api_with_auth"
nodeType?: string; // Optional, can infer from task
}
interface GetNodeForTaskOutput {
task: string;
description: string;
nodeType: string;
configuration: object;
userMustProvide: Array<{
property: string;
description: string;
}>;
optionalEnhancements: Array<{
property: string;
description: string;
}>;
}
Task Templates (stored in src/data/task-templates.json):
get_api_data- Simple GET requestpost_json_request- POST with JSON bodycall_api_with_auth- Authenticated API callwebhook_receiver- Accept incoming webhooksdatabase_query- Query a databasesend_email- Send an emailprocess_file- Read and process files
2.3 validate_node_config Tool
Purpose: Validate configurations before use, catch errors early
Implementation:
interface ValidateNodeConfigInput {
nodeType: string;
config: object;
}
interface ValidateNodeConfigOutput {
valid: boolean;
errors: ValidationError[];
warnings: ValidationWarning[];
suggestions: string[];
hiddenProperties: string[]; // Properties not visible with current config
autofix?: object; // Suggested fixes
}
Validation Rules:
- Check required properties
- Validate property types
- Check property dependencies
- Suggest common missing configurations
- Warn about potential issues
2.4 Property Parsing Service
Create src/services/property-parser.ts to:
- Parse nested property structures
- Flatten collections to dot notation
- Extract visibility conditions
- Categorize properties (essential/common/advanced)
- Build property dependency graph
Phase 3: Full Optimization
3.1 Database Schema Migration
New Tables:
-- Property-level storage
CREATE TABLE node_properties_v2 (
id INTEGER PRIMARY KEY,
node_type TEXT NOT NULL,
property_name TEXT NOT NULL,
property_path TEXT NOT NULL, -- Dot notation path
property_type TEXT NOT NULL,
is_required BOOLEAN DEFAULT 0,
is_essential BOOLEAN DEFAULT 0,
is_common BOOLEAN DEFAULT 0,
category TEXT, -- authentication, request, response, advanced
parent_property TEXT,
display_conditions TEXT, -- JSON conditions
description TEXT,
default_value TEXT,
options TEXT, -- JSON array for select fields
placeholder TEXT,
usage_frequency INTEGER DEFAULT 0,
UNIQUE(node_type, property_path)
);
-- Task templates
CREATE TABLE task_templates (
id INTEGER PRIMARY KEY,
task_name TEXT UNIQUE NOT NULL,
description TEXT,
node_type TEXT NOT NULL,
configuration TEXT NOT NULL, -- JSON
user_must_provide TEXT, -- JSON array
optional_enhancements TEXT -- JSON array
);
-- Property dependencies
CREATE TABLE property_dependencies (
id INTEGER PRIMARY KEY,
node_type TEXT NOT NULL,
property_name TEXT NOT NULL,
depends_on_property TEXT NOT NULL,
depends_on_value TEXT,
dependency_type TEXT -- enables, requires, conflicts
);
-- Common examples
CREATE TABLE node_examples (
id INTEGER PRIMARY KEY,
node_type TEXT NOT NULL,
example_name TEXT NOT NULL,
description TEXT,
configuration TEXT NOT NULL, -- JSON
category TEXT,
UNIQUE(node_type, example_name)
);
3.2 Migration Process
-
Data Extraction Script (
scripts/migrate-properties.ts):- Parse existing property schemas
- Extract individual properties with metadata
- Deduplicate properties with conditions
- Populate new tables
-
Backward Compatibility:
- Keep existing tables and tools
- Add feature flag for new tools
- Gradual migration over 2 weeks
3.3 Advanced Tools
get_property_dependencies:
interface GetPropertyDependenciesInput {
nodeType: string;
property: string;
}
interface GetPropertyDependenciesOutput {
property: string;
requires: Record<string, any>;
enables: string[];
conflicts: string[];
requiredChain: string[]; // Step-by-step to enable
alternatives: Array<{
description: string;
properties: object;
}>;
}
get_node_compatibility:
// Check which nodes work well together
interface GetNodeCompatibilityInput {
sourceNode: string;
targetNode: string;
}
Implementation Timeline
Week 1: Foundation
- Implement get_node_essentials with hardcoded essentials
- Create examples database for top 10 nodes
- Deploy updated tool descriptions
- Test with HTTP Request and Webhook nodes
Week 2: Expand Coverage
- Add essentials for 20 more nodes
- Implement basic property search
- Create 5 task templates
- Add validation for common errors
Week 3: Enhanced Features
- Build property parser service
- Implement get_node_for_task
- Add validate_node_config
- Create property categorization
Week 4: Testing & Refinement
- Load test with complex nodes
- Refine essential property lists
- Add more task templates
- Gather user feedback
Month 2: Full Migration
- Design new database schema
- Build migration scripts
- Implement property deduplication
- Add dependency tracking
- Deploy progressively
Testing Strategy
Unit Tests
- Property parser accuracy
- Essential property extraction
- Validation rule correctness
- Task template validity
Integration Tests
- Tool response times (<100ms)
- Data size reduction (>90%)
- Backward compatibility
- Error handling
User Testing
- Time to configure nodes
- Error rates
- Task completion success
- AI agent performance
Success Metrics
| Metric | Current | Target | Measurement |
|---|---|---|---|
| Average properties returned | 200+ | 15 | get_node_essentials response |
| Response size | 100KB+ | <5KB | JSON byte count |
| Time to configure node | 5-10 min | <1 min | User testing |
| Configuration errors | 40% | <10% | Validation logs |
| AI token usage | High | -75% | Token counter |
| Tool calls per task | 5-10 | 2-3 | Usage analytics |
Risk Mitigation
Technical Risks
-
Property Parsing Complexity
- Mitigation: Start with simple nodes, handle edge cases gradually
- Fallback: Return original schema if parsing fails
-
Performance Impact
- Mitigation: Cache parsed properties, use indexes
- Monitor: Response times, add performance tests
-
Data Quality
- Mitigation: Validate all transformations
- Test: Compare outputs with original data
Compatibility Risks
-
Breaking Changes
- Mitigation: New tools alongside old ones
- Deprecation: 3-month warning period
-
Schema Evolution
- Mitigation: Version property schemas
- Handle: Multiple n8n versions
Configuration Management
Essential Properties Lists
Store in src/data/essential-properties.json:
{
"nodes-base.httpRequest": {
"required": ["url"],
"common": ["method", "authentication", "sendBody", "contentType"],
"categories": {
"authentication": ["authentication", "genericAuthType", "nodeCredentialType"],
"request": ["sendBody", "contentType", "jsonBody", "bodyParameters"],
"headers": ["sendHeaders", "headerParameters"],
"advanced": ["options.timeout", "options.proxy", "options.redirect"]
}
}
}
Feature Flags
const FEATURES = {
USE_NODE_ESSENTIALS: process.env.USE_NODE_ESSENTIALS !== 'false',
ENABLE_PROPERTY_SEARCH: process.env.ENABLE_PROPERTY_SEARCH === 'true',
USE_NEW_SCHEMA: process.env.USE_NEW_SCHEMA === 'true'
};
Next Steps
-
Immediate Actions:
- Create essential properties list for HTTP Request node
- Implement get_node_essentials tool
- Test with real AI agents
- Gather feedback
-
Week 1 Deliverables:
- Working get_node_essentials for top 10 nodes
- Basic examples database
- Performance benchmarks
- User feedback collection
-
Success Criteria:
- 90% reduction in data size
- 75% reduction in configuration time
- Positive AI agent feedback
- No regression in functionality
Conclusion
This implementation strategy transforms the n8n MCP from a complex documentation server into an AI-friendly configuration assistant. By focusing on progressive disclosure and task-oriented access patterns, we can reduce complexity by 95% while actually improving functionality. The phased approach ensures we deliver value quickly while building toward a fully optimized solution.
The key insight: AI agents need just enough information at the right time, not everything at once. This strategy delivers exactly that.