n8n MCP 서버로 AI에게 워크플로우 맡기기: 셀프호스팅 설치부터 API 키 연동까지(2026)

3줄 요약

  • 대상: n8n MCP 서버로 AI에게 워크플로우 맡기기: 셀프호스팅 설치부터 API 키 연동까지(2026) 내용을 빠르게 파악하려는 독자
  • 핵심: 설치·설정·운영 포인트를 핵심 단계 중심으로 정리
  • 결과: 재현 가능한 절차와 점검 기준으로 시행착오를 줄임

트러블슈팅

  • 증상이 나오면 로그·버전·포트/권한·네트워크 순서로 확인합니다.
  • 설정 반영이 안 되면 서비스 재시작/캐시 비우기 후 다시 검증합니다.

결론 + 다음 단계

핵심 절차를 먼저 완료하고, 운영 단계에서는 백업·모니터링·기본 보안 설정을 함께 적용하세요.

3줄 요약

  • 대상: n8n MCP 서버로 AI에게 워크플로우 맡기기: 셀프호스팅 설치부터 API 키 연동까지(2026) 내용을 빠르게 파악하려는 독자
  • 핵심: 설치·설정·운영 포인트를 핵심 단계 중심으로 정리
  • 결과: 재현 가능한 절차와 점검 기준으로 시행착오를 줄임

트러블슈팅

  • 증상이 나오면 로그·버전·포트/권한·네트워크 순서로 확인합니다.
  • 설정 반영이 안 되면 서비스 재시작/캐시 비우기 후 다시 검증합니다.

결론 + 다음 단계

핵심 절차를 먼저 완료하고, 운영 단계에서는 백업·모니터링·기본 보안 설정을 함께 적용하세요.

요약: n8n을 MCP 서버로 만들어 AI가 워크플로우를 실행/수정할 수 있게 구성하는 전체 흐름을 빠르게 훑습니다.

트러블슈팅: 인증(API 키)·툴 권한·엔드포인트 연결이 어긋날 때 확인할 체크리스트를 먼저 제공합니다.

결론 & 다음 단계: 동작 확인 후에는 로컬 LLM(Ollama) 또는 OpenClaw 같은 에이전트와 붙여 자동화를 확장하세요.

이 글은 n8n 환경에서 MCP 서버를 구성해 “AI가 워크플로우를 직접 다루게” 만드는 과정을 정리한다. 핵심은 설치 절차 나열이 아니라, 도구 호출의 안전성(권한/키/범위 제한)과 운영 관점의 체크포인트를 잡는 것이다.

이 글의 목표(성공 기준)

  • n8n MCP 서버가 정상 기동하고, 클라이언트에서 연결된다.
  • API 키/토큰 등 민감정보가 안전하게 관리된다.
  • 도구 실행 범위가 최소화되고, 문제 발생 시 로그 기반으로 진단할 수 있다.

이 글은 “AI가 내 n8n(자동화)을 직접 만들고/수정하고/디버깅하게 만들기”를 목표로 합니다. 초보자 기준으로, 오늘 당장 따라 하면 로컬/홈서버의 n8n에 AI를 붙일 수 있게 구성했습니다.

우리가 n8n을 셀프호스팅하는 이유는 보통 비슷합니다.

  • 집(홈서버)에서 자동화를 내 마음대로 굴리고 싶고
  • 웹훅, 스케줄, 알림 같은 것들을 내 데이터로 처리하고 싶고
  • 무엇보다 “한 번 만들어두면” 반복 작업이 사라지니까요.

그런데 막상 n8n을 써보면, 자동화는 자동화인데… 정작 워크플로우를 만드는 과정 자체는 수동인 경우가 많습니다.

  • 노드가 많아지면 화면에서 연결선 따라가다가 눈이 아프고
  • “이 조건이면 여기로, 아니면 저기로” 같은 분기 로직이 늘어나면 수정이 겁나고
  • 실패한 실행(Execution)을 봐도, 어디서 왜 망가졌는지 추적이 귀찮아집니다.

여기서 등장하는 키워드가 MCP(Model Context Protocol) 입니다.

MCP는 쉽게 말해 AI(클라이언트)가 외부 도구(서버)를 안전하게 호출할 수 있게 만드는 표준 규격입니다. 요즘은 그대로 n8n mcp server(또는 “n8n MCP 서버”)라고 검색하면 관련 자료가 꽤 늘었고, 실제로 써보면 “자동화를 만드는 과정”이 훨씬 빨라집니다.

n8n을 MCP로 붙여두면, AI가 “말로” 요청을 받아 워크플로우를 만들고/수정하고/활성화하고/실행 로그까지 확인할 수 있습니다.

이번 글에서 다룰 조합은 아래입니다.

  • n8n (셀프호스팅): 자동화 엔진
  • n8n-mcp 서버(오픈소스): MCP 요청을 n8n REST API로 중계
  • MCP 클라이언트(예: Claude Desktop, Cursor 등): 실제로 AI와 대화하는 앱

오늘 만들 것(완료 기준)

완료 기준은 딱 4가지입니다.

1) Docker로 n8n을 실행한다 2) n8n에서 API 키를 만든다 3) n8n-mcp 서버를 실행해 MCP 클라이언트에 등록한다 4) AI에게 요청해서 Webhook → 응답 같은 간단한 워크플로우를 “생성/활성화”까지 시킨다


준비물(초보자 기준)

  • (권장) Ubuntu 22.04/24.04 서버 1대
  • Proxmox를 쓰는 분이라면: VM이나 LXC 안의 Ubuntu에 Docker 올려도 됩니다.
  • Docker / Docker Compose
  • n8n 접속 가능한 브라우저
  • MCP 클라이언트 1개
  • 예: Claude Desktop, Cursor 등

참고: n8n을 인터넷에 바로 노출할 필요는 없습니다. 처음엔 내 PC에서만 접속 가능한 내부망으로 두고, 잘 돌아가는 걸 확인한 뒤에 공개 범위를 넓히는 걸 추천합니다.


1) n8n 셀프호스팅 설치(Docker)

n8n 공식 문서는 Docker 설치를 가장 권장합니다. (공식 문서 출처는 아래 “이미지/출처”에 정리해두겠습니다.)

(1) Docker 준비

이미 Docker가 있다면 건너뛰세요.

# 무엇: Docker 설치 확인
# 왜: n8n을 컨테이너로 실행하기 위해
# 확인: 버전 출력이 나오면 OK
docker --version

docker compose version || docker-compose --version

(2) 가장 단순한 실행(공식 예시 기반)

처음엔 단순한 docker run으로 띄우는 게 이해가 빠릅니다.

# 무엇: n8n 데이터용 볼륨 생성
# 왜: 컨테이너를 재시작해도 워크플로우/설정이 날아가지 않게
# 확인: docker volume ls에서 n8n_data가 보임
docker volume create n8n_data

# 무엇: n8n 실행
# 왜: 5678 포트로 n8n 웹 UI 접근
# 확인: 브라우저에서 http://서버IP:5678 접속
export TZ="Asia/Seoul"

docker run -d \
  --name n8n \
  -p 5678:5678 \
  -e GENERIC_TIMEZONE="Asia/Seoul" \
  -e TZ="Asia/Seoul" \
  -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
  -e N8N_RUNNERS_ENABLED=true \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

실행 후 확인:

# 무엇: 컨테이너 상태/로그 확인
# 왜: 실행이 안 되면 여기서 바로 티가 남
# 확인: "Editor is now accessible" 같은 로그가 보이면 성공
docker ps --filter name=n8n

docker logs -n 50 n8n

실전 팁: 처음 설치 때 가장 흔한 실수는 방화벽(UFW) 때문에 5678이 막혀 있는 경우입니다. 내부망에서만 테스트할 거면, 아예 서버에서 curl http://localhost:5678로 먼저 확인해도 됩니다.


2) Docker Compose로 운영하기(권장)

docker run으로 한 번 띄우는 건 이해하기 쉽지만, 운영을 생각하면 Compose가 확실히 편합니다.

  • 컨테이너 재시작 정책(restart)
  • 환경변수/비밀값 관리(.env)
  • Postgres 같은 외부 DB 연동
  • 버전 업그레이드(이미지 태그 변경)

아래는 가장 흔한 조합(n8n + Postgres) 예시입니다. (초보자 기준으로 “일단 안정적으로” 굴리는 쪽)

# 무엇: n8n + Postgres를 docker compose로 실행
# 왜: 데이터(워크플로우/자격증명/실행 기록)를 좀 더 안정적으로 관리
# 확인: docker compose up -d 후 http://서버IP:5678 접속

services:
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=change-me
      - POSTGRES_DB=n8n
    volumes:
      - n8n_pg:/var/lib/postgresql/data

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - TZ=Asia/Seoul
      - GENERIC_TIMEZONE=Asia/Seoul
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=change-me
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  n8n_data:
  n8n_pg:

실전 팁: “일단 빨리” 시작하고 싶으면 SQLite(기본 DB)로도 충분합니다. 다만 워크플로우가 늘어나면 백업/이관/복구 시점에 Postgres가 편한 경우가 많습니다.


3) 리버스 프록시/HTTPS에서 자주 터지는 설정 3가지

내부망에서 http://서버IP:5678로만 쓰면 큰 문제가 없는데, 도메인(예: https://n8n.example.com)을 붙이면 갑자기 웹훅이 안 되거나 로그인 리다이렉트가 꼬이는 경우가 있습니다.

이럴 때 점검할 대표 설정 3가지는 아래입니다.

1) WEBHOOK_URL – 외부에서 접근하는 “정식 URL”을 n8n이 알아야 합니다.

2) N8N_HOST / N8N_PROTOCOL / N8N_PORT – 프록시 뒤에서 실제 접속 URL과 컨테이너 내부 포트가 다를 수 있습니다.

3) 프록시가 전달하는 헤더(X-Forwarded-Proto 등) – 프록시가 HTTPS 종료(TLS termination)한다면, n8n은 “겉보기 프로토콜이 https”인 걸 알아야 합니다.

초보자 기준으로는 아래처럼 환경변수를 잡아두면(예시) 문제를 줄일 수 있습니다.

# 무엇: 리버스 프록시 뒤 n8n URL 정합성 확보
# 왜: 웹훅/리다이렉트/자산 URL이 엉키는 문제 예방
# 확인: n8n에서 생성되는 Webhook URL이 https://도메인/... 형태로 나오는지

export N8N_HOST="n8n.example.com"
export N8N_PROTOCOL="https"
export N8N_PORT="443"
export WEBHOOK_URL="https://n8n.example.com/"

팁: 프록시 설정(nginx/traefik/caddy)에 따라 필요한 값이 조금씩 달라질 수 있습니다. 중요한 건 “내가 브라우저로 접속하는 URL”과 “n8n이 스스로 생성하는 URL”이 일치하도록 맞추는 겁니다.


4) n8n API 키 만들기(그리고 30초 테스트)

n8n-mcp 서버는 n8n REST API에 붙어야 합니다. 그래서 API 키가 필요합니다.

n8n 공식 문서 기준으로는 아래 흐름입니다.

  • n8n 로그인
  • Settings → n8n API로 이동
  • Create an API key 클릭
  • 라벨/만료 기간 설정
  • 생성된 키를 복사

(1) API 키 생성

UI에서 만들고 복사해두세요. (이 키는 비밀번호급입니다.)

(2) API 키가 진짜 동작하는지 테스트

가장 빠른 방법은 curl로 워크플로우 목록을 한번 호출해보는 겁니다.

# 무엇: n8n API 키로 인증 테스트
# 왜: 키가 틀리면 MCP 연결도 100% 실패
# 확인: 200 OK + JSON 응답이 오면 성공
export N8N_HOST="http://<n8n-서버IP>:5678"
export N8N_API_KEY="<내_API_키>"

curl -sS -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
  "${N8N_HOST}/api/v1/workflows?limit=5" | head
  • 401 Unauthorized가 나오면: 키가 틀렸거나, 헤더 이름이 틀렸거나, URL이 틀렸습니다.
  • 404가 나오면: n8n이 프록시 뒤에서 경로(prefix)가 붙어있을 수 있습니다.

5) n8n-mcp 서버 설치/실행(오픈소스, n8n mcp server)

이번 글에서 사용할 MCP 서버는(즉, n8n mcp server 구성은) AnonJon/n8n-mcp 프로젝트입니다.

이 서버는 대략 이런 일을 합니다.

  • MCP 클라이언트(Claude Desktop 등)와는 stdio(JSON-RPC) 로 대화
  • 내부적으로는 n8n에 HTTP + API Key로 요청
  • 워크플로우 목록/생성/수정/활성화, 실행(Execution) 조회 같은 도구를 제공합니다.

(1) Bun 설치 확인

이 프로젝트는 Bun을 예시로 사용합니다.

# 무엇: bun 설치 확인
# 왜: n8n-mcp 서버 실행에 필요
# 확인: 버전 출력
bun --version

Bun이 없다면 공식 사이트의 설치 안내를 따라 설치하세요.

(2) 프로젝트 다운로드 및 의존성 설치

# 무엇: 소스 내려받기
# 왜: MCP 서버 실행
# 확인: 폴더 생성 및 bun install 성공
git clone https://github.com/AnonJon/n8n-mcp.git
cd n8n-mcp
bun install

(3) (중요) N8N_API_URL / N8N_API_KEY 준비

이 서버는 환경변수 두 개를 필요로 합니다.

  • N8N_API_URL: n8n의 베이스 URL (예: http://localhost:5678)
  • N8N_API_KEY: 방금 만든 API 키

여기서 초보자가 자주 하는 실수:

  • 끝에 슬래시(/) 를 붙여서 http://localhost:5678/로 넣고, 어떤 도구에서 URL 합칠 때 //api/...가 되어 꼬이는 경우
  • n8n을 리버스 프록시로 /n8n 같은 경로에 붙여둔 경우

가능하면 처음엔 경로(prefix) 없는 기본 설치로 테스트하는 걸 추천합니다.


6) MCP 클라이언트에 n8n-mcp 서버 등록하기

여기서부터가 “AI에게 맡기기”의 핵심입니다.

(1) Claude Desktop 예시

Claude Desktop은 설정 파일에 MCP 서버를 등록합니다.

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

예시(공식 README 기반, 경로만 내 환경에 맞게 수정):

{
  "mcpServers": {
    "n8n": {
      "command": "bun",
      "args": ["run", "/absolute/path/to/n8n-mcp/src/index.ts"],
      "env": {
        "N8N_API_URL": "http://localhost:5678",
        "N8N_API_KEY": "n8n_api_..."
      }
    }
  }
}

저장 후 Claude Desktop을 재시작하면, n8n 관련 도구가 잡힙니다.

(2) Cursor 예시

Cursor는 .cursor/mcp.json을 쓸 수 있습니다.

{
  "mcpServers": {
    "n8n": {
      "command": "bun",
      "args": ["run", "/absolute/path/to/n8n-mcp/src/index.ts"],
      "env": {
        "N8N_API_URL": "http://localhost:5678",
        "N8N_API_KEY": "n8n_api_..."
      }
    }
  }
}

7) 실제로 AI로 워크플로우 만들기(가장 안전한 데모)

처음 데모는 외부 서비스(슬랙, 지메일, 텔레그램) 를 붙이지 않는 게 좋습니다.

외부 서비스는 자격증명(credential) 설정이 추가로 필요해서, 데모가 복잡해지고 “뭐가 문제인지”가 잘 안 보이거든요.

그래서 가장 안전한 데모는 아래입니다.

  • Webhook Trigger로 요청을 받고
  • 들어온 JSON에서 필요한 값만 뽑아서
  • “Respond to Webhook”으로 다시 응답

(1) AI에게 이렇게 요청해보세요

아래는 프롬프트 예시입니다.

n8n에 새로운 워크플로우를 만들어줘. Webhook 트리거(POST)로 /demo 경로를 만들고, 본문 JSON의 name 값을 읽어서 {"ok": true, "hello": "<name>"} 형태로 응답해줘. 워크플로우 이름은 MCP Demo - Hello로 해줘. 만든 다음 워크플로우를 활성화해줘.

성공하면 AI가 내부적으로 대략 이런 순서로 움직입니다.

1) (필요하면) 사용 가능한 노드 참고 자료를 읽고 2) create_workflow 도구를 호출해 워크플로우를 생성하고 3) activate_workflow로 활성화하고 4) 필요하면 list_executions로 디버깅합니다.

(2) 실제 호출 테스트

워크플로우가 활성화되면, 이제 webhook URL로 요청을 보내보세요.

# 무엇: Webhook 트리거 테스트
# 왜: 진짜로 동작하는지 확인
# 확인: ok=true, hello=... 형태의 JSON 응답
curl -sS -X POST "http://<n8n-서버IP>:5678/webhook/demo" \
  -H 'Content-Type: application/json' \
  -d '{"name": "Namwoong"}'

팁: n8n의 웹훅 경로는 설정에 따라 /webhook-test/ 같은 테스트용 URL이 따로 있을 수 있습니다. (실행 모드/활성화 여부에 따라) 테스트가 안 되면, 워크플로우 화면에서 Webhook 노드의 URL을 그대로 복사해 쓰세요.


8) 트러블슈팅(자주 터지는 것만)

401 Unauthorized

  • API 키가 틀림
  • 헤더 이름이 틀림(X-N8N-API-KEY)
  • 키를 복사할 때 공백/줄바꿈이 섞임

체크:

curl -i -H "X-N8N-API-KEY: ${N8N_API_KEY}" "${N8N_HOST}/api/v1/workflows?limit=1"

Connection refused / timeout

  • n8n이 실제로 떠 있지 않음
  • n8n이 localhost에만 바인딩되어 있고 외부에서 못 들어오는 환경
  • 방화벽에서 5678이 막힘

체크:

docker ps --filter name=n8n
ss -lntp | grep 5678 || netstat -lntp | grep 5678

URL(prefix) 문제

리버스 프록시에서 https://example.com/n8n처럼 경로를 붙여서 운영하면:

  • N8N_API_URL도 그 경로를 포함해야 합니다.
  • 예: https://example.com/n8n

그리고 어떤 설정은 웹훅 URL도 같이 영향을 받습니다. 처음엔 단순 구성으로 성공시킨 뒤에, 프록시/도메인을 붙이는 걸 추천합니다.


9) 비교: ‘AI + MCP + n8n’이 언제 유리할까?

아래는 제가 초보자에게 설명할 때 자주 쓰는 기준입니다.

선택지좋은 점아쉬운 점이런 분에게 추천
n8n만 단독 사용안정적이고, UI가 명확함워크플로우 설계/수정이 수동자동화는 하고 싶지만 AI 연동은 필요 없는 분
n8n + MCP(이번 글)말로 설계/수정/디버깅 가능, 반복 작업 속도가 확 빨라짐API 키 관리가 필요, “무엇을 허용할지” 판단이 필요자동화가 늘어나서 ‘만드는 과정’이 병목인 분
Zapier/Make시작이 쉬움비용/제한, 데이터가 외부로 나감빠른 프로토타입이 우선인 분
직접 스크립트(Python 등)자유도가 최대유지보수 난이도 상승개발/운영 경험이 있고 복잡한 요구가 있는 분

10) 기본 보안 설정(최소한)

AI에게 자동화를 맡길수록 “편한 만큼 위험도 같이” 옵니다. 그래서 아래만은 지키는 게 좋습니다.

  • API 키는 만료 기간을 두고, 테스트용/운영용을 분리
  • 키는 텍스트 파일에 평문으로 여기저기 복사하지 말기
  • n8n은 처음엔 내부망에서만 접근(또는 VPN/Tailscale 뒤)
  • 워크플로우에 외부로 나가는 HTTP 요청을 만들기 전에, 어떤 데이터가 나가는지 먼저 확인

마무리

n8n은 원래도 강력하지만, MCP로 AI를 붙이면 “자동화의 자동화”가 됩니다.

  • 내가 하고 싶은 말을 사람에게 설명하듯 말하면
  • AI가 워크플로우를 만들어주고
  • 필요하면 실행 로그까지 같이 보고 고쳐줍니다.

다음 단계로는:

  • 텔레그램/슬랙 알림 워크플로우를 AI에게 맡기기
  • 특정 에러 패턴이 나오면 자동으로 이슈를 만들기(GitHub 등)
  • 홈서버 상태(디스크/컨테이너)를 n8n으로 점검하고 리포트 받기

이런 확장이 가능합니다.


참고/관련 글(내부 링크)

  • n8n 설치 기본: https://homelablog.com/셀프-호스팅-자동화의-심장-n8n-설치-가이드/
  • 로컬 LLM에 도구 붙이기(MCP 기초): https://homelablog.com/ollama-mcp-시작하기2026-로컬-llm에-도구파일-웹-깃-연결하는-실/

출처(공식/원문)

  • n8n Docker 설치(공식 문서): https://docs.n8n.io/hosting/installation/docker/
  • n8n API 인증/키(공식 문서): https://docs.n8n.io/api/authentication/
  • n8n-mcp GitHub(원문): https://github.com/AnonJon/n8n-mcp

참고(공식 링크): n8n Docker Installation · n8n API Authentication · AnonJon/n8n-mcp

관련 글(내부 링크): n8n 설치 가이드 · Ollama MCP 시작하기

댓글 남기기

WordPress Appliance - Powered by TurnKey Linux