n8n-credentials-and-security

Installation
SKILL.md

n8n Credentials and Security

Non-negotiables

  1. Secrets via the credential system, never in text fields or SDK code. API keys, bearer tokens, OAuth secrets, passwords: all go through newCredential() or the node's credentials parameter. A Set node hardcoding a token and read via {{$json.token}} is a text field with extra steps.
  2. Don't ask the user for credential names, but DO tell them to verify each node. The string in newCredential('Label') is cosmetic and does NOT bind to a specific stored credential. When the workflow opens, n8n auto-assigns the most recently edited credential of that type to every node, which silently picks the wrong one if the user has more than one (e.g., two Gmail accounts, prod + staging API keys). After building, always tell the user: "Open every node that uses a credential and confirm the right one is selected from the dropdown." Pick a sensible label ('Gmail', 'OpenRouter', 'Acme API') and move on.
  3. Credential creation is the user's job, not yours. The n8n MCP doesn't expose credential creation. Tell the user the exact credential type to create in the UI, then reference it by label in your node config. Don't attempt to create credentials programmatically and don't accept secrets in chat to "set up later".

Strong defaults

  • Use native credentials when available. Every native node (Slack, Gmail, Postgres, OpenAI, etc.) has a credential type. Don't reach for generic credential types when a native option exists.
  • For multi-header or header-plus-query auth shapes, use the httpCustomAuth credential type. See references/CUSTOM_CREDENTIALS.md.

The credential system

In n8n, credentials are first-class objects:

  • Stored encrypted at rest in the n8n database.
  • Referenced by ID from nodes that need them.
Related skills

More from n8n-io/skills

Installs
4
Repository
n8n-io/skills
GitHub Stars
7
First Seen
1 day ago