@caoscompanybr/merlin 3.5.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/.claude/CLAUDE.md +216 -0
- package/.claude/hooks/README-license-gate.md +45 -0
- package/.claude/hooks/auto-summarize.js +47 -0
- package/.claude/hooks/context-monitor.js +60 -0
- package/.claude/hooks/doc-sync.js +111 -0
- package/.claude/hooks/license-gate.cjs +59 -0
- package/.claude/hooks/session-reset.js +27 -0
- package/.claude/hooks/thoughts-indexer.js +80 -0
- package/.claude/rules/merlin-constitution.md +27 -0
- package/.merlin-core/commands/README.md +19 -0
- package/.merlin-core/commands/founder-mode.md +51 -0
- package/.merlin-core/commands/git/commit.md +35 -0
- package/.merlin-core/commands/git/describe-pr.md +43 -0
- package/.merlin-core/commands/git/safe-commit.md +182 -0
- package/.merlin-core/commands/implementation/implement-plan.md +129 -0
- package/.merlin-core/commands/implementation/oneshot.md +63 -0
- package/.merlin-core/commands/implementation/tdd.md +152 -0
- package/.merlin-core/commands/planning/create-plan.md +184 -0
- package/.merlin-core/commands/planning/iterate-plan.md +45 -0
- package/.merlin-core/commands/planning/validate-plan.md +48 -0
- package/.merlin-core/commands/research/analyze-issue.md +155 -0
- package/.merlin-core/commands/research/research-codebase.md +157 -0
- package/.merlin-core/commands/review/adversarial-review.md +112 -0
- package/.merlin-core/commands/review/check.md +91 -0
- package/.merlin-core/commands/review/debug.md +135 -0
- package/.merlin-core/commands/review/doubts.md +178 -0
- package/.merlin-core/commands/review/engineering-audit.md +87 -0
- package/.merlin-core/commands/review/local-review.md +48 -0
- package/.merlin-core/commands/review/verify-goals.md +83 -0
- package/.merlin-core/commands/session/capture-feedback.md +74 -0
- package/.merlin-core/commands/session/capture-learning.md +155 -0
- package/.merlin-core/commands/session/check-objectives.md +85 -0
- package/.merlin-core/commands/session/conclude.md +125 -0
- package/.merlin-core/commands/session/create-handoff.md +88 -0
- package/.merlin-core/commands/session/create-objective.md +111 -0
- package/.merlin-core/commands/session/create-process.md +105 -0
- package/.merlin-core/commands/session/create-reminder.md +86 -0
- package/.merlin-core/commands/session/fast-start.md +261 -0
- package/.merlin-core/commands/session/recall-learnings.md +79 -0
- package/.merlin-core/commands/session/recall-processes.md +74 -0
- package/.merlin-core/commands/session/resume-handoff.md +51 -0
- package/.merlin-core/commands/session/run-process.md +53 -0
- package/.merlin-core/commands/special/beauty.md +89 -0
- package/.merlin-core/commands/special/common-ground.md +114 -0
- package/.merlin-core/commands/special/elicit.md +98 -0
- package/.merlin-core/commands/special/party.md +66 -0
- package/.merlin-core/commands/special/scrape.md +78 -0
- package/.merlin-core/commands/special/skill-audit.md +128 -0
- package/.merlin-core/commands/special/start-here.md +132 -0
- package/.merlin-core/constitution.md +442 -0
- package/.merlin-core/core/README.md +19 -0
- package/.merlin-core/core/alkimia/README.md +20 -0
- package/.merlin-core/core/alkimia/context/context-tracker.js +209 -0
- package/.merlin-core/core/alkimia/domain/domain-loader.js +215 -0
- package/.merlin-core/core/alkimia/engine.js +284 -0
- package/.merlin-core/core/alkimia/layers/l0-constitution.js +47 -0
- package/.merlin-core/core/alkimia/layers/l1-global.js +58 -0
- package/.merlin-core/core/alkimia/layers/l2-agent.js +58 -0
- package/.merlin-core/core/alkimia/layers/l3-workflow.js +54 -0
- package/.merlin-core/core/alkimia/layers/l4-task.js +45 -0
- package/.merlin-core/core/alkimia/layers/l5-squad.js +161 -0
- package/.merlin-core/core/alkimia/layers/l6-skill.js +520 -0
- package/.merlin-core/core/alkimia/layers/l7-star-command.js +87 -0
- package/.merlin-core/core/alkimia/layers/layer-processor.js +78 -0
- package/.merlin-core/core/alkimia/mandate.js +46 -0
- package/.merlin-core/core/alkimia/memory/doc-sync.js +201 -0
- package/.merlin-core/core/alkimia/memory/document-sharder.js +272 -0
- package/.merlin-core/core/alkimia/memory/git-history-retriever.js +225 -0
- package/.merlin-core/core/alkimia/memory/memory-bridge.js +97 -0
- package/.merlin-core/core/alkimia/memory/session-analyzer.js +400 -0
- package/.merlin-core/core/alkimia/memory/thoughts-indexer.js +477 -0
- package/.merlin-core/core/alkimia/memory/thoughts-provider.js +603 -0
- package/.merlin-core/core/alkimia/output/formatter.js +464 -0
- package/.merlin-core/core/alkimia/security/content-sanitizer.js +140 -0
- package/.merlin-core/core/alkimia/skill-importer.js +440 -0
- package/.merlin-core/core/alkimia/squads/default/.synapse/manifest +17 -0
- package/.merlin-core/core/alkimia/utils/frontmatter.js +321 -0
- package/.merlin-core/core/alkimia/utils/tokens.js +24 -0
- package/.merlin-core/core/approval/README.md +16 -0
- package/.merlin-core/core/approval/approval-engine.js +380 -0
- package/.merlin-core/core/approval/channels/cli-channel.js +50 -0
- package/.merlin-core/core/config/README.md +17 -0
- package/.merlin-core/core/config/config-cache.js +182 -0
- package/.merlin-core/core/config/config-loader.js +279 -0
- package/.merlin-core/core/config/config-resolver.js +411 -0
- package/.merlin-core/core/config/env-interpolator.js +123 -0
- package/.merlin-core/core/config/merge-utils.js +102 -0
- package/.merlin-core/core/config/schemas/core-config.schema.json +41 -0
- package/.merlin-core/core/config/schemas/framework-config.schema.json +24 -0
- package/.merlin-core/core/config/schemas/local-config.schema.json +23 -0
- package/.merlin-core/core/config/schemas/project-config.schema.json +189 -0
- package/.merlin-core/core/docs-consistency.js +140 -0
- package/.merlin-core/core/events/event-bus.js +344 -0
- package/.merlin-core/core/events/hook-handler.js +419 -0
- package/.merlin-core/core/execution/README.md +17 -0
- package/.merlin-core/core/execution/attempt-journal.js +380 -0
- package/.merlin-core/core/execution/autonomous-build-loop.js +637 -0
- package/.merlin-core/core/execution/build-orchestrator.js +296 -0
- package/.merlin-core/core/execution/build-state-manager.js +196 -0
- package/.merlin-core/core/execution/context-injector.js +204 -0
- package/.merlin-core/core/execution/cron-engine.js +247 -0
- package/.merlin-core/core/execution/cron-expression.js +148 -0
- package/.merlin-core/core/execution/env-preflight.js +423 -0
- package/.merlin-core/core/execution/guardrail-engine.js +745 -0
- package/.merlin-core/core/execution/heartbeat-engine.js +198 -0
- package/.merlin-core/core/execution/model-router.js +282 -0
- package/.merlin-core/core/execution/parallel-executor.js +378 -0
- package/.merlin-core/core/execution/parallel-monitor.js +201 -0
- package/.merlin-core/core/execution/party-session.js +311 -0
- package/.merlin-core/core/execution/rate-limit-manager.js +152 -0
- package/.merlin-core/core/execution/result-aggregator.js +215 -0
- package/.merlin-core/core/execution/semantic-merge-engine.js +320 -0
- package/.merlin-core/core/execution/subagent-dispatcher.js +721 -0
- package/.merlin-core/core/execution/success-verifier.js +227 -0
- package/.merlin-core/core/execution/task-metadata.js +105 -0
- package/.merlin-core/core/execution/team-executor.js +195 -0
- package/.merlin-core/core/execution/two-tier-editor.js +290 -0
- package/.merlin-core/core/execution/version-snapshot.js +294 -0
- package/.merlin-core/core/execution/wave-executor.js +224 -0
- package/.merlin-core/core/health-check/health-engine.js +415 -0
- package/.merlin-core/core/licensing/activation.js +281 -0
- package/.merlin-core/core/licensing/crc.js +103 -0
- package/.merlin-core/core/licensing/entitlement.js +99 -0
- package/.merlin-core/core/licensing/fingerprint.js +104 -0
- package/.merlin-core/core/licensing/gate.js +133 -0
- package/.merlin-core/core/licensing/hmac.js +42 -0
- package/.merlin-core/core/licensing/key.js +144 -0
- package/.merlin-core/core/licensing/license.js +212 -0
- package/.merlin-core/core/mcp/README.md +16 -0
- package/.merlin-core/core/mcp/browser-capability.js +191 -0
- package/.merlin-core/core/mcp/capability-mapper.js +92 -0
- package/.merlin-core/core/mcp/mcp-connector.js +278 -0
- package/.merlin-core/core/mcp/mcp-registry.js +101 -0
- package/.merlin-core/core/orchestration/README.md +17 -0
- package/.merlin-core/core/orchestration/agent-invoker.js +456 -0
- package/.merlin-core/core/orchestration/condition-evaluator.js +250 -0
- package/.merlin-core/core/orchestration/decision-tree.js +192 -0
- package/.merlin-core/core/orchestration/executor-assignment.js +372 -0
- package/.merlin-core/core/orchestration/gate-evaluator.js +653 -0
- package/.merlin-core/core/orchestration/intent-classifier.js +579 -0
- package/.merlin-core/core/orchestration/lock-manager.js +308 -0
- package/.merlin-core/core/orchestration/master-orchestrator.js +363 -0
- package/.merlin-core/core/orchestration/phase-tool-masks.js +194 -0
- package/.merlin-core/core/orchestration/recovery-handler.js +402 -0
- package/.merlin-core/core/orchestration/reflect-checkpoint.js +431 -0
- package/.merlin-core/core/orchestration/session-state.js +430 -0
- package/.merlin-core/core/orchestration/skill-dispatcher.js +255 -0
- package/.merlin-core/core/orchestration/step-loader.js +226 -0
- package/.merlin-core/core/orchestration/workflow-executor.js +864 -0
- package/.merlin-core/core/process/executor.js +231 -0
- package/.merlin-core/core/process/process-file.js +50 -0
- package/.merlin-core/core/process/secret-scan.js +86 -0
- package/.merlin-core/core/process/signature.js +77 -0
- package/.merlin-core/core/quality-gates/README.md +17 -0
- package/.merlin-core/core/quality-gates/layer1-precommit.js +110 -0
- package/.merlin-core/core/quality-gates/layer2-pr-automation.js +116 -0
- package/.merlin-core/core/quality-gates/layer3-human-review.js +133 -0
- package/.merlin-core/core/registry/service-registry.js +140 -0
- package/.merlin-core/core-config.yaml +159 -0
- package/.merlin-core/development/README.md +17 -0
- package/.merlin-core/development/agents/README.md +16 -0
- package/.merlin-core/development/agents/analyst.md +214 -0
- package/.merlin-core/development/agents/architect.md +166 -0
- package/.merlin-core/development/agents/data-engineer.md +154 -0
- package/.merlin-core/development/agents/dev.md +203 -0
- package/.merlin-core/development/agents/devops.md +236 -0
- package/.merlin-core/development/agents/grimorio.md +125 -0
- package/.merlin-core/development/agents/merlin-master.md +173 -0
- package/.merlin-core/development/agents/meta.md +190 -0
- package/.merlin-core/development/agents/pm.md +145 -0
- package/.merlin-core/development/agents/po.md +172 -0
- package/.merlin-core/development/agents/qa.md +275 -0
- package/.merlin-core/development/agents/researcher.md +218 -0
- package/.merlin-core/development/agents/scout.md +179 -0
- package/.merlin-core/development/agents/sm.md +148 -0
- package/.merlin-core/development/agents/ux.md +169 -0
- package/.merlin-core/development/agents/web-researcher.md +203 -0
- package/.merlin-core/development/checklists/adversarial-review-checklist.md +70 -0
- package/.merlin-core/development/checklists/operations-ci-checklist.md +40 -0
- package/.merlin-core/development/checklists/operations-deploy-checklist.md +54 -0
- package/.merlin-core/development/checklists/operations-publish-checklist.md +47 -0
- package/.merlin-core/development/checklists/source-verification-checklist.md +38 -0
- package/.merlin-core/development/templates/HEARTBEAT-template.md +46 -0
- package/.merlin-core/development/templates/ears-requirements-template.md +93 -0
- package/.merlin-core/development/templates/handoff-template.md +50 -0
- package/.merlin-core/development/templates/prd-template.md +62 -0
- package/.merlin-core/development/templates/research-template.md +53 -0
- package/.merlin-core/development/templates/spec-template.md +84 -0
- package/.merlin-core/development/workflows/brownfield-discovery.yaml +166 -0
- package/.merlin-core/development/workflows/brownfield-service.yaml +52 -0
- package/.merlin-core/development/workflows/development-cycle.yaml +57 -0
- package/.merlin-core/development/workflows/epic-orchestration.yaml +47 -0
- package/.merlin-core/development/workflows/folloni-funnel.yaml +177 -0
- package/.merlin-core/development/workflows/greenfield-fullstack.yaml +167 -0
- package/.merlin-core/development/workflows/greenfield-service.yaml +56 -0
- package/.merlin-core/development/workflows/qa-loop.yaml +115 -0
- package/.merlin-core/development/workflows/spec-pipeline.yaml +185 -0
- package/.merlin-core/development/workflows/steps/folloni-01-research.yaml +35 -0
- package/.merlin-core/development/workflows/steps/folloni-02-architecture.yaml +41 -0
- package/.merlin-core/development/workflows/steps/folloni-03-implementation.yaml +52 -0
- package/.merlin-core/development/workflows/story-development-cycle.yaml +67 -0
- package/.merlin-core/docs/GUIDE.md +413 -0
- package/.merlin-core/docs/merlin-commands-guide-pt.md +183 -0
- package/.merlin-core/framework-config.yaml +148 -0
- package/.merlin-core/hooks/README.md +16 -0
- package/.merlin-core/hooks/precompact-memory-flush.js +69 -0
- package/.merlin-core/hooks/pretooluse-remote-approve.js +113 -0
- package/.merlin-core/hooks/spikes/spike-b-hook.js +70 -0
- package/.merlin-core/hooks/spikes/spike-b-stub.js +70 -0
- package/.merlin-core/index.js +91 -0
- package/.merlin-core/local-config.yaml.template +31 -0
- package/.merlin-core/mcp-servers/lsp-bridge/index.js +397 -0
- package/.merlin-core/modules/scraping/module.json +23 -0
- package/.merlin-core/project-config.yaml +89 -0
- package/.merlin-core/schemas/README.md +18 -0
- package/.merlin-core/schemas/agent-hook-schema.json +152 -0
- package/.merlin-core/schemas/agent-schema.json +31 -0
- package/.merlin-core/schemas/command-schema.json +18 -0
- package/.merlin-core/schemas/feedback-schema.json +36 -0
- package/.merlin-core/schemas/handoff-schema.json +19 -0
- package/.merlin-core/schemas/learning-schema.json +51 -0
- package/.merlin-core/schemas/module.schema.json +124 -0
- package/.merlin-core/schemas/must-haves-schema.json +95 -0
- package/.merlin-core/schemas/objective-schema.json +23 -0
- package/.merlin-core/schemas/plan-schema.json +20 -0
- package/.merlin-core/schemas/process-schema.json +82 -0
- package/.merlin-core/schemas/reminder-schema.json +20 -0
- package/.merlin-core/schemas/skill-eval-schema.json +92 -0
- package/.merlin-core/schemas/skill-schema.json +77 -0
- package/.merlin-core/schemas/workflow-schema.json +38 -0
- package/.merlin-core/skills/README.md +16 -0
- package/.merlin-core/skills/domain/azure-cloud/SKILL.md +211 -0
- package/.merlin-core/skills/domain/azure-cloud/references/appinsights-instrumentation.md +63 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-compliance.md +99 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-cost-optimization.md +419 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-deploy.md +82 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-diagnostics.md +130 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-prepare.md +134 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-quotas.md +290 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-rbac.md +11 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-resource-lookup.md +97 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-resource-visualizer.md +178 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-storage.md +91 -0
- package/.merlin-core/skills/domain/azure-cloud/references/azure-validate.md +58 -0
- package/.merlin-core/skills/domain/azure-cloud/references/entra-app-registration.md +192 -0
- package/.merlin-core/skills/domain/browser-automation/SKILL.md +311 -0
- package/.merlin-core/skills/domain/browser-automation/references/agent-browser-skill.md +632 -0
- package/.merlin-core/skills/domain/browser-automation/references/authentication.md +308 -0
- package/.merlin-core/skills/domain/browser-automation/references/commands.md +266 -0
- package/.merlin-core/skills/domain/browser-automation/references/profiling.md +120 -0
- package/.merlin-core/skills/domain/browser-automation/references/proxy-support.md +194 -0
- package/.merlin-core/skills/domain/browser-automation/references/session-management.md +194 -0
- package/.merlin-core/skills/domain/browser-automation/references/snapshot-refs.md +196 -0
- package/.merlin-core/skills/domain/browser-automation/references/video-recording.md +173 -0
- package/.merlin-core/skills/domain/browser-automation/templates/authenticated-session.sh +105 -0
- package/.merlin-core/skills/domain/browser-automation/templates/capture-workflow.sh +69 -0
- package/.merlin-core/skills/domain/browser-automation/templates/form-automation.sh +62 -0
- package/.merlin-core/skills/domain/digital-marketing/SKILL.md +292 -0
- package/.merlin-core/skills/domain/digital-marketing/references/content-strategy.md +320 -0
- package/.merlin-core/skills/domain/digital-marketing/references/copy-formats.md +298 -0
- package/.merlin-core/skills/domain/digital-marketing/references/copy-methodology.md +180 -0
- package/.merlin-core/skills/domain/digital-marketing/references/email-sequences.md +135 -0
- package/.merlin-core/skills/domain/digital-marketing/references/launch-strategy.md +213 -0
- package/.merlin-core/skills/domain/digital-marketing/references/pricing-strategy.md +160 -0
- package/.merlin-core/skills/domain/digital-marketing/references/programmatic-seo.md +237 -0
- package/.merlin-core/skills/domain/digital-marketing/references/revops-lifecycle.md +170 -0
- package/.merlin-core/skills/domain/digital-marketing/references/revops-operations.md +167 -0
- package/.merlin-core/skills/domain/digital-marketing/references/schema-markup.md +190 -0
- package/.merlin-core/skills/domain/digital-marketing/references/strategy-frameworks.md +324 -0
- package/.merlin-core/skills/domain/digital-marketing/references/traffic-management.md +350 -0
- package/.merlin-core/skills/domain/expo-native-ui/SKILL.md +348 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/animations.md +220 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/api-routes.md +361 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/cicd-workflows.md +84 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/controls.md +266 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/data-fetching.md +553 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/deployment-stores.md +1353 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/deployment.md +183 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/dev-client.md +166 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/dom-components.md +410 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/form-sheet.md +253 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/gradients.md +117 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/icons.md +218 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/media.md +245 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/platform-native.md +75 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/route-structure.md +229 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/search.md +249 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/storage.md +121 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/tabs.md +433 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/tailwind-native.md +473 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/toolbar-and-headers.md +284 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/upgrading-guides.md +674 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/upgrading.md +127 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/visual-effects.md +199 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/webgpu-three.md +605 -0
- package/.merlin-core/skills/domain/expo-native-ui/references/zoom-transitions.md +161 -0
- package/.merlin-core/skills/domain/marketing-ops/SKILL.md +117 -0
- package/.merlin-core/skills/domain/marketing-ops/references/_index.md +78 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative/references/generative-tools.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative/references/platform-specs.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative.md +251 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/ad-copy-templates.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/audience-targeting.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/conversion-tracking.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/platform-setup-checklists.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads.md +322 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/content-patterns.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/content-types.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/platform-ranking-factors.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo.md +388 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/apple-specs.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/benchmarks.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/google-play-specs.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/report-template.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/scoring-criteria.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso.md +316 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/co-marketing.md +305 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/community-marketing.md +169 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling/references/templates.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling/references/tool-reference.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling.md +442 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors/references/content-architecture.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors/references/templates.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors.md +281 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/content-strategy.md +16 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/directory-list.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/positioning-variations.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/submission-tracker-template.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions.md +396 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/free-tools/references/tool-types.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/free-tools.md +196 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/image/references/ai-image-prompting.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/image.md +352 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/launch.md +18 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets/references/benchmarks.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets/references/format-guide.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets.md +333 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/programmatic-seo.md +16 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/schema.md +16 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit/references/ai-writing-detection.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit/references/international-seo.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit.md +546 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/mermaid-templates.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/navigation-patterns.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/site-type-templates.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture.md +371 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/platform-limits.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/platforms.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/post-templates.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/reverse-engineering.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/short-form-video.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/social.md +431 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/video/references/ai-video-prompting.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/acquire/video.md +353 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing/references/sample-size-guide.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing/references/test-templates.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing.md +379 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/event-library.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/ga4-implementation.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/gtm-implementation.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics.md +323 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/copy-editing.md +18 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/copywriting.md +18 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/cro/references/experiments.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/cro/references/form.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/cro.md +211 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/emails.md +18 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/paywalls/references/experiments.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/paywalls.md +255 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/popups.md +518 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/pricing.md +18 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/deck-frameworks.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/demo-scripts.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/objection-library.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/one-pager-templates.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement.md +371 -0
- package/.merlin-core/skills/domain/marketing-ops/references/activate/signup.md +406 -0
- package/.merlin-core/skills/domain/marketing-ops/references/expand/co-marketing.md +18 -0
- package/.merlin-core/skills/domain/marketing-ops/references/expand/community-marketing.md +18 -0
- package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals/references/affiliate-programs.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals/references/program-examples.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals.md +278 -0
- package/.merlin-core/skills/domain/marketing-ops/references/foundation/customer-research/references/source-guides.md +425 -0
- package/.merlin-core/skills/domain/marketing-ops/references/foundation/customer-research.md +284 -0
- package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-ideas/references/ideas-by-category.md +216 -0
- package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-ideas.md +188 -0
- package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-psychology.md +532 -0
- package/.merlin-core/skills/domain/marketing-ops/references/foundation/product-marketing.md +276 -0
- package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention/references/cancel-flow-patterns.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention/references/dunning-playbook.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention.md +442 -0
- package/.merlin-core/skills/domain/marketing-ops/references/retain/onboarding/references/experiments.md +19 -0
- package/.merlin-core/skills/domain/marketing-ops/references/retain/onboarding.md +243 -0
- package/.merlin-core/skills/domain/marketing-ops/references/retain/revops-lifecycle.md +18 -0
- package/.merlin-core/skills/domain/marketing-ops/references/retain/revops-operations.md +18 -0
- package/.merlin-core/skills/domain/n8n-automation/SKILL.md +149 -0
- package/.merlin-core/skills/domain/n8n-automation/references/code-javascript.md +3744 -0
- package/.merlin-core/skills/domain/n8n-automation/references/code-python.md +3293 -0
- package/.merlin-core/skills/domain/n8n-automation/references/expression-syntax.md +1662 -0
- package/.merlin-core/skills/domain/n8n-automation/references/mcp-tools-expert.md +2111 -0
- package/.merlin-core/skills/domain/n8n-automation/references/node-configuration.md +2523 -0
- package/.merlin-core/skills/domain/n8n-automation/references/validation-expert.md +2491 -0
- package/.merlin-core/skills/domain/n8n-automation/references/workflow-patterns.md +4624 -0
- package/.merlin-core/skills/domain/ops-manual/SKILL.md +225 -0
- package/.merlin-core/skills/domain/ops-manual/references/elicitation-questions.md +141 -0
- package/.merlin-core/skills/domain/ops-manual/references/external-skills-registry.md +63 -0
- package/.merlin-core/skills/domain/ops-manual/references/operations-template.yaml +132 -0
- package/.merlin-core/skills/domain/remotion-best-practices/SKILL.md +99 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/3d.md +86 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/animations.md +27 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/assets.md +78 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/audio.md +172 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/calculate-metadata.md +131 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/can-decode.md +75 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/charts.md +68 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/compositions.md +154 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/display-captions.md +126 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/extract-frames.md +229 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/fonts.md +152 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/gifs.md +144 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/images.md +134 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/lottie.md +70 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/maps.md +414 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/measuring-text.md +143 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/parameters.md +109 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/sequencing.md +118 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/tailwind.md +11 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/text-animations.md +20 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/timing.md +179 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/transitions.md +137 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/trimming.md +51 -0
- package/.merlin-core/skills/domain/remotion-best-practices/rules/videos.md +171 -0
- package/.merlin-core/skills/domain/resend-email/SKILL.md +377 -0
- package/.merlin-core/skills/general/adversarial-review/SKILL.md +144 -0
- package/.merlin-core/skills/general/api-design/SKILL.md +513 -0
- package/.merlin-core/skills/general/apify-scrape/SKILL.md +137 -0
- package/.merlin-core/skills/general/apify-scrape/scripts/apify-scrape.sh +68 -0
- package/.merlin-core/skills/general/backup/SKILL.md +87 -0
- package/.merlin-core/skills/general/blkskrn/SKILL.md +392 -0
- package/.merlin-core/skills/general/blkskrn/references/animation-patterns.md +521 -0
- package/.merlin-core/skills/general/blkskrn/references/design-system.md +637 -0
- package/.merlin-core/skills/general/blkskrn/references/html-templates.md +440 -0
- package/.merlin-core/skills/general/blkskrn/references/presenter-template.md +45 -0
- package/.merlin-core/skills/general/blkskrn/references/slide-types.md +424 -0
- package/.merlin-core/skills/general/blkskrn/scripts/canvas-manager.js +502 -0
- package/.merlin-core/skills/general/blkskrn/scripts/presenter.js +90 -0
- package/.merlin-core/skills/general/blkskrn/templates/presenter.html +273 -0
- package/.merlin-core/skills/general/blkskrn/templates/slide-base.html +277 -0
- package/.merlin-core/skills/general/blkskrn/templates/viewer.html +165 -0
- package/.merlin-core/skills/general/browser-takeover/SKILL.md +53 -0
- package/.merlin-core/skills/general/claude-api/SKILL.md +90 -0
- package/.merlin-core/skills/general/code-javascript/SKILL.md +268 -0
- package/.merlin-core/skills/general/code-python/SKILL.md +424 -0
- package/.merlin-core/skills/general/code-style/SKILL.md +97 -0
- package/.merlin-core/skills/general/code-typescript/SKILL.md +361 -0
- package/.merlin-core/skills/general/cold-email/SKILL.md +164 -0
- package/.merlin-core/skills/general/cold-email/references/benchmarks.md +18 -0
- package/.merlin-core/skills/general/cold-email/references/follow-up-sequences.md +18 -0
- package/.merlin-core/skills/general/cold-email/references/frameworks.md +18 -0
- package/.merlin-core/skills/general/cold-email/references/personalization.md +18 -0
- package/.merlin-core/skills/general/cold-email/references/subject-lines.md +18 -0
- package/.merlin-core/skills/general/container-security/SKILL.md +462 -0
- package/.merlin-core/skills/general/context-management/SKILL.md +79 -0
- package/.merlin-core/skills/general/copy-editing/SKILL.md +501 -0
- package/.merlin-core/skills/general/copy-editing/references/checklist.md +18 -0
- package/.merlin-core/skills/general/copy-editing/references/content-refresh.md +18 -0
- package/.merlin-core/skills/general/copy-editing/references/plain-english-alternatives.md +18 -0
- package/.merlin-core/skills/general/copywriting/SKILL.md +294 -0
- package/.merlin-core/skills/general/copywriting/references/copy-frameworks.md +392 -0
- package/.merlin-core/skills/general/copywriting/references/natural-transitions.md +276 -0
- package/.merlin-core/skills/general/database/SKILL.md +561 -0
- package/.merlin-core/skills/general/database/references/postgres-concurrency.md +182 -0
- package/.merlin-core/skills/general/database/references/postgres-connections.md +97 -0
- package/.merlin-core/skills/general/database/references/postgres-data-patterns.md +159 -0
- package/.merlin-core/skills/general/database/references/postgres-monitoring.md +136 -0
- package/.merlin-core/skills/general/database/references/postgres-rls.md +140 -0
- package/.merlin-core/skills/general/database-provision/SKILL.md +56 -0
- package/.merlin-core/skills/general/deploy/SKILL.md +65 -0
- package/.merlin-core/skills/general/design-inspiration/SKILL.md +146 -0
- package/.merlin-core/skills/general/design-palette/SKILL.md +99 -0
- package/.merlin-core/skills/general/design-palette/references/full-palettes.md +144 -0
- package/.merlin-core/skills/general/design-system/SKILL.md +94 -0
- package/.merlin-core/skills/general/design-typography/SKILL.md +115 -0
- package/.merlin-core/skills/general/design-typography/references/full-pairings.md +144 -0
- package/.merlin-core/skills/general/design-ux-patterns/SKILL.md +155 -0
- package/.merlin-core/skills/general/design-ux-patterns/references/charts-data-guidelines.md +197 -0
- package/.merlin-core/skills/general/design-ux-patterns/references/landing-patterns.md +199 -0
- package/.merlin-core/skills/general/design-ux-patterns/references/professional-ui-checklist.md +56 -0
- package/.merlin-core/skills/general/design-ux-patterns/references/style-catalog.md +89 -0
- package/.merlin-core/skills/general/design-ux-patterns/references/ux-guidelines.md +837 -0
- package/.merlin-core/skills/general/discover-cloud/SKILL.md +108 -0
- package/.merlin-core/skills/general/doc-sync/SKILL.md +52 -0
- package/.merlin-core/skills/general/document-sharding/SKILL.md +53 -0
- package/.merlin-core/skills/general/docx/SKILL.md +418 -0
- package/.merlin-core/skills/general/docx/references/windows-setup.md +27 -0
- package/.merlin-core/skills/general/docx/scripts/__init__.py +1 -0
- package/.merlin-core/skills/general/docx/scripts/accept_changes.py +135 -0
- package/.merlin-core/skills/general/docx/scripts/comment.py +318 -0
- package/.merlin-core/skills/general/docx/scripts/office/__init__.py +0 -0
- package/.merlin-core/skills/general/docx/scripts/office/helpers/__init__.py +0 -0
- package/.merlin-core/skills/general/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/.merlin-core/skills/general/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.merlin-core/skills/general/docx/scripts/office/pack.py +159 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.merlin-core/skills/general/docx/scripts/office/soffice.py +183 -0
- package/.merlin-core/skills/general/docx/scripts/office/unpack.py +132 -0
- package/.merlin-core/skills/general/docx/scripts/office/validate.py +111 -0
- package/.merlin-core/skills/general/docx/scripts/office/validators/__init__.py +15 -0
- package/.merlin-core/skills/general/docx/scripts/office/validators/base.py +847 -0
- package/.merlin-core/skills/general/docx/scripts/office/validators/docx.py +446 -0
- package/.merlin-core/skills/general/docx/scripts/office/validators/pptx.py +275 -0
- package/.merlin-core/skills/general/docx/scripts/office/validators/redlining.py +247 -0
- package/.merlin-core/skills/general/docx/scripts/templates/comments.xml +3 -0
- package/.merlin-core/skills/general/docx/scripts/templates/commentsExtended.xml +3 -0
- package/.merlin-core/skills/general/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/.merlin-core/skills/general/docx/scripts/templates/commentsIds.xml +3 -0
- package/.merlin-core/skills/general/docx/scripts/templates/people.xml +3 -0
- package/.merlin-core/skills/general/elicitation/SKILL.md +188 -0
- package/.merlin-core/skills/general/engineering-audit/SKILL.md +122 -0
- package/.merlin-core/skills/general/find-and-edit/SKILL.md +102 -0
- package/.merlin-core/skills/general/first-party-docs/SKILL.md +51 -0
- package/.merlin-core/skills/general/frontend-design/SKILL.md +204 -0
- package/.merlin-core/skills/general/guardrails/SKILL.md +144 -0
- package/.merlin-core/skills/general/image-gen/SKILL.md +49 -0
- package/.merlin-core/skills/general/learning-capture/SKILL.md +192 -0
- package/.merlin-core/skills/general/lgpd-compliance-audit/SKILL.md +448 -0
- package/.merlin-core/skills/general/load-testing/SKILL.md +114 -0
- package/.merlin-core/skills/general/load-testing/docker/Dockerfile.dashboard +21 -0
- package/.merlin-core/skills/general/load-testing/docker/docker-compose.locust.yml +39 -0
- package/.merlin-core/skills/general/load-testing/requirements.txt +1 -0
- package/.merlin-core/skills/general/load-testing/scripts/compare_baseline.py +172 -0
- package/.merlin-core/skills/general/load-testing/scripts/run_local.py +245 -0
- package/.merlin-core/skills/general/load-testing/templates/load_shape_stepped.py +35 -0
- package/.merlin-core/skills/general/load-testing/templates/locustfile_dashboard.py +47 -0
- package/.merlin-core/skills/general/load-testing/templates/threshold_hook.py +36 -0
- package/.merlin-core/skills/general/mage-beauty/SKILL.md +89 -0
- package/.merlin-core/skills/general/mage-beauty/references/anti-patterns.md +148 -0
- package/.merlin-core/skills/general/mage-beauty/references/color-and-contrast.md +87 -0
- package/.merlin-core/skills/general/mage-beauty/references/interaction-design.md +99 -0
- package/.merlin-core/skills/general/mage-beauty/references/motion-design.md +90 -0
- package/.merlin-core/skills/general/mage-beauty/references/remotion-bridge.md +187 -0
- package/.merlin-core/skills/general/mage-beauty/references/responsive-and-multi-format.md +98 -0
- package/.merlin-core/skills/general/mage-beauty/references/spatial-design.md +88 -0
- package/.merlin-core/skills/general/mage-beauty/references/typography.md +60 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-adapt.md +102 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-animate.md +97 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-audit.md +99 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-bolder.md +94 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-cinematic.md +128 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-clarify.md +107 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-colorize.md +106 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-critique.md +88 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-delight.md +98 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-distill.md +97 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-harden.md +79 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-layout.md +104 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-onboard.md +98 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-optimize.md +124 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-overdrive.md +105 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-polish.md +91 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-quieter.md +95 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-rebrand.md +127 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-shape.md +160 -0
- package/.merlin-core/skills/general/mage-beauty/references/verb-typeset.md +109 -0
- package/.merlin-core/skills/general/mage-beauty/references/voice-and-microcopy.md +137 -0
- package/.merlin-core/skills/general/mcp-builder/SKILL.md +92 -0
- package/.merlin-core/skills/general/network-debug/SKILL.md +51 -0
- package/.merlin-core/skills/general/next-best-practices/SKILL.md +177 -0
- package/.merlin-core/skills/general/next-best-practices/references/async-patterns.md +87 -0
- package/.merlin-core/skills/general/next-best-practices/references/bundling.md +182 -0
- package/.merlin-core/skills/general/next-best-practices/references/data-patterns.md +306 -0
- package/.merlin-core/skills/general/next-best-practices/references/debug-tricks.md +125 -0
- package/.merlin-core/skills/general/next-best-practices/references/directives.md +74 -0
- package/.merlin-core/skills/general/next-best-practices/references/error-handling.md +232 -0
- package/.merlin-core/skills/general/next-best-practices/references/file-conventions.md +141 -0
- package/.merlin-core/skills/general/next-best-practices/references/font.md +257 -0
- package/.merlin-core/skills/general/next-best-practices/references/functions.md +108 -0
- package/.merlin-core/skills/general/next-best-practices/references/hydration-error.md +88 -0
- package/.merlin-core/skills/general/next-best-practices/references/image.md +179 -0
- package/.merlin-core/skills/general/next-best-practices/references/metadata.md +296 -0
- package/.merlin-core/skills/general/next-best-practices/references/parallel-routes.md +298 -0
- package/.merlin-core/skills/general/next-best-practices/references/route-handlers.md +146 -0
- package/.merlin-core/skills/general/next-best-practices/references/rsc-boundaries.md +164 -0
- package/.merlin-core/skills/general/next-best-practices/references/runtime-selection.md +40 -0
- package/.merlin-core/skills/general/next-best-practices/references/scripts.md +141 -0
- package/.merlin-core/skills/general/next-best-practices/references/self-hosting.md +384 -0
- package/.merlin-core/skills/general/next-best-practices/references/suspense-boundaries.md +67 -0
- package/.merlin-core/skills/general/next-steps/SKILL.md +43 -0
- package/.merlin-core/skills/general/party-mode/SKILL.md +57 -0
- package/.merlin-core/skills/general/pdf/SKILL.md +298 -0
- package/.merlin-core/skills/general/pdf/references/forms.md +312 -0
- package/.merlin-core/skills/general/pdf/references/reference.md +640 -0
- package/.merlin-core/skills/general/pdf/references/windows-setup.md +40 -0
- package/.merlin-core/skills/general/pdf/scripts/check_bounding_boxes.py +65 -0
- package/.merlin-core/skills/general/pdf/scripts/check_fillable_fields.py +11 -0
- package/.merlin-core/skills/general/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/.merlin-core/skills/general/pdf/scripts/create_validation_image.py +37 -0
- package/.merlin-core/skills/general/pdf/scripts/extract_form_field_info.py +122 -0
- package/.merlin-core/skills/general/pdf/scripts/extract_form_structure.py +115 -0
- package/.merlin-core/skills/general/pdf/scripts/fill_fillable_fields.py +98 -0
- package/.merlin-core/skills/general/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/.merlin-core/skills/general/pptx/SKILL.md +133 -0
- package/.merlin-core/skills/general/pptx/references/editing.md +213 -0
- package/.merlin-core/skills/general/pptx/references/pptxgenjs.md +581 -0
- package/.merlin-core/skills/general/pptx/references/windows-setup.md +27 -0
- package/.merlin-core/skills/general/pptx/scripts/__init__.py +0 -0
- package/.merlin-core/skills/general/pptx/scripts/add_slide.py +195 -0
- package/.merlin-core/skills/general/pptx/scripts/clean.py +286 -0
- package/.merlin-core/skills/general/pptx/scripts/thumbnail.py +289 -0
- package/.merlin-core/skills/general/property-testing/SKILL.md +214 -0
- package/.merlin-core/skills/general/purge-leaked-secret/SKILL.md +383 -0
- package/.merlin-core/skills/general/reflection/SKILL.md +100 -0
- package/.merlin-core/skills/general/secret-safe-commit/SKILL.md +246 -0
- package/.merlin-core/skills/general/secret-safe-commit/templates/.gitleaks.toml +91 -0
- package/.merlin-core/skills/general/secret-safe-commit/templates/.pre-commit-config.yaml +57 -0
- package/.merlin-core/skills/general/secret-safe-commit/templates/secret-scan.yml +48 -0
- package/.merlin-core/skills/general/semantic-search/SKILL.md +79 -0
- package/.merlin-core/skills/general/skill-creator/SKILL.md +342 -0
- package/.merlin-core/skills/general/skill-creator/agents/analyzer.md +283 -0
- package/.merlin-core/skills/general/skill-creator/agents/comparator.md +211 -0
- package/.merlin-core/skills/general/skill-creator/agents/grader.md +227 -0
- package/.merlin-core/skills/general/skill-creator/assets/eval_review.html +146 -0
- package/.merlin-core/skills/general/skill-creator/eval-viewer/generate_review.py +471 -0
- package/.merlin-core/skills/general/skill-creator/eval-viewer/viewer.html +1325 -0
- package/.merlin-core/skills/general/skill-creator/references/schemas.md +439 -0
- package/.merlin-core/skills/general/skill-creator/scripts/__init__.py +0 -0
- package/.merlin-core/skills/general/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/.merlin-core/skills/general/skill-creator/scripts/generate_report.py +326 -0
- package/.merlin-core/skills/general/skill-creator/scripts/improve_description.py +247 -0
- package/.merlin-core/skills/general/skill-creator/scripts/package_skill.py +136 -0
- package/.merlin-core/skills/general/skill-creator/scripts/quick_validate.py +103 -0
- package/.merlin-core/skills/general/skill-creator/scripts/run_eval.py +310 -0
- package/.merlin-core/skills/general/skill-creator/scripts/run_loop.py +328 -0
- package/.merlin-core/skills/general/skill-creator/scripts/utils.py +47 -0
- package/.merlin-core/skills/general/start-here/SKILL.md +63 -0
- package/.merlin-core/skills/general/start-here/recipes.json +758 -0
- package/.merlin-core/skills/general/start-here/recipes.schema.json +57 -0
- package/.merlin-core/skills/general/static-analysis/SKILL.md +151 -0
- package/.merlin-core/skills/general/tailwind-design-system/SKILL.md +201 -0
- package/.merlin-core/skills/general/tailwind-design-system/references/advanced-v4.md +152 -0
- package/.merlin-core/skills/general/tailwind-design-system/references/component-patterns.md +353 -0
- package/.merlin-core/skills/general/teach-method/SKILL.md +86 -0
- package/.merlin-core/skills/general/team-execution/SKILL.md +67 -0
- package/.merlin-core/skills/general/testing/SKILL.md +412 -0
- package/.merlin-core/skills/general/token-economy/SKILL.md +55 -0
- package/.merlin-core/skills/general/vps-security-hardening/SKILL.md +406 -0
- package/.merlin-core/skills/general/web-quality/SKILL.md +180 -0
- package/.merlin-core/skills/general/webapp-testing/SKILL.md +153 -0
- package/.merlin-core/skills/general/webapp-testing/scripts/screenshot_compare.py +72 -0
- package/.merlin-core/skills/general/webapp-testing/scripts/with_server.py +103 -0
- package/.merlin-core/skills/general/xlsx/SKILL.md +167 -0
- package/.merlin-core/skills/general/xlsx/references/nodejs-sheetjs-styled-reports.md +141 -0
- package/.merlin-core/skills/general/xlsx/references/windows-setup.md +17 -0
- package/.merlin-core/skills/general/xlsx/scripts/recalc.py +184 -0
- package/.merlin-core/skills/general/xlsx/scripts/styled-report.js +130 -0
- package/.merlin-core/skills/general/yolo-mode/SKILL.md +60 -0
- package/.merlin-core/skills/general/youtube-transcript/SKILL.md +177 -0
- package/.merlin-core/skills/general/youtube-transcript/scripts/fetch_transcript.py +188 -0
- package/.merlin-core/skills/general/youtube-transcript/scripts/gladia_transcribe.mjs +230 -0
- package/.merlin-core/tools/commands/activate.js +72 -0
- package/.merlin-core/tools/commands/archive-thoughts.js +181 -0
- package/.merlin-core/tools/commands/backup.js +156 -0
- package/.merlin-core/tools/commands/certify-process.js +196 -0
- package/.merlin-core/tools/commands/convert.js +87 -0
- package/.merlin-core/tools/commands/cron.js +147 -0
- package/.merlin-core/tools/commands/disable.js +73 -0
- package/.merlin-core/tools/commands/doc-sync.js +127 -0
- package/.merlin-core/tools/commands/eval-skill.js +193 -0
- package/.merlin-core/tools/commands/frontmatter.js +49 -0
- package/.merlin-core/tools/commands/heartbeat.js +43 -0
- package/.merlin-core/tools/commands/index-thoughts.js +35 -0
- package/.merlin-core/tools/commands/install-remote-approve.js +184 -0
- package/.merlin-core/tools/commands/install.js +81 -0
- package/.merlin-core/tools/commands/lib/__verify__/diff-reports.js +170 -0
- package/.merlin-core/tools/commands/lib/fs-safe.js +186 -0
- package/.merlin-core/tools/commands/lib/preflight.js +607 -0
- package/.merlin-core/tools/commands/lib/preserve.js +232 -0
- package/.merlin-core/tools/commands/lib/project-config.template.yaml +69 -0
- package/.merlin-core/tools/commands/lib/report.js +231 -0
- package/.merlin-core/tools/commands/lib/settings-merge.js +134 -0
- package/.merlin-core/tools/commands/license.js +52 -0
- package/.merlin-core/tools/commands/list.js +125 -0
- package/.merlin-core/tools/commands/migrate-alkimia.js +271 -0
- package/.merlin-core/tools/commands/modules.js +68 -0
- package/.merlin-core/tools/commands/provision.js +83 -0
- package/.merlin-core/tools/commands/prune-feedback.js +114 -0
- package/.merlin-core/tools/commands/run-process.js +28 -0
- package/.merlin-core/tools/commands/state.js +79 -0
- package/.merlin-core/tools/commands/sync-bridges.js +197 -0
- package/.merlin-core/tools/commands/upgrade.js +1135 -0
- package/.merlin-core/tools/commands/validate-recipes.js +218 -0
- package/.merlin-core/tools/commands/validate.js +159 -0
- package/.merlin-core/tools/commands/yolo.js +82 -0
- package/.merlin-core/tools/compose-rules.mjs +179 -0
- package/.merlin-core/tools/disable-module.mjs +150 -0
- package/.merlin-core/tools/lib/deployer.mjs +131 -0
- package/.merlin-core/tools/lib/modules-activation.mjs +225 -0
- package/.merlin-core/tools/merlin-tools.js +153 -0
- package/.merlin-core/tools/migrate-frontmatter-v3.js +192 -0
- package/.merlin-core/tools/modules-catalog.mjs +174 -0
- package/.merlin-core/tools/provision-module.mjs +191 -0
- package/.merlin-core/tools/verify-module.mjs +99 -0
- package/.merlin-core/tools/vps-security-audit.sh +234 -0
- package/INSTALL.md +312 -0
- package/LICENSE +118 -0
- package/PRIVACY-LICENSING.md +65 -0
- package/README.md +391 -0
- package/bin/README.md +15 -0
- package/bin/convert-to-merlin.sh +109 -0
- package/bin/fleet-patch-hooks.sh +144 -0
- package/bin/fleet-patch-v3-fixes.sh +127 -0
- package/bin/merlin-init.js +232 -0
- package/bin/merlin.js +321 -0
- package/package.json +127 -0
|
@@ -0,0 +1,2111 @@
|
|
|
1
|
+
<!-- Adapted from czlonkowski/n8n-skills (MIT). Source files: SKILL.md, SEARCH_GUIDE.md, VALIDATION_GUIDE.md, WORKFLOW_GUIDE.md -->
|
|
2
|
+
|
|
3
|
+
# n8n MCP Tools Expert
|
|
4
|
+
|
|
5
|
+
Master guide for using n8n-mcp MCP server tools to build workflows.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Tool Categories
|
|
10
|
+
|
|
11
|
+
n8n-mcp provides tools organized into categories:
|
|
12
|
+
|
|
13
|
+
1. **Node Discovery** -- [Search Guide](#node-discovery-tools-guide)
|
|
14
|
+
2. **Configuration Validation** -- [Validation Guide](#configuration-validation-tools-guide)
|
|
15
|
+
3. **Workflow Management** -- [Workflow Guide](#workflow-management-tools-guide)
|
|
16
|
+
4. **Template Library** - Search and deploy 2,700+ real workflows
|
|
17
|
+
5. **Documentation & Guides** - Tool docs, AI agent guide, Code node guides
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Quick Reference
|
|
22
|
+
|
|
23
|
+
### Most Used Tools (by success rate)
|
|
24
|
+
|
|
25
|
+
| Tool | Use When | Speed |
|
|
26
|
+
| ----------------------------- | ------------------------------------------------- | --------- |
|
|
27
|
+
| `search_nodes` | Finding nodes by keyword | <20ms |
|
|
28
|
+
| `get_node` | Understanding node operations (detail="standard") | <10ms |
|
|
29
|
+
| `validate_node` | Checking configurations (mode="full") | <100ms |
|
|
30
|
+
| `n8n_create_workflow` | Creating workflows | 100-500ms |
|
|
31
|
+
| `n8n_update_partial_workflow` | Editing workflows (MOST USED!) | 50-200ms |
|
|
32
|
+
| `validate_workflow` | Checking complete workflow | 100-500ms |
|
|
33
|
+
| `n8n_deploy_template` | Deploy template to n8n instance | 200-500ms |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Tool Selection Guide
|
|
38
|
+
|
|
39
|
+
### Finding the Right Node
|
|
40
|
+
|
|
41
|
+
**Workflow**:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
1. search_nodes({query: "keyword"})
|
|
45
|
+
2. get_node({nodeType: "nodes-base.name"})
|
|
46
|
+
3. [Optional] get_node({nodeType: "nodes-base.name", mode: "docs"})
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Example**:
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
// Step 1: Search
|
|
53
|
+
search_nodes({ query: "slack" });
|
|
54
|
+
// Returns: nodes-base.slack
|
|
55
|
+
|
|
56
|
+
// Step 2: Get details
|
|
57
|
+
get_node({ nodeType: "nodes-base.slack" });
|
|
58
|
+
// Returns: operations, properties, examples (standard detail)
|
|
59
|
+
|
|
60
|
+
// Step 3: Get readable documentation
|
|
61
|
+
get_node({ nodeType: "nodes-base.slack", mode: "docs" });
|
|
62
|
+
// Returns: markdown documentation
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Common pattern**: search -> get_node (18s average)
|
|
66
|
+
|
|
67
|
+
### Validating Configuration
|
|
68
|
+
|
|
69
|
+
> See also: [validation-expert.md](validation-expert.md) for detailed error handling patterns.
|
|
70
|
+
|
|
71
|
+
**Workflow**:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
1. validate_node({nodeType, config: {}, mode: "minimal"}) - Check required fields
|
|
75
|
+
2. validate_node({nodeType, config, profile: "runtime"}) - Full validation
|
|
76
|
+
3. [Repeat] Fix errors, validate again
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Common pattern**: validate -> fix -> validate (23s thinking, 58s fixing per cycle)
|
|
80
|
+
|
|
81
|
+
### Managing Workflows
|
|
82
|
+
|
|
83
|
+
> See also: [workflow-patterns.md](workflow-patterns.md) for architectural pattern selection.
|
|
84
|
+
|
|
85
|
+
**Workflow**:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
1. n8n_create_workflow({name, nodes, connections})
|
|
89
|
+
2. n8n_validate_workflow({id})
|
|
90
|
+
3. n8n_update_partial_workflow({id, operations: [...]})
|
|
91
|
+
4. n8n_validate_workflow({id}) again
|
|
92
|
+
5. n8n_update_partial_workflow({id, operations: [{type: "activateWorkflow"}]})
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Common pattern**: iterative updates (56s average between edits)
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Critical: nodeType Formats
|
|
100
|
+
|
|
101
|
+
**Two different formats** for different tools!
|
|
102
|
+
|
|
103
|
+
### Format 1: Search/Validate Tools
|
|
104
|
+
|
|
105
|
+
```javascript
|
|
106
|
+
// Use SHORT prefix
|
|
107
|
+
"nodes-base.slack";
|
|
108
|
+
"nodes-base.httpRequest";
|
|
109
|
+
"nodes-base.webhook";
|
|
110
|
+
"nodes-langchain.agent";
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Tools that use this**:
|
|
114
|
+
|
|
115
|
+
- search_nodes (returns this format)
|
|
116
|
+
- get_node
|
|
117
|
+
- validate_node
|
|
118
|
+
- validate_workflow
|
|
119
|
+
|
|
120
|
+
### Format 2: Workflow Tools
|
|
121
|
+
|
|
122
|
+
```javascript
|
|
123
|
+
// Use FULL prefix
|
|
124
|
+
"n8n-nodes-base.slack";
|
|
125
|
+
"n8n-nodes-base.httpRequest";
|
|
126
|
+
"n8n-nodes-base.webhook";
|
|
127
|
+
"@n8n/n8n-nodes-langchain.agent";
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Tools that use this**:
|
|
131
|
+
|
|
132
|
+
- n8n_create_workflow
|
|
133
|
+
- n8n_update_partial_workflow
|
|
134
|
+
|
|
135
|
+
### Conversion
|
|
136
|
+
|
|
137
|
+
```javascript
|
|
138
|
+
// search_nodes returns BOTH formats
|
|
139
|
+
{
|
|
140
|
+
"nodeType": "nodes-base.slack", // For search/validate tools
|
|
141
|
+
"workflowNodeType": "n8n-nodes-base.slack" // For workflow tools
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Common Mistakes
|
|
148
|
+
|
|
149
|
+
### Mistake 1: Wrong nodeType Format
|
|
150
|
+
|
|
151
|
+
**Problem**: "Node not found" error
|
|
152
|
+
|
|
153
|
+
```javascript
|
|
154
|
+
// WRONG
|
|
155
|
+
get_node({ nodeType: "slack" }); // Missing prefix
|
|
156
|
+
get_node({ nodeType: "n8n-nodes-base.slack" }); // Wrong prefix
|
|
157
|
+
|
|
158
|
+
// CORRECT
|
|
159
|
+
get_node({ nodeType: "nodes-base.slack" });
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Mistake 2: Using detail="full" by Default
|
|
163
|
+
|
|
164
|
+
**Problem**: Huge payload, slower response, token waste
|
|
165
|
+
|
|
166
|
+
```javascript
|
|
167
|
+
// WRONG - Returns 3-8K tokens, use sparingly
|
|
168
|
+
get_node({ nodeType: "nodes-base.slack", detail: "full" });
|
|
169
|
+
|
|
170
|
+
// CORRECT - Returns 1-2K tokens, covers 95% of use cases
|
|
171
|
+
get_node({ nodeType: "nodes-base.slack" }); // detail="standard" is default
|
|
172
|
+
get_node({ nodeType: "nodes-base.slack", detail: "standard" });
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**When to use detail="full"**:
|
|
176
|
+
|
|
177
|
+
- Debugging complex configuration issues
|
|
178
|
+
- Need complete property schema with all nested options
|
|
179
|
+
- Exploring advanced features
|
|
180
|
+
|
|
181
|
+
**Better alternatives**:
|
|
182
|
+
|
|
183
|
+
1. `get_node({detail: "standard"})` - for operations list (default)
|
|
184
|
+
2. `get_node({mode: "docs"})` - for readable documentation
|
|
185
|
+
3. `get_node({mode: "search_properties", propertyQuery: "auth"})` - for specific property
|
|
186
|
+
|
|
187
|
+
### Mistake 3: Not Using Validation Profiles
|
|
188
|
+
|
|
189
|
+
> See also: [validation-expert.md](validation-expert.md) for profile selection guidance.
|
|
190
|
+
|
|
191
|
+
**Problem**: Too many false positives OR missing real errors
|
|
192
|
+
|
|
193
|
+
**Profiles**:
|
|
194
|
+
|
|
195
|
+
- `minimal` - Only required fields (fast, permissive)
|
|
196
|
+
- `runtime` - Values + types (recommended for pre-deployment)
|
|
197
|
+
- `ai-friendly` - Reduce false positives (for AI configuration)
|
|
198
|
+
- `strict` - Maximum validation (for production)
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
// WRONG - Uses default profile
|
|
202
|
+
validate_node({ nodeType, config });
|
|
203
|
+
|
|
204
|
+
// CORRECT - Explicit profile
|
|
205
|
+
validate_node({ nodeType, config, profile: "runtime" });
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Mistake 4: Ignoring Auto-Sanitization
|
|
209
|
+
|
|
210
|
+
**What happens**: ALL nodes sanitized on ANY workflow update
|
|
211
|
+
|
|
212
|
+
**Auto-fixes**:
|
|
213
|
+
|
|
214
|
+
- Binary operators (equals, contains) -> removes singleValue
|
|
215
|
+
- Unary operators (isEmpty, isNotEmpty) -> adds singleValue: true
|
|
216
|
+
- IF/Switch nodes -> adds missing metadata
|
|
217
|
+
|
|
218
|
+
**Cannot fix**:
|
|
219
|
+
|
|
220
|
+
- Broken connections
|
|
221
|
+
- Branch count mismatches
|
|
222
|
+
- Paradoxical corrupt states
|
|
223
|
+
|
|
224
|
+
```javascript
|
|
225
|
+
// After ANY update, auto-sanitization runs on ALL nodes
|
|
226
|
+
n8n_update_partial_workflow({id, operations: [...]})
|
|
227
|
+
// -> Automatically fixes operator structures
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Mistake 5: Not Using Smart Parameters
|
|
231
|
+
|
|
232
|
+
**Problem**: Complex sourceIndex calculations for multi-output nodes
|
|
233
|
+
|
|
234
|
+
**Old way** (manual):
|
|
235
|
+
|
|
236
|
+
```javascript
|
|
237
|
+
// IF node connection
|
|
238
|
+
{
|
|
239
|
+
type: "addConnection",
|
|
240
|
+
source: "IF",
|
|
241
|
+
target: "Handler",
|
|
242
|
+
sourceIndex: 0 // Which output? Hard to remember!
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**New way** (smart parameters):
|
|
247
|
+
|
|
248
|
+
```javascript
|
|
249
|
+
// IF node - semantic branch names
|
|
250
|
+
{
|
|
251
|
+
type: "addConnection",
|
|
252
|
+
source: "IF",
|
|
253
|
+
target: "True Handler",
|
|
254
|
+
branch: "true" // Clear and readable!
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
{
|
|
258
|
+
type: "addConnection",
|
|
259
|
+
source: "IF",
|
|
260
|
+
target: "False Handler",
|
|
261
|
+
branch: "false"
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Switch node - semantic case numbers
|
|
265
|
+
{
|
|
266
|
+
type: "addConnection",
|
|
267
|
+
source: "Switch",
|
|
268
|
+
target: "Handler A",
|
|
269
|
+
case: 0
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Mistake 6: Not Using intent Parameter
|
|
274
|
+
|
|
275
|
+
**Problem**: Less helpful tool responses
|
|
276
|
+
|
|
277
|
+
```javascript
|
|
278
|
+
// WRONG - No context for response
|
|
279
|
+
n8n_update_partial_workflow({
|
|
280
|
+
id: "abc",
|
|
281
|
+
operations: [{type: "addNode", node: {...}}]
|
|
282
|
+
})
|
|
283
|
+
|
|
284
|
+
// CORRECT - Better AI responses
|
|
285
|
+
n8n_update_partial_workflow({
|
|
286
|
+
id: "abc",
|
|
287
|
+
intent: "Add error handling for API failures",
|
|
288
|
+
operations: [{type: "addNode", node: {...}}]
|
|
289
|
+
})
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Tool Usage Patterns
|
|
295
|
+
|
|
296
|
+
### Pattern 1: Node Discovery (Most Common)
|
|
297
|
+
|
|
298
|
+
**Common workflow**: 18s average between steps
|
|
299
|
+
|
|
300
|
+
```javascript
|
|
301
|
+
// Step 1: Search (fast!)
|
|
302
|
+
const results = await search_nodes({
|
|
303
|
+
query: "slack",
|
|
304
|
+
mode: "OR", // Default: any word matches
|
|
305
|
+
limit: 20,
|
|
306
|
+
});
|
|
307
|
+
// -> Returns: nodes-base.slack, nodes-base.slackTrigger
|
|
308
|
+
|
|
309
|
+
// Step 2: Get details (~18s later, user reviewing results)
|
|
310
|
+
const details = await get_node({
|
|
311
|
+
nodeType: "nodes-base.slack",
|
|
312
|
+
includeExamples: true, // Get real template configs
|
|
313
|
+
});
|
|
314
|
+
// -> Returns: operations, properties, metadata
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Pattern 2: Validation Loop
|
|
318
|
+
|
|
319
|
+
**Typical cycle**: 23s thinking, 58s fixing
|
|
320
|
+
|
|
321
|
+
```javascript
|
|
322
|
+
// Step 1: Validate
|
|
323
|
+
const result = await validate_node({
|
|
324
|
+
nodeType: "nodes-base.slack",
|
|
325
|
+
config: {
|
|
326
|
+
resource: "channel",
|
|
327
|
+
operation: "create"
|
|
328
|
+
},
|
|
329
|
+
profile: "runtime"
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
// Step 2: Check errors (~23s thinking)
|
|
333
|
+
if (!result.valid) {
|
|
334
|
+
console.log(result.errors); // "Missing required field: name"
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Step 3: Fix config (~58s fixing)
|
|
338
|
+
config.name = "general";
|
|
339
|
+
|
|
340
|
+
// Step 4: Validate again
|
|
341
|
+
await validate_node({...}); // Repeat until clean
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Pattern 3: Workflow Editing
|
|
345
|
+
|
|
346
|
+
**Most used update tool**: 99.0% success rate, 56s average between edits
|
|
347
|
+
|
|
348
|
+
```javascript
|
|
349
|
+
// Iterative workflow building (NOT one-shot!)
|
|
350
|
+
// Edit 1
|
|
351
|
+
await n8n_update_partial_workflow({
|
|
352
|
+
id: "workflow-id",
|
|
353
|
+
intent: "Add webhook trigger",
|
|
354
|
+
operations: [{type: "addNode", node: {...}}]
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
// ~56s later...
|
|
358
|
+
|
|
359
|
+
// Edit 2
|
|
360
|
+
await n8n_update_partial_workflow({
|
|
361
|
+
id: "workflow-id",
|
|
362
|
+
intent: "Connect webhook to processor",
|
|
363
|
+
operations: [{type: "addConnection", source: "...", target: "..."}]
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
// ~56s later...
|
|
367
|
+
|
|
368
|
+
// Edit 3 (validation)
|
|
369
|
+
await n8n_validate_workflow({id: "workflow-id"});
|
|
370
|
+
|
|
371
|
+
// Ready? Activate!
|
|
372
|
+
await n8n_update_partial_workflow({
|
|
373
|
+
id: "workflow-id",
|
|
374
|
+
intent: "Activate workflow for production",
|
|
375
|
+
operations: [{type: "activateWorkflow"}]
|
|
376
|
+
});
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## Template Usage
|
|
382
|
+
|
|
383
|
+
### Search Templates
|
|
384
|
+
|
|
385
|
+
```javascript
|
|
386
|
+
// Search by keyword (default mode)
|
|
387
|
+
search_templates({
|
|
388
|
+
query: "webhook slack",
|
|
389
|
+
limit: 20,
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
// Search by node types
|
|
393
|
+
search_templates({
|
|
394
|
+
searchMode: "by_nodes",
|
|
395
|
+
nodeTypes: ["n8n-nodes-base.httpRequest", "n8n-nodes-base.slack"],
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
// Search by task type
|
|
399
|
+
search_templates({
|
|
400
|
+
searchMode: "by_task",
|
|
401
|
+
task: "webhook_processing",
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
// Search by metadata (complexity, setup time)
|
|
405
|
+
search_templates({
|
|
406
|
+
searchMode: "by_metadata",
|
|
407
|
+
complexity: "simple",
|
|
408
|
+
maxSetupMinutes: 15,
|
|
409
|
+
});
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
### Get Template Details
|
|
413
|
+
|
|
414
|
+
```javascript
|
|
415
|
+
get_template({
|
|
416
|
+
templateId: 2947,
|
|
417
|
+
mode: "structure", // nodes+connections only
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
get_template({
|
|
421
|
+
templateId: 2947,
|
|
422
|
+
mode: "full", // complete workflow JSON
|
|
423
|
+
});
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
### Deploy Template Directly
|
|
427
|
+
|
|
428
|
+
```javascript
|
|
429
|
+
// Deploy template to your n8n instance
|
|
430
|
+
n8n_deploy_template({
|
|
431
|
+
templateId: 2947,
|
|
432
|
+
name: "My Weather to Slack", // Custom name (optional)
|
|
433
|
+
autoFix: true, // Auto-fix common issues (default)
|
|
434
|
+
autoUpgradeVersions: true, // Upgrade node versions (default)
|
|
435
|
+
});
|
|
436
|
+
// Returns: workflow ID, required credentials, fixes applied
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## Self-Help Tools
|
|
442
|
+
|
|
443
|
+
### Get Tool Documentation
|
|
444
|
+
|
|
445
|
+
```javascript
|
|
446
|
+
// Overview of all tools
|
|
447
|
+
tools_documentation();
|
|
448
|
+
|
|
449
|
+
// Specific tool details
|
|
450
|
+
tools_documentation({
|
|
451
|
+
topic: "search_nodes",
|
|
452
|
+
depth: "full",
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
// Code node guides
|
|
456
|
+
tools_documentation({ topic: "javascript_code_node_guide", depth: "full" });
|
|
457
|
+
tools_documentation({ topic: "python_code_node_guide", depth: "full" });
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### AI Agent Guide
|
|
461
|
+
|
|
462
|
+
```javascript
|
|
463
|
+
// Comprehensive AI workflow guide
|
|
464
|
+
ai_agents_guide();
|
|
465
|
+
// Returns: Architecture, connections, tools, validation, best practices
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
### Health Check
|
|
469
|
+
|
|
470
|
+
```javascript
|
|
471
|
+
// Quick health check
|
|
472
|
+
n8n_health_check();
|
|
473
|
+
|
|
474
|
+
// Detailed diagnostics
|
|
475
|
+
n8n_health_check({ mode: "diagnostic" });
|
|
476
|
+
// -> Returns: status, env vars, tool status, API connectivity
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
---
|
|
480
|
+
|
|
481
|
+
## Tool Availability
|
|
482
|
+
|
|
483
|
+
**Always Available** (no n8n API needed):
|
|
484
|
+
|
|
485
|
+
- search_nodes, get_node
|
|
486
|
+
- validate_node, validate_workflow
|
|
487
|
+
- search_templates, get_template
|
|
488
|
+
- tools_documentation, ai_agents_guide
|
|
489
|
+
|
|
490
|
+
**Requires n8n API** (N8N_API_URL + N8N_API_KEY):
|
|
491
|
+
|
|
492
|
+
- n8n_create_workflow
|
|
493
|
+
- n8n_update_partial_workflow
|
|
494
|
+
- n8n_validate_workflow (by ID)
|
|
495
|
+
- n8n_list_workflows, n8n_get_workflow
|
|
496
|
+
- n8n_test_workflow
|
|
497
|
+
- n8n_executions
|
|
498
|
+
- n8n_deploy_template
|
|
499
|
+
- n8n_workflow_versions
|
|
500
|
+
- n8n_autofix_workflow
|
|
501
|
+
|
|
502
|
+
If API tools unavailable, use templates and validation-only workflows.
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## Unified Tool Reference
|
|
507
|
+
|
|
508
|
+
### get_node (Unified Node Information)
|
|
509
|
+
|
|
510
|
+
**Detail Levels** (mode="info", default):
|
|
511
|
+
|
|
512
|
+
- `minimal` (~200 tokens) - Basic metadata only
|
|
513
|
+
- `standard` (~1-2K tokens) - Essential properties + operations (RECOMMENDED)
|
|
514
|
+
- `full` (~3-8K tokens) - Complete schema (use sparingly)
|
|
515
|
+
|
|
516
|
+
**Operation Modes**:
|
|
517
|
+
|
|
518
|
+
- `info` (default) - Node schema with detail level
|
|
519
|
+
- `docs` - Readable markdown documentation
|
|
520
|
+
- `search_properties` - Find specific properties (use with propertyQuery)
|
|
521
|
+
- `versions` - List all versions with breaking changes
|
|
522
|
+
- `compare` - Compare two versions
|
|
523
|
+
- `breaking` - Show only breaking changes
|
|
524
|
+
- `migrations` - Show auto-migratable changes
|
|
525
|
+
|
|
526
|
+
```javascript
|
|
527
|
+
// Standard (recommended)
|
|
528
|
+
get_node({ nodeType: "nodes-base.httpRequest" });
|
|
529
|
+
|
|
530
|
+
// Get documentation
|
|
531
|
+
get_node({ nodeType: "nodes-base.webhook", mode: "docs" });
|
|
532
|
+
|
|
533
|
+
// Search for properties
|
|
534
|
+
get_node({
|
|
535
|
+
nodeType: "nodes-base.httpRequest",
|
|
536
|
+
mode: "search_properties",
|
|
537
|
+
propertyQuery: "auth",
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
// Check versions
|
|
541
|
+
get_node({ nodeType: "nodes-base.executeWorkflow", mode: "versions" });
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### validate_node (Unified Validation)
|
|
545
|
+
|
|
546
|
+
**Modes**:
|
|
547
|
+
|
|
548
|
+
- `full` (default) - Comprehensive validation with errors/warnings/suggestions
|
|
549
|
+
- `minimal` - Quick required fields check only
|
|
550
|
+
|
|
551
|
+
**Profiles** (for mode="full"):
|
|
552
|
+
|
|
553
|
+
- `minimal` - Very lenient
|
|
554
|
+
- `runtime` - Standard (default, recommended)
|
|
555
|
+
- `ai-friendly` - Balanced for AI workflows
|
|
556
|
+
- `strict` - Most thorough (production)
|
|
557
|
+
|
|
558
|
+
```javascript
|
|
559
|
+
// Full validation with runtime profile
|
|
560
|
+
validate_node({nodeType: "nodes-base.slack", config: {...}, profile: "runtime"})
|
|
561
|
+
|
|
562
|
+
// Quick required fields check
|
|
563
|
+
validate_node({nodeType: "nodes-base.webhook", config: {}, mode: "minimal"})
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
---
|
|
567
|
+
|
|
568
|
+
## Performance Characteristics
|
|
569
|
+
|
|
570
|
+
| Tool | Response Time | Payload Size |
|
|
571
|
+
| --------------------------- | ------------- | ------------ |
|
|
572
|
+
| search_nodes | <20ms | Small |
|
|
573
|
+
| get_node (standard) | <10ms | ~1-2KB |
|
|
574
|
+
| get_node (full) | <100ms | 3-8KB |
|
|
575
|
+
| validate_node (minimal) | <50ms | Small |
|
|
576
|
+
| validate_node (full) | <100ms | Medium |
|
|
577
|
+
| validate_workflow | 100-500ms | Medium |
|
|
578
|
+
| n8n_create_workflow | 100-500ms | Medium |
|
|
579
|
+
| n8n_update_partial_workflow | 50-200ms | Small |
|
|
580
|
+
| n8n_deploy_template | 200-500ms | Medium |
|
|
581
|
+
|
|
582
|
+
---
|
|
583
|
+
|
|
584
|
+
## Best Practices
|
|
585
|
+
|
|
586
|
+
### Do
|
|
587
|
+
|
|
588
|
+
- Use `get_node({detail: "standard"})` for most use cases
|
|
589
|
+
- Specify validation profile explicitly (`profile: "runtime"`)
|
|
590
|
+
- Use smart parameters (`branch`, `case`) for clarity
|
|
591
|
+
- Include `intent` parameter in workflow updates
|
|
592
|
+
- Follow search -> get_node -> validate workflow
|
|
593
|
+
- Iterate workflows (avg 56s between edits)
|
|
594
|
+
- Validate after every significant change
|
|
595
|
+
- Use `includeExamples: true` for real configs
|
|
596
|
+
- Use `n8n_deploy_template` for quick starts
|
|
597
|
+
|
|
598
|
+
### Don't
|
|
599
|
+
|
|
600
|
+
- Use `detail: "full"` unless necessary (wastes tokens)
|
|
601
|
+
- Forget nodeType prefix (`nodes-base.*`)
|
|
602
|
+
- Skip validation profiles
|
|
603
|
+
- Try to build workflows in one shot (iterate!)
|
|
604
|
+
- Ignore auto-sanitization behavior
|
|
605
|
+
- Use full prefix (`n8n-nodes-base.*`) with search/validate tools
|
|
606
|
+
- Forget to activate workflows after building
|
|
607
|
+
|
|
608
|
+
---
|
|
609
|
+
|
|
610
|
+
## Summary
|
|
611
|
+
|
|
612
|
+
**Most Important**:
|
|
613
|
+
|
|
614
|
+
1. Use **get_node** with `detail: "standard"` (default) - covers 95% of use cases
|
|
615
|
+
2. nodeType formats differ: `nodes-base.*` (search/validate) vs `n8n-nodes-base.*` (workflows)
|
|
616
|
+
3. Specify **validation profiles** (`runtime` recommended)
|
|
617
|
+
4. Use **smart parameters** (`branch="true"`, `case=0`)
|
|
618
|
+
5. Include **intent parameter** in workflow updates
|
|
619
|
+
6. **Auto-sanitization** runs on ALL nodes during updates
|
|
620
|
+
7. Workflows can be **activated via API** (`activateWorkflow` operation)
|
|
621
|
+
8. Workflows are built **iteratively** (56s avg between edits)
|
|
622
|
+
|
|
623
|
+
**Common Workflow**:
|
|
624
|
+
|
|
625
|
+
1. search_nodes -> find node
|
|
626
|
+
2. get_node -> understand config
|
|
627
|
+
3. validate_node -> check config
|
|
628
|
+
4. n8n_create_workflow -> build
|
|
629
|
+
5. n8n_validate_workflow -> verify
|
|
630
|
+
6. n8n_update_partial_workflow -> iterate
|
|
631
|
+
7. activateWorkflow -> go live!
|
|
632
|
+
|
|
633
|
+
**Related Skills**:
|
|
634
|
+
|
|
635
|
+
- [validation-expert.md](validation-expert.md) - Interpret validation errors
|
|
636
|
+
- [node-configuration.md](node-configuration.md) - Operation-specific node setup
|
|
637
|
+
- [workflow-patterns.md](workflow-patterns.md) - Architectural patterns from templates
|
|
638
|
+
- n8n Expression Syntax - Write expressions in workflow fields
|
|
639
|
+
- n8n Code JavaScript - Write JavaScript in Code nodes
|
|
640
|
+
- n8n Code Python - Write Python in Code nodes
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
# Node Discovery Tools Guide
|
|
645
|
+
|
|
646
|
+
Complete guide for finding and understanding n8n nodes.
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
650
|
+
## search_nodes (START HERE!)
|
|
651
|
+
|
|
652
|
+
**Speed**: <20ms
|
|
653
|
+
|
|
654
|
+
**Use when**: You know what you're looking for (keyword, service, use case)
|
|
655
|
+
|
|
656
|
+
**Syntax**:
|
|
657
|
+
|
|
658
|
+
```javascript
|
|
659
|
+
search_nodes({
|
|
660
|
+
query: "slack", // Required: search keywords
|
|
661
|
+
mode: "OR", // Optional: OR (default), AND, FUZZY
|
|
662
|
+
limit: 20, // Optional: max results (default 20)
|
|
663
|
+
source: "all", // Optional: all, core, community, verified
|
|
664
|
+
includeExamples: false, // Optional: include template configs
|
|
665
|
+
});
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
**Returns**:
|
|
669
|
+
|
|
670
|
+
```javascript
|
|
671
|
+
{
|
|
672
|
+
"query": "slack",
|
|
673
|
+
"results": [
|
|
674
|
+
{
|
|
675
|
+
"nodeType": "nodes-base.slack", // For search/validate tools
|
|
676
|
+
"workflowNodeType": "n8n-nodes-base.slack", // For workflow tools
|
|
677
|
+
"displayName": "Slack",
|
|
678
|
+
"description": "Consume Slack API",
|
|
679
|
+
"category": "output",
|
|
680
|
+
"relevance": "high"
|
|
681
|
+
}
|
|
682
|
+
]
|
|
683
|
+
}
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
**Tips**:
|
|
687
|
+
|
|
688
|
+
- Common searches: webhook, http, database, email, slack, google, ai
|
|
689
|
+
- `OR` mode (default): matches any word
|
|
690
|
+
- `AND` mode: requires all words
|
|
691
|
+
- `FUZZY` mode: typo-tolerant (finds "slak" -> Slack)
|
|
692
|
+
- Use `source: "core"` for only built-in nodes
|
|
693
|
+
- Use `includeExamples: true` for real-world configs
|
|
694
|
+
|
|
695
|
+
---
|
|
696
|
+
|
|
697
|
+
## get_node (UNIFIED NODE INFORMATION)
|
|
698
|
+
|
|
699
|
+
The `get_node` tool provides all node information with different detail levels and modes.
|
|
700
|
+
|
|
701
|
+
> See also: [node-configuration.md](node-configuration.md) for operation-specific configuration requirements.
|
|
702
|
+
|
|
703
|
+
### Detail Levels (mode="info")
|
|
704
|
+
|
|
705
|
+
| Detail | Tokens | Use When |
|
|
706
|
+
| ---------- | ------ | ---------------------------- |
|
|
707
|
+
| `minimal` | ~200 | Quick metadata check |
|
|
708
|
+
| `standard` | ~1-2K | **Most use cases (DEFAULT)** |
|
|
709
|
+
| `full` | ~3-8K | Complex debugging only |
|
|
710
|
+
|
|
711
|
+
### Standard Detail (RECOMMENDED)
|
|
712
|
+
|
|
713
|
+
**Speed**: <10ms | **Size**: ~1-2K tokens
|
|
714
|
+
|
|
715
|
+
**Use when**: You've found the node and need configuration details
|
|
716
|
+
|
|
717
|
+
```javascript
|
|
718
|
+
get_node({
|
|
719
|
+
nodeType: "nodes-base.slack", // Required: SHORT prefix format
|
|
720
|
+
includeExamples: true, // Optional: get real template configs
|
|
721
|
+
});
|
|
722
|
+
// detail="standard" is the default
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
**Returns**:
|
|
726
|
+
|
|
727
|
+
- Available operations and resources
|
|
728
|
+
- Essential properties (10-20 most common)
|
|
729
|
+
- Metadata (isAITool, isTrigger, hasCredentials)
|
|
730
|
+
- Real examples from templates (if includeExamples: true)
|
|
731
|
+
|
|
732
|
+
### Minimal Detail
|
|
733
|
+
|
|
734
|
+
**Speed**: <5ms | **Size**: ~200 tokens
|
|
735
|
+
|
|
736
|
+
**Use when**: Just need basic metadata
|
|
737
|
+
|
|
738
|
+
```javascript
|
|
739
|
+
get_node({
|
|
740
|
+
nodeType: "nodes-base.slack",
|
|
741
|
+
detail: "minimal",
|
|
742
|
+
});
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
**Returns**: nodeType, displayName, description, category
|
|
746
|
+
|
|
747
|
+
### Full Detail (USE SPARINGLY)
|
|
748
|
+
|
|
749
|
+
**Speed**: <100ms | **Size**: ~3-8K tokens
|
|
750
|
+
|
|
751
|
+
**Use when**: Debugging complex configuration, need complete schema
|
|
752
|
+
|
|
753
|
+
```javascript
|
|
754
|
+
get_node({
|
|
755
|
+
nodeType: "nodes-base.httpRequest",
|
|
756
|
+
detail: "full",
|
|
757
|
+
});
|
|
758
|
+
```
|
|
759
|
+
|
|
760
|
+
**Warning**: Large payload! Use `standard` for most cases.
|
|
761
|
+
|
|
762
|
+
---
|
|
763
|
+
|
|
764
|
+
## get_node Modes
|
|
765
|
+
|
|
766
|
+
### mode="docs" (READABLE DOCUMENTATION)
|
|
767
|
+
|
|
768
|
+
**Use when**: Need human-readable documentation with examples
|
|
769
|
+
|
|
770
|
+
```javascript
|
|
771
|
+
get_node({
|
|
772
|
+
nodeType: "nodes-base.slack",
|
|
773
|
+
mode: "docs",
|
|
774
|
+
});
|
|
775
|
+
```
|
|
776
|
+
|
|
777
|
+
**Returns**: Formatted markdown with:
|
|
778
|
+
|
|
779
|
+
- Usage examples
|
|
780
|
+
- Authentication guide
|
|
781
|
+
- Common patterns
|
|
782
|
+
- Best practices
|
|
783
|
+
|
|
784
|
+
**Better than raw schema for learning!**
|
|
785
|
+
|
|
786
|
+
### mode="search_properties" (FIND SPECIFIC FIELDS)
|
|
787
|
+
|
|
788
|
+
**Use when**: Looking for specific property in a node
|
|
789
|
+
|
|
790
|
+
```javascript
|
|
791
|
+
get_node({
|
|
792
|
+
nodeType: "nodes-base.httpRequest",
|
|
793
|
+
mode: "search_properties",
|
|
794
|
+
propertyQuery: "auth", // Required for this mode
|
|
795
|
+
maxPropertyResults: 20, // Optional: default 20
|
|
796
|
+
});
|
|
797
|
+
```
|
|
798
|
+
|
|
799
|
+
**Returns**: Property paths and descriptions matching query
|
|
800
|
+
|
|
801
|
+
**Common searches**: auth, header, body, json, url, method, credential
|
|
802
|
+
|
|
803
|
+
### mode="versions" (VERSION HISTORY)
|
|
804
|
+
|
|
805
|
+
**Use when**: Need to check node version history
|
|
806
|
+
|
|
807
|
+
```javascript
|
|
808
|
+
get_node({
|
|
809
|
+
nodeType: "nodes-base.executeWorkflow",
|
|
810
|
+
mode: "versions",
|
|
811
|
+
});
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
**Returns**: Version history with breaking changes flags
|
|
815
|
+
|
|
816
|
+
### mode="compare" (COMPARE VERSIONS)
|
|
817
|
+
|
|
818
|
+
**Use when**: Need to see differences between versions
|
|
819
|
+
|
|
820
|
+
```javascript
|
|
821
|
+
get_node({
|
|
822
|
+
nodeType: "nodes-base.httpRequest",
|
|
823
|
+
mode: "compare",
|
|
824
|
+
fromVersion: "3.0",
|
|
825
|
+
toVersion: "4.1", // Optional: defaults to latest
|
|
826
|
+
});
|
|
827
|
+
```
|
|
828
|
+
|
|
829
|
+
**Returns**: Property-level changes between versions
|
|
830
|
+
|
|
831
|
+
### mode="breaking" (BREAKING CHANGES ONLY)
|
|
832
|
+
|
|
833
|
+
**Use when**: Checking for breaking changes before upgrades
|
|
834
|
+
|
|
835
|
+
```javascript
|
|
836
|
+
get_node({
|
|
837
|
+
nodeType: "nodes-base.httpRequest",
|
|
838
|
+
mode: "breaking",
|
|
839
|
+
fromVersion: "3.0",
|
|
840
|
+
});
|
|
841
|
+
```
|
|
842
|
+
|
|
843
|
+
**Returns**: Only breaking changes (not all changes)
|
|
844
|
+
|
|
845
|
+
### mode="migrations" (AUTO-MIGRATABLE)
|
|
846
|
+
|
|
847
|
+
**Use when**: Checking what can be auto-migrated
|
|
848
|
+
|
|
849
|
+
```javascript
|
|
850
|
+
get_node({
|
|
851
|
+
nodeType: "nodes-base.httpRequest",
|
|
852
|
+
mode: "migrations",
|
|
853
|
+
fromVersion: "3.0",
|
|
854
|
+
});
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
**Returns**: Changes that can be automatically migrated
|
|
858
|
+
|
|
859
|
+
---
|
|
860
|
+
|
|
861
|
+
## Additional Parameters
|
|
862
|
+
|
|
863
|
+
### includeTypeInfo
|
|
864
|
+
|
|
865
|
+
Add type structure metadata (validation rules, JS types)
|
|
866
|
+
|
|
867
|
+
```javascript
|
|
868
|
+
get_node({
|
|
869
|
+
nodeType: "nodes-base.if",
|
|
870
|
+
includeTypeInfo: true, // Adds ~80-120 tokens per property
|
|
871
|
+
});
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
Use for complex nodes like filter, resourceMapper
|
|
875
|
+
|
|
876
|
+
### includeExamples
|
|
877
|
+
|
|
878
|
+
Include real-world configuration examples from templates
|
|
879
|
+
|
|
880
|
+
```javascript
|
|
881
|
+
get_node({
|
|
882
|
+
nodeType: "nodes-base.slack",
|
|
883
|
+
includeExamples: true, // Adds ~200-400 tokens per example
|
|
884
|
+
});
|
|
885
|
+
```
|
|
886
|
+
|
|
887
|
+
Only works with `mode: "info"` and `detail: "standard"`
|
|
888
|
+
|
|
889
|
+
---
|
|
890
|
+
|
|
891
|
+
## Common Workflow: Finding & Configuring
|
|
892
|
+
|
|
893
|
+
```
|
|
894
|
+
Step 1: Search
|
|
895
|
+
search_nodes({query: "slack"})
|
|
896
|
+
-> Returns: nodes-base.slack
|
|
897
|
+
|
|
898
|
+
Step 2: Get Operations (18s avg thinking time)
|
|
899
|
+
get_node({
|
|
900
|
+
nodeType: "nodes-base.slack",
|
|
901
|
+
includeExamples: true
|
|
902
|
+
})
|
|
903
|
+
-> Returns: operations list + example configs
|
|
904
|
+
|
|
905
|
+
Step 3: Validate Config
|
|
906
|
+
validate_node({
|
|
907
|
+
nodeType: "nodes-base.slack",
|
|
908
|
+
config: {resource: "channel", operation: "create"},
|
|
909
|
+
profile: "runtime"
|
|
910
|
+
})
|
|
911
|
+
-> Returns: validation result
|
|
912
|
+
|
|
913
|
+
Step 4: Use in Workflow
|
|
914
|
+
(Configuration ready!)
|
|
915
|
+
```
|
|
916
|
+
|
|
917
|
+
**Most common pattern**: search -> get_node (18s average)
|
|
918
|
+
|
|
919
|
+
---
|
|
920
|
+
|
|
921
|
+
## Quick Comparison
|
|
922
|
+
|
|
923
|
+
| Tool/Mode | When to Use | Speed | Size |
|
|
924
|
+
| ------------------------------ | ------------------------ | ------ | ------ |
|
|
925
|
+
| `search_nodes` | Find by keyword | <20ms | Small |
|
|
926
|
+
| `get_node (standard)` | **Get config (DEFAULT)** | <10ms | 1-2K |
|
|
927
|
+
| `get_node (minimal)` | Quick metadata | <5ms | 200 |
|
|
928
|
+
| `get_node (full)` | Complex debugging | <100ms | 3-8K |
|
|
929
|
+
| `get_node (docs)` | Learn usage | Fast | Medium |
|
|
930
|
+
| `get_node (search_properties)` | Find specific field | Fast | Small |
|
|
931
|
+
| `get_node (versions)` | Check versions | Fast | Small |
|
|
932
|
+
|
|
933
|
+
**Best Practice**: search -> get_node(standard) -> validate
|
|
934
|
+
|
|
935
|
+
---
|
|
936
|
+
|
|
937
|
+
## nodeType Format (CRITICAL!)
|
|
938
|
+
|
|
939
|
+
**Search/Validate Tools** (SHORT prefix):
|
|
940
|
+
|
|
941
|
+
```javascript
|
|
942
|
+
"nodes-base.slack";
|
|
943
|
+
"nodes-base.httpRequest";
|
|
944
|
+
"nodes-langchain.agent";
|
|
945
|
+
```
|
|
946
|
+
|
|
947
|
+
**Workflow Tools** (FULL prefix):
|
|
948
|
+
|
|
949
|
+
```javascript
|
|
950
|
+
"n8n-nodes-base.slack";
|
|
951
|
+
"n8n-nodes-base.httpRequest";
|
|
952
|
+
"@n8n/n8n-nodes-langchain.agent";
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
**Conversion**: search_nodes returns BOTH formats:
|
|
956
|
+
|
|
957
|
+
```javascript
|
|
958
|
+
{
|
|
959
|
+
"nodeType": "nodes-base.slack", // Use with get_node, validate_node
|
|
960
|
+
"workflowNodeType": "n8n-nodes-base.slack" // Use with n8n_create_workflow
|
|
961
|
+
}
|
|
962
|
+
```
|
|
963
|
+
|
|
964
|
+
---
|
|
965
|
+
|
|
966
|
+
## Examples
|
|
967
|
+
|
|
968
|
+
### Find and Configure HTTP Request
|
|
969
|
+
|
|
970
|
+
```javascript
|
|
971
|
+
// Step 1: Search
|
|
972
|
+
search_nodes({ query: "http request" });
|
|
973
|
+
|
|
974
|
+
// Step 2: Get standard info
|
|
975
|
+
get_node({ nodeType: "nodes-base.httpRequest" });
|
|
976
|
+
|
|
977
|
+
// Step 3: Find auth options
|
|
978
|
+
get_node({
|
|
979
|
+
nodeType: "nodes-base.httpRequest",
|
|
980
|
+
mode: "search_properties",
|
|
981
|
+
propertyQuery: "authentication",
|
|
982
|
+
});
|
|
983
|
+
|
|
984
|
+
// Step 4: Validate config
|
|
985
|
+
validate_node({
|
|
986
|
+
nodeType: "nodes-base.httpRequest",
|
|
987
|
+
config: { method: "POST", url: "https://api.example.com" },
|
|
988
|
+
profile: "runtime",
|
|
989
|
+
});
|
|
990
|
+
```
|
|
991
|
+
|
|
992
|
+
### Explore AI Nodes
|
|
993
|
+
|
|
994
|
+
```javascript
|
|
995
|
+
// Find all AI-related nodes
|
|
996
|
+
search_nodes({ query: "ai agent", source: "all" });
|
|
997
|
+
|
|
998
|
+
// Get AI Agent documentation
|
|
999
|
+
get_node({ nodeType: "nodes-langchain.agent", mode: "docs" });
|
|
1000
|
+
|
|
1001
|
+
// Get configuration details with examples
|
|
1002
|
+
get_node({
|
|
1003
|
+
nodeType: "nodes-langchain.agent",
|
|
1004
|
+
includeExamples: true,
|
|
1005
|
+
});
|
|
1006
|
+
```
|
|
1007
|
+
|
|
1008
|
+
### Check Version Compatibility
|
|
1009
|
+
|
|
1010
|
+
```javascript
|
|
1011
|
+
// See all versions
|
|
1012
|
+
get_node({ nodeType: "nodes-base.executeWorkflow", mode: "versions" });
|
|
1013
|
+
|
|
1014
|
+
// Check breaking changes from v1 to v2
|
|
1015
|
+
get_node({
|
|
1016
|
+
nodeType: "nodes-base.executeWorkflow",
|
|
1017
|
+
mode: "breaking",
|
|
1018
|
+
fromVersion: "1.0",
|
|
1019
|
+
});
|
|
1020
|
+
```
|
|
1021
|
+
|
|
1022
|
+
---
|
|
1023
|
+
|
|
1024
|
+
# Configuration Validation Tools Guide
|
|
1025
|
+
|
|
1026
|
+
Complete guide for validating node configurations and workflows.
|
|
1027
|
+
|
|
1028
|
+
> See also: [validation-expert.md](validation-expert.md) for interpreting validation errors and advanced error handling strategies.
|
|
1029
|
+
|
|
1030
|
+
---
|
|
1031
|
+
|
|
1032
|
+
## Validation Philosophy
|
|
1033
|
+
|
|
1034
|
+
**Validate early, validate often**
|
|
1035
|
+
|
|
1036
|
+
Validation is typically iterative with validate -> fix cycles
|
|
1037
|
+
|
|
1038
|
+
---
|
|
1039
|
+
|
|
1040
|
+
## validate_node (UNIFIED VALIDATION)
|
|
1041
|
+
|
|
1042
|
+
The `validate_node` tool provides all validation capabilities with different modes.
|
|
1043
|
+
|
|
1044
|
+
### Quick Check (mode="minimal")
|
|
1045
|
+
|
|
1046
|
+
**Speed**: <50ms
|
|
1047
|
+
|
|
1048
|
+
**Use when**: Checking what fields are required
|
|
1049
|
+
|
|
1050
|
+
```javascript
|
|
1051
|
+
validate_node({
|
|
1052
|
+
nodeType: "nodes-base.slack",
|
|
1053
|
+
config: {}, // Empty to see all required fields
|
|
1054
|
+
mode: "minimal",
|
|
1055
|
+
});
|
|
1056
|
+
```
|
|
1057
|
+
|
|
1058
|
+
**Returns**:
|
|
1059
|
+
|
|
1060
|
+
```javascript
|
|
1061
|
+
{
|
|
1062
|
+
"valid": true, // Usually true (most nodes have no strict requirements)
|
|
1063
|
+
"missingRequiredFields": []
|
|
1064
|
+
}
|
|
1065
|
+
```
|
|
1066
|
+
|
|
1067
|
+
**When to use**: Planning configuration, seeing basic requirements
|
|
1068
|
+
|
|
1069
|
+
### Full Validation (mode="full", DEFAULT)
|
|
1070
|
+
|
|
1071
|
+
**Speed**: <100ms
|
|
1072
|
+
|
|
1073
|
+
**Use when**: Validating actual configuration before deployment
|
|
1074
|
+
|
|
1075
|
+
```javascript
|
|
1076
|
+
validate_node({
|
|
1077
|
+
nodeType: "nodes-base.slack",
|
|
1078
|
+
config: {
|
|
1079
|
+
resource: "channel",
|
|
1080
|
+
operation: "create",
|
|
1081
|
+
channel: "general",
|
|
1082
|
+
},
|
|
1083
|
+
profile: "runtime", // Recommended!
|
|
1084
|
+
});
|
|
1085
|
+
// mode="full" is the default
|
|
1086
|
+
```
|
|
1087
|
+
|
|
1088
|
+
---
|
|
1089
|
+
|
|
1090
|
+
## Validation Profiles
|
|
1091
|
+
|
|
1092
|
+
Choose based on your stage:
|
|
1093
|
+
|
|
1094
|
+
**minimal** - Only required fields
|
|
1095
|
+
|
|
1096
|
+
- Fastest
|
|
1097
|
+
- Most permissive
|
|
1098
|
+
- Use: Quick checks during editing
|
|
1099
|
+
|
|
1100
|
+
**runtime** - Values + types (**RECOMMENDED**)
|
|
1101
|
+
|
|
1102
|
+
- Balanced validation
|
|
1103
|
+
- Catches real errors
|
|
1104
|
+
- Use: Pre-deployment validation
|
|
1105
|
+
|
|
1106
|
+
**ai-friendly** - Reduce false positives
|
|
1107
|
+
|
|
1108
|
+
- For AI-generated configs
|
|
1109
|
+
- Tolerates minor issues
|
|
1110
|
+
- Use: When AI configures nodes
|
|
1111
|
+
|
|
1112
|
+
**strict** - Maximum validation
|
|
1113
|
+
|
|
1114
|
+
- Strictest rules
|
|
1115
|
+
- May have false positives
|
|
1116
|
+
- Use: Production deployment
|
|
1117
|
+
|
|
1118
|
+
---
|
|
1119
|
+
|
|
1120
|
+
## Validation Response
|
|
1121
|
+
|
|
1122
|
+
```javascript
|
|
1123
|
+
{
|
|
1124
|
+
"nodeType": "nodes-base.slack",
|
|
1125
|
+
"workflowNodeType": "n8n-nodes-base.slack",
|
|
1126
|
+
"displayName": "Slack",
|
|
1127
|
+
"valid": false,
|
|
1128
|
+
"errors": [
|
|
1129
|
+
{
|
|
1130
|
+
"type": "missing_required",
|
|
1131
|
+
"property": "name",
|
|
1132
|
+
"message": "Channel name is required",
|
|
1133
|
+
"fix": "Provide a channel name (lowercase, no spaces, 1-80 characters)"
|
|
1134
|
+
}
|
|
1135
|
+
],
|
|
1136
|
+
"warnings": [
|
|
1137
|
+
{
|
|
1138
|
+
"type": "best_practice",
|
|
1139
|
+
"property": "errorHandling",
|
|
1140
|
+
"message": "Slack API can have rate limits",
|
|
1141
|
+
"suggestion": "Add onError: 'continueRegularOutput' with retryOnFail"
|
|
1142
|
+
}
|
|
1143
|
+
],
|
|
1144
|
+
"suggestions": [],
|
|
1145
|
+
"summary": {
|
|
1146
|
+
"hasErrors": true,
|
|
1147
|
+
"errorCount": 1,
|
|
1148
|
+
"warningCount": 1,
|
|
1149
|
+
"suggestionCount": 0
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
```
|
|
1153
|
+
|
|
1154
|
+
### Error Types
|
|
1155
|
+
|
|
1156
|
+
- `missing_required` - Must fix
|
|
1157
|
+
- `invalid_value` - Must fix
|
|
1158
|
+
- `type_mismatch` - Must fix
|
|
1159
|
+
- `best_practice` - Should fix (warning)
|
|
1160
|
+
- `suggestion` - Optional improvement
|
|
1161
|
+
|
|
1162
|
+
---
|
|
1163
|
+
|
|
1164
|
+
## validate_workflow (STRUCTURE VALIDATION)
|
|
1165
|
+
|
|
1166
|
+
**Speed**: 100-500ms
|
|
1167
|
+
|
|
1168
|
+
**Use when**: Checking complete workflow before execution
|
|
1169
|
+
|
|
1170
|
+
**Syntax**:
|
|
1171
|
+
|
|
1172
|
+
```javascript
|
|
1173
|
+
validate_workflow({
|
|
1174
|
+
workflow: {
|
|
1175
|
+
nodes: [...], // Array of nodes
|
|
1176
|
+
connections: {...} // Connections object
|
|
1177
|
+
},
|
|
1178
|
+
options: {
|
|
1179
|
+
validateNodes: true, // Default: true
|
|
1180
|
+
validateConnections: true, // Default: true
|
|
1181
|
+
validateExpressions: true, // Default: true
|
|
1182
|
+
profile: "runtime" // For node validation
|
|
1183
|
+
}
|
|
1184
|
+
})
|
|
1185
|
+
```
|
|
1186
|
+
|
|
1187
|
+
**Validates**:
|
|
1188
|
+
|
|
1189
|
+
- Node configurations
|
|
1190
|
+
- Connection validity (no broken references)
|
|
1191
|
+
- Expression syntax ({{ }} patterns)
|
|
1192
|
+
- Workflow structure (triggers, flow)
|
|
1193
|
+
- AI connections (8 types)
|
|
1194
|
+
|
|
1195
|
+
**Returns**: Comprehensive validation report with errors, warnings, suggestions
|
|
1196
|
+
|
|
1197
|
+
### Validate by Workflow ID
|
|
1198
|
+
|
|
1199
|
+
```javascript
|
|
1200
|
+
// Validate workflow already in n8n
|
|
1201
|
+
n8n_validate_workflow({
|
|
1202
|
+
id: "workflow-id",
|
|
1203
|
+
options: {
|
|
1204
|
+
validateNodes: true,
|
|
1205
|
+
validateConnections: true,
|
|
1206
|
+
validateExpressions: true,
|
|
1207
|
+
profile: "runtime",
|
|
1208
|
+
},
|
|
1209
|
+
});
|
|
1210
|
+
```
|
|
1211
|
+
|
|
1212
|
+
---
|
|
1213
|
+
|
|
1214
|
+
## Validation Loop Pattern
|
|
1215
|
+
|
|
1216
|
+
**Typical cycle**: 23s thinking, 58s fixing
|
|
1217
|
+
|
|
1218
|
+
```
|
|
1219
|
+
1. Configure node
|
|
1220
|
+
|
|
|
1221
|
+
2. validate_node (23s thinking about errors)
|
|
1222
|
+
|
|
|
1223
|
+
3. Fix errors
|
|
1224
|
+
|
|
|
1225
|
+
4. validate_node again (58s fixing)
|
|
1226
|
+
|
|
|
1227
|
+
5. Repeat until valid
|
|
1228
|
+
```
|
|
1229
|
+
|
|
1230
|
+
**Example**:
|
|
1231
|
+
|
|
1232
|
+
```javascript
|
|
1233
|
+
// Iteration 1
|
|
1234
|
+
let config = {
|
|
1235
|
+
resource: "channel",
|
|
1236
|
+
operation: "create",
|
|
1237
|
+
};
|
|
1238
|
+
|
|
1239
|
+
const result1 = validate_node({
|
|
1240
|
+
nodeType: "nodes-base.slack",
|
|
1241
|
+
config,
|
|
1242
|
+
profile: "runtime",
|
|
1243
|
+
});
|
|
1244
|
+
// -> Error: Missing "name"
|
|
1245
|
+
|
|
1246
|
+
// Iteration 2 (~58s later)
|
|
1247
|
+
config.name = "general";
|
|
1248
|
+
|
|
1249
|
+
const result2 = validate_node({
|
|
1250
|
+
nodeType: "nodes-base.slack",
|
|
1251
|
+
config,
|
|
1252
|
+
profile: "runtime",
|
|
1253
|
+
});
|
|
1254
|
+
// -> Valid!
|
|
1255
|
+
```
|
|
1256
|
+
|
|
1257
|
+
---
|
|
1258
|
+
|
|
1259
|
+
## Auto-Sanitization System
|
|
1260
|
+
|
|
1261
|
+
**When it runs**: On ANY workflow update (create or update_partial)
|
|
1262
|
+
|
|
1263
|
+
**What it fixes** (automatically on ALL nodes):
|
|
1264
|
+
|
|
1265
|
+
1. Binary operators (equals, contains, greaterThan) -> removes `singleValue`
|
|
1266
|
+
2. Unary operators (isEmpty, isNotEmpty, true, false) -> adds `singleValue: true`
|
|
1267
|
+
3. Invalid operator structures -> corrects to proper format
|
|
1268
|
+
4. IF v2.2+ nodes -> adds complete `conditions.options` metadata
|
|
1269
|
+
5. Switch v3.2+ nodes -> adds complete `conditions.options` for all rules
|
|
1270
|
+
|
|
1271
|
+
**What it CANNOT fix**:
|
|
1272
|
+
|
|
1273
|
+
- Broken connections (references to non-existent nodes)
|
|
1274
|
+
- Branch count mismatches (3 Switch rules but only 2 outputs)
|
|
1275
|
+
- Paradoxical corrupt states (API returns corrupt, rejects updates)
|
|
1276
|
+
|
|
1277
|
+
**Example**:
|
|
1278
|
+
|
|
1279
|
+
```javascript
|
|
1280
|
+
// Before auto-sanitization
|
|
1281
|
+
{
|
|
1282
|
+
"type": "boolean",
|
|
1283
|
+
"operation": "equals",
|
|
1284
|
+
"singleValue": true // Binary operators shouldn't have this
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
// After auto-sanitization (automatic!)
|
|
1288
|
+
{
|
|
1289
|
+
"type": "boolean",
|
|
1290
|
+
"operation": "equals"
|
|
1291
|
+
// singleValue removed automatically
|
|
1292
|
+
}
|
|
1293
|
+
```
|
|
1294
|
+
|
|
1295
|
+
**Recovery tools**:
|
|
1296
|
+
|
|
1297
|
+
- `cleanStaleConnections` operation - removes broken connections
|
|
1298
|
+
- `n8n_autofix_workflow({id})` - preview/apply fixes
|
|
1299
|
+
|
|
1300
|
+
---
|
|
1301
|
+
|
|
1302
|
+
## n8n_autofix_workflow (AUTO-FIX TOOL)
|
|
1303
|
+
|
|
1304
|
+
**Use when**: Validation errors need automatic fixes
|
|
1305
|
+
|
|
1306
|
+
```javascript
|
|
1307
|
+
// Preview fixes (default - doesn't apply)
|
|
1308
|
+
n8n_autofix_workflow({
|
|
1309
|
+
id: "workflow-id",
|
|
1310
|
+
applyFixes: false, // Preview mode
|
|
1311
|
+
confidenceThreshold: "medium", // high, medium, low
|
|
1312
|
+
});
|
|
1313
|
+
|
|
1314
|
+
// Apply fixes
|
|
1315
|
+
n8n_autofix_workflow({
|
|
1316
|
+
id: "workflow-id",
|
|
1317
|
+
applyFixes: true,
|
|
1318
|
+
});
|
|
1319
|
+
```
|
|
1320
|
+
|
|
1321
|
+
**Fix Types**:
|
|
1322
|
+
|
|
1323
|
+
- `expression-format` - Fix expression syntax
|
|
1324
|
+
- `typeversion-correction` - Correct typeVersion
|
|
1325
|
+
- `error-output-config` - Fix error output settings
|
|
1326
|
+
- `webhook-missing-path` - Add missing webhook paths
|
|
1327
|
+
- `typeversion-upgrade` - Upgrade to latest version
|
|
1328
|
+
- `version-migration` - Apply version migrations
|
|
1329
|
+
|
|
1330
|
+
---
|
|
1331
|
+
|
|
1332
|
+
## Binary vs Unary Operators
|
|
1333
|
+
|
|
1334
|
+
**Binary operators** (compare two values):
|
|
1335
|
+
|
|
1336
|
+
- equals, notEquals, contains, notContains
|
|
1337
|
+
- greaterThan, lessThan, startsWith, endsWith
|
|
1338
|
+
- **Must NOT have** `singleValue: true`
|
|
1339
|
+
|
|
1340
|
+
**Unary operators** (check single value):
|
|
1341
|
+
|
|
1342
|
+
- isEmpty, isNotEmpty, true, false
|
|
1343
|
+
- **Must have** `singleValue: true`
|
|
1344
|
+
|
|
1345
|
+
**Auto-sanitization fixes these automatically!**
|
|
1346
|
+
|
|
1347
|
+
---
|
|
1348
|
+
|
|
1349
|
+
## Handling Validation Errors
|
|
1350
|
+
|
|
1351
|
+
> See also: [validation-expert.md](validation-expert.md) for comprehensive error interpretation and resolution strategies.
|
|
1352
|
+
|
|
1353
|
+
### Process
|
|
1354
|
+
|
|
1355
|
+
```
|
|
1356
|
+
1. Read error message carefully
|
|
1357
|
+
2. Check if it's a known false positive
|
|
1358
|
+
3. Fix real errors
|
|
1359
|
+
4. Validate again
|
|
1360
|
+
5. Iterate until clean
|
|
1361
|
+
```
|
|
1362
|
+
|
|
1363
|
+
### Common Errors
|
|
1364
|
+
|
|
1365
|
+
**"Required field missing"**
|
|
1366
|
+
-> Add the field with appropriate value
|
|
1367
|
+
|
|
1368
|
+
**"Invalid value"**
|
|
1369
|
+
-> Check allowed values in get_node output
|
|
1370
|
+
|
|
1371
|
+
**"Type mismatch"**
|
|
1372
|
+
-> Convert to correct type (string/number/boolean)
|
|
1373
|
+
|
|
1374
|
+
**"Cannot have singleValue"**
|
|
1375
|
+
-> Auto-sanitization will fix on next update
|
|
1376
|
+
|
|
1377
|
+
**"Missing operator metadata"**
|
|
1378
|
+
-> Auto-sanitization will fix on next update
|
|
1379
|
+
|
|
1380
|
+
### False Positives
|
|
1381
|
+
|
|
1382
|
+
Some validation warnings may be acceptable:
|
|
1383
|
+
|
|
1384
|
+
- Optional best practices
|
|
1385
|
+
- Node-specific edge cases
|
|
1386
|
+
- Profile-dependent issues
|
|
1387
|
+
|
|
1388
|
+
Use **ai-friendly** profile to reduce false positives.
|
|
1389
|
+
|
|
1390
|
+
---
|
|
1391
|
+
|
|
1392
|
+
## Validation Best Practices
|
|
1393
|
+
|
|
1394
|
+
### Do
|
|
1395
|
+
|
|
1396
|
+
- Use **runtime** profile for pre-deployment
|
|
1397
|
+
- Validate after every configuration change
|
|
1398
|
+
- Fix errors immediately (avg 58s)
|
|
1399
|
+
- Iterate validation loop
|
|
1400
|
+
- Trust auto-sanitization for operator issues
|
|
1401
|
+
- Use `mode: "minimal"` for quick checks
|
|
1402
|
+
- Use `n8n_autofix_workflow` for bulk fixes
|
|
1403
|
+
- Activate workflows via API when ready (`activateWorkflow` operation)
|
|
1404
|
+
|
|
1405
|
+
### Don't
|
|
1406
|
+
|
|
1407
|
+
- Skip validation before deployment
|
|
1408
|
+
- Ignore error messages
|
|
1409
|
+
- Use strict profile during development (too many warnings)
|
|
1410
|
+
- Assume validation passed (check result)
|
|
1411
|
+
- Try to manually fix auto-sanitization issues
|
|
1412
|
+
|
|
1413
|
+
---
|
|
1414
|
+
|
|
1415
|
+
## Example: Complete Validation Workflow
|
|
1416
|
+
|
|
1417
|
+
```javascript
|
|
1418
|
+
// Step 1: Get node requirements (quick check)
|
|
1419
|
+
validate_node({
|
|
1420
|
+
nodeType: "nodes-base.slack",
|
|
1421
|
+
config: {},
|
|
1422
|
+
mode: "minimal"
|
|
1423
|
+
});
|
|
1424
|
+
// -> Know what's required
|
|
1425
|
+
|
|
1426
|
+
// Step 2: Configure node
|
|
1427
|
+
const config = {
|
|
1428
|
+
resource: "message",
|
|
1429
|
+
operation: "post",
|
|
1430
|
+
channel: "#general",
|
|
1431
|
+
text: "Hello!"
|
|
1432
|
+
};
|
|
1433
|
+
|
|
1434
|
+
// Step 3: Validate configuration (full validation)
|
|
1435
|
+
const result = validate_node({
|
|
1436
|
+
nodeType: "nodes-base.slack",
|
|
1437
|
+
config,
|
|
1438
|
+
profile: "runtime"
|
|
1439
|
+
});
|
|
1440
|
+
|
|
1441
|
+
// Step 4: Check result
|
|
1442
|
+
if (result.valid) {
|
|
1443
|
+
console.log("Configuration valid!");
|
|
1444
|
+
} else {
|
|
1445
|
+
console.log("Errors:", result.errors);
|
|
1446
|
+
// Fix and validate again
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1449
|
+
// Step 5: Validate in workflow context
|
|
1450
|
+
validate_workflow({
|
|
1451
|
+
workflow: {
|
|
1452
|
+
nodes: [{...config as node...}],
|
|
1453
|
+
connections: {...}
|
|
1454
|
+
}
|
|
1455
|
+
});
|
|
1456
|
+
|
|
1457
|
+
// Step 6: Apply auto-fixes if needed
|
|
1458
|
+
n8n_autofix_workflow({
|
|
1459
|
+
id: "workflow-id",
|
|
1460
|
+
applyFixes: true
|
|
1461
|
+
});
|
|
1462
|
+
```
|
|
1463
|
+
|
|
1464
|
+
---
|
|
1465
|
+
|
|
1466
|
+
## Validation Tool Selection
|
|
1467
|
+
|
|
1468
|
+
- **validate_node({mode: "minimal"})**: Quick required fields check
|
|
1469
|
+
- **validate_node({profile: "runtime"})**: Full config validation (**use this!**)
|
|
1470
|
+
- **validate_workflow**: Complete workflow check
|
|
1471
|
+
- **n8n_validate_workflow({id})**: Validate existing workflow
|
|
1472
|
+
- **n8n_autofix_workflow({id})**: Auto-fix common issues
|
|
1473
|
+
|
|
1474
|
+
---
|
|
1475
|
+
|
|
1476
|
+
# Workflow Management Tools Guide
|
|
1477
|
+
|
|
1478
|
+
Complete guide for creating, updating, and managing n8n workflows.
|
|
1479
|
+
|
|
1480
|
+
> See also: [workflow-patterns.md](workflow-patterns.md) for architectural patterns and when to use each.
|
|
1481
|
+
|
|
1482
|
+
---
|
|
1483
|
+
|
|
1484
|
+
## Tool Availability
|
|
1485
|
+
|
|
1486
|
+
**Requires n8n API**: All tools in this guide need `N8N_API_URL` and `N8N_API_KEY` configured.
|
|
1487
|
+
|
|
1488
|
+
If unavailable, use template examples and validation-only workflows.
|
|
1489
|
+
|
|
1490
|
+
---
|
|
1491
|
+
|
|
1492
|
+
## n8n_create_workflow
|
|
1493
|
+
|
|
1494
|
+
**Speed**: 100-500ms
|
|
1495
|
+
|
|
1496
|
+
**Use when**: Creating new workflows from scratch
|
|
1497
|
+
|
|
1498
|
+
**Syntax**:
|
|
1499
|
+
|
|
1500
|
+
```javascript
|
|
1501
|
+
n8n_create_workflow({
|
|
1502
|
+
name: "Webhook to Slack", // Required
|
|
1503
|
+
nodes: [...], // Required: array of nodes
|
|
1504
|
+
connections: {...}, // Required: connections object
|
|
1505
|
+
settings: {...} // Optional: workflow settings
|
|
1506
|
+
})
|
|
1507
|
+
```
|
|
1508
|
+
|
|
1509
|
+
**Returns**: Created workflow with ID
|
|
1510
|
+
|
|
1511
|
+
**Example**:
|
|
1512
|
+
|
|
1513
|
+
```javascript
|
|
1514
|
+
n8n_create_workflow({
|
|
1515
|
+
name: "Webhook to Slack",
|
|
1516
|
+
nodes: [
|
|
1517
|
+
{
|
|
1518
|
+
id: "webhook-1",
|
|
1519
|
+
name: "Webhook",
|
|
1520
|
+
type: "n8n-nodes-base.webhook", // Full prefix!
|
|
1521
|
+
typeVersion: 2,
|
|
1522
|
+
position: [250, 300],
|
|
1523
|
+
parameters: {
|
|
1524
|
+
path: "slack-notify",
|
|
1525
|
+
httpMethod: "POST",
|
|
1526
|
+
},
|
|
1527
|
+
},
|
|
1528
|
+
{
|
|
1529
|
+
id: "slack-1",
|
|
1530
|
+
name: "Slack",
|
|
1531
|
+
type: "n8n-nodes-base.slack",
|
|
1532
|
+
typeVersion: 2,
|
|
1533
|
+
position: [450, 300],
|
|
1534
|
+
parameters: {
|
|
1535
|
+
resource: "message",
|
|
1536
|
+
operation: "post",
|
|
1537
|
+
channel: "#general",
|
|
1538
|
+
text: "={{$json.body.message}}",
|
|
1539
|
+
},
|
|
1540
|
+
},
|
|
1541
|
+
],
|
|
1542
|
+
connections: {
|
|
1543
|
+
Webhook: {
|
|
1544
|
+
main: [[{ node: "Slack", type: "main", index: 0 }]],
|
|
1545
|
+
},
|
|
1546
|
+
},
|
|
1547
|
+
});
|
|
1548
|
+
```
|
|
1549
|
+
|
|
1550
|
+
**Notes**:
|
|
1551
|
+
|
|
1552
|
+
- Workflows created **inactive** (activate with `activateWorkflow` operation)
|
|
1553
|
+
- Auto-sanitization runs on creation
|
|
1554
|
+
- Validate before creating for best results
|
|
1555
|
+
|
|
1556
|
+
---
|
|
1557
|
+
|
|
1558
|
+
## n8n_update_partial_workflow (MOST USED!)
|
|
1559
|
+
|
|
1560
|
+
**Speed**: 50-200ms | **Uses**: 38,287 (most used tool!)
|
|
1561
|
+
|
|
1562
|
+
**Use when**: Making incremental changes to workflows
|
|
1563
|
+
|
|
1564
|
+
**Common pattern**: 56s average between edits (iterative building!)
|
|
1565
|
+
|
|
1566
|
+
### 17 Operation Types
|
|
1567
|
+
|
|
1568
|
+
**Node Operations** (6 types):
|
|
1569
|
+
|
|
1570
|
+
1. `addNode` - Add new node
|
|
1571
|
+
2. `removeNode` - Remove node by ID or name
|
|
1572
|
+
3. `updateNode` - Update node properties (use dot notation)
|
|
1573
|
+
4. `moveNode` - Change position
|
|
1574
|
+
5. `enableNode` - Enable disabled node
|
|
1575
|
+
6. `disableNode` - Disable active node
|
|
1576
|
+
|
|
1577
|
+
**Connection Operations** (5 types): 7. `addConnection` - Connect nodes (supports smart params) 8. `removeConnection` - Remove connection (supports ignoreErrors) 9. `rewireConnection` - Change connection target 10. `cleanStaleConnections` - Auto-remove broken connections 11. `replaceConnections` - Replace entire connections object
|
|
1578
|
+
|
|
1579
|
+
**Metadata Operations** (4 types): 12. `updateSettings` - Workflow settings 13. `updateName` - Rename workflow 14. `addTag` - Add tag 15. `removeTag` - Remove tag
|
|
1580
|
+
|
|
1581
|
+
**Activation Operations** (2 types): 16. `activateWorkflow` - Activate workflow for automatic execution 17. `deactivateWorkflow` - Deactivate workflow
|
|
1582
|
+
|
|
1583
|
+
### Intent Parameter (IMPORTANT!)
|
|
1584
|
+
|
|
1585
|
+
Always include `intent` for better responses:
|
|
1586
|
+
|
|
1587
|
+
```javascript
|
|
1588
|
+
n8n_update_partial_workflow({
|
|
1589
|
+
id: "workflow-id",
|
|
1590
|
+
intent: "Add error handling for API failures", // Describe what you're doing
|
|
1591
|
+
operations: [...]
|
|
1592
|
+
})
|
|
1593
|
+
```
|
|
1594
|
+
|
|
1595
|
+
### Smart Parameters
|
|
1596
|
+
|
|
1597
|
+
> See also: [node-configuration.md](node-configuration.md) for IF/Switch node setup details.
|
|
1598
|
+
|
|
1599
|
+
**IF nodes** - Use semantic branch names:
|
|
1600
|
+
|
|
1601
|
+
```javascript
|
|
1602
|
+
{
|
|
1603
|
+
type: "addConnection",
|
|
1604
|
+
source: "IF",
|
|
1605
|
+
target: "True Handler",
|
|
1606
|
+
branch: "true" // Instead of sourceIndex: 0
|
|
1607
|
+
}
|
|
1608
|
+
|
|
1609
|
+
{
|
|
1610
|
+
type: "addConnection",
|
|
1611
|
+
source: "IF",
|
|
1612
|
+
target: "False Handler",
|
|
1613
|
+
branch: "false" // Instead of sourceIndex: 1
|
|
1614
|
+
}
|
|
1615
|
+
```
|
|
1616
|
+
|
|
1617
|
+
**Switch nodes** - Use semantic case numbers:
|
|
1618
|
+
|
|
1619
|
+
```javascript
|
|
1620
|
+
{
|
|
1621
|
+
type: "addConnection",
|
|
1622
|
+
source: "Switch",
|
|
1623
|
+
target: "Handler A",
|
|
1624
|
+
case: 0
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1627
|
+
{
|
|
1628
|
+
type: "addConnection",
|
|
1629
|
+
source: "Switch",
|
|
1630
|
+
target: "Handler B",
|
|
1631
|
+
case: 1
|
|
1632
|
+
}
|
|
1633
|
+
```
|
|
1634
|
+
|
|
1635
|
+
### AI Connection Types (8 types)
|
|
1636
|
+
|
|
1637
|
+
**Full support** for AI workflows:
|
|
1638
|
+
|
|
1639
|
+
```javascript
|
|
1640
|
+
// Language Model
|
|
1641
|
+
{
|
|
1642
|
+
type: "addConnection",
|
|
1643
|
+
source: "OpenAI Chat Model",
|
|
1644
|
+
target: "AI Agent",
|
|
1645
|
+
sourceOutput: "ai_languageModel"
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1648
|
+
// Tool
|
|
1649
|
+
{
|
|
1650
|
+
type: "addConnection",
|
|
1651
|
+
source: "HTTP Request Tool",
|
|
1652
|
+
target: "AI Agent",
|
|
1653
|
+
sourceOutput: "ai_tool"
|
|
1654
|
+
}
|
|
1655
|
+
|
|
1656
|
+
// Memory
|
|
1657
|
+
{
|
|
1658
|
+
type: "addConnection",
|
|
1659
|
+
source: "Window Buffer Memory",
|
|
1660
|
+
target: "AI Agent",
|
|
1661
|
+
sourceOutput: "ai_memory"
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1664
|
+
// All 8 types:
|
|
1665
|
+
// - ai_languageModel
|
|
1666
|
+
// - ai_tool
|
|
1667
|
+
// - ai_memory
|
|
1668
|
+
// - ai_outputParser
|
|
1669
|
+
// - ai_embedding
|
|
1670
|
+
// - ai_vectorStore
|
|
1671
|
+
// - ai_document
|
|
1672
|
+
// - ai_textSplitter
|
|
1673
|
+
```
|
|
1674
|
+
|
|
1675
|
+
### Property Removal with undefined
|
|
1676
|
+
|
|
1677
|
+
Remove properties by setting them to `undefined`:
|
|
1678
|
+
|
|
1679
|
+
```javascript
|
|
1680
|
+
// Remove a property
|
|
1681
|
+
{
|
|
1682
|
+
type: "updateNode",
|
|
1683
|
+
nodeName: "HTTP Request",
|
|
1684
|
+
updates: { onError: undefined }
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1687
|
+
// Migrate from deprecated property
|
|
1688
|
+
{
|
|
1689
|
+
type: "updateNode",
|
|
1690
|
+
nodeName: "HTTP Request",
|
|
1691
|
+
updates: {
|
|
1692
|
+
continueOnFail: undefined, // Remove old
|
|
1693
|
+
onError: "continueErrorOutput" // Add new
|
|
1694
|
+
}
|
|
1695
|
+
}
|
|
1696
|
+
```
|
|
1697
|
+
|
|
1698
|
+
### Activation Operations
|
|
1699
|
+
|
|
1700
|
+
```javascript
|
|
1701
|
+
// Activate workflow
|
|
1702
|
+
n8n_update_partial_workflow({
|
|
1703
|
+
id: "workflow-id",
|
|
1704
|
+
intent: "Activate workflow for production",
|
|
1705
|
+
operations: [{ type: "activateWorkflow" }],
|
|
1706
|
+
});
|
|
1707
|
+
|
|
1708
|
+
// Deactivate workflow
|
|
1709
|
+
n8n_update_partial_workflow({
|
|
1710
|
+
id: "workflow-id",
|
|
1711
|
+
intent: "Deactivate workflow for maintenance",
|
|
1712
|
+
operations: [{ type: "deactivateWorkflow" }],
|
|
1713
|
+
});
|
|
1714
|
+
```
|
|
1715
|
+
|
|
1716
|
+
### Example Usage
|
|
1717
|
+
|
|
1718
|
+
```javascript
|
|
1719
|
+
n8n_update_partial_workflow({
|
|
1720
|
+
id: "workflow-id",
|
|
1721
|
+
intent: "Add transform node after IF condition",
|
|
1722
|
+
operations: [
|
|
1723
|
+
// Add node
|
|
1724
|
+
{
|
|
1725
|
+
type: "addNode",
|
|
1726
|
+
node: {
|
|
1727
|
+
name: "Transform",
|
|
1728
|
+
type: "n8n-nodes-base.set",
|
|
1729
|
+
position: [400, 300],
|
|
1730
|
+
parameters: {},
|
|
1731
|
+
},
|
|
1732
|
+
},
|
|
1733
|
+
// Connect it (smart parameter)
|
|
1734
|
+
{
|
|
1735
|
+
type: "addConnection",
|
|
1736
|
+
source: "IF",
|
|
1737
|
+
target: "Transform",
|
|
1738
|
+
branch: "true", // Clear and semantic!
|
|
1739
|
+
},
|
|
1740
|
+
],
|
|
1741
|
+
});
|
|
1742
|
+
```
|
|
1743
|
+
|
|
1744
|
+
### Cleanup & Recovery
|
|
1745
|
+
|
|
1746
|
+
**cleanStaleConnections** - Remove broken connections:
|
|
1747
|
+
|
|
1748
|
+
```javascript
|
|
1749
|
+
{
|
|
1750
|
+
type: "cleanStaleConnections";
|
|
1751
|
+
}
|
|
1752
|
+
```
|
|
1753
|
+
|
|
1754
|
+
**rewireConnection** - Change target atomically:
|
|
1755
|
+
|
|
1756
|
+
```javascript
|
|
1757
|
+
{
|
|
1758
|
+
type: "rewireConnection",
|
|
1759
|
+
source: "Webhook",
|
|
1760
|
+
from: "Old Handler",
|
|
1761
|
+
to: "New Handler"
|
|
1762
|
+
}
|
|
1763
|
+
```
|
|
1764
|
+
|
|
1765
|
+
**Best-effort mode** - Apply what works:
|
|
1766
|
+
|
|
1767
|
+
```javascript
|
|
1768
|
+
n8n_update_partial_workflow({
|
|
1769
|
+
id: "workflow-id",
|
|
1770
|
+
operations: [...],
|
|
1771
|
+
continueOnError: true // Don't fail if some operations fail
|
|
1772
|
+
})
|
|
1773
|
+
```
|
|
1774
|
+
|
|
1775
|
+
**Validate before applying**:
|
|
1776
|
+
|
|
1777
|
+
```javascript
|
|
1778
|
+
n8n_update_partial_workflow({
|
|
1779
|
+
id: "workflow-id",
|
|
1780
|
+
operations: [...],
|
|
1781
|
+
validateOnly: true // Preview without applying
|
|
1782
|
+
})
|
|
1783
|
+
```
|
|
1784
|
+
|
|
1785
|
+
---
|
|
1786
|
+
|
|
1787
|
+
## n8n_deploy_template (QUICK START!)
|
|
1788
|
+
|
|
1789
|
+
**Speed**: 200-500ms
|
|
1790
|
+
|
|
1791
|
+
**Use when**: Deploying a template directly to n8n instance
|
|
1792
|
+
|
|
1793
|
+
```javascript
|
|
1794
|
+
n8n_deploy_template({
|
|
1795
|
+
templateId: 2947, // Required: from n8n.io
|
|
1796
|
+
name: "My Weather to Slack", // Optional: custom name
|
|
1797
|
+
autoFix: true, // Default: auto-fix common issues
|
|
1798
|
+
autoUpgradeVersions: true, // Default: upgrade node versions
|
|
1799
|
+
stripCredentials: true, // Default: remove credential refs
|
|
1800
|
+
});
|
|
1801
|
+
```
|
|
1802
|
+
|
|
1803
|
+
**Returns**:
|
|
1804
|
+
|
|
1805
|
+
- Workflow ID
|
|
1806
|
+
- Required credentials
|
|
1807
|
+
- Fixes applied
|
|
1808
|
+
|
|
1809
|
+
**Example**:
|
|
1810
|
+
|
|
1811
|
+
```javascript
|
|
1812
|
+
// Deploy a webhook to Slack template
|
|
1813
|
+
const result = n8n_deploy_template({
|
|
1814
|
+
templateId: 2947,
|
|
1815
|
+
name: "Production Slack Notifier",
|
|
1816
|
+
});
|
|
1817
|
+
|
|
1818
|
+
// Result includes:
|
|
1819
|
+
// - id: "new-workflow-id"
|
|
1820
|
+
// - requiredCredentials: ["slack"]
|
|
1821
|
+
// - fixesApplied: ["typeVersion upgraded", "expression format fixed"]
|
|
1822
|
+
```
|
|
1823
|
+
|
|
1824
|
+
---
|
|
1825
|
+
|
|
1826
|
+
## n8n_workflow_versions (VERSION CONTROL)
|
|
1827
|
+
|
|
1828
|
+
**Use when**: Managing workflow history, rollback, cleanup
|
|
1829
|
+
|
|
1830
|
+
### List Versions
|
|
1831
|
+
|
|
1832
|
+
```javascript
|
|
1833
|
+
n8n_workflow_versions({
|
|
1834
|
+
mode: "list",
|
|
1835
|
+
workflowId: "workflow-id",
|
|
1836
|
+
limit: 10,
|
|
1837
|
+
});
|
|
1838
|
+
```
|
|
1839
|
+
|
|
1840
|
+
### Get Specific Version
|
|
1841
|
+
|
|
1842
|
+
```javascript
|
|
1843
|
+
n8n_workflow_versions({
|
|
1844
|
+
mode: "get",
|
|
1845
|
+
versionId: 123,
|
|
1846
|
+
});
|
|
1847
|
+
```
|
|
1848
|
+
|
|
1849
|
+
### Rollback to Previous Version
|
|
1850
|
+
|
|
1851
|
+
```javascript
|
|
1852
|
+
n8n_workflow_versions({
|
|
1853
|
+
mode: "rollback",
|
|
1854
|
+
workflowId: "workflow-id",
|
|
1855
|
+
versionId: 123, // Optional: specific version
|
|
1856
|
+
validateBefore: true, // Default: validate before rollback
|
|
1857
|
+
});
|
|
1858
|
+
```
|
|
1859
|
+
|
|
1860
|
+
### Delete Versions
|
|
1861
|
+
|
|
1862
|
+
```javascript
|
|
1863
|
+
// Delete specific version
|
|
1864
|
+
n8n_workflow_versions({
|
|
1865
|
+
mode: "delete",
|
|
1866
|
+
workflowId: "workflow-id",
|
|
1867
|
+
versionId: 123,
|
|
1868
|
+
});
|
|
1869
|
+
|
|
1870
|
+
// Delete all versions for workflow
|
|
1871
|
+
n8n_workflow_versions({
|
|
1872
|
+
mode: "delete",
|
|
1873
|
+
workflowId: "workflow-id",
|
|
1874
|
+
deleteAll: true,
|
|
1875
|
+
});
|
|
1876
|
+
```
|
|
1877
|
+
|
|
1878
|
+
### Prune Old Versions
|
|
1879
|
+
|
|
1880
|
+
```javascript
|
|
1881
|
+
n8n_workflow_versions({
|
|
1882
|
+
mode: "prune",
|
|
1883
|
+
workflowId: "workflow-id",
|
|
1884
|
+
maxVersions: 10, // Keep 10 most recent
|
|
1885
|
+
});
|
|
1886
|
+
```
|
|
1887
|
+
|
|
1888
|
+
---
|
|
1889
|
+
|
|
1890
|
+
## n8n_test_workflow (TRIGGER EXECUTION)
|
|
1891
|
+
|
|
1892
|
+
**Use when**: Testing workflow execution
|
|
1893
|
+
|
|
1894
|
+
**Auto-detects** trigger type (webhook, form, chat)
|
|
1895
|
+
|
|
1896
|
+
```javascript
|
|
1897
|
+
// Test webhook workflow
|
|
1898
|
+
n8n_test_workflow({
|
|
1899
|
+
workflowId: "workflow-id",
|
|
1900
|
+
triggerType: "webhook", // Optional: auto-detected
|
|
1901
|
+
httpMethod: "POST",
|
|
1902
|
+
data: { message: "Hello!" },
|
|
1903
|
+
waitForResponse: true,
|
|
1904
|
+
timeout: 120000,
|
|
1905
|
+
});
|
|
1906
|
+
|
|
1907
|
+
// Test chat workflow
|
|
1908
|
+
n8n_test_workflow({
|
|
1909
|
+
workflowId: "workflow-id",
|
|
1910
|
+
triggerType: "chat",
|
|
1911
|
+
message: "Hello, AI agent!",
|
|
1912
|
+
sessionId: "session-123", // For conversation continuity
|
|
1913
|
+
});
|
|
1914
|
+
```
|
|
1915
|
+
|
|
1916
|
+
---
|
|
1917
|
+
|
|
1918
|
+
## n8n_validate_workflow (by ID)
|
|
1919
|
+
|
|
1920
|
+
**Use when**: Validating workflow stored in n8n
|
|
1921
|
+
|
|
1922
|
+
```javascript
|
|
1923
|
+
n8n_validate_workflow({
|
|
1924
|
+
id: "workflow-id",
|
|
1925
|
+
options: {
|
|
1926
|
+
validateNodes: true,
|
|
1927
|
+
validateConnections: true,
|
|
1928
|
+
validateExpressions: true,
|
|
1929
|
+
profile: "runtime",
|
|
1930
|
+
},
|
|
1931
|
+
});
|
|
1932
|
+
```
|
|
1933
|
+
|
|
1934
|
+
---
|
|
1935
|
+
|
|
1936
|
+
## n8n_get_workflow
|
|
1937
|
+
|
|
1938
|
+
**Use when**: Retrieving workflow details
|
|
1939
|
+
|
|
1940
|
+
**Modes**:
|
|
1941
|
+
|
|
1942
|
+
- `full` (default) - Complete workflow JSON
|
|
1943
|
+
- `details` - Full + execution stats
|
|
1944
|
+
- `structure` - Nodes + connections only
|
|
1945
|
+
- `minimal` - ID, name, active, tags
|
|
1946
|
+
|
|
1947
|
+
```javascript
|
|
1948
|
+
// Full workflow
|
|
1949
|
+
n8n_get_workflow({ id: "workflow-id" });
|
|
1950
|
+
|
|
1951
|
+
// Just structure
|
|
1952
|
+
n8n_get_workflow({ id: "workflow-id", mode: "structure" });
|
|
1953
|
+
|
|
1954
|
+
// Minimal metadata
|
|
1955
|
+
n8n_get_workflow({ id: "workflow-id", mode: "minimal" });
|
|
1956
|
+
```
|
|
1957
|
+
|
|
1958
|
+
---
|
|
1959
|
+
|
|
1960
|
+
## n8n_executions (EXECUTION MANAGEMENT)
|
|
1961
|
+
|
|
1962
|
+
**Use when**: Managing workflow executions
|
|
1963
|
+
|
|
1964
|
+
### Get Execution Details
|
|
1965
|
+
|
|
1966
|
+
```javascript
|
|
1967
|
+
n8n_executions({
|
|
1968
|
+
action: "get",
|
|
1969
|
+
id: "execution-id",
|
|
1970
|
+
mode: "summary", // preview, summary, filtered, full, error
|
|
1971
|
+
});
|
|
1972
|
+
|
|
1973
|
+
// Error mode for debugging
|
|
1974
|
+
n8n_executions({
|
|
1975
|
+
action: "get",
|
|
1976
|
+
id: "execution-id",
|
|
1977
|
+
mode: "error",
|
|
1978
|
+
includeStackTrace: true,
|
|
1979
|
+
});
|
|
1980
|
+
```
|
|
1981
|
+
|
|
1982
|
+
### List Executions
|
|
1983
|
+
|
|
1984
|
+
```javascript
|
|
1985
|
+
n8n_executions({
|
|
1986
|
+
action: "list",
|
|
1987
|
+
workflowId: "workflow-id",
|
|
1988
|
+
status: "error", // success, error, waiting
|
|
1989
|
+
limit: 100,
|
|
1990
|
+
});
|
|
1991
|
+
```
|
|
1992
|
+
|
|
1993
|
+
### Delete Execution
|
|
1994
|
+
|
|
1995
|
+
```javascript
|
|
1996
|
+
n8n_executions({
|
|
1997
|
+
action: "delete",
|
|
1998
|
+
id: "execution-id",
|
|
1999
|
+
});
|
|
2000
|
+
```
|
|
2001
|
+
|
|
2002
|
+
---
|
|
2003
|
+
|
|
2004
|
+
## Workflow Lifecycle
|
|
2005
|
+
|
|
2006
|
+
**Standard pattern**:
|
|
2007
|
+
|
|
2008
|
+
```
|
|
2009
|
+
1. CREATE
|
|
2010
|
+
n8n_create_workflow({...})
|
|
2011
|
+
-> Returns workflow ID
|
|
2012
|
+
|
|
2013
|
+
2. VALIDATE
|
|
2014
|
+
n8n_validate_workflow({id})
|
|
2015
|
+
-> Check for errors
|
|
2016
|
+
|
|
2017
|
+
3. EDIT (iterative! 56s avg between edits)
|
|
2018
|
+
n8n_update_partial_workflow({id, intent: "...", operations: [...]})
|
|
2019
|
+
-> Make changes
|
|
2020
|
+
|
|
2021
|
+
4. VALIDATE AGAIN
|
|
2022
|
+
n8n_validate_workflow({id})
|
|
2023
|
+
-> Verify changes
|
|
2024
|
+
|
|
2025
|
+
5. ACTIVATE
|
|
2026
|
+
n8n_update_partial_workflow({
|
|
2027
|
+
id,
|
|
2028
|
+
intent: "Activate workflow",
|
|
2029
|
+
operations: [{type: "activateWorkflow"}]
|
|
2030
|
+
})
|
|
2031
|
+
-> Workflow now runs on triggers!
|
|
2032
|
+
|
|
2033
|
+
6. MONITOR
|
|
2034
|
+
n8n_executions({action: "list", workflowId: id})
|
|
2035
|
+
n8n_executions({action: "get", id: execution_id})
|
|
2036
|
+
```
|
|
2037
|
+
|
|
2038
|
+
---
|
|
2039
|
+
|
|
2040
|
+
## Common Patterns from Telemetry
|
|
2041
|
+
|
|
2042
|
+
### Pattern 1: Edit -> Validate (7,841 occurrences)
|
|
2043
|
+
|
|
2044
|
+
```javascript
|
|
2045
|
+
n8n_update_partial_workflow({...})
|
|
2046
|
+
// | 23s (thinking about what to validate)
|
|
2047
|
+
n8n_validate_workflow({id})
|
|
2048
|
+
```
|
|
2049
|
+
|
|
2050
|
+
### Pattern 2: Validate -> Fix (7,266 occurrences)
|
|
2051
|
+
|
|
2052
|
+
```javascript
|
|
2053
|
+
n8n_validate_workflow({id})
|
|
2054
|
+
// | 58s (fixing errors)
|
|
2055
|
+
n8n_update_partial_workflow({...})
|
|
2056
|
+
```
|
|
2057
|
+
|
|
2058
|
+
### Pattern 3: Iterative Building (31,464 occurrences)
|
|
2059
|
+
|
|
2060
|
+
```javascript
|
|
2061
|
+
update -> update -> update -> ... (56s avg between edits)
|
|
2062
|
+
```
|
|
2063
|
+
|
|
2064
|
+
**This shows**: Workflows are built **iteratively**, not in one shot!
|
|
2065
|
+
|
|
2066
|
+
---
|
|
2067
|
+
|
|
2068
|
+
## Workflow Management Best Practices
|
|
2069
|
+
|
|
2070
|
+
### Do
|
|
2071
|
+
|
|
2072
|
+
- Build workflows **iteratively** (avg 56s between edits)
|
|
2073
|
+
- Include **intent** parameter for better responses
|
|
2074
|
+
- Use **smart parameters** (branch, case) for clarity
|
|
2075
|
+
- Validate **after** significant changes
|
|
2076
|
+
- Use **atomic mode** (default) for critical updates
|
|
2077
|
+
- Specify **sourceOutput** for AI connections
|
|
2078
|
+
- Clean stale connections after node renames/deletions
|
|
2079
|
+
- Use `n8n_deploy_template` for quick starts
|
|
2080
|
+
- Activate workflows via API when ready
|
|
2081
|
+
|
|
2082
|
+
### Don't
|
|
2083
|
+
|
|
2084
|
+
- Try to build workflows in one shot
|
|
2085
|
+
- Skip the intent parameter
|
|
2086
|
+
- Use sourceIndex when branch/case available
|
|
2087
|
+
- Skip validation before activation
|
|
2088
|
+
- Forget to test workflows after creation
|
|
2089
|
+
- Ignore auto-sanitization behavior
|
|
2090
|
+
|
|
2091
|
+
---
|
|
2092
|
+
|
|
2093
|
+
## Workflow Management Summary
|
|
2094
|
+
|
|
2095
|
+
**Most Important**:
|
|
2096
|
+
|
|
2097
|
+
1. **n8n_update_partial_workflow** is most-used tool (38,287 uses)
|
|
2098
|
+
2. Include **intent** parameter for better responses
|
|
2099
|
+
3. Workflows built **iteratively** (56s avg between edits)
|
|
2100
|
+
4. Use **smart parameters** (branch="true", case=0) for clarity
|
|
2101
|
+
5. **AI connections** supported (8 types with sourceOutput)
|
|
2102
|
+
6. **Workflow activation** supported via API (`activateWorkflow` operation)
|
|
2103
|
+
7. **Auto-sanitization** runs on all operations
|
|
2104
|
+
8. Use **n8n_deploy_template** for quick starts
|
|
2105
|
+
|
|
2106
|
+
**Additional Tools**:
|
|
2107
|
+
|
|
2108
|
+
- `n8n_deploy_template` - Deploy templates directly
|
|
2109
|
+
- `n8n_workflow_versions` - Version control & rollback
|
|
2110
|
+
- `n8n_test_workflow` - Trigger execution
|
|
2111
|
+
- `n8n_executions` - Manage executions
|