小红书自动化服务器

一个基于Playwright的小红书自动化服务器,支持内容发布、搜索、评论等功能,便于与AI代理集成。

  • by adjfks
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 adjfks/redbook-mcp

使用说明

小红书 MCP

介绍

一个基于 Playwright 的 Model Context Protocol (MCP) 服务器,为 小红书 提供自动化能力。该服务器使 LLM 能够通过浏览器自动化与小红书交互,支持内容发布、搜索、评论等功能。

主要特性

  • 内容发布。支持发布图文和视频内容,支持定时发布
  • 内容发现。搜索和浏览动态流,获取帖子详情,探索用户主页
  • 社交互动。点赞、收藏、评论和回复帖子
  • 登录管理。基于二维码的登录方式,支持持久化会话存储
  • LLM 友好。结构化的工具接口,便于与 AI 代理集成

系统要求

  • Node.js 18 或更高版本
  • VS Code、Cursor、Windsurf、Claude Desktop、Goose 或其他 MCP 客户端
  • Playwright Chromium 浏览器(首次运行时自动安装)

快速开始

首先,在你的客户端中安装小红书 MCP 服务器。

标准配置适用于大多数工具:

{
  "mcpServers": {
    "xiaohongshu": {
      "command": "npx",
      "args": [
        "redbook-mcp@latest"
      ]
    }
  }
}
Claude Desktop

按照 MCP 安装指南,使用上面的标准配置。

Cursor

点击按钮安装:

或手动安装:

进入 Cursor Settings -> MCP -> Add new MCP Server。自定义名称,使用 command 类型,命令为 npx redbook-mcp@latest。你也可以通过点击 Edit 来验证配置或添加命令参数。

VS Code

点击按钮安装:

或手动安装:

按照 MCP 安装指南,使用上面的标准配置。

Windsurf

按照 Windsurf MCP 文档。使用上面的标准配置。

Goose

点击按钮安装:

或手动安装:

进入 Advanced settings -> Extensions -> Add custom extension。自定义名称,使用类型 STDIO,并将 command 设置为 npx redbook-mcp@latest。点击 "Add Extension"。

CLI 使用

除了作为 MCP 服务器运行外,redbook-mcp 还支持命令行交互(CLI)模式。 你可以在本地直接运行命令进行交互。

常用命令

登录

启动交互式登录流程(会打开浏览器窗口显示二维码):

npx redbook-mcp login

搜索

搜索小红书内容:

npx redbook-mcp search "搜索关键词"

获取详情

获取指定笔记详情:

npx redbook-mcp detail <feed_id> --token <xsec_token>

配置选项

小红书 MCP 服务器支持以下参数。可以在上面的 JSON 配置中作为 "args" 列表的一部分提供:

选项 说明 默认值
--headless 以无头模式运行浏览器 true
--dataDir <path> 运行时数据目录(截图、下载等) ~/.redbook-mcp
--storagePath <path> 登录会话的 storageState.json 文件路径 {dataDir}/storageState.json
--chromePath <path> Chrome/Chromium 可执行文件路径(可选) 自动检测

环境变量:

你也可以使用环境变量来配置服务器:

环境变量 说明
XHS_HEADLESS 设置为 false 以有头模式运行
XHS_DATA_DIR 覆盖数据目录路径
XHS_STORAGE_PATH 覆盖存储状态文件路径
XHS_CHROME_PATH 覆盖 Chrome 可执行文件路径

配置示例:

{
  "mcpServers": {
    "xiaohongshu": {
      "command": "npx",
      "args": [
        "redbook-mcp@latest",
        "--headless",
        "false",
        "--dataDir",
        "/custom/data/path"
      ]
    }
  }
}

用户配置和会话管理

服务器使用持久化的浏览器配置文件来维护登录会话。所有登录信息都存储在存储状态文件中,在会话之间保持持久化。

默认存储位置:

# Windows
%USERPROFILE%\.redbook-mcp\storageState.json

# macOS / Linux
~/.redbook-mcp/storageState.json

你可以删除存储状态文件来重置登录会话。服务器会在下次需要身份验证的操作时提示你重新登录。

工具列表

身份验证

登录管理
  • check_login_status

    • 标题:检查登录状态
    • 说明:检查用户是否已登录小红书
    • 参数:无
    • 只读:true
  • get_login_qrcode

    • 标题:获取登录二维码
    • 说明:获取用于登录小红书的二维码。返回 Base64 编码的 PNG 图片
    • 参数:无
    • 只读:true
  • delete_cookies

    • 标题:删除 Cookies
    • 说明:删除 cookies 文件以重置登录状态。删除后,你需要重新登录
    • 参数:无
    • 只读:false(破坏性操作)

内容发布

发布工具
  • publish_content

    • 标题:发布内容
    • 说明:发布图文内容到小红书
    • 参数:
      • title (string):内容标题(最多 20 个中文字或英文单词)
      • content (string):正文内容(最多 1000 个字符,不包含话题标签)
      • images (array):图片路径 - 支持 HTTP/HTTPS URL(自动下载)或本地绝对路径
      • tags (array, 可选):话题标签列表,例如:["美食", "旅行", "生活"]
      • schedule_at (string, 可选):定时发布时间,ISO8601 格式(例如:"2024-01-20T10:30:00+08:00"),支持 1 小时至 14 天内
    • 只读:false(破坏性操作)
  • publish_with_video

    • 标题:发布视频
    • 说明:发布视频内容到小红书(仅支持本地视频文件)
    • 参数:
      • title (string):内容标题(最多 20 个中文字或英文单词)
      • content (string):正文内容(最多 1000 个字符)
      • video (string):本地视频文件绝对路径
      • tags (array, 可选):话题标签列表
      • schedule_at (string, 可选):定时发布时间,ISO8601 格式
    • 只读:false(破坏性操作)

内容发现

内容浏览
  • list_feeds

    • 标题:获取动态流
    • 说明:获取首页动态流列表
    • 参数:无
    • 只读:true
  • search_feeds

    • 标题:搜索内容
    • 说明:在小红书上搜索内容(需要登录)
    • 参数:
      • keyword (string):搜索关键词
      • filters (object, 可选):筛选选项
        • sort_by (enum, 可选):排序方式 - "综合", "最新", "最多点赞", "最多评论", "最多收藏"
        • note_type (enum, 可选):内容类型 - "不限", "视频", "图文"
        • publish_time (enum, 可选):发布时间范围 - "不限", "一天内", "一周内", "半年内"
        • search_scope (enum, 可选):搜索范围 - "不限", "已看过", "未看过", "已关注"
        • location (enum, 可选):位置筛选 - "不限", "同城", "附近"
    • 只读:true
  • get_specified_post

    • 标题:获取指定帖子
    • 说明:获取符合搜索条件的指定数量的帖子。返回帖子详情、作者信息、互动数据和评论。需要登录。
    • 参数:
      • keyword (string):搜索关键词
      • post_count (number):要获取的帖子数量
      • filters (object, 可选):与 search_feeds 相同的筛选选项
    • 只读:true
  • get_feed_detail

    • 标题:获取帖子详情
    • 说明:获取特定帖子的详细信息,包括内容、图片、作者信息、互动数据和评论。默认返回前 10 条一级评论。设置 load_all_comments=true 可获取更多评论。
    • 参数:
      • feed_id (string):从动态流列表获取的帖子 ID
      • xsec_token (string):从动态流列表的 xsecToken 字段获取的访问令牌
      • load_all_comments (boolean, 可选):是否加载全部评论
      • comment_config (object, 可选):评论加载配置
        • click_more_replies (boolean, 可选):是否点击"更多回复"按钮
        • max_replies_threshold (number, 可选):最大回复阈值
        • max_comment_items (number, 可选):要加载的最大评论数量
        • scroll_speed (enum, 可选):滚动速度 - "slow", "normal", "fast"
    • 只读:true
  • user_profile

    • 标题:用户主页
    • 说明:获取用户主页信息,包括基本信息、关注/粉丝/获赞量及其发布的帖子
    • 参数:
      • user_id (string):从动态流列表获取的用户 ID
      • xsec_token (string):从动态流列表的 xsecToken 字段获取的访问令牌
    • 只读:true

社交互动

互动工具
  • post_comment_to_feed

    • 标题:发表评论
    • 说明:在小红书帖子上发表评论
    • 参数:
      • feed_id (string):帖子 ID
      • xsec_token (string):访问令牌
      • content (string):评论内容
    • 只读:false(破坏性操作)
  • reply_comment_in_feed

    • 标题:回复评论
    • 说明:回复帖子下的特定评论
    • 参数:
      • feed_id (string):帖子 ID
      • xsec_token (string):访问令牌
      • comment_id (string, 可选):要回复的评论 ID
      • user_id (string, 可选):要回复的用户 ID(comment_id 的替代方案)
      • content (string):回复内容
    • 只读:false(破坏性操作)
  • like_feed

    • 标题:点赞帖子
    • 说明:点赞或取消点赞帖子(如果已经是期望状态则跳过)
    • 参数:
      • feed_id (string):帖子 ID
      • xsec_token (string):访问令牌
      • unlike (boolean, 可选):是否取消点赞(默认为 false,表示点赞)
    • 只读:false(破坏性操作)
  • favorite_feed

    • 标题:收藏帖子
    • 说明:收藏或取消收藏帖子(如果已经是期望状态则跳过)
    • 参数:
      • feed_id (string):帖子 ID
      • xsec_token (string):访问令牌
      • unfavorite (boolean, 可选):是否取消收藏(默认为 false,表示收藏)
    • 只读:false(破坏性操作)

架构概览

flowchart TB
    subgraph Client["MCP 客户端"]
        AI["AI 代理 / LLM"]
    end
    
    subgraph Server["redbook-mcp"]
        MCP["MCP 服务器<br/>(stdio)"]
        BM["浏览器管理器"]
        Services["服务模块<br/>登录 / 发布 / 搜索 / ..."]
        PW["Playwright"]
    end
    
    subgraph XHS["小红书"]
        Web["xiaohongshu.com"]
    end
    
    AI <-->|"通过 stdio 的 JSON-RPC"| MCP
    MCP --> BM
    BM --> Services
    Services --> PW
    PW <-->|"HTTP/WebSocket"| Web
    
    style Client fill:#1a1a2e,stroke:#16213e,color:#eee
    style Server fill:#16213e,stroke:#0f3460,color:#eee
    style XHS fill:#0f3460,stroke:#e94560,color:#eee

项目结构

src/
├── cli.ts                 # CLI 入口点
├── index.ts               # 包导出入口
├── lib/                   # 通用工具库
│   ├── config.ts          # 配置定义
│   ├── fs.ts              # 文件系统工具
│   └── mutex.ts           # 互斥锁
├── mcp/
│   └── server.ts          # MCP 服务器实现
├── storage/
│   └── storageStateStore.ts  # 登录状态存储
├── utils/
│   └── imageResolver.ts   # 图片处理工具
└── xhs/                   # 小红书业务模块
    ├── browserManager.ts  # 浏览器管理
    ├── comment.ts         # 评论服务
    ├── feedDetail.ts      # 帖子详情服务
    ├── feeds.ts           # 动态流服务
    ├── getSpecifiedPost.ts # 指定帖子获取服务
    ├── likeFavorite.ts    # 点赞/收藏服务
    ├── login.ts           # 登录服务
    ├── publishImage.ts    # 图文发布服务
    ├── publishVideo.ts    # 视频发布服务
    ├── search.ts          # 搜索服务
    ├── selectors.ts       # DOM 选择器
    ├── urls.ts            # URL 常量
    └── userProfile.ts     # 用户主页服务

开发指南

安装

npm install

安装 Playwright Chromium

npx playwright install chromium

构建

npm run build

调试模式

以可见浏览器窗口运行:

npm run debug

这将使用 XHS_HEADLESS=false 启动 MCP 检查器。

许可证

ISC