项目简介

Instagram MCP Server 是一个基于 Model Context Protocol (MCP) 构建的后端服务器,专门用于从 Instagram 平台抓取公开的用户帖子数据。它利用已登录 Chrome 浏览器的会话信息,无需用户提供 Instagram 账号密码,即可安全地获取数据。此服务器实现了 MCP 协议,可以作为 LLM 应用的上下文信息提供者,使 LLM 能够调用工具获取 Instagram 数据,从而扩展 LLM 在社交媒体分析和内容创作方面的能力。

主要功能点

  • Instagram 数据抓取: 能够抓取指定 Instagram 用户公开的帖子内容,包括图片和视频。
  • 工具化接口: 通过 MCP 协议提供 'get_instagram_posts' 工具,方便 LLM 客户端调用。
  • 模块化架构: 代码结构清晰,易于维护和扩展,核心 MCP 功能和 Instagram 特性模块分离。
  • 类型安全: 使用 TypeScript 开发,提高代码质量和可维护性。
  • 错误处理: 具备完善的错误处理机制,返回标准化的错误代码和消息。
  • 配置灵活: 通过环境变量和配置文件进行服务器参数设置,例如 Chrome 用户数据目录等。
  • 媒体下载: 自动下载帖子中的媒体文件(图片、视频)及其元数据。
  • JSON-RPC 通信: 采用 JSON-RPC 2.0 协议与客户端进行通信。
  • Stdio 传输: 支持 Stdio 作为传输协议,方便集成和部署。

安装步骤

  1. 安装 Node.js 和 npm: 确保你的系统已安装 Node.js 和 npm (Node Package Manager)。
  2. 克隆仓库: 使用 Git 克隆 GitHub 仓库到本地:
    git clone https://github.com/duhlink/instagram-server-next-mcp.git
    cd instagram-server-next-mcp
  3. 安装依赖: 在仓库根目录下运行 npm 命令安装项目依赖:
    npm install
  4. 构建项目: 运行 npm 命令构建项目,将 TypeScript 代码编译为 JavaScript 代码:
    npm run build

服务器配置

MCP 客户端需要配置以下信息才能连接到 Instagram MCP Server。请将以下 JSON 配置添加到你的 MCP 客户端配置中。

{
  "serverName": "instagram-server",
  "command": "node",
  "args": [
    "dist/index.js"
  ],
  "env": {
    "CHROME_USER_DATA_DIR": "/path/to/your/chrome/user-data-dir"
  },
  "description": "Instagram 数据抓取 MCP 服务器"
}

参数注释:

  • 'serverName': 服务器名称,可以自定义,用于在 MCP 客户端中标识该服务器。 例如 '"instagram-server"'。
  • 'command': 启动服务器的命令,通常为 'node',表示使用 Node.js 运行时环境。
  • 'args': 启动服务器命令的参数数组。
    • '"dist/index.js"': 指向编译后的服务器入口文件路径。
  • 'env': 环境变量配置,用于服务器运行时环境。
    • '"CHROME_USER_DATA_DIR"': 重要参数,Chrome 用户数据目录的路径。请务必替换为你的 Chrome 用户数据目录的实际路径。该目录包含了 Chrome 浏览器的用户配置、书签、历史记录、登录会话等信息。服务器需要访问此目录以利用已登录的 Instagram 会话。你可以在 Chrome 浏览器地址栏输入 'chrome://version/' 查找 "Profile Path",其父目录即为 User Data Dir。
  • 'description': 服务器描述,用于在 MCP 客户端界面显示服务器的用途说明。例如 '"Instagram 数据抓取 MCP 服务器"'。

注意:

  • 请确保 Chrome 浏览器已登录 Instagram 账号,并且指定的 'CHROME_USER_DATA_DIR' 路径正确。
  • 首次运行服务器前,请先手动启动 Chrome 浏览器并登录 Instagram 账号,确保会话信息已保存到用户数据目录中。

基本使用方法

  1. 启动服务器: 在配置好 'CHROME_USER_DATA_DIR' 环境变量后,在仓库根目录下运行以下命令启动服务器:

    CHROME_USER_DATA_DIR=/path/to/your/chrome/user-data-dir npm start

    请将 '/path/to/your/chrome/user-data-dir' 替换为你的 Chrome 用户数据目录的实际路径。 或者,你也可以直接在 MCP 客户端中使用上面提供的 JSON 配置来启动服务器。

  2. MCP 客户端请求: 使用 MCP 客户端,通过 JSON-RPC 协议向服务器发送请求。例如,调用 'get_instagram_posts' 工具获取 Instagram 帖子。

    示例请求 (JSON-RPC 格式):

    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "call_tool",
      "params": {
        "name": "get_instagram_posts",
        "arguments": {
          "username": "instagram",
          "limit": 5
        }
      }
    }

    这个请求会调用 'get_instagram_posts' 工具,抓取 Instagram 官方账号('username: "instagram"')的最近 5 个帖子('limit: 5')。

  3. 查看响应: 服务器会返回 JSON-RPC 响应,包含抓取到的 Instagram 帖子数据。响应内容会根据工具的定义和执行结果而有所不同。

    示例响应 (JSON 格式):

    {
      "jsonrpc": "2.0",
      "id": 1,
      "result": {
        "content": [
          {
            "type": "json",
            "json": {
              "posts": [
                /* ... 抓取到的帖子数据 ... */
              ],
              "pagination": {
                /* ... 分页信息 ... */
              }
            }
          }
        ]
      }
    }

    响应中的 'content' 字段包含了服务器返回的内容,通常是 JSON 格式的帖子数据。

可用工具

  • get_instagram_posts: 获取指定 Instagram 用户最近的帖子。

    参数:

    • 'username' (必填): 要抓取帖子的 Instagram 用户名。
    • 'limit' (可选): 要抓取的帖子数量,可以是数字 (1-50) 或 '"all"' (抓取所有帖子,但实际受代码限制)。 默认为 3。
    • 'startFrom' (可选): 起始索引,用于分页抓取。默认为 0。

    示例请求:

    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "call_tool",
      "params": {
        "name": "get_instagram_posts",
        "arguments": {
          "username": "example_username",
          "limit": 10
        }
      }
    }

错误处理

服务器使用标准化的错误代码和消息,例如:

  • 'INVALID_REQUEST': 无效的请求格式或参数。
  • 'INVALID_PARAMS': 缺少或无效的参数。
  • 'METHOD_NOT_FOUND': 未知的方法或工具。
  • 'INTERNAL_ERROR': 服务器内部错误。

当发生错误时,服务器会返回 JSON-RPC 错误响应,客户端可以根据错误代码和消息进行相应的处理。

信息

分类

网页与API