LinkedIn MCP Server Documentation

LinkedIn MCP Server Documentation

用于 LinkedIn 集成的 n8n 的模型上下文协议 (MCP) 服务器

wedlock666

开发者工具
访问服务器

README

LinkedIn MCP 服务器文档

目录

  1. 简介
  2. 架构概览
  3. 安装指南
  4. 配置
  5. API 参考
  6. LinkedIn 功能
  7. n8n 集成
  8. 部署指南
  9. 测试
  10. 故障排除
  11. 安全注意事项
  12. 限制和合规性

简介

LinkedIn MCP 服务器是一个模型上下文协议 (MCP) 实现,它允许 n8n 和 LinkedIn 之间的集成,而无需官方 API 访问。它使用带有 Puppeteer 的 Web 自动化技术与 LinkedIn 的 Web 界面进行交互,从而提供个人资料管理、连接、消息传递、帖子和职位搜索等功能。

目的

此服务器允许您通过 n8n 工作流程自动化 LinkedIn 交互,从而实现各种用例:

  • 自动化连接管理
  • 个人资料数据提取和分析
  • 消息传递自动化
  • 内容发布和互动
  • 职位搜索和申请流程

主要特性

  • 个人资料管理:查看和搜索 LinkedIn 个人资料
  • 连接管理:发送连接请求和管理连接
  • 消息传递:发送消息和阅读对话
  • 帖子互动:创建、点赞、评论和分享帖子
  • 职位搜索:搜索职位、查看详细信息并在可能的情况下申请
  • MCP 协议支持:通过模型上下文协议与 n8n 无缝集成

架构概览

LinkedIn MCP 服务器遵循模块化架构,旨在实现可维护性和可扩展性:

核心组件

  1. MCP 服务器核心:实现基于 JSON-RPC 2.0 的协议,并支持 SSE
  2. LinkedIn 自动化引擎:使用 Puppeteer 进行 Web 自动化
  3. LinkedIn 功能模块:提供特定的 LinkedIn 功能
  4. n8n 集成层:将 MCP 服务器连接到 n8n 工作流程

技术栈

  • Node.js:运行时环境
  • Express.js:Web 服务器框架
  • Puppeteer:无头浏览器自动化
  • Puppeteer-Extra:增强的 Puppeteer,具有隐身功能
  • Winston:日志系统
  • JSON-RPC 2.0:MCP 的通信协议

目录结构

mcp-linkedin-project/
├── src/
│   ├── index.js                  # 主入口点
│   ├── routes/                   # API 路由
│   │   └── mcp.js                # MCP 协议路由
│   ├── controllers/              # 业务逻辑
│   │   └── linkedin-controller.js # LinkedIn 功能控制器
│   ├── services/                 # 核心服务
│   │   ├── browser.js            # Puppeteer 浏览器管理
│   │   ├── linkedin-auth.js      # LinkedIn 身份验证
│   │   ├── linkedin-profile.js   # 个人资料功能
│   │   ├── linkedin-connection.js # 连接功能
│   │   ├── linkedin-messaging.js # 消息传递功能
│   │   ├── linkedin-post.js      # 帖子功能
│   │   └── linkedin-job.js       # 职位功能
│   ├── models/                   # 数据模型
│   ├── utils/                    # 实用函数
│   └── config/                   # 配置文件
├── test/                         # 测试脚本
│   ├── test-mcp.js               # MCP 服务器测试
│   ├── n8n-webhook-test.js       # n8n webhook 模拟器
│   └── n8n-workflow-example.js   # n8n 工作流程示例
├── docs/                         # 文档
├── .env.example                  # 环境变量模板
├── package.json                  # 依赖项和脚本
├── start.sh                      # 服务器启动脚本
└── test.sh                      # 测试运行器脚本

安装指南

前提条件

  • Node.js (v16 或更高版本)
  • npm (v7 或更高版本)
  • 一个 LinkedIn 帐户
  • 互联网连接

本地安装

  1. 克隆存储库或下载源代码:
git clone https://github.com/yourusername/mcp-linkedin-project.git
cd mcp-linkedin-project
  1. 安装依赖项:
npm install
  1. 创建环境配置:
cp .env.example .env
  1. 使用您的 LinkedIn 凭据和其他设置编辑 .env 文件:
PORT=3000
MCP_SERVER_NAME="LinkedIn MCP Server"
MCP_SERVER_VERSION="0.1.0"

# LinkedIn 凭据
LINKEDIN_USERNAME="your-linkedin-email"
LINKEDIN_PASSWORD="your-linkedin-password"

# 安全设置
JWT_SECRET="your-secure-random-string"
COOKIE_SECRET="another-secure-random-string"
  1. 启动服务器:
./start.sh

Docker 安装

提供了一个 Dockerfile 用于容器化部署:

  1. 构建 Docker 镜像:
docker build -t linkedin-mcp-server .
  1. 运行容器:
docker run -p 3000:3000 --env-file .env linkedin-mcp-server

Proxmox LXC 容器安装

有关在 Proxmox 上作为 LXC 容器部署的信息,请参阅 Proxmox 部署指南

配置

环境变量

变量 描述 默认值
PORT 服务器端口 3000
MCP_SERVER_NAME 服务器名称 "LinkedIn MCP Server"
MCP_SERVER_VERSION 服务器版本 "0.1.0"
LINKEDIN_USERNAME LinkedIn 帐户电子邮件/用户名 -
LINKEDIN_PASSWORD LinkedIn 帐户密码 -
JWT_SECRET 用于 JWT 令牌生成的密钥 -
COOKIE_SECRET 用于 Cookie 加密的密钥 -
MAX_REQUESTS_PER_HOUR 每小时请求的速率限制 50
RATE_LIMIT_WINDOW_MS 速率限制窗口(以毫秒为单位) 3600000
HEADLESS 在无头模式下运行浏览器 true
USER_AGENT 浏览器用户代理 Mozilla/5.0...
LOG_LEVEL 日志级别 info
PROXY_SERVER 代理服务器(可选) -
PROXY_USERNAME 代理用户名(可选) -
PROXY_PASSWORD 代理密码(可选) -
PROXY_TYPE 代理类型 (http, https, socks5) http

浏览器配置

可以为不同的环境配置浏览器服务:

  • 无头模式:设置 HEADLESS=true 用于服务器环境,或设置 HEADLESS=false 用于调试
  • 用户代理:使用 USER_AGENT 自定义以避免检测
  • 代理支持:配置代理设置以进行 IP 轮换并避免速率限制

API 参考

LinkedIn MCP 服务器使用基于 HTTP 的 JSON-RPC 2.0 实现模型上下文协议 (MCP)。

端点

所有 MCP 请求都发送到:

POST http://localhost:3000/mcp

MCP 方法

initialize

初始化 MCP 会话。

请求:

{
  "jsonrpc": "2.0",
  "method": "initialize",
  "params": {},
  "id": "1"
}

响应:

{
  "jsonrpc": "2.0",
  "result": {
    "capabilities": {
      "tools": true,
      "resources": true,
      "prompts": true
    }
  },
  "id": "1"
}

listTools

列出可用的 LinkedIn 工具。

请求:

{
  "jsonrpc": "2.0",
  "method": "listTools",
  "params": {},
  "id": "2"
}

响应:

{
  "jsonrpc": "2.0",
  "result": {
    "tools": [
      {
        "name": "profile_view",
        "description": "查看 LinkedIn 个人资料",
        "parameters": {
          "type": "object",
          "properties": {
            "profileUrl": {
              "type": "string",
              "description": "要查看的 LinkedIn 个人资料的 URL"
            }
          },
          "required": ["profileUrl"]
        }
      },
      // 其他工具...
    ]
  },
  "id": "2"
}

executeTool

执行 LinkedIn 工具。

请求:

{
  "jsonrpc": "2.0",
  "method": "executeTool",
  "params": {
    "name": "profile_search",
    "parameters": {
      "keywords": "software engineer",
      "location": "San Francisco",
      "limit": 5
    }
  },
  "id": "3"
}

响应:

{
  "jsonrpc": "2.0",
  "result": [
    {
      "name": "John Doe",
      "title": "Senior Software Engineer",
      "location": "San Francisco Bay Area",
      "profileUrl": "https://www.linkedin.com/in/johndoe"
    },
    // 其他结果...
  ],
  "id": "3"
}

listResources

列出可用的 LinkedIn 资源。

请求:

{
  "jsonrpc": "2.0",
  "method": "listResources",
  "params": {},
  "id": "4"
}

响应:

{
  "jsonrpc": "2.0",
  "result": {
    "resources": [
      {
        "uri": "linkedin:profile",
        "description": "当前 LinkedIn 个人资料信息"
      },
      // 其他资源...
    ]
  },
  "id": "4"
}

readResource

读取 LinkedIn 资源。

请求:

{
  "jsonrpc": "2.0",
  "method": "readResource",
  "params": {
    "uri": "linkedin:profile",
    "parameters": {
      "profileUrl": "https://www.linkedin.com/in/johndoe"
    }
  },
  "id": "5"
}

响应:

{
  "jsonrpc": "2.0",
  "result": {
    "content": "...",
    "metadata": {
      "contentType": "application/json"
    }
  },
  "id": "5"
}

listPrompts

列出可用的 LinkedIn 提示模板。

请求:

{
  "jsonrpc": "2.0",
  "method": "listPrompts",
  "params": {},
  "id": "6"
}

响应:

{
  "jsonrpc": "2.0",
  "result": {
    "prompts": [
      {
        "name": "connection_request",
        "description": "LinkedIn 连接请求的模板"
      },
      // 其他提示...
    ]
  },
  "id": "6"
}

getPrompt

获取 LinkedIn 提示模板。

请求:

{
  "jsonrpc": "2.0",
  "method": "getPrompt",
  "params": {
    "name": "connection_request"
  },
  "id": "7"
}

响应:

{
  "jsonrpc": "2.0",
  "result": {
    "template": "Hi {{name}},\n\nI came across your profile and would like to connect. {{reason}}\n\nLooking forward to connecting,\n{{your_name}}",
    "parameters": {
      "name": {
        "type": "string",
        "description": "收件人的姓名"
      },
      "reason": {
        "type": "string",
        "description": "连接的原因"
      },
      "your_name": {
        "type": "string",
        "description": "您的姓名"
      }
    }
  },
  "id": "7"
}

LinkedIn 功能

个人资料管理

查看个人资料

检索有关 LinkedIn 个人资料的详细信息。

工具: profile_view

参数:

  • profileUrl:要查看的 LinkedIn 个人资料的 URL

返回:

  • 个人资料信息,包括姓名、职称、地点、关于、经历、教育和技能

搜索个人资料

根据关键字和过滤器搜索 LinkedIn 个人资料。

工具: profile_search

参数:

  • keywords:要搜索的关键字
  • location:地点过滤器(可选)
  • limit:要返回的最大结果数(可选)

返回:

  • 包含基本信息的个人资料结果列表

连接管理

发送连接请求

向 LinkedIn 个人资料发送连接请求。

工具: connection_send

参数:

  • profileUrl:要连接的 LinkedIn 个人资料的 URL
  • message:包含在请求中的可选消息

返回:

  • 连接请求的结果

列出连接

列出您的 LinkedIn 连接。

工具: connection_list

参数:

  • limit:要返回的最大连接数(可选)

返回:

  • 包含姓名、职业和个人资料 URL 的连接列表

列出待处理的请求

列出待处理的连接请求。

工具: connection_pending

参数:

  • limit:要返回的最大待处理请求数(可选)

返回:

  • 待处理的连接请求列表

消息传递

发送消息

向 LinkedIn 连接发送消息。

工具: message_send

参数:

  • profileUrl:要发送消息的 LinkedIn 个人资料的 URL
  • message:要发送的消息内容

返回:

  • 消息发送操作的结果

列出对话

列出 LinkedIn 对话。

工具: message_list

参数:

  • limit:要返回的最大对话数(可选)

返回:

  • 包含参与者、预览和时间的对话列表

阅读对话

阅读 LinkedIn 对话历史记录。

工具: message_read

参数:

  • conversationUrl:要阅读的对话的 URL
  • limit:要返回的最大消息数(可选)

返回:

  • 包含消息的对话历史记录

帖子管理

创建帖子

创建新的 LinkedIn 帖子。

工具: post_create

参数:

  • content:帖子内容
  • visibility:帖子可见性(连接、公开、任何人)

返回:

  • 帖子创建的结果

点赞帖子

点赞 LinkedIn 帖子。

工具: post_like

参数:

  • postUrl:要点赞的 LinkedIn 帖子的 URL

返回:

  • 点赞操作的结果

评论帖子

评论 LinkedIn 帖子。

工具: post_comment

参数:

  • postUrl:要评论的 LinkedIn 帖子的 URL
  • comment:评论内容

返回:

  • 评论操作的结果

分享帖子

分享 LinkedIn 帖子。

工具: post_share

参数:

  • postUrl:要分享的 LinkedIn 帖子的 URL
  • comment:要添加到分享的可选评论

返回:

  • 分享操作的结果

职位管理

搜索职位

在 LinkedIn 上搜索职位。

工具: job_search

参数:

  • keywords:要搜索的关键字
  • location:地点过滤器(可选)
  • datePosted:发布日期过滤器(可选:'past_24h'、'past_week'、'past_month')
  • limit:要返回的最大结果数(可选)

返回:

  • 职位结果列表

查看职位

查看 LinkedIn 上的职位详细信息。

工具: job_view

参数:

  • jobUrl:要查看的 LinkedIn 职位的 URL

返回:

  • 职位详细信息,包括职称、公司、地点、描述和要求

申请职位

申请 LinkedIn 上的职位(如果提供 Easy Apply)。

工具: job_apply

参数:

  • jobUrl:要申请的 LinkedIn 职位的 URL

返回:

  • 申请尝试的结果

n8n 集成

安装 MCP 节点

  1. 在您的 n8n 实例中,转到设置 > 社区节点
  2. 安装 "n8n-nodes-mcp"

配置 MCP 客户端节点

  1. 将 "MCP 客户端" 节点添加到您的工作流程
  2. 创建新凭据:
    • 连接类型:HTTP 传输
    • 服务器 URLhttp://localhost:3000/mcp(根据您的服务器进行调整)
    • 身份验证:无(或根据需要配置)

工作流程示例

个人资料搜索和处理

此工作流程搜索 LinkedIn 个人资料并处理每个结果:

  1. 触发节点:计划或手动触发
  2. MCP 客户端节点
    • 操作:执行工具
    • 工具:profile_search
    • 参数:
      • keywords: "software engineer"
      • location: "San Francisco"
      • limit: 5
  3. 迭代器节点:处理每个个人资料
  4. MCP 客户端节点
    • 操作:执行工具
    • 工具:profile_view
    • 参数:
      • profileUrl:当前项目的 profileUrl
  5. 设置节点:根据需要格式化数据
  6. 操作节点:存储或处理数据

自动化连接请求

此工作流程向搜索中的个人资料发送连接请求:

  1. 触发节点:计划或手动触发
  2. MCP 客户端节点
    • 操作:执行工具
    • 工具:profile_search
    • 参数:
      • keywords: "hiring manager"
      • location: "New York"
      • limit: 3
  3. 迭代器节点:处理每个个人资料
  4. 函数节点:生成个性化消息
  5. MCP 客户端节点
    • 操作:执行工具
    • 工具:connection_send
    • 参数:
      • profileUrl:当前项目的 profileUrl
      • message:生成的消息
  6. Slack 节点:发送已发送请求的通知

有关更多工作流程示例,请参阅 n8n 工作流程示例

部署指南

本地部署

要在本地运行服务器:

./start.sh

Docker 部署

要使用 Docker 部署:

docker build -t linkedin-mcp-server .
docker run -p 3000:3000 --env-file .env linkedin-mcp-server

Proxmox LXC 容器部署

有关在 Proxmox 上作为 LXC 容器部署的详细说明,请参阅 Proxmox 部署指南

测试

运行测试

要运行基本测试:

./test.sh

使用 n8n 进行测试

有关使用 n8n 进行测试的详细说明,请参阅 测试指南

故障排除

常见问题

身份验证失败

症状:

  • "检测到 LinkedIn 安全检查点" 错误
  • "登录期间检测到 CAPTCHA" 错误

解决方案:

  • 验证 .env 文件中的 LinkedIn 凭据
  • 在常规浏览器中手动登录 LinkedIn 以解决任何安全检查点
  • 考虑使用代理以避免检测
  • 降低请求频率以避免触发安全措施

速率限制

症状:

  • "请求过多" 错误
  • 扩展使用后操作失败

解决方案:

  • 调整 .env 文件中的 MAX_REQUESTS_PER_HOUR 设置
  • 在操作之间实施延迟
  • 使用代理轮换服务进行大容量操作

浏览器自动化问题

症状:

  • "找不到元素" 错误
  • 意外的页面结构

解决方案:

  • LinkedIn 可能已更新其 UI;检查选择器更改
  • 增加慢速连接的超时
  • 暂时设置 HEADLESS=false 以进行可视化调试

日志

检查以下日志文件以进行故障排除:

  • error.log:错误消息
  • combined.log:所有服务器日志
  • linkedin-*.log:特定的 LinkedIn 服务日志

安全注意事项

凭据管理

  • 安全地存储 LinkedIn 凭据
  • 使用环境变量或密钥管理器
  • 切勿将凭据提交到版本控制

速率限制

  • 尊重 LinkedIn 的使用政策
  • 实施适当的速率限制
  • 监控异常活动

网络安全

  • 对生产部署使用 HTTPS
  • 为 MCP 服务器实施适当的身份验证
  • 考虑使用 VPN 或代理进行 LinkedIn 连接

限制和合规性

LinkedIn 服务条款

此工具与 LinkedIn 的 Web 界面进行交互,应根据 LinkedIn 的服务条款使用。请注意:

  • LinkedIn 可能会随时更改其 UI,从而可能破坏功能
  • 过度自动化可能会导致帐户限制
  • 某些操作可能违反 LinkedIn 的服务条款

法律注意事项

  • 此工具仅用于教育和合法的商业目的
  • 用户有责任确保其使用符合适用的法律和服务条款
  • 在某些司法管辖区,数据抓取和自动化可能受到法律限制

技术限制

  • 复杂的 LinkedIn 交互可能无法完全自动化
  • 某些功能可能需要手动干预
  • 性能可能会受到网络状况和 LinkedIn 响应速度的影响

结论

LinkedIn MCP 服务器提供了一种强大的方式,可以将 LinkedIn 功能与 n8n 工作流程集成,而无需官方 API 访问。通过遵循本文档,您应该能够有效地安装、配置和使用服务器来满足您的自动化需求。

如需进一步帮助或报告问题,请联系项目维护人员。

推荐服务器

Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
mermaid-mcp-server

mermaid-mcp-server

一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。

精选
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

精选
TypeScript
Linear MCP Server

Linear MCP Server

一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

精选
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Curri MCP Server

Curri MCP Server

通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。

官方
本地
JavaScript