A MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you
This report summarizes scanner evidence for czlonkowski/n8n-mcp, a TypeScript project with 23,176 GitHub stars. SynthScan examined 381,081 lines of code across 922 source files, recording 467 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 2.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 312 finding(s).
Are imports declared and package/API names verified? 86 finding(s).
Are wrappers, guards, and repeated structures necessary? 181 finding(s).
Which changes need focused human review? 467 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 467 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 69 | // ─── Workflow Structure Validation ───────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 452 | // ─── Node Validation ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 601 | // ─── Connection Validation ───────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 687 | // ─── Expression Validation ───────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 713 | // ─── Expression Format Detection ────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 782 | // ─── Error Handler Detection ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 883 | // ─── onError Property Validation ─────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 993 | // ─── Workflow Patterns ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1030 | // ─── Node Error Handling ─────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1067 | // ─── Trigger Reachability ────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1082 | // ─── Tool Variant Validation ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1151 | // ─── Conditional ai_tool Outputs (vector stores, #953/#955) ──────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1151 | // ─── Conditional ai_tool Outputs (vector stores, #953/#955) ──────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1285 | // ─── AI Sub-Node Main Connection Detection ───────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1325 | // ─── Suggestions ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1345 | // ─── Validation Options ──────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1440 | // ─── Integration Tests ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator.test.ts | 1462 | // ─── If/Switch conditions validation ────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 13 | // ─── Basic Validation ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 90 | // ─── Edge Cases and Additional Coverage ───────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 140 | // ─── ResourceLocator Validation ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 260 | // ─── _cnd Operators (from config-validator-cnd) ───────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 444 | // ─── Null/Undefined Handling (from edge-cases) ───────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 453 | // ─── Boundary Value Testing (from edge-cases) ───────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 470 | // ─── Invalid Data Type Handling (from edge-cases) ───────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 487 | // ─── Performance Boundaries (from edge-cases) ───────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 501 | // ─── Code syntax checks ─────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 551 | // ─── Special Characters (from edge-cases) ───────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 558 | // ─── Complex Validation Scenarios (from edge-cases) ─────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 574 | // ─── Error Recovery (from edge-cases) ───────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 591 | // ─── Batch Validation (from edge-cases) ─────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 601 | // ─── HTTP Request Node (from node-specific) ────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 623 | // ─── Code Node (from node-specific) ────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 684 | // ─── Python Code Node (from node-specific) ────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/config-validator.test.ts | 756 | // ─── Database Node (from node-specific, non-security) ──────────── | COMMENT |
| MEDIUM | tests/unit/services/enhanced-config-validator.test.ts | 1535 | // ─── Integration Tests (from enhanced-config-validator-integration) ───────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 66 | // ─── A2a: webhook responseNode does not require onError ──────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 100 | // ─── A2b + B1: node-type-aware error output configuration ────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 296 | // ─── A6: Merge input bounds ───────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 342 | // ─── A6: cycle detection ──────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 425 | // ─── A7: duplicate node IDs ───────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 473 | // ─── A7: typeVersion / unknown-node severity by package ──────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 551 | // ─── B2: AI sub-node trigger reachability ────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 607 | // ─── Native-first guidance: no nudge toward Code nodes ───────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 684 | // ─── B3: outdated typeVersion demoted to a gated suggestion ──────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 717 | // ─── RC-2 + B7: error-handling advisories ─────────────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 789 | // ─── RC-2 + B11: workflow-level error-handling advice ─────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 864 | // ─── B8 + info routing: AI advisory dedupe and severity ───────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 930 | // ─── B9: removed / demoted node-level advisories ──────────────────── | COMMENT |
| MEDIUM | tests/unit/services/workflow-validator-fp-audit.test.ts | 985 | // ─── B11: RECOVERY text references the current tool surface ───────── | COMMENT |
| MEDIUM⚡ | docs/local/integration-testing-plan.md | 401 | # ======================================== | COMMENT |
| MEDIUM⚡ | docs/local/integration-testing-plan.md | 403 | # ======================================== | COMMENT |
| MEDIUM | …kills/n8n-self-hosting/assets/docker-compose.queue.yml | 9 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …kills/n8n-self-hosting/assets/docker-compose.queue.yml | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/mcp/handlers-n8n-manager.ts | 4867 | // ── Manage Folders ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/mcp/handlers-n8n-manager.ts | 5075 | // ── Audit Instance ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/services/credential-scanner.ts | 169 | // ── AI / ML ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/services/credential-scanner.ts | 177 | // ── Cloud / DevOps ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/services/credential-scanner.ts | 188 | // ── GitHub ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/services/credential-scanner.ts | 194 | // ── Auth tokens ────────────────────────────────────────────────────────── | COMMENT |
| 9 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test-output.txt | 1581 | ✓ tests/unit/multi-tenant-integration.test.ts > Multi-Tenant Support Integration > InstanceContext Validation > API key | CODE |
| HIGH | tests/unit/flexible-instance-security.test.ts | 122 | 'YOUR_API_KEY', | CODE |
| HIGH | tests/unit/multi-tenant-integration.test.ts | 119 | 'YOUR_API_KEY', | CODE |
| HIGH⚡ | tests/unit/types/instance-context-mcp-token.test.ts | 17 | for (const bad of ['', 'a b', 'YOUR_TOKEN_HERE', 'placeholder', 123 as any]) { | CODE |
| HIGH⚡ | tests/unit/types/instance-context-mcp-token.test.ts | 21 | expect(result.errors?.join(' ')).not.toContain('YOUR_TOKEN_HERE'); | CODE |
| HIGH⚡ | tests/unit/types/instance-context-coverage.test.ts | 273 | 'YOUR_API_KEY', | CODE |
| HIGH⚡ | tests/unit/types/instance-context-coverage.test.ts | 274 | 'your_api_key', | CODE |
| HIGH | tests/unit/types/instance-context-coverage.test.ts | 302 | err.includes('your_api_key') | CODE |
| HIGH | tests/integration/ai-validation/README.md | 116 | N8N_API_KEY=your-api-key | CODE |
| HIGH | tests/integration/ai-validation/TEST_REPORT.md | 198 | export N8N_API_KEY=your-api-key | CODE |
| HIGH | docs/HTTP_DEPLOYMENT.md | 74 | # N8N_API_KEY=your-api-key-here | COMMENT |
| HIGH | docs/HTTP_DEPLOYMENT.md | 132 | "N8N_API_KEY": "your-api-key-here" | CODE |
| HIGH | docs/CURSOR_SETUP.md | 48 | "N8N_API_KEY": "your-api-key" | CODE |
| HIGH | docs/CURSOR_SETUP.md | 58 | 2. Replace `your-api-key` with your n8n API key | CODE |
| HIGH | docs/SELF_HOSTING.md | 51 | "N8N_API_KEY": "your-api-key" | CODE |
| HIGH | docs/SELF_HOSTING.md | 180 | "-e", "N8N_API_KEY=your-api-key", | CODE |
| HIGH | docs/SELF_HOSTING.md | 207 | "-e", "N8N_API_KEY=your-api-key", | CODE |
| HIGH | docs/SELF_HOSTING.md | 276 | "N8N_API_KEY": "your-api-key" | CODE |
| HIGH | docs/CODEX_SETUP.md | 22 | env = { "MCP_MODE" = "stdio", "LOG_LEVEL" = "error", "DISABLE_CONSOLE_OUTPUT" = "true", "N8N_API_URL" = "https://your-n8 | CODE |
| HIGH | docs/CODEX_SETUP.md | 25 | Make sure to replace `https://your-n8n-instance.com` with your actual n8n URL and `your-api-key` with your n8n API key. | CODE |
| HIGH | docs/CLAUDE_CODE_SETUP.md | 39 | -e N8N_API_KEY=your-api-key \ | CODE |
| HIGH | docs/CLAUDE_CODE_SETUP.md | 51 | '-e N8N_API_KEY=your-api-key' ` | CODE |
| HIGH | docs/CLAUDE_CODE_SETUP.md | 55 | Make sure to replace `https://your-n8n-instance.com` with your actual n8n URL and `your-api-key` with your n8n API key. | CODE |
| HIGH | docs/CLAUDE_CODE_SETUP.md | 80 | "N8N_API_KEY": "your-api-key" | CODE |
| HIGH | docs/WINDSURF_SETUP.md | 53 | "N8N_API_KEY": "your-api-key" | CODE |
| HIGH | docs/WINDSURF_SETUP.md | 63 | 2. Replace `your-api-key` with your n8n API key | CODE |
| HIGH | docs/DOCKER_TROUBLESHOOTING.md | 110 | "-e", "N8N_API_KEY=your-api-key", | CODE |
| HIGH | docs/N8N_DEPLOYMENT.md | 62 | export N8N_API_KEY=your-api-key-here # Your n8n API key | CODE |
| HIGH | docs/N8N_DEPLOYMENT.md | 549 | curl -H "X-N8N-API-KEY: your-api-key" \ | CODE |
| HIGH⚡ | docs/local/integration-testing-plan.md | 407 | N8N_API_KEY=your-api-key-here | CODE |
| HIGH | docs/local/integration-tests-phase1-summary.md | 222 | N8N_API_KEY=<your-api-key> | CODE |
| HIGH | data/skills/n8n-workflow-patterns/webhook_processing.md | 255 | {{$json.headers['x-api-key']}} equals "your-api-key" | CODE |
| HIGH⚡ | src/types/instance-context.ts | 161 | !key.toLowerCase().includes('your_api_key') && | CODE |
| HIGH⚡ | src/types/instance-context.ts | 252 | if (context.n8nApiKey.toLowerCase().includes('your_api_key')) { | CODE |
| HIGH⚡ | src/types/instance-context.ts | 253 | errors.push(`Invalid n8nApiKey: contains placeholder 'your_api_key' - Please provide actual API key`); | CODE |
| HIGH | src/utils/template-sanitizer.ts | 33 | ['Bearer ', 'Bearer YOUR_TOKEN_HERE'] | CODE |
| HIGH | src/utils/template-sanitizer.ts | 173 | return 'YOUR_TOKEN_HERE'; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | N8N_HTTP_STREAMABLE_SETUP.md | 21 | ### Step 1: Start Services | COMMENT |
| LOW | N8N_HTTP_STREAMABLE_SETUP.md | 35 | ### Step 2: Create MCP Credentials in n8n | COMMENT |
| LOW | N8N_HTTP_STREAMABLE_SETUP.md | 52 | ### Step 3: Configure MCP Client Node | COMMENT |
| LOW | N8N_HTTP_STREAMABLE_SETUP.md | 62 | ### Step 4: Test the Connection | COMMENT |
| LOW | tests/test-mcp-extraction.js | 76 | // Step 1: Initialize | COMMENT |
| LOW | tests/test-mcp-extraction.js | 110 | // Step 2: List tools | COMMENT |
| LOW | tests/test-mcp-extraction.js | 127 | // Step 3: Call the tool to get AI Agent code | COMMENT |
| LOW⚡ | tests/integration/ai-validation/e2e-validation.test.ts | 112 | // Step 1: Create workflow | COMMENT |
| LOW⚡ | tests/integration/ai-validation/e2e-validation.test.ts | 116 | // Step 2: Validate workflow | COMMENT |
| LOW | tests/integration/ai-validation/e2e-validation.test.ts | 135 | // Step 3: Since it's valid, it's already created and ready to use | COMMENT |
| LOW | docs/VS_CODE_PROJECT_SETUP.md | 184 | ## Step 6 - Try it! | COMMENT |
| LOW | data/skills/n8n-node-configuration/DEPENDENCIES.md | 467 | // Step 1: Parent | COMMENT |
| LOW | data/skills/n8n-node-configuration/DEPENDENCIES.md | 474 | // Step 2: Children (structure determined by parent) | COMMENT |
| LOW⚡ | data/skills/n8n-node-configuration/README.md | 181 | // Step 1: Get standard info | COMMENT |
| LOW⚡ | data/skills/n8n-node-configuration/README.md | 186 | // Step 2: Configure for operation | COMMENT |
| LOW⚡ | data/skills/n8n-node-configuration/README.md | 194 | // Step 3: Validate | COMMENT |
| LOW⚡ | data/skills/n8n-node-configuration/README.md | 202 | // Step 1: Configure HTTP POST | COMMENT |
| LOW⚡ | data/skills/n8n-node-configuration/README.md | 208 | // Step 2: Validate → Error: "sendBody required" | COMMENT |
| LOW⚡ | data/skills/n8n-node-configuration/README.md | 209 | // Step 3: Check dependencies | COMMENT |
| LOW⚡ | data/skills/n8n-node-configuration/README.md | 215 | // Step 4: Fix | COMMENT |
| LOW | data/skills/n8n-validation-expert/ERROR_CATALOG.md | 931 | // Step 1: Minimal valid config | COMMENT |
| LOW | data/skills/n8n-validation-expert/ERROR_CATALOG.md | 942 | // Step 2: Add features one by one | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/SKILL.md | 68 | // Step 1: Search | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/SKILL.md | 72 | // Step 2: Get details | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/SKILL.md | 76 | // Step 3: Get readable documentation | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/VALIDATION_GUIDE.md | 407 | // Step 1: Get node requirements (quick check) | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/VALIDATION_GUIDE.md | 415 | // Step 2: Configure node | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/VALIDATION_GUIDE.md | 423 | // Step 3: Validate configuration (full validation) | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/VALIDATION_GUIDE.md | 430 | // Step 4: Check result | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/VALIDATION_GUIDE.md | 438 | // Step 5: Validate in workflow context | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/VALIDATION_GUIDE.md | 446 | // Step 6: Apply auto-fixes if needed | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/SEARCH_GUIDE.md | 318 | // Step 1: Search | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/SEARCH_GUIDE.md | 321 | // Step 2: Get standard info | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/SEARCH_GUIDE.md | 324 | // Step 3: Find auth options | COMMENT |
| LOW⚡ | data/skills/n8n-mcp-tools-expert/SEARCH_GUIDE.md | 331 | // Step 4: Validate config | COMMENT |
| LOW⚡ | src/utils/ssrf-protection.ts | 360 | // Step 1: Must be HTTP/HTTPS (all modes) | COMMENT |
| LOW⚡ | src/utils/ssrf-protection.ts | 370 | // Step 2: ALWAYS block cloud metadata endpoints (all modes) | COMMENT |
| LOW⚡ | src/utils/ssrf-protection.ts | 376 | // Step 3: Resolve DNS to get every address this hostname answers with. | COMMENT |
| LOW | src/utils/ssrf-protection.ts | 443 | // Step 4: ALWAYS block cloud metadata IPs (all modes) | COMMENT |
| LOW | src/utils/ssrf-protection.ts | 468 | // Step 5: Mode-specific validation | COMMENT |
| LOW | src/utils/ssrf-protection.ts | 498 | // Step 6: Check private IPv4 ranges (strict & moderate modes) | COMMENT |
| LOW | src/utils/ssrf-protection.ts | 509 | // Step 7: IPv6 private address check (strict & moderate modes) | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 174 | #### Step 1: Create Chat Trigger | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 198 | #### Step 2: Add Language Model | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 220 | #### Step 3: Add AI Agent | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 242 | #### Step 4: Connect Components | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 265 | #### Step 5: Validate | COMMENT |
| LOW⚡ | src/mcp/tool-docs/guides/ai-agents-guide.ts | 349 | // Step 1: Create Vector Store with embeddings and documents | COMMENT |
| LOW⚡ | src/mcp/tool-docs/guides/ai-agents-guide.ts | 357 | // Step 2: Connect Vector Store to Vector Store Tool | COMMENT |
| LOW⚡ | src/mcp/tool-docs/guides/ai-agents-guide.ts | 364 | // Step 3: Connect tool to AI Agent | COMMENT |
| LOW | src/scripts/test-webhook-autofix.ts | 71 | // Step 1: Validate workflow to identify issues | COMMENT |
| LOW | src/scripts/test-webhook-autofix.ts | 87 | // Step 2: Generate fixes (preview mode) | COMMENT |
| LOW | src/scripts/test-webhook-autofix.ts | 128 | // Step 3: Verify UUID format | COMMENT |
| LOW | src/scripts/test-autofix-workflow.ts | 115 | // Step 1: Validate the workflow to identify issues | COMMENT |
| LOW | src/scripts/test-autofix-workflow.ts | 127 | // Step 2: Check for expression format issues | COMMENT |
| LOW | src/scripts/test-autofix-workflow.ts | 164 | // Step 3: Generate fixes in preview mode | COMMENT |
| LOW⚡ | src/scripts/test-autofix-workflow.ts | 193 | // Step 4: Display individual fixes | COMMENT |
| LOW⚡ | src/scripts/test-autofix-workflow.ts | 202 | // Step 5: Display generated operations | COMMENT |
| LOW⚡ | src/scripts/test-autofix-workflow.ts | 209 | // Step 6: Test with different confidence thresholds | COMMENT |
| LOW | src/scripts/test-autofix-workflow.ts | 225 | // Step 7: Test with specific fix types | COMMENT |
| 8 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test-enhanced-documentation.js | 7 | async function testEnhancedDocumentation() { | CODE |
| LOW | tests/demo-enhanced-documentation.js | 5 | async function demoEnhancedDocumentation() { | CODE |
| LOW | tests/unit/triggers/trigger-detector.test.ts | 9 | function createWorkflowWithTrigger(triggerType: string, params: Record<string, unknown> = {}): Workflow { | CODE |
| LOW | tests/unit/mcp/search-nodes-source-filter.test.ts | 218 | function enrichNodeWithCommunityMetadata(node: MockRow): any { | CODE |
| LOW | tests/unit/mcp/handlers-n8n-manager.test.ts | 2489 | function mockCurrentGroupedWorkflow(): void { | CODE |
| LOW | tests/unit/telemetry/telemetry-processing.test.ts | 276 | async function expectAllUnsentBatchesRetried( | CODE |
| LOW | …s/unit/community/documentation-batch-processor.test.ts | 47 | function createMockDocumentationSummary(nodeType: string) { | CODE |
| LOW | tests/unit/services/workflow-diff-node-rename.test.ts | 25 | function convertConnectionsToNameBased(workflow: Workflow): void { | CODE |
| LOW | tests/integration/database/test-utils.ts | 565 | export function createTestDatabaseAdapter(db: Database.Database): DatabaseAdapter { | CODE |
| LOW | tests/integration/n8n-api/utils/webhook-workflows.ts | 215 | export function generateWebhookWorkflowJson( | CODE |
| LOW | tests/integration/n8n-api/utils/webhook-workflows.ts | 240 | export function exportAllWebhookWorkflows(): Record<string, Partial<Workflow>> { | CODE |
| LOW | tests/integration/n8n-api/utils/cleanup-helpers.ts | 317 | export async function cleanupExecutionsByWorkflow( | CODE |
| LOW | tests/integration/n8n-api/utils/factories.ts | 266 | export function createErrorHandlingWorkflow( | CODE |
| LOW | tests/integration/ai-validation/helpers.ts | 128 | export function createHTTPRequestToolNode(options: { | CODE |
| LOW | tests/integration/ai-validation/helpers.ts | 176 | export function createVectorStoreToolNode(options: { | CODE |
| LOW | …ion/validation/real-world-structure-validation.test.ts | 66 | function extractNodesWithSpecialTypes(workflowJson: any) { | CODE |
| LOW | tests/utils/database-utils.ts | 480 | export function createMockDatabaseAdapter(): DatabaseAdapter { | CODE |
| LOW | tests/utils/assertions.ts | 14 | export function expectValidNodeDefinition(node: any) { | CODE |
| LOW | tests/utils/assertions.ts | 108 | export function expectValidPropertyDefinition(property: any) { | CODE |
| LOW | tests/utils/assertions.ts | 222 | export function expectRelevantSearchResults( | CODE |
| LOW | docs/local/Deep_dive_p1_p2.md | 56 | export async function handleBatchUpdateWorkflow( | CODE |
| LOW | docs/local/N8N_AI_WORKFLOW_BUILDER_ANALYSIS.md | 693 | function estimateTokenCountFromMessages(messages: BaseMessage[]): number { | CODE |
| LOW | docs/local/N8N_AI_WORKFLOW_BUILDER_ANALYSIS.md | 1206 | function extractConnectionTypesFromExpression(expression: string): string[] { | CODE |
| LOW | examples/enhanced-documentation-demo.js | 5 | async function demonstrateEnhancedDocumentation() { | CODE |
| LOW | scripts/test-typeversion-validation.ts | 150 | async function testTypeVersionValidation() { | CODE |
| LOW | scripts/generate-initial-release-notes.js | 10 | function generateInitialReleaseNotes(version) { | CODE |
| LOW | scripts/test-structure-validation.ts | 87 | function extractNodesWithSpecialTypes(workflowJson: any): Array<{ | CODE |
| LOW | scripts/check-settings-drift.ts | 164 | export function parseEntitySettingsProperties(dts: string): Set<string> { | CODE |
| LOW | scripts/check-settings-drift.ts | 298 | function installedNodesBaseVersion(): string | null { | CODE |
| LOW | scripts/check-settings-drift.ts | 306 | function installedEntityPackageVersion(): string | null { | CODE |
| LOW | src/http-server-single-session.ts | 117 | function extractMultiTenantHeaders(req: express.Request): MultiTenantHeaders { | CODE |
| LOW | src/database/database-adapter.ts | 105 | async function createBetterSQLiteAdapter(dbPath: string): Promise<DatabaseAdapter> { | CODE |
| LOW | src/database/shared-database.ts | 200 | export function isSharedDatabaseInitialized(): boolean { | CODE |
| LOW | src/database/shared-database.ts | 207 | export function getSharedDatabaseRefCount(): number { | CODE |
| LOW | src/parsers/version-display-gate.ts | 53 | export function filterPropertiesForVersion(properties: any[], version: string | number): any[] { | CODE |
| LOW | src/types/instance-context.ts | 91 | export function pickInstanceContextFields(source: InstanceContext): InstanceContext { | CODE |
| LOW⚡ | src/types/instance-context.ts | 172 | function isValidMcpAccessTokenField(token: unknown): boolean { | CODE |
| LOW | src/config/n8n-api.ts | 102 | export function deriveOfficialMcpEndpoint(instanceUrl: string): string { | CODE |
| LOW | src/config/n8n-api.ts | 111 | export function getOfficialMcpConfigFromContext(context: { | CODE |
| LOW | src/triggers/trigger-detector.ts | 37 | export function detectTriggerFromWorkflow(workflow: Workflow): TriggerDetectionResult { | CODE |
| LOW | src/triggers/trigger-registry.ts | 93 | export async function initializeTriggerRegistry(): Promise<void> { | CODE |
| LOW | src/triggers/trigger-registry.ts | 114 | export async function ensureRegistryInitialized(): Promise<void> { | CODE |
| LOW | src/utils/expression-utils.ts | 45 | export function shouldSkipLiteralValidation(value: unknown): boolean { | CODE |
| LOW | src/utils/expression-utils.ts | 88 | export function extractBracketExpressions(value: string): string[] { | CODE |
| LOW | src/utils/node-classification.ts | 108 | export function requiresIncomingConnection(nodeType: string): boolean { | CODE |
| LOW | src/utils/node-utils.ts | 95 | function generateCamelCaseVariants(str: string): string[] { | CODE |
| LOW | src/utils/n8n-errors.ts | 184 | export function unknownSettingsKeysNamedBy(error: unknown): string[] { | CODE |
| LOW | src/utils/n8n-errors.ts | 196 | export function isUnknownSettingsPropertyError(error: unknown): boolean { | CODE |
| LOW | src/utils/n8n-errors.ts | 213 | export function enrichUnknownPropertyError( | CODE |
| LOW | src/utils/n8n-errors.ts | 284 | function describeConnectionFailure(axiosError: any): string { | CODE |
| LOW | src/utils/n8n-errors.ts | 327 | export function getUserFriendlyErrorMessage(error: N8nApiError): string { | CODE |
| LOW | src/utils/template-node-resolver.ts | 45 | function generateTemplateNodeVariations(nodeType: string): string[] { | CODE |
| LOW | src/utils/node-type-utils.ts | 215 | export function getTriggerTypeDescription(nodeType: string): string { | CODE |
| LOW | src/utils/mcp-input-normalizer.ts | 98 | export function normalizeMcpWorkflowPosition(value: unknown): unknown { | CODE |
| LOW | src/utils/mcp-input-normalizer.ts | 141 | export function normalizeMcpWorkflowNodes(value: unknown): unknown { | CODE |
| LOW | src/utils/mcp-input-normalizer.ts | 156 | export function normalizeMcpWorkflowConnections(value: unknown): unknown { | CODE |
| LOW | src/mcp/tool-policy.ts | 107 | export function getDisabledToolOperations(): Map<string, Set<string>> { | CODE |
| LOW | src/mcp/tool-policy.ts | 195 | export function resolveRequestedOperation(toolName: string, args: any): unknown { | CODE |
| LOW | src/mcp/official-mcp-access.ts | 202 | export async function clearOfficialMcpClientCache(): Promise<void> { | CODE |
| LOW | src/mcp/handlers-workflow-diff.ts | 167 | export async function handleUpdatePartialWorkflow( | CODE |
| 52 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test-mcp-extraction.js | 76 | // Step 1: Initialize | COMMENT |
| LOW | tests/test-mcp-extraction.js | 110 | // Step 2: List tools | COMMENT |
| LOW | tests/test-mcp-extraction.js | 127 | // Step 3: Call the tool to get AI Agent code | COMMENT |
| LOW⚡ | tests/integration/ai-validation/e2e-validation.test.ts | 112 | // Step 1: Create workflow | COMMENT |
| LOW⚡ | tests/integration/ai-validation/e2e-validation.test.ts | 116 | // Step 2: Validate workflow | COMMENT |
| LOW | tests/integration/ai-validation/e2e-validation.test.ts | 135 | // Step 3: Since it's valid, it's already created and ready to use | COMMENT |
| LOW⚡ | src/utils/ssrf-protection.ts | 360 | // Step 1: Must be HTTP/HTTPS (all modes) | COMMENT |
| LOW⚡ | src/utils/ssrf-protection.ts | 370 | // Step 2: ALWAYS block cloud metadata endpoints (all modes) | COMMENT |
| LOW⚡ | src/utils/ssrf-protection.ts | 376 | // Step 3: Resolve DNS to get every address this hostname answers with. | COMMENT |
| LOW | src/utils/ssrf-protection.ts | 443 | // Step 4: ALWAYS block cloud metadata IPs (all modes) | COMMENT |
| LOW | src/utils/ssrf-protection.ts | 468 | // Step 5: Mode-specific validation | COMMENT |
| LOW | src/utils/ssrf-protection.ts | 498 | // Step 6: Check private IPv4 ranges (strict & moderate modes) | COMMENT |
| LOW | src/utils/ssrf-protection.ts | 509 | // Step 7: IPv6 private address check (strict & moderate modes) | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 174 | #### Step 1: Create Chat Trigger | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 198 | #### Step 2: Add Language Model | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 220 | #### Step 3: Add AI Agent | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 242 | #### Step 4: Connect Components | COMMENT |
| LOW | src/mcp/tool-docs/guides/ai-agents-guide.ts | 265 | #### Step 5: Validate | COMMENT |
| LOW⚡ | src/mcp/tool-docs/guides/ai-agents-guide.ts | 349 | // Step 1: Create Vector Store with embeddings and documents | COMMENT |
| LOW⚡ | src/mcp/tool-docs/guides/ai-agents-guide.ts | 357 | // Step 2: Connect Vector Store to Vector Store Tool | COMMENT |
| LOW⚡ | src/mcp/tool-docs/guides/ai-agents-guide.ts | 364 | // Step 3: Connect tool to AI Agent | COMMENT |
| LOW | src/scripts/test-webhook-autofix.ts | 71 | // Step 1: Validate workflow to identify issues | COMMENT |
| LOW | src/scripts/test-webhook-autofix.ts | 87 | // Step 2: Generate fixes (preview mode) | COMMENT |
| LOW | src/scripts/test-webhook-autofix.ts | 128 | // Step 3: Verify UUID format | COMMENT |
| LOW | src/scripts/test-autofix-workflow.ts | 115 | // Step 1: Validate the workflow to identify issues | COMMENT |
| LOW | src/scripts/test-autofix-workflow.ts | 127 | // Step 2: Check for expression format issues | COMMENT |
| LOW | src/scripts/test-autofix-workflow.ts | 164 | // Step 3: Generate fixes in preview mode | COMMENT |
| LOW⚡ | src/scripts/test-autofix-workflow.ts | 193 | // Step 4: Display individual fixes | COMMENT |
| LOW⚡ | src/scripts/test-autofix-workflow.ts | 202 | // Step 5: Display generated operations | COMMENT |
| LOW⚡ | src/scripts/test-autofix-workflow.ts | 209 | // Step 6: Test with different confidence thresholds | COMMENT |
| LOW | src/scripts/test-autofix-workflow.ts | 225 | // Step 7: Test with specific fix types | COMMENT |
| LOW | src/community/documentation-batch-processor.ts | 108 | // Step 1: Fetch READMEs (unless summaryOnly) | COMMENT |
| LOW | src/community/documentation-batch-processor.ts | 122 | // Step 2: Generate AI summaries (unless readmeOnly) | COMMENT |
| LOW⚡ | src/community/community-node-service.ts | 136 | // Step 1: Sync verified nodes from Strapi API | COMMENT |
| LOW⚡ | src/community/community-node-service.ts | 145 | // Step 2: Sync popular npm packages (unless verifiedOnly) | COMMENT |
| LOW⚡ | src/services/workflow-diff-engine.ts | 2396 | // Step 1: Update connection object keys (source node names) | COMMENT |
| LOW⚡ | src/services/workflow-diff-engine.ts | 2402 | // Step 2: Update target node references within connections | COMMENT |
| LOW⚡ | src/services/n8n-api-client.ts | 986 | // Step 1: Basic cleaning (remove read-only fields, filter to known settings) | COMMENT |
| LOW⚡ | src/services/n8n-api-client.ts | 989 | // Step 2: Version-aware settings filtering for older n8n compatibility | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test-output.txt | 1580 | ✓ tests/unit/multi-tenant-integration.test.ts > Multi-Tenant Support Integration > InstanceContext Validation > API key | CODE |
| LOW | docker-compose.extract.yml | 11 | - N8N_ENCRYPTION_KEY=dummy-key-for-extraction | CODE |
| LOW | tests/unit/flexible-instance-security.test.ts | 123 | 'placeholder', | CODE |
| LOW | tests/unit/multi-tenant-integration.test.ts | 118 | 'placeholder', | CODE |
| LOW | tests/unit/multi-tenant-integration.test.ts | 311 | 'x-n8n-key': 'placeholder' | CODE |
| LOW | tests/unit/multi-tenant-integration.test.ts | 479 | context: { n8nApiUrl: 'https://example.com', n8nApiKey: 'placeholder' }, | CODE |
| LOW | tests/unit/multi-tenant-integration.test.ts | 480 | expectedError: 'placeholder' | CODE |
| LOW | tests/unit/database/template-repository-core.test.ts | 140 | name: 'John Doe', | CODE |
| LOW | tests/unit/database/template-repository-core.test.ts | 182 | 'John Doe', | CODE |
| LOW⚡ | tests/unit/types/instance-context-mcp-token.test.ts | 17 | for (const bad of ['', 'a b', 'YOUR_TOKEN_HERE', 'placeholder', 123 as any]) { | CODE |
| LOW | tests/unit/types/instance-context-coverage.test.ts | 186 | n8nApiKey: 'placeholder' // Invalid placeholder key | CODE |
| LOW⚡ | tests/unit/types/instance-context-coverage.test.ts | 277 | 'placeholder', | CODE |
| LOW | tests/unit/types/instance-context-coverage.test.ts | 300 | err.includes('placeholder') || | CODE |
| LOW | tests/unit/http-server/multi-tenant-support.test.ts | 248 | n8nApiKey: 'placeholder' | CODE |
| LOW | tests/unit/triggers/handlers/form-handler.test.ts | 115 | name: 'John Doe', | CODE |
| LOW | tests/unit/triggers/handlers/form-handler.test.ts | 171 | name: 'Jane Doe', | CODE |
| LOW | tests/unit/telemetry/workflow-sanitizer.test.ts | 804 | "const E = 'jane.doe@example.org'; const P = '+1-604-555-1234';\n" + | CODE |
| LOW | tests/unit/telemetry/workflow-sanitizer.test.ts | 1640 | values: ['Bearer abc123def456', 'user@example.com', 'plain'], | CODE |
| LOW | tests/unit/services/template-service.test.ts | 643 | author_name: 'John Doe', | CODE |
| LOW | tests/unit/services/template-service.test.ts | 662 | name: 'John Doe', | CODE |
| LOW | tests/unit/services/workflow-validator.test.ts | 717 | const result = await validator.validateWorkflow({ nodes: [{ id: '1', name: 'Send Email', type: 'n8n-nodes-base.ema | CODE |
| LOW | tests/unit/services/workflow-validator.test.ts | 739 | const result = await validator.validateWorkflow({ nodes: [{ id: '1', name: 'Send Email', type: 'n8n-nodes-base.ema | CODE |
| LOW | tests/unit/services/config-validator.test.ts | 362 | it('should match when string ends with suffix', () => { expect(ConfigValidator.isPropertyVisible({ name: 'f', disp | CODE |
| LOW | tests/unit/services/expression-format-validator.test.ts | 284 | toEmail: 'user@example.com', | CODE |
| LOW | docs/workflow-diff-examples.md | 307 | "toEmail": "admin@example.com", | CODE |
| LOW | docs/workflow-diff-examples.md | 646 | "parameters": { "to": "user@example.com" } | CODE |
| LOW | docs/local/N8N_AI_WORKFLOW_BUILDER_ANALYSIS.md | 2257 | ['placeholder', '{messages}'] | CODE |
| LOW | …ta/skills/n8n-node-configuration/OPERATION_PATTERNS.md | 82 | "name": "John Doe", | CODE |
| LOW | …ta/skills/n8n-node-configuration/OPERATION_PATTERNS.md | 324 | "to": "user@example.com", | CODE |
| LOW | …ta/skills/n8n-node-configuration/OPERATION_PATTERNS.md | 339 | "ccList": "admin@example.com", | CODE |
| LOW | …ta/skills/n8n-node-configuration/OPERATION_PATTERNS.md | 1228 | "name": "John Doe", | CODE |
| LOW | data/skills/n8n-code-javascript/BUILTIN_FUNCTIONS.md | 89 | name: 'John Doe', | CODE |
| LOW | data/skills/n8n-expression-syntax/EXAMPLES.md | 16 | "name": "John Doe", | CODE |
| LOW | data/skills/n8n-expression-syntax/EXAMPLES.md | 18 | "company": "Acme Corp", | CODE |
| LOW | data/skills/n8n-expression-syntax/EXAMPLES.md | 30 | "name": "John Doe", | CODE |
| LOW | data/skills/n8n-expression-syntax/EXAMPLES.md | 32 | "company": "Acme Corp", | CODE |
| LOW | data/skills/n8n-expression-syntax/SKILL.md | 346 | "name": "John Doe", | CODE |
| LOW⚡ | src/types/instance-context.ts | 162 | !key.toLowerCase().includes('placeholder') && | CODE |
| LOW⚡ | src/types/instance-context.ts | 175 | return !['placeholder', 'your_token_here', 'your-token-here', 'example', 'test-token'].includes(lowered); | CODE |
| LOW⚡ | src/types/instance-context.ts | 254 | } else if (context.n8nApiKey.toLowerCase().includes('placeholder')) { | CODE |
| LOW | src/triggers/handlers/form-handler.ts | 187 | hint += '"user@example.com"'; | CODE |
| LOW | src/constants/type-structures.ts | 186 | name: 'John Doe', | CODE |
| LOW | src/constants/type-structures.ts | 693 | name: 'John Doe', | CODE |
| LOW | src/utils/example-generator.ts | 70 | return 'user@example.com'; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | MEMORY_N8N_UPDATE.md | 41 | # 6b. Check the database size (GitHub rejects files over 100 MiB; the push fails with a bare | COMMENT |
| LOW | docker-compose.yml | 21 | LOG_LEVEL: ${LOG_LEVEL:-info} | COMMENT |
| LOW | tests/unit/telemetry/telemetry-processing.test.ts | 1161 | // half-open probe slots on every call that returns true). Before this | COMMENT |
| LOW | tests/unit/services/n8n-official-mcp-client.test.ts | 361 | fake.setRaw(undefined); | COMMENT |
| LOW | …/integration/n8n-api/workflows/update-workflow.test.ts | 361 | }); | COMMENT |
| LOW | …ation/n8n-api/workflows/get-workflow-structure.test.ts | 121 | }); | COMMENT |
| LOW | tests/integration/n8n-api/utils/cleanup-helpers.ts | 101 | // written) by another run won't look "new" here - this reduces, rather | COMMENT |
| LOW | tests/integration/official-mcp/agents-lifecycle.test.ts | 121 | expect(stale).toMatchObject({ success: false, code: 'STALE_CONFIG' }); | COMMENT |
| LOW | tests/helpers/fake-official-mcp-server.ts | 101 | // Stateless: no session id, plain JSON responses (no SSE) so tests stay simple. | COMMENT |
| LOW | docs/HTTP_DEPLOYMENT.md | 61 | COMMENT | |
| LOW | docs/local/TEMPLATE_MINING_ANALYSIS.md | 301 | // - With authentication | COMMENT |
| LOW | scripts/check-settings-drift.ts | 361 | COMMENT | |
| LOW | .github/dependabot.yml | 61 | - dependency-name: "n8n-nodes-base" | COMMENT |
| LOW | .github/workflows/issue-triage.lock.yml | 1 | # gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"abe5c39f27000644587b61acf1642f5310afd565badc3c24d1998938efb | COMMENT |
| LOW | .github/workflows/issue-triage.lock.yml | 21 | # Not all edits will cause changes to this file. | COMMENT |
| LOW | .github/workflows/issue-triage.lock.yml | 41 | # - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | COMMENT |
| LOW | .github/workflows/docker-build.yml | 241 | provenance: false | COMMENT |
| LOW | .github/workflows/test.yml | 121 | name: ui-test-traces | COMMENT |
| LOW | …kills/n8n-self-hosting/assets/docker-compose.queue.yml | 1 | # n8n — QUEUE mode (main + Redis + Postgres + N workers), Caddy auto-TLS. | COMMENT |
| LOW | data/skills/n8n-mcp-tools-expert/WORKFLOW_GUIDE.md | 741 | ### Get Credential | COMMENT |
| LOW | data/skills/n8n-mcp-tools-expert/WORKFLOW_GUIDE.md | 761 | // usedIn: [ | COMMENT |
| LOW | src/http-server-single-session.ts | 61 | // proxy or an idle timeout, which reaches the client as | COMMENT |
| LOW | src/http-server-single-session.ts | 801 | COMMENT | |
| LOW | src/http-server-single-session.ts | 841 | reason: 'instance_reconnect' | COMMENT |
| LOW | src/types/n8n-api.ts | 461 | // hint, the raw official error payload on failure, and whether the result | COMMENT |
| LOW | src/utils/ssrf-protection.ts | 241 | } | COMMENT |
| LOW | src/mcp/handlers-workflow-diff.ts | 401 | // before failing (e.g. an unsupported typeVersion trips the activation | COMMENT |
| LOW | src/mcp/handlers-workflow-diff.ts | 501 | throw updateError; | COMMENT |
| LOW | src/mcp/handlers-workflow-diff.ts | 881 | warnings: mergeWarnings(diffResult.warnings, [...tagWarnings, ...groupWarnings]) | COMMENT |
| LOW | src/mcp/stdio-wrapper.ts | 21 | process.env.MCP_MODE = 'stdio'; | COMMENT |
| LOW | src/mcp/handlers-n8n-manager.ts | 1161 | // fields carried in from the GET response. | COMMENT |
| LOW | src/mcp/index.ts | 61 | return false; | COMMENT |
| LOW | src/mcp/index.ts | 201 | // Signal handling strategy: | COMMENT |
| LOW | src/mcp/handlers-official-tools.ts | 81 | return officialFailure(new OfficialMcpError('OFFICIAL_MCP_TOOL_UNAVAILABLE', `This instance does not expose ${tool | COMMENT |
| LOW | src/mcp/server.ts | 81 | // what happened, and on the npx path the user's machine has the version cached, | COMMENT |
| LOW | src/mcp/server.ts | 4861 | // Without a handler the buffer cap trips silently: the SDK reports through | COMMENT |
| LOW | src/mcp/server.ts | 4901 | // this method returns, which never emits 'beforeExit', so the batch | COMMENT |
| LOW | src/telemetry/event-validator.ts | 81 | // Schema for telemetry events | COMMENT |
| LOW | src/telemetry/workflow-sanitizer.ts | 61 | // classes exclude whitespace, '/', '@', quotes and code delimiters so the | COMMENT |
| LOW | src/telemetry/workflow-sanitizer.ts | 141 | // random string and a random string of 32+ characters carries digits; | COMMENT |
| LOW | src/services/workflow-validator.ts | 1321 | return; | COMMENT |
| LOW | src/services/n8n-official-mcp-client.ts | 421 | state.generation = generation; | COMMENT |
| LOW | src/services/n8n-official-mcp-client.ts | 441 | // the request reached n8n and may have already mutated state; | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | monitor_fetch.sh | 7 | # Check if process is still running | COMMENT |
| LOW | docker/docker-entrypoint.sh | 75 | # Check if flock is available | COMMENT |
| LOW | deploy/quick-deploy-n8n.sh | 64 | # Check if .env exists | COMMENT |
| LOW | scripts/test-n8n-integration.sh | 68 | # Check if Docker daemon is running | COMMENT |
| LOW | scripts/test-n8n-integration.sh | 177 | # Set trap to cleanup on exit | COMMENT |
| LOW | scripts/test-n8n-integration.sh | 180 | # Check if we're in the right directory | COMMENT |
| LOW | scripts/test-n8n-integration.sh | 281 | # Check if API key was provided | COMMENT |
| LOW | scripts/update-and-publish-prep.sh | 120 | # Check if templates were sanitized | COMMENT |
| LOW | scripts/analyze-optimization.sh | 51 | # Check if optimized database exists | COMMENT |
| LOW⚡ | scripts/publish-npm.sh | 25 | # Check if dist directory exists | COMMENT |
| LOW⚡ | scripts/publish-npm.sh | 31 | # Check if database exists | COMMENT |
| LOW | scripts/extract-nodes-docker.sh | 26 | # Check if Docker is running | COMMENT |
| LOW | scripts/extract-nodes-docker.sh | 82 | # Check if we got the If node source code and look for version | COMMENT |
| LOW | scripts/test-http.sh | 22 | # Check if jq is installed | COMMENT |
| LOW | scripts/build-optimized.sh | 13 | # Check if nodes.db exists | COMMENT |
| LOW | scripts/test-docker-optimization.sh | 9 | # Check if nodes.db exists | COMMENT |
| LOW | scripts/test-docker-optimization.sh | 61 | # Check if running | COMMENT |
| LOW | scripts/deploy-http.sh | 11 | # Check if .env exists | COMMENT |
| LOW | scripts/deploy-http.sh | 24 | # Check if AUTH_TOKEN is set | COMMENT |
| LOW | scripts/extract-nodes-simple.sh | 26 | # Check if Docker is running | COMMENT |
| LOW | scripts/extract-nodes-simple.sh | 78 | # Check if we got the If node source code and look for version | COMMENT |
| LOW | .github/workflows/release.yml | 61 | # Check if version changed | COMMENT |
| LOW | .github/workflows/release.yml | 67 | # Check if it's a prerelease (contains alpha, beta, rc, dev) | COMMENT |
| LOW | .github/workflows/release.yml | 94 | # Check if version already exists in npm | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/docker/serve-command.test.ts | 146 | elif echo "\$@" | grep -q "n8n-mcp.*serve"; then | CODE |
| HIGH | tests/unit/services/node-specific-validators.test.ts | 2569 | context.config = pythonConfig('# TODO: return None when the list is empty\nreturn [{"json": {"n": len(_items)} | CODE |
| HIGH | tests/unit/services/node-specific-validators.test.ts | 2629 | ' return None', | CODE |
| HIGH | src/mcp/tools-documentation.ts | 594 | return None | CODE |
| HIGH | src/services/node-specific-validators.ts | 2337 | // `return None` inside a helper is not read as the node's return value. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/services/fixed-collection-validation.test.ts | 355 | // This is a pattern commonly generated by AI agents | COMMENT |
| HIGH | docs/local/DEEP_DIVE_ANALYSIS_2025-10-02.md | 753 | // Fix common AI-generated abbreviations | COMMENT |
| HIGH | src/mcp/handlers-n8n-manager.ts | 1135 | // AI-generated node updates typically omit credential references because they | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | data/skills/n8n-workflow-patterns/ai_agent_workflow.md | 69 | ### 2. Document Q&A (RAG) | COMMENT |
| MEDIUM | data/skills/n8n-agents/RAG.md | 1 | # RAG (retrieval augmented generation) | COMMENT |
| MEDIUM | data/skills/n8n-agents/RAG.md | 13 | - **Database or Data Table for exact lookups.** "Look up customer X's record", "fetch issue #1234", "get rows where stat | CODE |
| MEDIUM | data/skills/n8n-agents/RAG.md | 32 | ## Vector RAG: the pieces | COMMENT |
| MEDIUM | data/skills/n8n-agents/RAG.md | 45 | ## Vector RAG: two workflows | COMMENT |
| MEDIUM | data/skills/n8n-agents/SKILL.md | 218 | ## RAG (retrieval augmented generation) | COMMENT |
| MEDIUM | src/mcp/tool-docs/guides/ai-agents-guide.ts | 478 | ### Pattern 3: RAG (Retrieval-Augmented Generation) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/demo-optimization.sh | 7 | # Create a demo directory structure | COMMENT |
| MEDIUM | scripts/demo-optimization.sh | 49 | # Create a simple test | COMMENT |
| MEDIUM⚡ | scripts/publish-npm.sh | 37 | # Create a temporary publish directory | COMMENT |
| MEDIUM | scripts/extract-nodes-simple.sh | 38 | # Create a temporary directory for extraction | COMMENT |
| MEDIUM | .github/workflows/dependency-check.yml | 128 | # Create a simple test script | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/services/config-validator.test.ts | 688 | const result = ConfigValidator.validate('nodes-base.code', { language: 'python', pythonCode: 'def process_data():\ | CODE |
| LOW | tests/unit/services/node-specific-validators.test.ts | 2030 | context.config = pythonConfig('def helper(_json): return _json\n\nreturn [{"json": helper(it["json"])} for it | CODE |
| LOW | tests/unit/services/node-specific-validators.test.ts | 2116 | 'def helper(_json):', | CODE |
| LOW | tests/unit/services/node-specific-validators.test.ts | 2128 | context.config = pythonConfig('def helper(x=_json):\n return x\n\nreturn [{"json": {"v": helper()}}]'); | CODE |
| LOW | tests/unit/services/node-specific-validators.test.ts | 2376 | 'def helper():', | CODE |
| LOW | tests/unit/services/node-specific-validators.test.ts | 2389 | context.config = pythonConfig('def helper(x=type(1)):\n return x\n\nreturn [{"json": {"v": helper()}}]'); | CODE |
| LOW | tests/unit/services/node-specific-validators.test.ts | 2535 | 'def helper(', | CODE |
| LOW | tests/unit/services/node-specific-validators.test.ts | 2626 | 'def helper(', | CODE |
| LOW | tests/unit/services/node-specific-validators.test.ts | 2657 | context.config = pythonConfig('def helper(): return 1\nvalue = helper()\nreturn "value is " + str(value)'); | CODE |
| LOW | src/services/node-specific-validators.ts | 1969 | // A one-line def (`def helper(_json): return _json`) carries its suite on | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/logger.test.ts | 29 | // Restore original DEBUG value with more robust handling | COMMENT |