Enable n8n agents to use Agent Skills (SKILL.md + references)

I have multiple agents implemented in n8n. They each use complex system prompts and multiple data sources to enable complex use cases. The size and complexity of the system prompt has been a limiting factor. The Agent Skills system that Anthropic developed an released has the potential to significantly reduce the amount of tokens required for the system prompt. Specification - Agent Skills. Ideally, the n8n agent could reference one or more of these skills using something similar to the current tool structure.

My use case:

I think it would be beneficial to add this because:

It would make n8n agents more flexible and efficient.

Any resources to support this?

Are you willing to work on this?

Hey,

Cool idea! Long prompts do get messy real quick. Being able to split things into separate “skills” would make life easier. n8n doesn’t support this natively yet, but you can hack something with sub-workflows. If you try anything, share it here – I’m curious!

I also think that agent skills should be supported.

1 Like

This is critical for the competitive positioning of n8n. Key influencers such as Nate Herk seem to be moving away from n8n toward Claude Code and Skills, leveraging claude code template libraries of skills like Claude Code Templates - Supercharge Your AI-Powered Development with Anthropic's Claude Code. Yes, we can cut and past the skill.md file into the system message in an AI Agent node, but there is no progressive disclosure to avoid overloading the context window, and I don’t think there is a code sandbox for running bash, python, and node.js scripts.

1 Like

Release 1.14.0-rc1: New Agent x Skills for Production Workflows · langgenius/dify · GitHub well N8N seems to fall behind other workflow tools ;/

I always use a “code” tool that only return a markdown text

2 Likes

Hi everyone,

I’m currently building an open-source project called skills_mcp_server that tackles this exact architectural gap, running skills in MCP-capable agents, including those in n8n.

It is a centralized, sandboxed MCP server built with FastAPI and FastMCP, using Agno under the hood to interface with the skills.

Here is how it works and how it solves the n8n integration problem:

  1. Dynamic Skill Management via REST: Instead of hardcoding tools into your n8n workflows, my server has a REST API. You can use standard n8n HTTP Request nodes to dynamically install, update, or delete skills on the fly using .zip files, custom .skill packages, or direct download URLs.

  2. Sandboxed Execution: Security is a big issue when letting agents write or run complex code. The skills_mcp_server runs these skills in an isolated sandbox. Your n8n instance stays completely secure while the MCP server handles the heavy lifting.

  3. Seamless MCP Connection: Once a skill is loaded into the server via the API, the n8n Agent seamlessly accesses it through the standard Model Context Protocol.

Basically, you can treat this server as an external “Skill Hub” for your n8n agents. You manage the complex logic, package dependencies, and file structures (skill.md, main.py, requirements.txt) entirely outside of n8n, keeping your workflow UI clean.

My repository is GitHub - chameleonbr/skills_mcp_server: FastAPI Skills manager to use with MCP capable agents · GitHub

3 Likes
1 Like

I’ve been running into this exact problem managing several production agents with large, overlapping system prompts — the context window cost adds up fast, and there’s no clean way to do progressive disclosure natively.

The sub-workflow approach is the best current workaround in n8n. What I do is treat each “skill” as a separate sub-workflow with its own system prompt fragment. The main agent workflow has a short system prompt that describes the available skills and when to use them, plus a sub-workflow tool for each skill. When the agent needs to use a specific capability, it calls the relevant sub-workflow tool which contains the full specialized prompt + logic. This keeps the main context window lean.

The limitation vs. the Anthropic Agent Skills spec is that n8n doesn’t do true progressive disclosure — you can’t pass a SKILL.md reference and have it lazily load only when invoked. Instead, the tool descriptions in your sub-workflow tools serve as the lightweight “skill registry” and the actual prompt lives in the sub-workflow itself. It’s not identical semantics, but it achieves the core goal: the main agent doesn’t need to hold all capability context in its window at once.

@chameleonbr’s skills_mcp_server approach is interesting for teams that want to manage this as infrastructure outside n8n. For simpler setups the sub-workflow pattern works well enough. Would be good to see n8n add native support for this — even just a way to reference a system prompt from an external file or variable would go a long way.

1 Like

Who cares? we care about n8n not a person. AI Agent flow has its capabilities and advantages, N8N does too. lower cost with stable output is better for Enterprise business usage. not a AI agile development replace everything.

1 Like

Absolutely great idea, I just created a duplicate feature request here: Attach skill nodes to AI agent node , now I see it already exists! Just wanted to share here too that I suppose it could look something like this:

1 Like

n8n is not AI focused tools, and im happy for this.
yes skill is a must have but we need to found a way to do in n8n without destroy the user friendly UX and hope dont add bloat or useless thing

:warning: Work in progress / testing in progress. This is an early write-up of a pattern I’m actively building and stress-testing on a self-hosted n8n. Details, schema, and specific recommendations may change as I run into real-world edge cases. Treat this as a discussion starter, not a finalised guide. I’ll update the post as testing progresses — feedback and pushback welcome.

I wanted to share a pattern I’m building on n8n self-hosted that solves a problem I kept hitting with the AI Agent node: the system prompt grows uncontrollably when you try to make a single agent good at many tasks. Embedding all instructions, examples, brand rules, and workflows in the system message burns tokens at every single turn, even when most of those instructions are irrelevant to the user’s current request.

Anthropic recently formalised a pattern called Agent Skills with progressive disclosure: the agent only sees a tiny manifest at all times, and loads the full instructions of a skill on-demand when the user request matches it. I’ve replicated this pattern entirely inside n8n.

The idea in 30 seconds

Three layers of context loading:

  1. Always loaded (cheap) — a small manifest of name + description per skill, injected into the system message. Maybe 30-50 tokens per skill.

  2. Loaded on match (medium) — when the LLM pattern-matches the user request against a description, it calls a load_skill tool that returns the full instructions for that skill.

  3. Loaded if needed (heavy) — the loaded skill can reference further docs (examples, edge cases) which the agent fetches via a load_reference tool only if the current task requires that detail.

Result: the agent stays small in context, but can act like a specialist on dozens of tasks.

How it maps to n8n

  • Storage: a small Postgres database (separate container) with two tables — skills(name, description, content) and skill_references(skill_name, reference_name, content).

  • Main workflow: Chat Trigger → Postgres SELECT (loads the manifest) → Code (formats it as JSON for the system prompt) → AI Agent.

  • Tools (sub-workflows exposed via the Call n8n Workflow Tool node): load_skill(skill_name) and load_reference(skill_name, reference_name). Each does a parameterised SQL SELECT and returns the row.

  • The LLM populates tool parameters via the AI button in the workflow inputs, no hardcoded values.

Why Postgres instead of n8n Data Tables?

I considered Data Tables seriously. They have real strengths: zero extra infrastructure, native CSV import/export from the UI, project-scoped access, and a public REST endpoint (/datatables) for programmatic access from outside n8n. For prototyping or for catalogs of a few dozen skills they’re a perfectly defensible choice.

What pushed me to Postgres for a long-lived skill registry is the documented limit set: column types restricted to Boolean / Date / Number / String (no JSON, no VECTOR), filters limited to equality / comparison / is-empty (no LIKE, no full-text), a default 50MB total-storage cap per instance (configurable via N8N_DATA_TABLES_MAX_SIZE_BYTES on self-hosted), and Data Tables not being readable from a Code node (“Direct programmatic access to data tables from a Code node isn’t supported”, per the docs). Postgres gives me parameterised SQL, foreign keys, history triggers, and a clean upgrade path to pgvector for similarity search once the catalog grows past ~100 entries. I’ll go into the trade-offs in detail in the longer follow-up post.

Why this is interesting

It scales nicely: 5 skills or 200 skills, the cost per turn stays roughly the same. It also makes maintenance trivial — you edit a row, not a 5000-line system prompt. And the Anthropic skill format is already markdown-based, so the same content works in n8n today and would migrate cleanly to Claude Agents tomorrow.

Curious if anyone else has built something similar. Has anyone tried this with n8n Data Tables only? With pgvector? Happy to share the full schema and workflow JSON if there’s interest.

Cheers

1 Like