Skip to content

Releases: lidless-labs/n8nctrl

n8nctrl v0.14.2

Choose a tag to compare

@solomonneas solomonneas released this 07 Jul 00:41

Full Changelog: v0.14.1...v0.14.2

n8n-ops-mcp v0.14.1

Choose a tag to compare

@solomonneas solomonneas released this 07 Jul 00:16

What's Changed

New Contributors

Full Changelog: v0.14.0...v0.14.1

v0.14.0

Choose a tag to compare

@solomonneas solomonneas released this 23 May 19:51

v0.13.0

Choose a tag to compare

@solomonneas solomonneas released this 23 May 19:51

v0.12.0: n8n_list_schedules

Choose a tag to compare

@solomonneas solomonneas released this 23 May 19:51

Answers the most common cron ops question — "what's running at 3am?" — that n8n's UI doesn't surface anywhere obvious.

Added

  • `n8n_list_schedules` — read-only scanner that walks every workflow for `n8n-nodes-base.scheduleTrigger` and legacy `n8n-nodes-base.cron` nodes and decodes each interval rule into a human-readable string. Supported rule fields: `seconds` / `minutes` / `hours` / `days` / `weeks` (with multi-day `triggerAtDay`) / `months` plus raw `cronExpression`. Multi-interval rules emit one row per interval. Each row includes workflow context, node name/type, the human description, the rule field, optional `cronExpression`, and the original `raw` rule for further inspection. Optional `workflowId` (single-workflow scan), `activeOnly` (default true — inactive schedules don't fire), `limit` (default 100, max 250).

Examples of decoded schedules

  • `every 2 hours at :30`
  • `daily at 03:00`
  • `weekly on Monday, Wednesday, Friday at 09:15`
  • `monthly on day 1 at 06:00`
  • `cron: 0 */6 * * *`

Notes

  • Pairs naturally with `n8n_audit_browser_bridge_usage` (which schedules drive my browser-bridge calls?) and `n8n_diff_workflow` (did the cron rule change since the snapshot?).
  • 11 new tests; full suite 172/172 green.

v0.11.0: pin/unpin node data tools

Choose a tag to compare

@solomonneas solomonneas released this 23 May 19:51

Edit-mode tools for managing pinned node data during workflow development. Pairs with n8n_scaffold_browser_bridge_node — scaffold a call, run it once, pin the output, iterate downstream nodes without re-spawning the browser.

Added

  • n8n_pin_node_data — pin sample data on a single node so downstream nodes use it during development/testing without re-running the upstream node. Inputs: id, nodeName (validated to exist in the workflow), data (1-50 items; raw objects auto-wrap into {json: <object>}, fully-shaped {json, binary?} items pass through), optional merge: true to append (combined still ≤50), confirm: true. PUT body includes nodes/connections/settings/staticData from current state so those fields are not blanked. Response includes unpinHint since pinned data is easy to forget about.
  • n8n_unpin_node_data — clear pinned data on one node (nodeName supplied) or the whole workflow (nodeName omitted). Idempotent: clearing a node that wasn't pinned returns ok: true, noop: true and never touches the API. Confirm-gated.

Notes

  • Both go through PUT /workflows/:id (n8n's Public API doesn't have a dedicated pinData endpoint). They use client.saveWorkflow but bypass the snapshot+validation of n8n_save_workflow since pin/unpin only mutate pinData and the change is reversible via the sibling tool.
  • 16 new tests; full suite 161/161 green.

v0.10.0: n8n_diff_workflow

Choose a tag to compare

@solomonneas solomonneas released this 23 May 19:51

Closes the snapshot/restore loop opened in 0.7/0.8 — you could save and restore but had no way to see what changed.

Added

  • n8n_diff_workflow — read-only semantic diff between a workflow's current state and a snapshot. Inputs: id plus exactly one of snapshotPath (absolute file path; ~ resolved) or snapshot (inline object). Snapshot accepts both shapes: flat (n8n_save_workflow / n8n_delete_workflow backup) and nested (n8n_get_workflow(includeDefinition=true)). Returns counters in summary (added/removed/modified, plus nameChanged/connectionsChanged/settingsChanged) and a diff payload with per-node fieldsChanged paths walking one level into parameters (e.g. parameters.command, parameters.url).

Notes

  • Two-pass node matching: id-first, name-fallback for any unmatched nodes. Handles legacy/hand-edited snapshots without forcing a "1 added + 1 removed" false signal when one side is missing ids.
  • Cosmetic noise suppression: position and webhookId changes are suppressed by default; toggle with ignoreCosmetic: false.
  • Bounded output: per-node detail capped at maxModifiedDetails (default 50, max 500) with explicit nodesModifiedTruncated flag; summary counters are uncapped.
  • Pairs with n8n_save_workflow (which writes the snapshot) and n8n_audit_browser_bridge_usage (which surfaces calls — diff tells you whether they've drifted).

15 new tests, full suite 145/145 green.

v0.9.0: browser-bridge audit + scaffold tools

Choose a tag to compare

@solomonneas solomonneas released this 23 May 19:51

First n8n-ops-mcp pieces designed to compose with browser-bridge end-to-end.

Added

  • n8n_audit_browser_bridge_usage — read-only scanner that walks every workflow and surfaces nodes calling the browser-bridge CLI (Execute Command, Code, SSH, legacy Function). Returns one finding per (workflowId, nodeName, platform, action) plus a per-platform action summary. Optional filters: platform, action, activeOnly, includeArchived. Paginates via cursor up to maxWorkflows (default 250, max 1000) with bounded-concurrency getWorkflow fan-out (default 3, max 8). Per-workflow fetch failures land in fetchErrors instead of failing the whole audit. Detection regex requires .js / .cjs / .mjs extension to avoid false positives from path mentions like cd /opt/browser-bridge.
  • n8n_scaffold_browser_bridge_node — pure local generator (no n8n API call) that emits a ready-to-paste n8n node calling browser-bridge <platform> <action>. Two modes: code-node (default; spawnSync with stdin JSON, surfaces exitCode + stderr) and execute-command (quoted <<'JSON' heredoc). Mirrors the patterns in browser-bridge's docs/n8n-usage.md. Validates platform and action as kebab slugs to keep them safe to interpolate into shell commands. Warns when execute-command mode is paired with non-empty input (heredoc bakes input in; no per-item wiring).

Why

The audit + scaffold pair answer two real questions that were previously a manual grep job: "where am I calling Linktree sync from?" and "how do I add a CoderLegion scan-comments step without copy-pasting the spawn shape from docs every time?"

Both tools are read-only / local-only — registered before the enableEdit gate. Full suite green at 130/130.

v0.8.1 - harness-agnostic docs, CHANGELOG

Choose a tag to compare

@solomonneas solomonneas released this 23 May 19:51

Docs-only release. No behavior changes.

Changed

  • README reframed as MCP-first (any MCP-compatible client) while preserving the "built for OpenClaw" origin story and first-class plugin path.
  • Client setup section reordered: Claude Desktop, Claude Code, Codex CLI, Cursor/Windsurf, Hermes Agent, then OpenClaw (the first-class plugin path).
  • Refreshed package.json and openclaw.plugin.json descriptions to cover the full workflow + execution lifecycle added in 0.7/0.8 (create, save, archive, delete, cancel, retry).
  • Added CHANGELOG.md backfilled from git log (0.1.0 through 0.8.1), Keep-a-Changelog format.

Full diff: https://github.com/solomonneas/n8n-ops-mcp/compare/v0.8.0...v0.8.1

v0.8.0 - n8n_create_workflow (closes workflow lifecycle)

Choose a tag to compare

@solomonneas solomonneas released this 23 May 19:51

Added

  • n8n_create_workflow - POST /workflows. Accepts the full output of n8n_get_workflow (with includeDefinition=true) directly. Strips read-only fields (id, active, createdAt, updatedAt, isArchived, versionId, triggerCount, tags, shared, meta, pinData) before POSTing. Runs n8n_validate_workflow on the proposed state as a pre-check; errors block, warnings pass through (skipValidation: true to bypass). No confirm gate - creation is non-destructive. The new workflow is created INACTIVE; call n8n_activate afterwards if you want triggers running.

Why

Closes the workflow lifecycle. Restore after n8n_delete_workflow is now one-call: read the backup file into `definition` and pass it to n8n_create_workflow. The restored workflow gets a new id.

Also enables cloning: n8n_get_workflow(includeDefinition=true) -> edit name in-place -> n8n_create_workflow.

Full diff: https://github.com/solomonneas/n8n-ops-mcp/compare/v0.7.0...v0.8.0