AiToEarn Documentation

TypeScript auto-publish & douyin repository by @yikart. Model Context Protocol (MCP) server & tools with 24k stars.

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy AiToEarn on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name aitoearn -p 27017:27017 --restart always aitoearn/aitoearn-ai:latest
Configured Services & Ports
⚙️ mongodb
image: mongo:latest
🔌 Ports: 27017:27017
⚙️ mongodb-rs-init
image: mongo:latest
⚙️ redis
image: redis:latest
🔌 Ports: 6379:6379
⚙️ rustfs
image: rustfs/rustfs:latest
🔌 Ports: 9001:9001
⚙️ aitoearn-init
image: node:lts-alpine
⚙️ rustfs-init
image: minio/mc:latest
⚙️ aitoearn-ai
image: aitoearn/aitoearn-ai:latest
⚙️ aitoearn-server
image: aitoearn/aitoearn-server:latest
⚙️ aitoearn-web
image: aitoearn/aitoearn-web:latest
⚙️ nginx
image: nginx:alpine
🔌 Ports: 8080:80, 9000:9000
docker-compose.yml
yaml (docker-compose.yml)
services:
  mongodb:
    image: mongo:latest
    container_name: aitoearn-mongodb
    restart: unless-stopped
    entrypoint: ["bash", "-c", "openssl rand -base64 756 > /data/mongodb-keyfile && chmod 400 /data/mongodb-keyfile && chown mongodb:mongodb /data/mongodb-keyfile && exec docker-entrypoint.sh mongod --replSet rs0 --keyFile /data/mongodb-keyfile"]
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: password
    ports:
      - "27017:27017"
    volumes:
      - mongodb-data:/data/db
      - mongodb-config:/data/configdb
    networks:
      - aitoearn-network
    healthcheck:
      test: ["CMD-SHELL", "mongosh mongodb://admin:password@localhost:27017/?authSource=admin --quiet --eval \"try { quit(rs.status().ok === 1 ? 0 : 1) } catch(e) { quit(1) }\""]
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 40s

  mongodb-rs-init:
    image: mongo:latest
    container_name: aitoearn-mongodb-rs-init
    depends_on:
      mongodb:
        condition: service_started
    entrypoint: ["/bin/sh", "-c", "until mongosh mongodb://admin:password@mongodb:27017/?authSource=admin --quiet --eval \"db.adminCommand('ping').ok\" >/dev/null 2>&1; do sleep 2; done; mongosh mongodb://admin:password@mongodb:27017/?authSource=admin --eval \"try { rs.initiate({_id:'rs0', members:[{_id:0, host:'mongodb:27017'}]}) } catch(e) { if (e.codeName!=='AlreadyInitialized') throw e }\""]
    restart: "no"
    networks:
      - aitoearn-network

  redis:
    image: redis:latest
    container_name: aitoearn-redis
    restart: unless-stopped
    command: redis-server --requirepass password
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    networks:
      - aitoearn-network
    healthcheck:
      test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
      interval: 10s
      timeout: 3s
      retries: 5
      start_period: 30s

  rustfs:
    image: rustfs/rustfs:latest
    container_name: aitoearn-rustfs
    hostname: rustfs.local
    restart: unless-stopped
    environment:
      RUSTFS_ACCESS_KEY: rustfsadmin
      RUSTFS_SECRET_KEY: rustfsadmin
    ports:
      - "9001:9001"
    volumes:
      - rustfs-data:/data
    networks:
      aitoearn-network:
        aliases:
          - rustfs.local
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/health"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  aitoearn-init:
    image: node:lts-alpine
    container_name: aitoearn-init
    restart: "no"
    depends_on:
      mongodb:
        condition: service_healthy
    volumes:
      - ./scripts/init.mjs:/app/init.mjs:ro
      - ./scripts/init-package.json:/app/package.json:ro
      - init-data:/data/init
    working_dir: /app
    environment:
      MONGO_URI: mongodb://admin:password@mongodb:27017
      JWT_SECRET: change-this-jwt-secret
      DB_NAME: aitoearn
      AUTO_LOGIN_TOKEN_PATH: /data/init/token.txt
    entrypoint: /bin/sh -c "npm install --omit=dev 2>/dev/null && node init.mjs"
    networks:
      - aitoearn-network

  rustfs-init:
    image: minio/mc:latest
    container_name: aitoearn-rustfs-init
    depends_on:
      rustfs:
        condition: service_healthy
    networks:
      - aitoearn-network
    entrypoint: >
      /bin/sh -c "
      mc alias set rustfs http://rustfs.local:9000 rustfsadmin rustfsadmin;
      mc mb rustfs/aitoearn --ignore-existing;
      mc anonymous set download rustfs/aitoearn;
      exit 0;
      "

  aitoearn-ai:
    image: aitoearn/aitoearn-ai:latest
    pull_policy: always
    container_name: aitoearn-ai
    restart: unless-stopped
    depends_on:
      mongodb:
        condition: service_healthy
      redis:
        condition: service_healthy
    volumes:
      - ./project/aitoearn-backend/apps/aitoearn-ai/config/config.yaml:/app/config.yaml:rw
    networks:
      - aitoearn-network
    healthcheck:
      test: ["CMD", "node", "-e", "require('http').get('http://localhost:3010/health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) })"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

  aitoearn-server:
    image: aitoearn/aitoearn-server:latest
    pull_policy: always
    container_name: aitoearn-server
    restart: unless-stopped
    depends_on:
      mongodb:
        condition: service_healthy
      redis:
        condition: service_healthy
      aitoearn-ai:
        condition: service_healthy
    volumes:
      - ./project/aitoearn-backend/apps/aitoearn-server/config/config.yaml:/app/config.yaml:rw
    networks:
      - aitoearn-network
    healthcheck:
      test: ["CMD", "node", "-e", "require('http').get('http://localhost:3002/health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) })"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

  aitoearn-web:
    image: aitoearn/aitoearn-web:latest
    pull_policy: always
    container_name: aitoearn-web
    restart: unless-stopped
    depends_on:
      aitoearn-server:
        condition: service_healthy
      aitoearn-init:
        condition: service_completed_successfully
    volumes:
      - init-data:/data/init:ro
    networks:
      - aitoearn-network
    command: ["/bin/sh", "-c", "AUTO_LOGIN_TOKEN=$$(cat /data/init/token.txt 2>/dev/null || true); if [ -z \"$$AUTO_LOGIN_TOKEN\" ]; then echo 'AUTO_LOGIN_TOKEN is missing. Check the aitoearn-init container logs.' >&2; exit 1; fi; export AUTO_LOGIN_TOKEN; exec node server.js"]
    environment:
      NODE_ENV: production
      NEXT_TELEMETRY_DISABLED: 1
    healthcheck:
      test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000', (r) => { process.exit(r.statusCode < 500 ? 0 : 1) }).on('error', () => process.exit(1))"]
      interval: 10s
      timeout: 5s
      retries: 6
      start_period: 30s

  nginx:
    image: nginx:alpine
    container_name: aitoearn-nginx
    restart: unless-stopped
    depends_on:
      aitoearn-web:
        condition: service_healthy
      aitoearn-server:
        condition: service_healthy
      aitoearn-ai:
        condition: service_healthy
    ports:
      - "8080:80"
      - "9000:9000"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    networks:
      - aitoearn-network
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost/_nhealth"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s

networks:
  aitoearn-network:
    driver: bridge
    name: aitoearn-network

volumes:
  mongodb-data:
    driver: local
  mongodb-config:
    driver: local
  redis-data:
    driver: local
  rustfs-data:
    driver: local
  init-data:
    driver: local

[Aitoearn:OPC(一人公司)的AI内容营销智能体](https://aitoearn.ai)



简体中文 | English | 日本語

Monetize · Publish · Engage · Create —— 一站式平台。

AiToEarn 通过 AI Agent自动化,帮助 OPC(一人公司)、创作者、品牌与企业在全球主流平台上构建、分发并变现内容。

支持渠道:
抖音、小红书(Rednote)、快手、哔哩哔哩、视频号、公众号、TikTok、YouTube、Facebook、Instagram、Threads、Twitter(X)、Pinterest、LinkedIn

🚀 快速使用 AiToEarn(5 种方式)

方式 适合谁 需要部署吗
① 打开网站直接用 所有用户 ❌ 不需要
② 在龙虾 OpenClaw 中用 龙虾用户 ❌ 不需要
③ 在 Claude / Cursor 等 AI 助手中用 AI 工具用户 ❌ 不需要
④ Docker 一键部署 想私有化部署的团队 ✅ 需要服务器
⑤ 源码开发 开发者 ✅ 需要开发环境

💡 方式 ②③④ 都需要先获取 API Key,请先看 如何获取 API Key。

最新动态

  • 2026-06-23: 2.5 version — Relay 配置改为在配置管理界面中操作,并拆分为 Server Relay 与 AI Relay:Server Relay 用于发布平台授权,AI Relay 用于使用平台提供的 AI 模型,新增开放平台。

  • 2026-05-21: 2.4 version — 草稿生成新增支持 HappyHorse 1.0 和 Seedance 2.0,增强视频/图文草稿批量生成、多模型选择、参考图片/视频、目标平台限制与文案提示词;带来全新界面风格,并增强 Twitter/X 探索与互动能力。

  • 2026-04-20: OpenClaw(龙虾)新增 AiToEarn 赚钱支持,可在龙虾中直接接收并执行内容变现任务。

  • 2026-03-26: 2.1 version — 内容交易市场上线;新增 OpenClaw(龙虾)支持,可在龙虾中直接使用 AiToEarn;新增 MCP 协议支持,可在 Claude、Cursor 等任何支持 MCP 的 Agent 或大模型中使用 AiToEarn。

  • 2026-02-07: 1.8.0 version,新增线下商户推广解决方案,支持餐厅、零售店、民宿、美容美发、健身房等多种线下业态,将线下推广活动转化为可执行的线上传播任务,通过内容发布与用户参与机制,帮助门店获取更多线上曝光和到店流量。

  • 2025-12-15: "All In Agent" 的开始!我们加入了能够自动内容生成和发布以及一些帮助你操作 Aitoearn 的超级 AI 智能 Agent。v1.4.3

  • 2025-11-28: 支持应用内自动更新。在创作界面新增大量 AI 功能,例如:缩写、扩写、图片生成、视频生成、标签生成等,并支持 Nano Banana Pro。v1.4.0

  • 2025-11-12: 首个开源且可完全使用的版本。v1.3.2

  • 2025-09-16: 首个出海版本,新增支持 Facebook、Instagram、Threads、Twitter、YouTube、TikTok、Pinterest。v1.0.18

  • 2025-02-26: 首个开源版本,初步实现小红书、抖音、快手、视频号视频一键发布。v0.1.1

    目录

    1. 快速使用 AiToEarn(5 种方式)
    2. 最新动态
    3. 核心功能
    4. 如何获取 API Key
    5. 贡献指南
    6. 联系
    7. 推荐

核心功能

AiToEarn 围绕内容创作者的完整变现链路,提供四大 Agent 能力:

Monetize · Publish · Engage · Create


💰 Monetize —— 内容赚钱

AiToEarn 最核心的目标:帮助每一位创作者赚钱。

创作者可以在平台出售内容以完成商家的推广任务。所有结算以结果为导向,我们提供三种结算模式:

结算模式 全称 含义
CPS Cost Per Sale 按成交额结算
CPE Cost Per Engagement 按互动量结算
CPM Cost Per Mille 按播放量结算

📢 Publish —— 内容发布 Agent

一键将内容分发到全球 10+ 主流平台,告别逐个平台手动发布。

  • 全网分发:覆盖抖音、快手、B站、小红书、视频号、微信公众号、TikTok、YouTube、Facebook、Instagram、Threads、X(Twitter)、Pinterest、LinkedIn
  • 日历排期:像排日程一样统一规划所有平台的内容发布时间

▶ 观看演示视频


💬 Engage —— 内容互动 Agent

通过 AiToEarn 浏览器插件,在上述所有平台上实现自动化互动运营。

  • 自动化操作:自动点赞、收藏、关注,批量高效运营
  • AI 智能回复:调用大模型为每条评论生成针对性回复,精准互动
  • 评论挖掘:识别"求链接""怎么购买"等高转化信号,快速响应
  • 品牌监测:实时追踪关于你品牌的讨论,主动参与热点话题

▶ 观看演示视频


🎨 Create —— 内容创作 Agent

我们用 Agent 的方式重构了内容制作流程。只需告诉 Agent 你的内容需求,它会自动完成从创意到成品的全部工作。

视频内容:Agent 自动调用视频生成模型(Grok、Veo、Seedance 等)、视频翻译模块、视频剪辑模块,一站式完成视频制作。

图文内容:支持调用 Nano Banana 等顶级图片模型,自动生成高质量图文内容。

批量生成:支持批量下发创作任务,Agent 可并行生成多条内容,快速铺量,适合矩阵账号运营和大规模内容分发场景。

▶ 观看演示视频


① 打开网站直接用

最简单的方式,打开浏览器即可使用,无需任何配置:


🔑 如何获取 API Key(后续步骤的前置条件)

以下的方式 ②③④ 都需要 API Key。只需获取一次,所有方式通用。

3 步获取:

  1. 打开 aitoearn.cn(中国用户)或 aitoearn.ai(国际用户),注册并登录
  2. 点击左侧菜单 设置
  3. 在 API Key 中点击创建,复制生成的 Key

② 在龙虾 OpenClaw 中使用

前置条件:已 获取 API Key

请在服务器终端输入以下命令!请在服务器终端输入以下命令!请在服务器终端输入以下命令!

安装插件

bash
npx -y @aitoearn/openclaw-plugin-cli

首次运行后会先让你选择环境并输入 API Key。请确保环境与 Key 匹配:

  • 中国版:使用 aitoearn.cn 获取的 API Key
  • 国际版:使用 aitoearn.ai 获取的 API Key

环境和 Key 不匹配会导致 401。

安装完成后,你就可以在 OpenClaw 中直接接收并执行 AiToEarn 的赚钱任务:


③ 在 Claude / Cursor / 其他 AI 助手中使用

前置条件:已 获取 API Key

AiToEarn 支持所有兼容 MCP 协议的 AI 助手。以下是常见工具的配置方式:

请根据 API Key 来源选择地址,环境和 Key 不匹配会导致 401:

环境 MCP 地址 SSE 地址
中国版 https://aitoearn.cn/api/unified/mcp https://aitoearn.cn/api/unified/sse
国际版 https://aitoearn.ai/api/unified/mcp https://aitoearn.ai/api/unified/sse

Claude Desktop

找到并编辑 claude_desktop_config.json,添加:

json
{
  "mcpServers": {
    "aitoearn": {
      "type": "http",
      "url": "https://aitoearn.ai/api/unified/mcp",
      "headers": {
        "x-api-key": "你的API-Key"
      }
    }
  }
}

Cursor

在 Cursor 的 MCP 设置中添加:

text
MCP 地址:https://aitoearn.ai/api/unified/mcp
认证 Header:x-api-key: 你的API-Key

其他 AI 助手(通用配置)

任何支持 MCP 协议的工具,只需要两个信息:

配置项 值
MCP 地址 https://aitoearn.ai/api/unified/mcp
认证 Header x-api-key: 你的API-Key

也支持 SSE 长连接方式:https://aitoearn.ai/api/unified/sse

💡 如果你是自部署用户,将 aitoearn.ai 替换为你自己的地址(如 localhost:8080)。


④ Docker 一键部署

前置条件:已安装 Docker

适合想把 AiToEarn 部署在自己服务器上的团队。3 条命令搞定,无需手动安装数据库:

bash
git clone https://github.com/yikart/AiToEarn.git
cd AiToEarn
docker compose up -d

启动后打开 http://localhost:8080 即可使用。

配置 Relay(强烈推荐)

为什么要配 Relay? 发布内容需要登录社交媒体账号(抖音、小红书、TikTok 等),而这些平台的 OAuth 登录需要开发者凭据。配置 Relay 后,你可以直接借用官方 aitoearn.ai 的凭据完成授权,不需要自己去各平台申请开发者账号。

在浏览器打开部署后的界面,进入 配置管理,按需分别配置:

  • Server → Relay 中转:用于内容发布和社交平台 OAuth 授权。
  • AI → Relay 中转:用于使用平台提供的 AI 模型。

OpenAI、Gemini、Anthropic 等模型服务商也可以在 AI → 模型服务商 中填写平台提供的 API Key 和 API 地址。

API Key 获取方式见 上方说明。中国版 Key 搭配 https://aitoearn.cn/api,国际版 Key 搭配 https://aitoearn.ai/api;环境和 Key 不匹配会导致 401。

保存后点击 保存并重启,让对应服务重新加载配置。

📖 完整部署指南(生产环境配置、AI 服务、OAuth、存储等)请参阅 DOCKER_DEPLOYMENT_CN.md。


⑤ 源码开发

🧪 手动运行后端和前端(开发模式)

此模式主要用于本地开发和调试。
您仍然可以使用 Docker 运行 MongoDB/Redis,或在配置文件中指向您自己的服务。

1. 启动后端服务

bash
cd project/aitoearn-backend
pnpm install
# 复制配置文件用于本地开发
cp apps/aitoearn-ai/config/config.yaml apps/aitoearn-ai/config/local.config.yaml
cp apps/aitoearn-server/config/config.yaml apps/aitoearn-server/config/local.config.yaml
pnpm nx serve aitoearn-ai
# 在另一个终端
pnpm nx serve aitoearn-server

2. 启动前端 `aitoearn-web`

bash
pnpm install
pnpm run dev

🖥️ 启动 Electron 桌面项目

bash
# 克隆仓库
git clone https://github.com/yikart/AttAiToEarn.git

# 进入目录
cd AttAiToEarn

# 安装依赖
npm install

# 编译 sqlite(better-sqlite3 需要 node-gyp 和本地 Python)
npm run rebuild

# 启动开发
npm run dev

Electron 项目为 AiToEarn 提供桌面客户端。

贡献指南

请查看 贡献指南 开始参与。

联系

如果你在使用过程中遇到困难、使用问题或异常情况,优先通过 GitHub Issues 提交反馈,方便我们统一跟进和处理。

推荐