{"_id":"@ashleymcdonald/n8n-nodes-composite","_rev":"7-cb37240ae8dc4ab16d6e8477e7d61603","name":"@ashleymcdonald/n8n-nodes-composite","dist-tags":{"latest":"1.0.3"},"versions":{"0.0.2":{"name":"@ashleymcdonald/n8n-nodes-composite","version":"0.0.2","keywords":["n8n-community-node-package"],"author":{"name":"Ashley McDonald","email":"ashley@mcdonald.am"},"license":"MIT","_id":"@ashleymcdonald/n8n-nodes-composite@0.0.2","maintainers":[{"name":"silvs","email":"ashley@mcdonald.am"}],"homepage":"https://github.com/ashleymcdonald/n8n-nodes-composite","bugs":{"url":"https://github.com/ashleymcdonald/n8n-nodes-composite/issues"},"n8n":{"nodes":["dist/nodes/composite/composite.node.js"],"credentials":[],"n8nNodesApiVersion":1},"dist":{"shasum":"888ab4bee2d2c98657ff1fb77a5abe2172e8ce12","tarball":"https://registry.npmjs.org/@ashleymcdonald/n8n-nodes-composite/-/n8n-nodes-composite-0.0.2.tgz","fileCount":9,"integrity":"sha512-FdY6Pl1BnGnsuNumnQx2qy/PJTeeilfZ4l7fHpDWSWJj7VQvstoOybELpVj8RTJLv90b7W3LjOTlvDbc0etkJA==","signatures":[{"sig":"MEUCIQCf6LaHnLKJg10lUcuaPHrpS+8WoLcOBPdxiQAyLnTKsQIgJF9SKZY8HWJimBFV8IBMOvP9DRaWRiCk6n84kIv9N2k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84064},"main":"index.js","engines":{"node":">=18.10","pnpm":">=9.1"},"scripts":{"dev":"tsc --watch","lint":"eslint nodes package.json","test":"jest","build":"tsc && gulp build:icons","format":"prettier src --write","lintfix":"eslint nodes package.json --fix"},"_npmUser":{"name":"silvs","email":"ashley@mcdonald.am"},"repository":{"url":"git+ssh://git@github.com/ashleymcdonald/n8n-nodes-composite.git","type":"git"},"_npmVersion":"10.9.3","description":"n8n node to to run other nodes","directories":{},"_nodeVersion":"22.18.0","dependencies":{},"_hasShrinkwrap":false,"packageManager":"pnpm@9.1.4","devDependencies":{"gulp":"^4.0.2","jest":"^29.7.0","eslint":"^8.56.0","ts-jest":"^29.2.5","prettier":"^3.3.2","typescript":"^5.5.3","@types/jest":"^29.5.12","@redocly/cli":"^2.0.8","n8n-workflow":"^1.100.0","@typescript-eslint/parser":"^7.15.0","eslint-plugin-n8n-nodes-base":"^1.16.1"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-composite_0.0.2_1758109190554_0.7291765931435701","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ashleymcdonald/n8n-nodes-composite","version":"1.0.1","keywords":["n8n-community-node-package"],"author":{"name":"Ashley McDonald","email":"ashley@mcdonald.am"},"license":"MIT","_id":"@ashleymcdonald/n8n-nodes-composite@1.0.1","maintainers":[{"name":"silvs","email":"ashley@mcdonald.am"}],"homepage":"https://github.com/ashleymcdonald/n8n-nodes-composite","bugs":{"url":"https://github.com/ashleymcdonald/n8n-nodes-composite/issues"},"n8n":{"nodes":["dist/composite.node.js"],"credentials":[],"n8nNodesApiVersion":1},"dist":{"shasum":"4ee4066c84bd9bec655796a472871860bb21f2d3","tarball":"https://registry.npmjs.org/@ashleymcdonald/n8n-nodes-composite/-/n8n-nodes-composite-1.0.1.tgz","fileCount":8,"integrity":"sha512-H1rd3jQvP/5ALEJ2mvSzLNoRAgvIDWxKd900sOfCB8Ib0R8hjDXIOJg1bSogjEQihPKDRY43n5KYnFvCe3nIXQ==","signatures":[{"sig":"MEUCIQCbqgqDCzhllE5ZP6a4IvhlVLHNnEe696qDgKBekg8jYAIgc76oEjFqex25yVa4o0g/6VFQ3/kiNcdEp+40h/RDXTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82448},"main":"index.js","engines":{"node":">=18.10","pnpm":">=9.1"},"scripts":{"dev":"tsc --watch","lint":"eslint nodes package.json","test":"jest","build":"tsc && gulp build:icons","format":"prettier src --write","lintfix":"eslint nodes package.json --fix"},"_npmUser":{"name":"silvs","email":"ashley@mcdonald.am"},"repository":{"url":"git+ssh://git@github.com/ashleymcdonald/n8n-nodes-composite.git","type":"git"},"_npmVersion":"10.9.3","description":"A powerful n8n community node for creating reusable, parameterized tools and workflows","directories":{},"_nodeVersion":"22.18.0","dependencies":{},"_hasShrinkwrap":false,"packageManager":"pnpm@9.1.4","devDependencies":{"gulp":"^4.0.2","jest":"^29.7.0","eslint":"^8.56.0","ts-jest":"^29.2.5","prettier":"^3.3.2","typescript":"^5.5.3","@types/jest":"^29.5.12","@redocly/cli":"^2.0.8","n8n-workflow":"^1.100.0","@typescript-eslint/parser":"^7.15.0","eslint-plugin-n8n-nodes-base":"^1.16.1"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-composite_1.0.1_1758109544207_0.3719518794710379","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@ashleymcdonald/n8n-nodes-composite","version":"1.0.2","keywords":["n8n-community-node-package"],"author":{"name":"Ashley McDonald","email":"ashley@mcdonald.am"},"license":"MIT","_id":"@ashleymcdonald/n8n-nodes-composite@1.0.2","maintainers":[{"name":"silvs","email":"ashley@mcdonald.am"}],"homepage":"https://github.com/ashleymcdonald/n8n-nodes-composite","bugs":{"url":"https://github.com/ashleymcdonald/n8n-nodes-composite/issues"},"n8n":{"nodes":["dist/Composite.node.js"],"credentials":[],"n8nNodesApiVersion":1},"dist":{"shasum":"fc077f46ef947cf16f24ea39ae06395d13672b10","tarball":"https://registry.npmjs.org/@ashleymcdonald/n8n-nodes-composite/-/n8n-nodes-composite-1.0.2.tgz","fileCount":8,"integrity":"sha512-i3hujE4IQJgo/MmwOWeWO0/iLLZXEJbovgMWl+EwGY0P1QVMAjR2YYoKWk3WJlKs0CPoM8aV+VGjQUO1xuqNUw==","signatures":[{"sig":"MEUCICWIWK6chxmAu4psDddbFvdYeybMtGI0/3e4ocqqWpduAiEArnw3CJNjDJNRKJRdgC2xTxtT2G6sRkLxgCpBIPFr0Gc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82448},"main":"index.js","engines":{"node":">=18.10","pnpm":">=9.1"},"scripts":{"dev":"tsc --watch","lint":"eslint nodes package.json","test":"jest","build":"tsc && gulp build:icons","format":"prettier src --write","lintfix":"eslint nodes package.json --fix"},"_npmUser":{"name":"silvs","email":"ashley@mcdonald.am"},"repository":{"url":"git+ssh://git@github.com/ashleymcdonald/n8n-nodes-composite.git","type":"git"},"_npmVersion":"10.9.3","description":"A powerful n8n community node for creating reusable, parameterized tools and workflows","directories":{},"_nodeVersion":"22.18.0","dependencies":{},"_hasShrinkwrap":false,"packageManager":"pnpm@9.1.4","devDependencies":{"gulp":"^4.0.2","jest":"^29.7.0","eslint":"^8.56.0","ts-jest":"^29.2.5","prettier":"^3.3.2","typescript":"^5.5.3","@types/jest":"^29.5.12","@redocly/cli":"^2.0.8","n8n-workflow":"^1.100.0","@typescript-eslint/parser":"^7.15.0","eslint-plugin-n8n-nodes-base":"^1.16.1"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-composite_1.0.2_1758110117825_0.618885227703488","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@ashleymcdonald/n8n-nodes-composite","version":"1.0.3","description":"A powerful n8n community node for creating reusable, parameterized tools and workflows","license":"MIT","homepage":"https://github.com/ashleymcdonald/n8n-nodes-composite","author":{"name":"Ashley McDonald","email":"ashley@mcdonald.am"},"repository":{"type":"git","url":"git+ssh://git@github.com/ashleymcdonald/n8n-nodes-composite.git"},"keywords":["n8n-community-node-package"],"engines":{"node":">=18.10","pnpm":">=9.1"},"packageManager":"pnpm@9.1.4","main":"index.js","scripts":{"build":"tsc && gulp build:icons","dev":"tsc --watch","test":"jest","format":"prettier src --write","lint":"eslint nodes","lintfix":"eslint nodes --fix"},"n8n":{"n8nNodesApiVersion":1,"credentials":[],"nodes":["dist/Composite.node.js"]},"devDependencies":{"@types/jest":"^29.5.12","@typescript-eslint/parser":"^7.15.0","eslint":"^8.56.0","eslint-plugin-n8n-nodes-base":"^1.16.1","gulp":"^4.0.2","jest":"^29.7.0","n8n-workflow":"^1.100.0","prettier":"^3.3.2","ts-jest":"^29.2.5","typescript":"^5.5.3","@redocly/cli":"^2.0.8"},"peerDependencies":{"n8n-workflow":"*"},"dependencies":{},"_id":"@ashleymcdonald/n8n-nodes-composite@1.0.3","bugs":{"url":"https://github.com/ashleymcdonald/n8n-nodes-composite/issues"},"_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-VhTl9oBEanbC1/dMKytNghGElW0aodQzz+K53sBcBZXMePkespUBadUnVg14ReJ5UXzEC5U92XcXitnv7yuAaA==","shasum":"d3df10f1714f2138a5c04c44bfe777473f704c10","tarball":"https://registry.npmjs.org/@ashleymcdonald/n8n-nodes-composite/-/n8n-nodes-composite-1.0.3.tgz","fileCount":8,"unpackedSize":85676,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDswZLJo0lfOpbCCtFylYh5Fc+1+e7DcW59VOAX4M5tgwIhAPZv8Y+6nXBOJfwIWfPyAmTRctjBl9UNEomZgx+Ppqwl"}]},"_npmUser":{"name":"silvs","email":"ashley@mcdonald.am"},"directories":{},"maintainers":[{"name":"silvs","email":"ashley@mcdonald.am"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-composite_1.0.3_1758111752334_0.3245158995010762"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-17T11:39:50.469Z","modified":"2025-09-17T12:22:32.690Z","0.0.1":"2025-09-17T11:25:13.203Z","0.0.2":"2025-09-17T11:39:50.719Z","1.0.1":"2025-09-17T11:45:44.368Z","1.0.2":"2025-09-17T11:55:18.007Z","1.0.3":"2025-09-17T12:22:32.517Z"},"bugs":{"url":"https://github.com/ashleymcdonald/n8n-nodes-composite/issues"},"author":{"name":"Ashley McDonald","email":"ashley@mcdonald.am"},"license":"MIT","homepage":"https://github.com/ashleymcdonald/n8n-nodes-composite","keywords":["n8n-community-node-package"],"repository":{"type":"git","url":"git+ssh://git@github.com/ashleymcdonald/n8n-nodes-composite.git"},"description":"A powerful n8n community node for creating reusable, parameterized tools and workflows","maintainers":[{"name":"silvs","email":"ashley@mcdonald.am"}],"readme":"# n8n-nodes-composite\n\n**\"Lord of the nodes, one node to rule them all\"**\n\nA powerful n8n community node that enables you to create reusable, parameterized tools that can execute complex multi-step workflows. Perfect for building custom AI tools, modular workflows, and reusable business logic.\n\n## 🚀 Features\n\n- **AI Tool Creation**: Build custom tools that AI agents can discover and use\n- **Parameterized Workflows**: Define typed parameters (string, number, boolean, object, array)\n- **Dual Output System**: Send data to sub-workflows and receive processed results\n- **Pass-through Support**: Optionally preserve original input data\n- **Error Handling**: Configurable error handling with metadata\n- **Type Safety**: Built-in parameter validation and type conversion\n- **Tool Metadata**: Automatic execution tracking and timestamps\n\n## 📦 Installation\n\n```bash\nnpm install @ashleymcdonald/n8n-nodes-composite\n```\n\n## 🎯 Use Cases\n\n### AI Agent Tools\nCreate custom tools that AI agents can discover and execute:\n- **Data processors**: Transform, validate, or enrich data\n- **API orchestrators**: Chain multiple API calls with custom logic\n- **Business rule engines**: Implement complex business logic as reusable tools\n\n### Workflow Modularity\n- **Reusable components**: Build once, use everywhere\n- **Template workflows**: Create standardized patterns\n- **Sub-workflow management**: Encapsulate complex logic\n\n### Data Pipeline Building\n- **ETL operations**: Extract, transform, load with custom parameters\n- **Data validation**: Create reusable validation tools\n- **Multi-step processing**: Chain operations with return handling\n\n## 🔧 Configuration\n\n### Basic Setup\n\n1. **Tool Name**: The identifier for your tool (used by AI agents)\n2. **Tool Description**: Explains what your tool does\n3. **Parameters**: Define input parameters with types and validation\n4. **Pass Through Original Input**: Include original data in output\n5. **Wait for Return**: Control whether to wait for return data\n\n### Parameter Types\n\n| Type | Description | Example |\n|------|-------------|---------|\n| `string` | Text data | `\"Hello World\"` |\n| `number` | Numeric data | `42`, `3.14` |\n| `boolean` | True/false | `true`, `false` |\n| `object` | JSON objects | `{\"key\": \"value\"}` |\n| `array` | Lists of data | `[1, 2, 3]` |\n\n### Advanced Configuration\n\n#### Parameter Definition\n```json\n{\n  \"name\": \"userId\",\n  \"type\": \"string\", \n  \"description\": \"The user ID to process\",\n  \"required\": true,\n  \"defaultValue\": \"anonymous\"\n}\n```\n\n#### Pass-through Options\n- **Enabled**: Original input available as `_originalInput`\n- **Disabled**: Only processed parameters in output\n\n#### Return Handling\n- **Wait for Return**: Execution pauses until return data arrives\n- **No Wait**: Immediate execution, return data handled separately\n\n## 🌊 Data Flow\n\n### Input Flow\n```\nInput Data → Parameter Processing → Send Output → Sub-workflow\n```\n\n### Return Flow  \n```\nSub-workflow → Return Input → Main Output\n```\n\n### Dual Output System\n- **Main Output**: Final results (empty if waiting for return)\n- **Send Output**: Processed parameters sent to sub-workflows\n\n## 💡 Examples\n\n### Example 1: User Data Processor\n\n**Configuration:**\n- Tool Name: `User Data Processor`\n- Description: `Validates and enriches user profile data`\n\n**Parameters:**\n```json\n[\n  {\n    \"name\": \"email\",\n    \"type\": \"string\",\n    \"required\": true,\n    \"description\": \"User email address\"\n  },\n  {\n    \"name\": \"age\", \n    \"type\": \"number\",\n    \"required\": false,\n    \"defaultValue\": \"0\"\n  }\n]\n```\n\n**Input:**\n```json\n{\n  \"email\": \"user@example.com\",\n  \"age\": \"25\",\n  \"extraData\": \"ignored\"\n}\n```\n\n**Send Output:**\n```json\n{\n  \"email\": \"user@example.com\",\n  \"age\": 25,\n  \"_toolMetadata\": {\n    \"toolName\": \"User Data Processor\",\n    \"executionId\": \"exec_123\",\n    \"timestamp\": \"2023-10-01T12:00:00.000Z\"\n  }\n}\n```\n\n### Example 2: API Chain Tool (with Pass-through)\n\n**Configuration:**\n- Tool Name: `Multi API Processor`\n- Pass Through: `true`\n- Wait for Return: `true`\n\n**Send Output:**\n```json\n{\n  \"apiEndpoint\": \"/users\",\n  \"method\": \"GET\",\n  \"_originalInput\": {\n    \"userId\": \"12345\",\n    \"context\": \"dashboard\"\n  },\n  \"_toolMetadata\": { \"...\" }\n}\n```\n\n## 🔄 Workflow Patterns\n\n### Pattern 1: Simple Tool\n```\n[Input] → [Composite] → [Process] → [Output]\n```\n\n### Pattern 2: Tool with Return\n```\n[Input] → [Composite] → [Sub-workflow] \n            ↑              ↓\n       [Main Output] ← [Return Data]\n```\n\n### Pattern 3: AI Agent Tool\n```\n[AI Agent] → [Composite Tool] → [Business Logic] → [Results]\n```\n\n## ⚠️ Error Handling\n\nWhen errors occur:\n- **Continue on Fail**: Errors included in output with metadata\n- **Stop on Fail**: Execution halts with error details\n\n**Error Output:**\n```json\n{\n  \"error\": \"Required parameter 'email' is missing\",\n  \"_toolMetadata\": {\n    \"toolName\": \"User Processor\",\n    \"hasError\": true,\n    \"timestamp\": \"2023-10-01T12:00:00.000Z\"\n  },\n  \"_originalInput\": { \"...\" }\n}\n```\n\n## 📊 Metadata\n\nEvery execution includes metadata:\n\n```json\n{\n  \"_toolMetadata\": {\n    \"toolName\": \"My Custom Tool\",\n    \"executionId\": \"exec_abc123\", \n    \"timestamp\": \"2023-10-01T12:00:00.000Z\",\n    \"hasError\": false\n  }\n}\n```\n\n## 🤖 AI Integration\n\nThe Composite node is designed to work seamlessly with AI agents:\n\n1. **Tool Discovery**: AI agents can discover available tools\n2. **Parameter Understanding**: Type information helps AI format requests\n3. **Execution Tracking**: Metadata enables monitoring and debugging\n4. **Error Recovery**: Structured error responses for AI handling\n\n### AI Tool Schema\nAutomatically generates OpenAPI-style schemas:\n```json\n{\n  \"name\": \"my_custom_tool\",\n  \"description\": \"A custom tool description\",\n  \"parameters\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"param1\": {\n        \"type\": \"string\",\n        \"description\": \"Parameter description\"\n      }\n    },\n    \"required\": [\"param1\"]\n  }\n}\n```\n\n## 🛠️ Development\n\n### Building\n```bash\nnpm run build\n```\n\n### Testing  \n```bash\nnpm test\n```\n\n### Development Mode\n```bash\nnpm run dev\n```\n\n## 📝 License\n\nMIT License - see LICENSE file for details.\n\n## 🤝 Contributing\n\nContributions welcome! Please see the repository for contribution guidelines.\n\n## 📞 Support\n\n- **Issues**: [GitHub Issues](https://github.com/ashleymcdonald/n8n-nodes-composite/issues)  \n- **Documentation**: This README\n- **Community**: n8n Community Forums\n","readmeFilename":"README.md"}