AgentMeshLog inStart free

Build guides

Move one judgment step off your own server — for n8n self-hosters

I build a hosted tool, so I am biased — and I also run my own server, so the unflattering parts of this page are the ones worth reading. This is not a migration guide. It is the smallest useful thing: keep n8n where it is and move one step, the one that needs judgment rather than wiring.

The reason to bother is not the licence cost. It is that the step which reads something and decides is the step that breaks in ways a rule set cannot describe, and it is the one you least want to babysit at the weekend.

The shape

Your n8n workflow catches the event and does the plumbing. At the point where it currently has a chain of IF nodes trying to classify something, it POSTs to a webhook here, gets a structured answer back, and carries on.

Stays in your n8nMoves here
Triggers, schedules, app connectorsReading something varied and deciding what it is
Moving data between systemsDrafting a reply, a summary, a classification
Anything needing one of hundreds of connectorsAnything where an IF chain is permanently half-finished

Step 1 — the agent

Agents → Create agent, then the Configuration (JSON) box — which is where the instructions live, not the Description field:

{
  "system_prompt": "You classify inbound messages for an operations team. Return JSON with: category, urgency (low|normal|high), summary (one line), and needs_human (true|false). Be decisive. If the message does not fit a category, say other rather than guessing.",
  "temperature": 0.2,
  "response_format": "json"
}

response_format: "json" matters more here than anywhere else: n8n has to read fields, and it cannot reliably parse a sentence.

Step 2 — the webhook your n8n calls

  1. Put the agent in a workflow, even a one-step one.
  2. On the **Schedules** page, add a **Webhook trigger** to that workflow.
  3. Copy the generated URL. It carries an unguessable token — treat it like a password.
  4. In n8n, replace your IF chain with an HTTP Request node POSTing JSON to that URL.
  5. Send one real message through before you rely on it, and check the input arrived shaped the way you expected.

Anyone holding that URL can start your workflow. If it leaks, delete the trigger and add a new one — the old token stops working.

What you stop running, and what you still run

What goes away

For this one step: no container, no deploy, no disk filling with build cache, no proxy config drifting out of git. I know the list because it is my own — 7 containers in production, a 1.8 GB build cache found by accident, and 29 lines of live proxy config that were not in version control.

What does not

Your n8n. All of it. The triggers, the connectors, the upgrades, the backups. This removes one step from your maintenance, not your server — and anyone telling you otherwise is selling.

What you gain that is not about hosting

The run record. Every step records what it received, what it returned, its tokens, its cost and its duration, and a skipped step writes its own row with the reason. That is the part self-hosters usually have to build for themselves.

Source: three runs opened up step by step, no account needed.

What it costs against a server you already pay for

Your box is already bought, so the honest comparison is marginal. Runs are billed in tokens: a classification of this size measured $0.0144; one that failed on its first tool call $0.0024. A step running 500 times a month is a few dollars.

The free plan needs no card and covers 100 runs or $0.50 of usage a day, whichever comes first — which is enough to run one real step for a week and decide. Attach your own Anthropic or OpenAI key and both ceilings disappear; you pay the provider directly, at cost.

Pro is $29 a month flat. Against a €5 box that is not a cost saving and I am not going to pretend it is. It buys you not owning the judgment step.

The failure mode you should expect

You already know the shape of this one, because self-hosting teaches it: a thing that reports success and does nothing. Source: a scheduled job of mine logged "removed 0 expired results" hourly for weeks and had never deleted anything.

And the agent-specific version: a tool call can return HTTP 403 while its result records "ok": true, so the agent proceeds as though it had data. The logged run is published in full. Have the step return a count and assert on it in n8n — that is the check that survives either engine being wrong about itself.

Next

  1. The full click-by-click on one agent — see Build a support agent that answers a refund ticket.
  2. The side-by-side, with what we are worse at — see agent-mesh.org/compare/n8n.
  3. Every tool and its daily cap — see Give agents tools & integrations.