n8n-mcp 2.86.0 → 2.87.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mcp/handlers-n8n-manager.d.ts.map +1 -1
- package/dist/mcp/handlers-n8n-manager.js +29 -3
- package/dist/mcp/handlers-n8n-manager.js.map +1 -1
- package/dist/mcp/handlers-workflow-diff.d.ts.map +1 -1
- package/dist/mcp/handlers-workflow-diff.js +110 -9
- package/dist/mcp/handlers-workflow-diff.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +12 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.d.ts.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.js +2 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.js.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-update-full-workflow.d.ts.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-update-full-workflow.js +2 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-update-full-workflow.js.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.d.ts.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.js +2 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.js.map +1 -1
- package/dist/mcp/tools-documentation.js +127 -230
- package/dist/mcp/tools-documentation.js.map +1 -1
- package/dist/mcp-tools-engine.d.ts +1 -1
- package/dist/mcp-tools-engine.d.ts.map +1 -1
- package/dist/mcp-tools-engine.js +1 -3
- package/dist/mcp-tools-engine.js.map +1 -1
- package/dist/services/config-validator.d.ts.map +1 -1
- package/dist/services/config-validator.js +8 -53
- package/dist/services/config-validator.js.map +1 -1
- package/dist/services/enhanced-config-validator.d.ts +1 -0
- package/dist/services/enhanced-config-validator.d.ts.map +1 -1
- package/dist/services/enhanced-config-validator.js +46 -6
- package/dist/services/enhanced-config-validator.js.map +1 -1
- package/dist/services/example-generator.d.ts.map +1 -1
- package/dist/services/example-generator.js +28 -29
- package/dist/services/example-generator.js.map +1 -1
- package/dist/services/expression-validator.d.ts +2 -0
- package/dist/services/expression-validator.d.ts.map +1 -1
- package/dist/services/expression-validator.js +27 -1
- package/dist/services/expression-validator.js.map +1 -1
- package/dist/services/mcp-exposure.d.ts.map +1 -1
- package/dist/services/mcp-exposure.js +43 -6
- package/dist/services/mcp-exposure.js.map +1 -1
- package/dist/services/n8n-api-client.d.ts +1 -4
- package/dist/services/n8n-api-client.d.ts.map +1 -1
- package/dist/services/n8n-api-client.js +0 -30
- package/dist/services/n8n-api-client.js.map +1 -1
- package/dist/services/n8n-validation.d.ts.map +1 -1
- package/dist/services/n8n-validation.js +28 -33
- package/dist/services/n8n-validation.js.map +1 -1
- package/dist/services/node-specific-validators.d.ts +22 -0
- package/dist/services/node-specific-validators.d.ts.map +1 -1
- package/dist/services/node-specific-validators.js +701 -88
- package/dist/services/node-specific-validators.js.map +1 -1
- package/dist/services/task-templates.d.ts.map +1 -1
- package/dist/services/task-templates.js +54 -49
- package/dist/services/task-templates.js.map +1 -1
- package/dist/services/workflow-validator.d.ts +1 -0
- package/dist/services/workflow-validator.d.ts.map +1 -1
- package/dist/services/workflow-validator.js +58 -63
- package/dist/services/workflow-validator.js.map +1 -1
- package/dist/services/workflow-versioning-service.d.ts +2 -0
- package/dist/services/workflow-versioning-service.d.ts.map +1 -1
- package/dist/services/workflow-versioning-service.js +14 -0
- package/dist/services/workflow-versioning-service.js.map +1 -1
- package/dist/types/n8n-api.d.ts +0 -40
- package/dist/types/n8n-api.d.ts.map +1 -1
- package/dist/utils/jmespath-checks.d.ts +16 -0
- package/dist/utils/jmespath-checks.d.ts.map +1 -0
- package/dist/utils/jmespath-checks.js +357 -0
- package/dist/utils/jmespath-checks.js.map +1 -0
- package/dist/utils/n8n-errors.d.ts.map +1 -1
- package/dist/utils/n8n-errors.js +9 -0
- package/dist/utils/n8n-errors.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"n8n-update-full-workflow.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-update-full-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,wBAAwB,EAAE,
|
|
1
|
+
{"version":3,"file":"n8n-update-full-workflow.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-update-full-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,wBAAwB,EAAE,iBA0DtC,CAAC"}
|
|
@@ -54,7 +54,8 @@ exports.n8nUpdateFullWorkflowDoc = {
|
|
|
54
54
|
'Must include ALL nodes/connections',
|
|
55
55
|
'Missing nodes will be deleted',
|
|
56
56
|
'Can break active workflows',
|
|
57
|
-
'No partial updates - use update_partial instead'
|
|
57
|
+
'No partial updates - use update_partial instead',
|
|
58
|
+
'**code: "PUBLISH_FORBIDDEN"** (n8n 2.39+): the API key or user may edit a published workflow but not publish it. n8n saves the change as a draft and returns 403 with the published version left unchanged (this tool does not roll back a full update). Retrying with the same credentials saves another draft without publishing - the API key needs the workflow:activate scope and the user needs workflow:publish permission on the workflow'
|
|
58
59
|
],
|
|
59
60
|
relatedTools: ['n8n_get_workflow', 'n8n_update_partial_workflow', 'validate_workflow', 'n8n_create_workflow']
|
|
60
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"n8n-update-full-workflow.js","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-update-full-workflow.ts"],"names":[],"mappings":";;;AAEa,QAAA,wBAAwB,GAAsB;IACzD,IAAI,EAAE,0BAA0B;IAChC,QAAQ,EAAE,qBAAqB;IAC/B,UAAU,EAAE;QACV,WAAW,EAAE,qHAAqH;QAClI,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC;QAC7C,OAAO,EAAE,4EAA4E;QACrF,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE;YACJ,2EAA2E;YAC3E,gCAAgC;YAChC,sCAAsC;YACtC,0BAA0B;SAC3B;KACF;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,4QAA4Q;QACzR,UAAU,EAAE;YACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAC5E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;YACrE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,oEAAoE,EAAE;YAC3G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE;YAC7G,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8DAA8D,EAAE;YACzG,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,sMAAsM,EAAE;YAClP,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uIAAuI,EAAE;SACjL;QACD,OAAO,EAAE,mJAAmJ;QAC5J,QAAQ,EAAE;YACR,qHAAqH;YACrH,uEAAuE;YACvE,qIAAqI;YACrI,+IAA+I;SAChJ;QACD,QAAQ,EAAE;YACR,8BAA8B;YAC9B,mBAAmB;YACnB,0BAA0B;YAC1B,+BAA+B;YAC/B,kBAAkB;SACnB;QACD,WAAW,EAAE,wHAAwH;QACrI,aAAa,EAAE;YACb,qEAAqE;YACrE,yCAAyC;YACzC,iDAAiD;YACjD,sCAAsC;YACtC,sCAAsC;SACvC;QACD,QAAQ,EAAE;YACR,iDAAiD;YACjD,oCAAoC;YACpC,+BAA+B;YAC/B,4BAA4B;YAC5B,iDAAiD;
|
|
1
|
+
{"version":3,"file":"n8n-update-full-workflow.js","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-update-full-workflow.ts"],"names":[],"mappings":";;;AAEa,QAAA,wBAAwB,GAAsB;IACzD,IAAI,EAAE,0BAA0B;IAChC,QAAQ,EAAE,qBAAqB;IAC/B,UAAU,EAAE;QACV,WAAW,EAAE,qHAAqH;QAClI,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC;QAC7C,OAAO,EAAE,4EAA4E;QACrF,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE;YACJ,2EAA2E;YAC3E,gCAAgC;YAChC,sCAAsC;YACtC,0BAA0B;SAC3B;KACF;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,4QAA4Q;QACzR,UAAU,EAAE;YACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAC5E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;YACrE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,oEAAoE,EAAE;YAC3G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE;YAC7G,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8DAA8D,EAAE;YACzG,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,sMAAsM,EAAE;YAClP,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uIAAuI,EAAE;SACjL;QACD,OAAO,EAAE,mJAAmJ;QAC5J,QAAQ,EAAE;YACR,qHAAqH;YACrH,uEAAuE;YACvE,qIAAqI;YACrI,+IAA+I;SAChJ;QACD,QAAQ,EAAE;YACR,8BAA8B;YAC9B,mBAAmB;YACnB,0BAA0B;YAC1B,+BAA+B;YAC/B,kBAAkB;SACnB;QACD,WAAW,EAAE,wHAAwH;QACrI,aAAa,EAAE;YACb,qEAAqE;YACrE,yCAAyC;YACzC,iDAAiD;YACjD,sCAAsC;YACtC,sCAAsC;SACvC;QACD,QAAQ,EAAE;YACR,iDAAiD;YACjD,oCAAoC;YACpC,+BAA+B;YAC/B,4BAA4B;YAC5B,iDAAiD;YACjD,mbAAmb;SACpb;QACD,YAAY,EAAE,CAAC,kBAAkB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,qBAAqB,CAAC;KAC9G;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"n8n-update-partial-workflow.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,2BAA2B,EAAE,
|
|
1
|
+
{"version":3,"file":"n8n-update-partial-workflow.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,2BAA2B,EAAE,iBAydzC,CAAC"}
|
|
@@ -469,7 +469,8 @@ n8n_update_partial_workflow({
|
|
|
469
469
|
'When properties are mutually exclusive (e.g., continueOnFail and onError), setting only the new property will fail - you must remove the old one with null',
|
|
470
470
|
'Removing a required property may cause validation errors - check node documentation first',
|
|
471
471
|
'Nested property removal with dot notation only removes the specific nested field, not the entire parent object',
|
|
472
|
-
'Array elements are addressed by index in bracket or dot form (e.g., "parameters.assignments.assignments[0].value" or "parameters.assignments.assignments.0.value") - out-of-range indices are rejected, so new elements cannot be appended this way'
|
|
472
|
+
'Array elements are addressed by index in bracket or dot form (e.g., "parameters.assignments.assignments[0].value" or "parameters.assignments.assignments.0.value") - out-of-range indices are rejected, so new elements cannot be appended this way',
|
|
473
|
+
'**code: "PUBLISH_FORBIDDEN"** (n8n 2.39+): the API key or user may edit a published workflow but not publish it. n8n rejects the save with 403 and this tool decides what to do by content, not by n8n\'s reported version (2.39 does not bump versionId for name/settings-only changes): a rollback is attempted only when the content on the server no longer matches what was there before. There are five outcomes: (1) version and content both unchanged after the 403 - n8n reports a draft was saved, but nothing on the server shows it, so nothing is rolled back and the outcome is reported as unconfirmed: details.rollbackPerformed=false, details.draftVersionId names the draft n8n reported; (2) rolled back - a rollback was attempted and the draft now matches the content from before this update, details.rollbackPerformed=true, details.supersededDraftVersionId names the draft the restore replaced; (3) change retained - the rollback failed and a read-back confirms the attempted change is still there, details.rollbackPerformed=false, details.changeRetained=true, details.draftVersionId names the current draft; (4) restore incomplete - the rollback failed and the read-back matches neither the attempted change nor the prior content, details.rollbackPerformed=false, details.observedDraftVersionId names what was actually found; (5) unconfirmed (read-back failed) - the rollback failed and the read-back itself failed too, details.rollbackPerformed=false, details.attemptedDraftVersionId names the draft n8n first reported (which the rollback attempt may since have superseded - it is NOT necessarily current). Outcomes (1) and (5) are both reported as "unconfirmed" but are distinguishable: (1) never attempted a rollback at all (no second PUT), while (5) did attempt one and only the verification read-back failed. details.rollbackVerifiedAfterError is set only when outcome (2) was confirmed by a read-back after the rollback PUT itself errored (a rollback PUT that returns 200 is just as clean but won\'t set it). A folder move cannot be rolled back or reliably ruled out (parentFolderId is write-only) - when the request moved the workflow, details.folderMoveMayHavePersisted flags that uncertainty regardless of which of the five outcomes applies. Retrying with the same credentials will not publish - the API key needs the workflow:activate scope and the user needs workflow:publish permission on the workflow'
|
|
473
474
|
],
|
|
474
475
|
relatedTools: ['n8n_update_full_workflow', 'n8n_get_workflow', 'validate_workflow', 'tools_documentation']
|
|
475
476
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"n8n-update-partial-workflow.js","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.ts"],"names":[],"mappings":";;;AAEa,QAAA,2BAA2B,GAAsB;IAC5D,IAAI,EAAE,6BAA6B;IACnC,QAAQ,EAAE,qBAAqB;IAC/B,UAAU,EAAE;QACV,WAAW,EAAE,+jBAA+jB;QAC5kB,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,iBAAiB,CAAC;QACtD,OAAO,EAAE,6IAA6I;QACtJ,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE;YACJ,gJAAgJ;YAChJ,oGAAoG;YACpG,mDAAmD;YACnD,wCAAwC;YACxC,6BAA6B;YAC7B,6DAA6D;YAC7D,uDAAuD;YACvD,0DAA0D;YAC1D,kCAAkC;YAClC,iFAAiF;YACjF,mDAAmD;YACnD,gGAAgG;YAChG,sGAAsG;YACtG,yIAAyI;YACzI,0GAA0G;YAC1G,6LAA6L;YAC7L,oIAAoI;SACrI;KACF;IACD,IAAI,EAAE;QACJ,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA8SgB;QAC7B,UAAU,EAAE;YACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAC5E,UAAU,EAAE;gBACV,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,iIAAiI;aAC/I;YACD,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yDAAyD,EAAE;YACzG,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6IAA6I,EAAE;YAChM,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qIAAqI,EAAE;SAC/K;QACD,OAAO,EAAE,uNAAuN;QAChO,QAAQ,EAAE;YACR,mOAAmO;YACnO,wNAAwN;YACxN,kTAAkT;YAClT,0VAA0V;YAC1V,gMAAgM;YAChM,mLAAmL;YACnL,mLAAmL;YACnL,6UAA6U;YAC7U,oMAAoM;YACpM,oYAAoY;YACpY,qJAAqJ;YACrJ,+MAA+M;YAC/M,kSAAkS;YAClS,0LAA0L;YAC1L,wJAAwJ;YACxJ,qTAAqT;YACrT,8WAA8W;YAC9W,8EAA8E;YAC9E,4QAA4Q;YAC5Q,yPAAyP;YACzP,8SAA8S;YAC9S,sQAAsQ;YACtQ,uDAAuD;YACvD,2MAA2M;YAC3M,wLAAwL;YACxL,+LAA+L;YAC/L,gNAAgN;YAChN,4hBAA4hB;YAC5hB,+WAA+W;YAC/W,qWAAqW;YACrW,uVAAuV;YACvV,qPAAqP;YACrP,0eAA0e;YAC1e,6DAA6D;YAC7D,+JAA+J;YAC/J,+NAA+N;YAC/N,gLAAgL;YAChL,oOAAoO;YACpO,gLAAgL;YAChL,0DAA0D;YAC1D,0KAA0K;YAC1K,+LAA+L;YAC/L,8JAA8J;YAC9J,iJAAiJ;SAClJ;QACD,QAAQ,EAAE;YACR,yCAAyC;YACzC,uDAAuD;YACvD,wDAAwD;YACxD,+CAA+C;YAC/C,+BAA+B;YAC/B,iCAAiC;YACjC,8CAA8C;YAC9C,sBAAsB;YACtB,2BAA2B;YAC3B,yBAAyB;YACzB,iEAAiE;YACjE,+CAA+C;YAC/C,2CAA2C;YAC3C,0CAA0C;YAC1C,+CAA+C;YAC/C,kCAAkC;YAClC,uDAAuD;YACvD,iFAAiF;YACjF,wFAAwF;YACxF,+DAA+D;SAChE;QACD,WAAW,EAAE,8FAA8F;QAC3G,aAAa,EAAE;YACb,kPAAkP;YAClP,iEAAiE;YACjE,+DAA+D;YAC/D,oDAAoD;YACpD,yDAAyD;YACzD,iDAAiD;YACjD,gEAAgE;YAChE,qDAAqD;YACrD,mCAAmC;YACnC,wCAAwC;YACxC,gDAAgD;YAChD,8FAA8F;YAC9F,2EAA2E;YAC3E,6DAA6D;YAC7D,oEAAoE;YACpE,8EAA8E;YAC9E,8DAA8D;YAC9D,8GAA8G;YAC9G,6EAA6E;YAC7E,kFAAkF;YAClF,8IAA8I;YAC9I,6FAA6F;YAC7F,0GAA0G;SAC3G;QACD,QAAQ,EAAE;YACR,uGAAuG;YACvG,wEAAwE;YACxE,6DAA6D;YAC7D,sFAAsF;YACtF,4DAA4D;YAC5D,yEAAyE;YACzE,yFAAyF;YACzF,wFAAwF;YACxF,mGAAmG;YACnG,iFAAiF;YACjF,iNAAiN;YACjN,kKAAkK;YAClK,4EAA4E;YAC5E,yFAAyF;YACzF,wLAAwL;YACxL,oIAAoI;YACpI,wJAAwJ;YACxJ,+JAA+J;YAC/J,6NAA6N;YAC7N,0HAA0H;YAC1H,wHAAwH;YACxH,gHAAgH;YAChH,wHAAwH;YACxH,sMAAsM;YACtM,qxBAAqxB;YACrxB,4DAA4D;YAC5D,4JAA4J;YAC5J,2FAA2F;YAC3F,gHAAgH;YAChH,qPAAqP;
|
|
1
|
+
{"version":3,"file":"n8n-update-partial-workflow.js","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.ts"],"names":[],"mappings":";;;AAEa,QAAA,2BAA2B,GAAsB;IAC5D,IAAI,EAAE,6BAA6B;IACnC,QAAQ,EAAE,qBAAqB;IAC/B,UAAU,EAAE;QACV,WAAW,EAAE,+jBAA+jB;QAC5kB,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,iBAAiB,CAAC;QACtD,OAAO,EAAE,6IAA6I;QACtJ,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE;YACJ,gJAAgJ;YAChJ,oGAAoG;YACpG,mDAAmD;YACnD,wCAAwC;YACxC,6BAA6B;YAC7B,6DAA6D;YAC7D,uDAAuD;YACvD,0DAA0D;YAC1D,kCAAkC;YAClC,iFAAiF;YACjF,mDAAmD;YACnD,gGAAgG;YAChG,sGAAsG;YACtG,yIAAyI;YACzI,0GAA0G;YAC1G,6LAA6L;YAC7L,oIAAoI;SACrI;KACF;IACD,IAAI,EAAE;QACJ,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA8SgB;QAC7B,UAAU,EAAE;YACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAC5E,UAAU,EAAE;gBACV,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,iIAAiI;aAC/I;YACD,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yDAAyD,EAAE;YACzG,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6IAA6I,EAAE;YAChM,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qIAAqI,EAAE;SAC/K;QACD,OAAO,EAAE,uNAAuN;QAChO,QAAQ,EAAE;YACR,mOAAmO;YACnO,wNAAwN;YACxN,kTAAkT;YAClT,0VAA0V;YAC1V,gMAAgM;YAChM,mLAAmL;YACnL,mLAAmL;YACnL,6UAA6U;YAC7U,oMAAoM;YACpM,oYAAoY;YACpY,qJAAqJ;YACrJ,+MAA+M;YAC/M,kSAAkS;YAClS,0LAA0L;YAC1L,wJAAwJ;YACxJ,qTAAqT;YACrT,8WAA8W;YAC9W,8EAA8E;YAC9E,4QAA4Q;YAC5Q,yPAAyP;YACzP,8SAA8S;YAC9S,sQAAsQ;YACtQ,uDAAuD;YACvD,2MAA2M;YAC3M,wLAAwL;YACxL,+LAA+L;YAC/L,gNAAgN;YAChN,4hBAA4hB;YAC5hB,+WAA+W;YAC/W,qWAAqW;YACrW,uVAAuV;YACvV,qPAAqP;YACrP,0eAA0e;YAC1e,6DAA6D;YAC7D,+JAA+J;YAC/J,+NAA+N;YAC/N,gLAAgL;YAChL,oOAAoO;YACpO,gLAAgL;YAChL,0DAA0D;YAC1D,0KAA0K;YAC1K,+LAA+L;YAC/L,8JAA8J;YAC9J,iJAAiJ;SAClJ;QACD,QAAQ,EAAE;YACR,yCAAyC;YACzC,uDAAuD;YACvD,wDAAwD;YACxD,+CAA+C;YAC/C,+BAA+B;YAC/B,iCAAiC;YACjC,8CAA8C;YAC9C,sBAAsB;YACtB,2BAA2B;YAC3B,yBAAyB;YACzB,iEAAiE;YACjE,+CAA+C;YAC/C,2CAA2C;YAC3C,0CAA0C;YAC1C,+CAA+C;YAC/C,kCAAkC;YAClC,uDAAuD;YACvD,iFAAiF;YACjF,wFAAwF;YACxF,+DAA+D;SAChE;QACD,WAAW,EAAE,8FAA8F;QAC3G,aAAa,EAAE;YACb,kPAAkP;YAClP,iEAAiE;YACjE,+DAA+D;YAC/D,oDAAoD;YACpD,yDAAyD;YACzD,iDAAiD;YACjD,gEAAgE;YAChE,qDAAqD;YACrD,mCAAmC;YACnC,wCAAwC;YACxC,gDAAgD;YAChD,8FAA8F;YAC9F,2EAA2E;YAC3E,6DAA6D;YAC7D,oEAAoE;YACpE,8EAA8E;YAC9E,8DAA8D;YAC9D,8GAA8G;YAC9G,6EAA6E;YAC7E,kFAAkF;YAClF,8IAA8I;YAC9I,6FAA6F;YAC7F,0GAA0G;SAC3G;QACD,QAAQ,EAAE;YACR,uGAAuG;YACvG,wEAAwE;YACxE,6DAA6D;YAC7D,sFAAsF;YACtF,4DAA4D;YAC5D,yEAAyE;YACzE,yFAAyF;YACzF,wFAAwF;YACxF,mGAAmG;YACnG,iFAAiF;YACjF,iNAAiN;YACjN,kKAAkK;YAClK,4EAA4E;YAC5E,yFAAyF;YACzF,wLAAwL;YACxL,oIAAoI;YACpI,wJAAwJ;YACxJ,+JAA+J;YAC/J,6NAA6N;YAC7N,0HAA0H;YAC1H,wHAAwH;YACxH,gHAAgH;YAChH,wHAAwH;YACxH,sMAAsM;YACtM,qxBAAqxB;YACrxB,4DAA4D;YAC5D,4JAA4J;YAC5J,2FAA2F;YAC3F,gHAAgH;YAChH,qPAAqP;YACrP,g3EAAg3E;SACj3E;QACD,YAAY,EAAE,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,CAAC;KAC3G;CACF,CAAC"}
|
|
@@ -316,7 +316,7 @@ const plus5Days = now.plus({ days: 5 });
|
|
|
316
316
|
### JSON Querying
|
|
317
317
|
\`\`\`javascript
|
|
318
318
|
// JMESPath queries
|
|
319
|
-
const result = $jmespath($json, "users[?age > 30].name");
|
|
319
|
+
const result = $jmespath($json, "users[?age > \`30\`].name"); // numbers are backtick literals
|
|
320
320
|
\`\`\`
|
|
321
321
|
|
|
322
322
|
## Return Format Requirements
|
|
@@ -439,262 +439,159 @@ function getPythonCodeNodeGuide(depth = 'essentials') {
|
|
|
439
439
|
if (depth === 'essentials') {
|
|
440
440
|
return `# Python Code Node Guide
|
|
441
441
|
|
|
442
|
-
|
|
442
|
+
n8n 2.x runs Python natively in a task runner: \`language: "pythonNative"\`.
|
|
443
|
+
JavaScript is recommended for most cases - every n8n helper is JS-only.
|
|
443
444
|
|
|
444
|
-
**
|
|
445
|
-
-
|
|
446
|
-
-
|
|
447
|
-
-
|
|
448
|
-
|
|
449
|
-
**Limitations**:
|
|
450
|
-
- No external libraries (no requests, pandas, numpy)
|
|
451
|
-
- Use built-in functions only
|
|
452
|
-
- No pip install available
|
|
453
|
-
|
|
454
|
-
**Common Patterns**:
|
|
455
|
-
\`\`\`python
|
|
456
|
-
# Process all items
|
|
457
|
-
all_items = _input.all()
|
|
458
|
-
return [{
|
|
459
|
-
"json": {
|
|
460
|
-
"processed": True,
|
|
461
|
-
"count": len(all_items),
|
|
462
|
-
"first_item": all_items[0]["json"] if all_items else None
|
|
463
|
-
}
|
|
464
|
-
}]
|
|
465
|
-
\`\`\`
|
|
466
|
-
|
|
467
|
-
**Tips**:
|
|
468
|
-
- Webhook data is under ["body"] key
|
|
469
|
-
- Use json module for parsing
|
|
470
|
-
- datetime for date handling
|
|
445
|
+
**Two variables, one per mode**:
|
|
446
|
+
- \`runOnceForAllItems\` (default): \`_items\`, a list of \`{"json": {...}}\` dicts
|
|
447
|
+
- \`runOnceForEachItem\`: \`_item\`, one such dict
|
|
448
|
+
- Dict access only. \`it.json.field\` raises AttributeError.
|
|
449
|
+
- \`_input\`, \`_json\`, \`_node\`, \`_now\`, \`_today\`, \`_jmespath\` are gone (NameError).
|
|
471
450
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
451
|
+
**Blocked**: every \`import\` unless this instance allowlists it (Cloud: none);
|
|
452
|
+
\`class\`; \`type\`/\`getattr\`/\`hasattr\`/\`setattr\`/\`vars\`/\`dir\`/\`globals\`/\`locals\`/
|
|
453
|
+
\`open\`/\`input\`/\`eval\`/\`exec\`; dunders; \`global\` inside a function (use \`nonlocal\`).
|
|
475
454
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
## Data Access Patterns
|
|
455
|
+
**Returns**: all items - list of \`{"json": ...}\`, list of plain dicts, or one
|
|
456
|
+
dict. Each item - a dict; \`None\` drops the item; a list errors.
|
|
479
457
|
|
|
480
|
-
### Accessing Input Data
|
|
481
458
|
\`\`\`python
|
|
482
|
-
#
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
# Get specific node's output (use _node)
|
|
486
|
-
webhook_data = _node["Webhook"]["json"]
|
|
487
|
-
|
|
488
|
-
# Current item in loop
|
|
489
|
-
current_item = _json
|
|
490
|
-
|
|
491
|
-
# First item only
|
|
492
|
-
first_item = _input.first()["json"]
|
|
459
|
+
# runOnceForAllItems
|
|
460
|
+
return [{"json": {"name": it["json"]["name"]}} for it in _items if it["json"].get("active")]
|
|
493
461
|
\`\`\`
|
|
494
462
|
|
|
495
|
-
### Webhook Data Structure
|
|
496
|
-
**CRITICAL**: Webhook data is nested under ["body"]:
|
|
497
463
|
\`\`\`python
|
|
498
|
-
#
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
# CORRECT - Webhook data is under body
|
|
502
|
-
data = _json["body"]["name"]
|
|
503
|
-
\`\`\`
|
|
504
|
-
|
|
505
|
-
## Available Built-in Modules
|
|
506
|
-
|
|
507
|
-
### Standard Library Only
|
|
508
|
-
\`\`\`python
|
|
509
|
-
import json
|
|
510
|
-
import datetime
|
|
511
|
-
import base64
|
|
512
|
-
import hashlib
|
|
513
|
-
import urllib.parse
|
|
514
|
-
import re
|
|
515
|
-
import math
|
|
516
|
-
import random
|
|
464
|
+
# runOnceForEachItem
|
|
465
|
+
row = _item["json"]
|
|
466
|
+
return {"json": {**row, "upper": (row.get("name") or "").upper()}}
|
|
517
467
|
\`\`\`
|
|
518
468
|
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
# Current time
|
|
524
|
-
now = datetime.now()
|
|
525
|
-
iso_format = now.isoformat()
|
|
526
|
-
|
|
527
|
-
# Date arithmetic
|
|
528
|
-
future = now + timedelta(days=5)
|
|
529
|
-
formatted = now.strftime("%Y-%m-%d")
|
|
530
|
-
\`\`\`
|
|
469
|
+
**Tips**: webhook payloads are under ["body"]; use \`.get(key, default)\`;
|
|
470
|
+
self-hosted Docker needs the \`n8nio/runners\` sidecar or every Python node
|
|
471
|
+
fails with "Python runner unavailable".
|
|
531
472
|
|
|
532
|
-
|
|
533
|
-
\`\`\`python
|
|
534
|
-
# Parse JSON string
|
|
535
|
-
data = json.loads(json_string)
|
|
536
|
-
|
|
537
|
-
# Convert to JSON
|
|
538
|
-
json_output = json.dumps({"key": "value"})
|
|
539
|
-
\`\`\`
|
|
540
|
-
|
|
541
|
-
## Return Format Requirements
|
|
542
|
-
|
|
543
|
-
### Correct Format
|
|
544
|
-
\`\`\`python
|
|
545
|
-
# MUST return list of dictionaries with "json" key
|
|
546
|
-
return [{
|
|
547
|
-
"json": {
|
|
548
|
-
"result": "success",
|
|
549
|
-
"data": processed_data
|
|
550
|
-
}
|
|
551
|
-
}]
|
|
552
|
-
|
|
553
|
-
# Multiple items
|
|
554
|
-
return [
|
|
555
|
-
{"json": {"id": item["json"]["id"], "processed": True}}
|
|
556
|
-
for item in all_items
|
|
557
|
-
]
|
|
558
|
-
\`\`\`
|
|
559
|
-
|
|
560
|
-
### Binary Data
|
|
561
|
-
\`\`\`python
|
|
562
|
-
# Return with binary data
|
|
563
|
-
import base64
|
|
564
|
-
|
|
565
|
-
return [{
|
|
566
|
-
"json": {"filename": "report.pdf"},
|
|
567
|
-
"binary": {
|
|
568
|
-
"data": base64.b64encode(pdf_content).decode()
|
|
569
|
-
}
|
|
570
|
-
}]
|
|
571
|
-
\`\`\`
|
|
572
|
-
|
|
573
|
-
## Common Patterns
|
|
574
|
-
|
|
575
|
-
### Processing Webhook Data
|
|
576
|
-
\`\`\`python
|
|
577
|
-
# Extract webhook payload
|
|
578
|
-
webhook_body = _json["body"]
|
|
579
|
-
username = webhook_body.get("username")
|
|
580
|
-
email = webhook_body.get("email")
|
|
581
|
-
items = webhook_body.get("items", [])
|
|
582
|
-
|
|
583
|
-
# Process and return
|
|
584
|
-
return [{
|
|
585
|
-
"json": {
|
|
586
|
-
"username": username,
|
|
587
|
-
"email": email,
|
|
588
|
-
"item_count": len(items),
|
|
589
|
-
"processed_at": datetime.now().isoformat()
|
|
473
|
+
For full guide: tools_documentation({topic: "python_code_node_guide", depth: "full"})`;
|
|
590
474
|
}
|
|
591
|
-
|
|
592
|
-
\`\`\`
|
|
593
|
-
|
|
594
|
-
### Aggregating Data
|
|
595
|
-
\`\`\`python
|
|
596
|
-
# Sum values across all items
|
|
597
|
-
all_items = _input.all()
|
|
598
|
-
total = sum(item["json"].get("amount", 0) for item in all_items)
|
|
475
|
+
return `# Python Code Node Complete Guide
|
|
599
476
|
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
477
|
+
Since n8n 2.0 the Code node runs native Python in a task runner
|
|
478
|
+
(\`language: "pythonNative"\`, typeVersion 2). The Pyodide "Python (Beta)"
|
|
479
|
+
runtime is gone, and with it every n8n helper. JavaScript is recommended for
|
|
480
|
+
most cases: \`$()\`, \`$jmespath\`, Luxon and \`$helpers\` exist only there.
|
|
481
|
+
|
|
482
|
+
## The only inputs: _items and _item
|
|
483
|
+
|
|
484
|
+
| Mode | Variable | Shape |
|
|
485
|
+
|---|---|---|
|
|
486
|
+
| runOnceForAllItems (default) | \`_items\` | list of \`{"json": {...}, "pairedItem": {...}}\` dicts |
|
|
487
|
+
| runOnceForEachItem | \`_item\` | one such dict |
|
|
488
|
+
|
|
489
|
+
- Each exists **only in its own mode**; the other raises \`NameError\`.
|
|
490
|
+
- **Dict access only.** \`it["json"].get("name")\`, never \`it.json.name\`
|
|
491
|
+
(\`AttributeError: 'dict' object has no attribute 'json'\`).
|
|
492
|
+
- **No other nodes**: no \`_node\` / \`$('Node')\`. Merge upstream, or use JavaScript.
|
|
493
|
+
- **Webhook payloads** are under \`["body"]\`: \`_items[0]["json"].get("body", {})\`.
|
|
494
|
+
- **pairedItem**: returning \`_items\` / \`_item\` keeps it; when building new dicts
|
|
495
|
+
add \`"pairedItem": {"item": i}\` if a downstream node uses \`$('Node').item\`.
|
|
496
|
+
- Binary data: handle it in a JavaScript Code node.
|
|
497
|
+
|
|
498
|
+
## Migration from Pyodide
|
|
499
|
+
|
|
500
|
+
| Legacy (removed) | Native |
|
|
501
|
+
|---|---|
|
|
502
|
+
| \`_input.all()\` | \`_items\` |
|
|
503
|
+
| \`_input.first()["json"]\` | \`_items[0]["json"]\` (guard \`if _items\`) |
|
|
504
|
+
| \`_input.item\` / \`_json\` | \`_item\` / \`_item["json"]\` |
|
|
505
|
+
| \`_node["X"]\` | not available: merge upstream, or use JavaScript |
|
|
506
|
+
| \`_now\`, \`_today\` | not available: pass \`{{ $now.toISO() }}\` in via Edit Fields |
|
|
507
|
+
| \`_jmespath(data, q)\` | not available: \`$jmespath\` in an expression, or a comprehension |
|
|
508
|
+
| \`item.json.field\` | \`item["json"]["field"]\` |
|
|
509
|
+
|
|
510
|
+
## Imports: blocked by default
|
|
511
|
+
|
|
512
|
+
Every \`import\` - standard library included - is checked against an allowlist
|
|
513
|
+
before the code runs. The default allowlist is empty, so even \`import json\`
|
|
514
|
+
rejects the node with \`Security violations detected / Import of standard
|
|
515
|
+
library module 'json' is disallowed. Allowed stdlib modules: none\`.
|
|
516
|
+
|
|
517
|
+
- **n8n Cloud**: no imports at all. **Self-hosted**: an admin can allowlist
|
|
518
|
+
modules in the task-runner config; most instances don't.
|
|
519
|
+
- Default to import-free code; confirm with a one-line test node before relying
|
|
520
|
+
on an import. \`requests\`, \`pandas\` and \`numpy\` need a custom runner image
|
|
521
|
+
that ships and allowlists them, so assume they are unavailable.
|
|
522
|
+
- Instead: parse JSON upstream (\`{{ JSON.parse($json.payload) }}\`), do date math
|
|
523
|
+
in expressions, hash with the Crypto node. ISO-8601 strings sort as strings.
|
|
524
|
+
|
|
525
|
+
## Sandbox limits (these fail even without imports)
|
|
526
|
+
|
|
527
|
+
| You write | What happens | Use instead |
|
|
528
|
+
|---|---|---|
|
|
529
|
+
| \`type\`, \`getattr\`, \`setattr\`, \`hasattr\`, \`vars\`, \`dir\`, \`globals\`, \`locals\`, \`open\`, \`input\`, \`eval\`, \`exec\`, \`compile\`, \`object\`, \`memoryview\`, \`breakpoint\` | \`NameError\` at runtime, whether called or merely named | \`isinstance(x, dict)\`; \`key in d\` / \`d.get(key)\` |
|
|
530
|
+
| \`class Foo: ...\` | \`__build_class__ not found\` | dicts + functions |
|
|
531
|
+
| \`x.__class__\`, \`__import__("json")\` | \`Security violations detected\` (before running) | - |
|
|
532
|
+
| \`global counter\` inside a function | \`NameError\` - your code already runs inside a wrapper function, so a nested \`global\` never binds (at top level it is a harmless no-op) | \`nonlocal counter\` |
|
|
533
|
+
|
|
534
|
+
Plain Python otherwise works: comprehensions, generators, lambdas, closures,
|
|
535
|
+
\`try\`/\`except\`, f-strings, \`sorted\`/\`sum\`/\`min\`/\`max\`/\`any\`/\`all\`/\`zip\`,
|
|
536
|
+
sets, \`isinstance\`, \`print()\` (output goes to the browser console).
|
|
537
|
+
|
|
538
|
+
## Return shapes
|
|
539
|
+
|
|
540
|
+
**runOnceForAllItems**: \`[{"json": {...}}, ...]\` is canonical; a list of plain
|
|
541
|
+
dicts and a single dict are auto-wrapped; \`_items\` mutated in place passes
|
|
542
|
+
through; \`None\` or no \`return\` errors with
|
|
543
|
+
\`Cannot read properties of null (reading 'json')\`.
|
|
544
|
+
|
|
545
|
+
**runOnceForEachItem**: a dict (or \`_item\`) gives one item; \`None\` **drops** the
|
|
546
|
+
item; a **list** errors with \`A 'json' property isn't a dictionary [item 0]\`.
|
|
547
|
+
|
|
548
|
+
On output a \`tuple\` becomes a list, a \`set\` becomes the *string* \`"{1, 2}"\` and
|
|
549
|
+
a \`datetime\` becomes \`str(dt)\`, not ISO - convert explicitly.
|
|
550
|
+
|
|
551
|
+
## Common patterns (import-free)
|
|
608
552
|
|
|
609
|
-
### Error Handling
|
|
610
553
|
\`\`\`python
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
return [{
|
|
617
|
-
"json": {
|
|
618
|
-
"success": True,
|
|
619
|
-
"data": result
|
|
620
|
-
}
|
|
621
|
-
}]
|
|
622
|
-
except Exception as e:
|
|
623
|
-
return [{
|
|
624
|
-
"json": {
|
|
625
|
-
"success": False,
|
|
626
|
-
"error": str(e)
|
|
627
|
-
}
|
|
628
|
-
}]
|
|
554
|
+
# Aggregate to one item (runOnceForAllItems)
|
|
555
|
+
total = sum(it["json"].get("amount", 0) for it in _items)
|
|
556
|
+
return {"json": {"total": total, "count": len(_items),
|
|
557
|
+
"average": total / len(_items) if _items else 0}}
|
|
629
558
|
\`\`\`
|
|
630
559
|
|
|
631
|
-
### Data Transformation
|
|
632
560
|
\`\`\`python
|
|
633
|
-
#
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
data = item["json"]
|
|
639
|
-
transformed.append({
|
|
640
|
-
"json": {
|
|
641
|
-
"id": data.get("id"),
|
|
642
|
-
"name": data.get("name", "").upper(),
|
|
643
|
-
"timestamp": datetime.now().isoformat(),
|
|
644
|
-
"valid": bool(data.get("email"))
|
|
645
|
-
}
|
|
646
|
-
})
|
|
647
|
-
|
|
648
|
-
return transformed
|
|
561
|
+
# Drop an item (runOnceForEachItem) - returning None filters it out
|
|
562
|
+
row = _item["json"]
|
|
563
|
+
if not row.get("email"):
|
|
564
|
+
return None
|
|
565
|
+
return {"json": {**row, "email": row["email"].lower()}}
|
|
649
566
|
\`\`\`
|
|
650
567
|
|
|
651
|
-
##
|
|
568
|
+
## Self-hosted: the Python task runner
|
|
652
569
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
# import requests # Not available
|
|
657
|
-
# import pandas # Not available
|
|
658
|
-
# import numpy # Not available
|
|
570
|
+
Self-hosted Docker needs the \`n8nio/runners\` sidecar. Without it every Python
|
|
571
|
+
Code node fails with \`Python runner unavailable: Python 3 is missing from this
|
|
572
|
+
system\` - an infrastructure problem, not a code problem.
|
|
659
573
|
|
|
660
|
-
|
|
661
|
-
# Or use HTTP Request node before Code node
|
|
662
|
-
\`\`\`
|
|
574
|
+
## Errors and onError
|
|
663
575
|
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
576
|
+
\`raise ValueError("bad row")\` fails the node with that message, and routes to the
|
|
577
|
+
error output when the node sets \`onError: "continueErrorOutput"\`. But a **static
|
|
578
|
+
rejection** (blocked import, dunder access) and a
|
|
579
|
+
**bad return shape** mark the node failed while sending the **unchanged input
|
|
580
|
+
items to the success output**, so no error branch catches them. Prevent both and
|
|
581
|
+
confirm with a real test execution.
|
|
669
582
|
|
|
670
583
|
## Common Pitfalls
|
|
671
|
-
1.
|
|
672
|
-
2.
|
|
673
|
-
3.
|
|
674
|
-
4.
|
|
675
|
-
5.
|
|
584
|
+
1. Copying Pyodide code that uses \`_input\`, \`_json\`, \`_node\`, \`_now\` or \`_jmespath\`
|
|
585
|
+
2. Dot access (\`item.json.field\`) instead of \`item["json"]["field"]\`
|
|
586
|
+
3. Assuming \`import json\` or \`import datetime\` works
|
|
587
|
+
4. Using the wrong mode variable, or returning a list in runOnceForEachItem mode
|
|
588
|
+
5. Forgetting webhook data is under ["body"]
|
|
676
589
|
|
|
677
590
|
## Best Practices
|
|
678
|
-
1.
|
|
679
|
-
2.
|
|
680
|
-
3.
|
|
681
|
-
4.
|
|
682
|
-
5. Return meaningful error messages
|
|
683
|
-
|
|
684
|
-
## Type Conversions
|
|
685
|
-
\`\`\`python
|
|
686
|
-
# String to number
|
|
687
|
-
value = float(_json.get("amount", "0"))
|
|
688
|
-
|
|
689
|
-
# Boolean conversion
|
|
690
|
-
is_active = str(_json.get("active", "")).lower() == "true"
|
|
691
|
-
|
|
692
|
-
# Safe JSON parsing
|
|
693
|
-
try:
|
|
694
|
-
data = json.loads(_json.get("json_string", "{}"))
|
|
695
|
-
except json.JSONDecodeError:
|
|
696
|
-
data = {}
|
|
697
|
-
\`\`\`
|
|
591
|
+
1. Confirm the mode before writing the first line
|
|
592
|
+
2. Use \`.get()\` for every dictionary access and handle an empty \`_items\`
|
|
593
|
+
3. Return the explicit \`{"json": ...}\` shape
|
|
594
|
+
4. Run a real test execution - validation alone won't catch the passthrough traps
|
|
698
595
|
|
|
699
596
|
## Related Tools
|
|
700
597
|
- get_node({nodeType: "nodes-base.code"}) - Get Code node configuration details
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools-documentation.js","sourceRoot":"","sources":["../../src/mcp/tools-documentation.ts"],"names":[],"mappings":";;AAEA,oDAuEC;AASD,4CAsIC;AAED,0DAWC;AAED,gDAIC;AAED,4CAMC;AAnPD,2CAAiD;AAEjD,SAAgB,oBAAoB,CAClC,QAAgB,EAChB,QAA+B,YAAY,EAC3C,kBAAgC;IAGhC,IAAI,QAAQ,KAAK,4BAA4B,EAAE,CAAC;QAC9C,OAAO,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,QAAQ,KAAK,wBAAwB,EAAE,CAAC;QAC1C,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,IAAI,GAAG,8BAAkB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,QAAQ,gEAAgE,CAAC;IAC3F,CAAC;IAED,MAAM,cAAc,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC;QACtE,CAAC,CAAC,oFAAoF,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC5H,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC5B,OAAO,KAAK,IAAI,CAAC,IAAI;EACvB,cAAc;EACd,UAAU,CAAC,WAAW;;eAET,UAAU,CAAC,OAAO;;sBAEX,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;;mBAEtC,UAAU,CAAC,WAAW;;;EAGvC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;4DAES,QAAQ,oBAAoB,CAAC;IACvF,CAAC;IAGD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,OAAO,KAAK,IAAI,CAAC,IAAI;EACrB,cAAc;EACd,IAAI,CAAC,WAAW;;;EAGhB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CACtD,OAAO,KAAK,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,CACzF,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGV,IAAI,CAAC,OAAO;;;EAGZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;EAGvE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG7C,IAAI,CAAC,WAAW;;;EAGhB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGlD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG3C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,+BAA+B,CAAC,eAA0C;IACjF,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9D,MAAM,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC;SACzC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,wIAAwI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACpK,CAAC;AAED,SAAgB,gBAAgB,CAC9B,QAA+B,YAAY,EAC3C,eAA0C;IAI1C,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClD,MAAM,mBAAmB,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC;IAE9G,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,OAAO;;;gDAGqC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0DAsFT,+BAA+B,CAAC,eAAe,CAAC,EAAE,CAAC;IAC3G,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,OAAO;;;gDAGuC,mBAAmB;;;;;;;;;;EAUjE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACrB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAClF,OAAO,OAAO,YAAY;EAC1B,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACrB,MAAM,IAAI,GAAG,8BAAkB,CAAC,QAAQ,CAAC,CAAC;YAC1C,OAAO,OAAO,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC7D,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;0DAS2C,+BAA+B,CAAC,eAAe,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,SAAgB,uBAAuB,CAAC,OAAe;IACrD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,8BAAkB,CAAC,EAAE,CAAC;QAClE,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC;QACvG,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,OAAO,MAAM,CAAC,OAAO,CAAC,8BAAkB,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,gBAAgB;IAC9B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,8BAAkB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC/C,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAGD,SAAS,0BAA0B,CAAC,QAA+B,YAAY;IAC7E,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0FAgC+E,CAAC;IACzF,CAAC;IAGD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CA8KoC,CAAC;AAC9C,CAAC;AAED,SAAS,sBAAsB,CAAC,QAA+B,YAAY;IACzE,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,OAAO
|
|
1
|
+
{"version":3,"file":"tools-documentation.js","sourceRoot":"","sources":["../../src/mcp/tools-documentation.ts"],"names":[],"mappings":";;AAEA,oDAuEC;AASD,4CAsIC;AAED,0DAWC;AAED,gDAIC;AAED,4CAMC;AAnPD,2CAAiD;AAEjD,SAAgB,oBAAoB,CAClC,QAAgB,EAChB,QAA+B,YAAY,EAC3C,kBAAgC;IAGhC,IAAI,QAAQ,KAAK,4BAA4B,EAAE,CAAC;QAC9C,OAAO,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,QAAQ,KAAK,wBAAwB,EAAE,CAAC;QAC1C,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,IAAI,GAAG,8BAAkB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,QAAQ,gEAAgE,CAAC;IAC3F,CAAC;IAED,MAAM,cAAc,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC;QACtE,CAAC,CAAC,oFAAoF,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC5H,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC5B,OAAO,KAAK,IAAI,CAAC,IAAI;EACvB,cAAc;EACd,UAAU,CAAC,WAAW;;eAET,UAAU,CAAC,OAAO;;sBAEX,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;;mBAEtC,UAAU,CAAC,WAAW;;;EAGvC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;4DAES,QAAQ,oBAAoB,CAAC;IACvF,CAAC;IAGD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,OAAO,KAAK,IAAI,CAAC,IAAI;EACrB,cAAc;EACd,IAAI,CAAC,WAAW;;;EAGhB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CACtD,OAAO,KAAK,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,CACzF,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGV,IAAI,CAAC,OAAO;;;EAGZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;EAGvE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG7C,IAAI,CAAC,WAAW;;;EAGhB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGlD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG3C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,+BAA+B,CAAC,eAA0C;IACjF,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9D,MAAM,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC;SACzC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,wIAAwI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACpK,CAAC;AAED,SAAgB,gBAAgB,CAC9B,QAA+B,YAAY,EAC3C,eAA0C;IAI1C,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClD,MAAM,mBAAmB,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC;IAE9G,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,OAAO;;;gDAGqC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0DAsFT,+BAA+B,CAAC,eAAe,CAAC,EAAE,CAAC;IAC3G,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,OAAO;;;gDAGuC,mBAAmB;;;;;;;;;;EAUjE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACrB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAClF,OAAO,OAAO,YAAY;EAC1B,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACrB,MAAM,IAAI,GAAG,8BAAkB,CAAC,QAAQ,CAAC,CAAC;YAC1C,OAAO,OAAO,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC7D,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;0DAS2C,+BAA+B,CAAC,eAAe,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,SAAgB,uBAAuB,CAAC,OAAe;IACrD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,8BAAkB,CAAC,EAAE,CAAC;QAClE,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC;QACvG,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,OAAO,MAAM,CAAC,OAAO,CAAC,8BAAkB,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,gBAAgB;IAC9B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,8BAAkB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC/C,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAGD,SAAS,0BAA0B,CAAC,QAA+B,YAAY;IAC7E,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0FAgC+E,CAAC;IACzF,CAAC;IAGD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CA8KoC,CAAC;AAC9C,CAAC;AAED,SAAS,sBAAsB,CAAC,QAA+B,YAAY;IACzE,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sFAiC2E,CAAC;IACrF,CAAC;IAGD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDA4H4C,CAAC;AACtD,CAAC"}
|
|
@@ -16,7 +16,7 @@ export declare class MCPEngine {
|
|
|
16
16
|
common: import("./services/property-filter").SimplifiedProperty[];
|
|
17
17
|
} | null>;
|
|
18
18
|
getNodeDocumentation(args: any): Promise<any>;
|
|
19
|
-
validateNodeOperation(args: any): Promise<import("./services/config-validator").
|
|
19
|
+
validateNodeOperation(args: any): Promise<import("./services/enhanced-config-validator").EnhancedValidationResult | {
|
|
20
20
|
valid: boolean;
|
|
21
21
|
errors: {
|
|
22
22
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools-engine.d.ts","sourceRoot":"","sources":["../src/mcp-tools-engine.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAK5D,OAAO,EAAqB,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAE5F,qBAAa,SAAS;IAGR,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,iBAAiB,CAAoB;gBAEzB,UAAU,EAAE,cAAc;IAIxC,SAAS,CAAC,IAAI,GAAE,GAAQ;IAIxB,WAAW,CAAC,IAAI,EAAE,GAAG;IAIrB,WAAW,CAAC,IAAI,EAAE,GAAG;IAIrB,iBAAiB,CAAC,IAAI,EAAE,GAAG;;;;;;;;IAgB3B,oBAAoB,CAAC,IAAI,EAAE,GAAG;IAK9B,qBAAqB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"mcp-tools-engine.d.ts","sourceRoot":"","sources":["../src/mcp-tools-engine.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAK5D,OAAO,EAAqB,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAE5F,qBAAa,SAAS;IAGR,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,iBAAiB,CAAoB;gBAEzB,UAAU,EAAE,cAAc;IAIxC,SAAS,CAAC,IAAI,GAAE,GAAQ;IAIxB,WAAW,CAAC,IAAI,EAAE,GAAG;IAIrB,WAAW,CAAC,IAAI,EAAE,GAAG;IAIrB,iBAAiB,CAAC,IAAI,EAAE,GAAG;;;;;;;;IAgB3B,oBAAoB,CAAC,IAAI,EAAE,GAAG;IAK9B,qBAAqB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IA2B/B,mBAAmB,CAAC,IAAI,EAAE,GAAG;;;;;;;IAmB7B,oBAAoB,CAAC,IAAI,EAAE,GAAG;IAI9B,WAAW,CAAC,IAAI,EAAE,GAAG;IAIrB,qBAAqB,CAAC,IAAI,EAAE,GAAG;;;;;IAU/B,gBAAgB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAGrE"}
|
package/dist/mcp-tools-engine.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MCPEngine = void 0;
|
|
4
4
|
const property_filter_1 = require("./services/property-filter");
|
|
5
|
-
const config_validator_1 = require("./services/config-validator");
|
|
6
5
|
const enhanced_config_validator_1 = require("./services/enhanced-config-validator");
|
|
7
6
|
const workflow_validator_1 = require("./services/workflow-validator");
|
|
8
7
|
class MCPEngine {
|
|
@@ -49,8 +48,7 @@ class MCPEngine {
|
|
|
49
48
|
hiddenProperties: []
|
|
50
49
|
};
|
|
51
50
|
}
|
|
52
|
-
|
|
53
|
-
return config_validator_1.ConfigValidator.validate(args.nodeType, args.config, node.properties || [], userProvidedKeys);
|
|
51
|
+
return enhanced_config_validator_1.EnhancedConfigValidator.validateWithMode(args.nodeType, args.config || {}, node.properties || [], args.mode ?? 'operation', args.profile ?? 'ai-friendly');
|
|
54
52
|
}
|
|
55
53
|
async validateNodeMinimal(args) {
|
|
56
54
|
const node = await this.repository.getNodeByType(args.nodeType);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools-engine.js","sourceRoot":"","sources":["../src/mcp-tools-engine.ts"],"names":[],"mappings":";;;AAKA,gEAA4D;
|
|
1
|
+
{"version":3,"file":"mcp-tools-engine.js","sourceRoot":"","sources":["../src/mcp-tools-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../../src/services/config-validator.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,uBAAuB,GAAG,cAAc,CAAC;IACxH,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,GAAG,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,eAAe,GAAG,eAAe,CAAC;IACvG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,eAAe;IAI1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA4C;IAKjF,MAAM,CAAC,QAAQ,CACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,UAAU,EAAE,GAAG,EAAE,EACjB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,gBAAgB;IAsDnB,MAAM,CAAC,aAAa,CAClB,OAAO,EAAE,KAAK,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,UAAU,EAAE,GAAG,EAAE,CAAC;KACnB,CAAC,GACD,gBAAgB,EAAE;IASrB,OAAO,CAAC,MAAM,CAAC,uBAAuB;IA0CtC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAsBpC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgDhC,OAAO,CAAC,MAAM,CAAC,YAAY;WAab,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IA2ChF,OAAO,CAAC,MAAM,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../../src/services/config-validator.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,uBAAuB,GAAG,cAAc,CAAC;IACxH,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,GAAG,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,eAAe,GAAG,eAAe,CAAC;IACvG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,eAAe;IAI1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA4C;IAKjF,MAAM,CAAC,QAAQ,CACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,UAAU,EAAE,GAAG,EAAE,EACjB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,gBAAgB;IAsDnB,MAAM,CAAC,aAAa,CAClB,OAAO,EAAE,KAAK,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,UAAU,EAAE,GAAG,EAAE,CAAC;KACnB,CAAC,GACD,gBAAgB,EAAE;IASrB,OAAO,CAAC,MAAM,CAAC,uBAAuB;IA0CtC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAsBpC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgDhC,OAAO,CAAC,MAAM,CAAC,YAAY;WAab,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IA2ChF,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAwKpC,OAAO,CAAC,MAAM,CAAC,6BAA6B;IA+B5C,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAoElC,OAAO,CAAC,MAAM,CAAC,eAAe;IAc9B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAoC/B,OAAO,CAAC,MAAM,CAAC,YAAY;IA+C3B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA4EhC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAmCpC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IA6BvC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IA4CvC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAgEnC,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAuKvC"}
|