N8n 与 OpenClaw 集成部署文档

基于 MCP 协议实现 AI Agent 与工作流自动化平台的数据集成

📋 目录

  1. 部署概述
  2. n8n 部署配置
  3. 数据库配置
  4. OpenClaw MCP 集成
  5. 使用说明
  6. 故障排查
  7. 附录

部署概述

架构图

┌─────────────┐     MCP      ┌─────────────┐     SQL      ┌─────────────┐
│  OpenClaw   │ ═══════════> │     n8n     │ ═══════════> │  PostgreSQL │
│   (AI)      │   Protocol   │  (Workflow) │   Query      │   (Data)    │
└─────────────┘              └─────────────┘              └─────────────┘
                                    │
                                    │ HTTP
                                    ▼
                              ┌─────────────┐
                              │   Webhook   │
                              │   (备选)    │
                              └─────────────┘

技术栈

组件 版本 用途
n8n 2.12.3 工作流自动化平台
PostgreSQL 18.3 数据持久化存储
OpenClaw latest AI Agent 平台
MCP 1.0.2 模型上下文协议

n8n 部署配置

1. 目录结构

~/docker/n8n/
├── docker-compose.yml      # Docker Compose 配置
├── data/                   # n8n 应用数据
│   ├── config              # 配置文件
│   ├── database.sqlite     # SQLite 数据(如使用)
│   └── ...                 # 其他数据
└── postgres_data/          # PostgreSQL 数据
    └── data/               # 数据库文件

2. Docker Compose 配置

services:
  n8n:
    image: docker.1ms.run/n8nio/n8n:2.12.3
    container_name: n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      # PostgreSQL 数据库配置
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=xxx

      # n8n 认证配置
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin@localhost
      - N8N_BASIC_AUTH_PASSWORD=xxx
      - N8N_ENCRYPTION_KEY=xxx
      - GENERIC_TIMEZONE=Asia/Shanghai
      - N8N_LOG_LEVEL=info
      - N8N_SECURE_COOKIE=false

    depends_on:
      - postgres
    volumes:
      - ./data:/home/node/.n8n

  postgres:
    image: docker.1ms.run/library/postgres:18.3
    container_name: n8n-postgres
    restart: always
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=xxx
      - POSTGRES_DB=n8n
    volumes:
      - ./postgres_data:/var/lib/postgresql

3. 启动命令

# 进入目录
cd ~/docker/n8n

# 启动服务
docker-compose up -d

# 查看状态
docker-compose ps

# 查看日志
docker-compose logs -f

4. 访问信息

项目
访问地址 http://localhost:5678
用户名 admin@localhost
密码 xxx

数据库配置

1. 数据库表结构

conversations 表(会话表)

CREATE TABLE conversations (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    session_key VARCHAR(255) NOT NULL,
    user_id VARCHAR(255),
    user_name VARCHAR(100),
    channel VARCHAR(50),
    started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    ended_at TIMESTAMP,
    summary TEXT,
    metadata JSONB,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_conversations_session_key ON conversations(session_key);
CREATE INDEX idx_conversations_user_id ON conversations(user_id);

messages 表(消息表)

CREATE TABLE messages (
    id SERIAL PRIMARY KEY,
    conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
    role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'assistant', 'system')),
    content TEXT NOT NULL,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    tokens_used INTEGER,
    model VARCHAR(100),
    tool_calls JSONB,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_messages_conversation_id ON messages(conversation_id);

memories 表(长期记忆表)

CREATE TABLE memories (
    id SERIAL PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL,
    memory_type VARCHAR(50),
    content TEXT NOT NULL,
    source_conversation_id UUID REFERENCES conversations(id),
    confidence FLOAT DEFAULT 1.0,
    last_accessed TIMESTAMP,
    access_count INTEGER DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_memories_user_id ON memories(user_id);
CREATE INDEX idx_memories_type ON memories(memory_type);

2. 数据库连接信息

项目
Host postgres(Docker 服务名)
Port 5432
Database n8n
User n8n
Password xxx

OpenClaw MCP 集成

1. MCP 配置

编辑 ~/.openclaw/config.json

2. 获取工作流 ID

  1. 在 n8n 中打开工作流
  2. 查看浏览器 URL:http://localhost:5678/workflow/WORKFLOW-ID
  3. 复制 WORKFLOW-ID 部分
  4. MCP URL 格式:http://localhost:5678/mcp/WORKFLOW-ID

3. 重启 OpenClaw

openclaw gateway restart

4. 测试连接

在 OpenClaw 中发送:

使用 n8n 保存会话数据
session_key: test-001
user_name: 测试用户
channel: webchat
summary: 测试 MCP 连接

使用说明

场景 1:保存会话数据

OpenClaw 指令

使用 n8n 保存会话数据
session_key: xxx
user_name: xxx
channel: xxx
summary: xxx

n8n 工作流

  1. MCP Server Trigger 接收请求
  2. Postgres Tool 插入 conversations 表
  3. 返回成功响应

场景 2:查询历史会话

OpenClaw 指令

查询用户 xxx 的历史会话

n8n 工作流

  1. MCP Server Trigger 接收请求
  2. Postgres Tool 执行 SELECT 查询
  3. 返回查询结果

场景 3:保存长期记忆

OpenClaw 指令

保存记忆:用户偏好 xxx

n8n 工作流

  1. MCP Server Trigger 接收请求
  2. Postgres Tool 插入 memories 表
  3. 返回成功响应

故障排查

问题 1:MCP 连接失败

现象

Error: Server not initialized

解决方案

  1. 检查 n8n 是否正常运行:docker-compose ps
  2. 检查 MCP URL 是否正确
  3. 尝试改用 Webhook 方案

问题 2:数据库连接失败

现象

Error: connect ECONNREFUSED postgres:5432

解决方案

  1. 检查 PostgreSQL 容器状态
  2. 确认数据库配置正确
  3. 检查网络连接

问题 3:认证失败

现象

Error: Invalid credentials

解决方案

  1. 确认用户名格式为邮箱:admin@localhost
  2. 检查密码是否正确
  3. 重置密码并重启容器

附录

A. 常用命令

# 启动服务
cd ~/docker/n8n && docker-compose up -d

# 停止服务
cd ~/docker/n8n && docker-compose down

# 查看日志
cd ~/docker/n8n && docker-compose logs -f

# 重启 OpenClaw
openclaw gateway restart

# 查看 OpenClaw 状态
openclaw status

# 备份数据库
docker exec n8n-postgres pg_dump -U n8n n8n > backup.sql

# 进入数据库
docker exec -it n8n-postgres psql -U n8n -d n8n

B. 参考链接

C. 版本信息

组件 版本 更新时间
n8n 2.12.3 2026-03-20
PostgreSQL 18.3 2026-03-20
OpenClaw latest 2026-03-20
MCP Server 1.0.2 2026-03-20

备注

  • 敏感信息(密码、密钥)已使用 xxx 代替
  • 实际部署时请替换为真实值
  • 建议定期备份数据库
  • 生产环境请使用 HTTPS 和强密码

文档维护:wuhming 最后更新:2026-03-21 01:00