An MCP server that statically scans n8n automation workflows for security issues (SAST for n8n).
Three well-scoped, read-only tools with clear security intent. Tool names follow verb_noun pattern (scan_, explain_, list_). Descriptions are substantive (100-200 chars) and explain WHAT, WHEN, and WHY. Input schemas present with type declarations. However, parameter descriptions are minimal or absent in the visible schema, and output schemas are not formally documented in the code. Error handling is present but generic. Security posture is excellent (no secrets, rate limiting, audit logging, input validation), which elevates the score despite schema gaps.
Return detailed remediation guidance for a scanner rule id (e.g. 'N8N-002'). Includes the weakness (CWE), the risk, an insecure example, a secure example, and the fix. Use after scan_n8n_workflow to explain a finding.
List every detection rule the scanner supports (id, title, severity, CWE). Read-only metadata; useful for building a CI policy (which severities block).
Statically scan an exported n8n workflow (JSON) for security issues. Input: the JSON of a single exported n8n workflow (the object with a "nodes" array). Output: structured findings only — rule id, severity, CWE, node reference, sanitized evidence, and remediation. Raw workflow content is never returned. Treat the input as untrusted; it is validated and capped.
Output schemas not formally documented. scan_n8n_workflow returns a dict with 'error'/'detail' or a report object; explain_finding returns a string; list_rules returns list[dict]. LLMs cannot plan downstream tool calls without knowing the exact fields returned.
Parameter descriptions missing or minimal. scan_n8n_workflow's 'workflow_json' param has a description, but explain_finding's 'rule_id' and list_rules' empty input lack formal descriptions in the visible schema.
Error responses are generic ('rate_limited', 'invalid_workflow'). While the code includes audit logging and rate limiting, error messages do not guide recovery. 'Workflow exceeds 500 nodes; split into smaller workflows.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
No pagination or result limits documented for list_rules. If the rule set grows large, returning all rules in one response could bloat context. Baseline: cap results at 20-50 and offer pagination.
scan_n8n_workflow accepts 'workflow_json' as a string but does not document the expected structure (must be a JSON object with a 'nodes' array). LLMs may pass invalid JSON or wrong structure. Add format/pattern constraints to the parameter description.