ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

MCP实战:Claude Code与Codex自动化LinkedIn外联

MCP实战:Claude Code与Codex自动化LinkedIn外联 在 B2B 海外获客这个场景里LinkedIn 外联一直是既费人力又难标准化的环节。搜索目标联系人、拼写个性化消息、发送连接邀请、等待回复后再跟进每一步都重复且耗时。直到 Claude Code 和 Codex 这类命令行 AI Agent 开始支持 MCP我发现原来需要写一大堆胶水代码才能串起来的事情现在可以让模型自己按流程调度工具完成。这篇文章将围绕一个很具体的需求展开让 Claude Code / Codex 通过大约 30 个 MCP 工具去执行规模化 LinkedIn outreach。我会从概念讲起再带你完成环境安装、MCP 配置、外联流程拆解、消息队列设计最后给出常见报错排查和合规建议。无论你是第一次接触 MCP还是已经在用 Claude Code 做自动化相信都能从里面找到可以直接复用的思路。1. 背景与核心概念1.1 为什么 LinkedIn 外联需要 MCPLinkedIn outreach 通常指主动联系潜在客户或合作伙伴。传统流程是搜索目标客户 - 查看公开资料 - 发送连接请求 - 等待通过 - 发送个性化消息 - 定期跟进。这个流程里最难的不是“发消息”而是“让消息看起来不像群发”。过去我们常用两种方式实现自动化写脚本调用官方 API稳定但开发成本高而且 LinkedIn 官方 API 对关系类操作限制严格。用 RPA 模拟浏览器点击灵活但页面一改就失效维护成本很高。MCP 提供了一种新路径。MCP 是让 AI 模型原生调用外部工具的开放协议。Claude Code 和 Codex 可以通过 MCP 直接读取表格、访问网页、操作浏览器、写数据库再结合模型的语言理解能力把“调研、生成、发送、记录”串成一条半自动流水线。相比传统脚本这种方式最明显的好处是灵活你不需要为每个业务逻辑单独写死代码只需要给 Agent 配置对应的 MCP 工具然后通过提示词描述目标和边界模型就会自己组合工具完成任务。1.2 约 30 个 MCP 工具怎么分工标题里的“约 30 个 MCP 工具”并不是指 30 个独立软件而是指一个 Agent 环境里注册的 MCP Server 数量。每个 Server 可以提供若干工具。拿外联流程来举例通常可以按功能分成几个类别分类典型工具能力建议数量数据接入读取 CSV、连接 Airtable、读写 PostgreSQL、同步 CRM 数据5~6 个搜索调研搜索引擎、公司信息查询、员工组织架构查询4~5 个浏览器自动化Playwright 浏览器操作、网页抓取、截图记录2~3 个内容生成消息模板、个性化文案、A/B 标题生成3~4 个消息执行LinkedIn 消息发送、邮件外联、Webhook 通知4~5 个状态管理SQLite、Redis、任务队列、定时调度5~6 个监控反馈日志写入、错误告警、结果回写 CRM2~3 个这样加起来正好在 25~32 个工具之间符合“约 30 个”。关键不是数量多而是每个工具都能在特定环节帮 Agent 减少不确定性让整个流程可追踪、可回滚。1.3 MCP 和 Agent Skill 的区别很多刚接触 MCP 的人会把它和 Agent Skill 放在一起比较。简单来说MCP 是给 Agent 装上手和眼睛负责访问外部数据、执行实际动作。Skill 是给 Agent 配上一套行为模板负责提供特定任务的经验和提示词。举例一个linkedin-message的 MCP Server 给模型提供“发送连接邀请”的能力一个outreach-skill则告诉模型“第一封消息应该怎么写、什么时候跟进最合适”。两者可以配合使用但定位完全不同。后面配置 MCP Server 时我们主要解决“能力”问题而提示词和 Skill 解决“方法”问题。2. 环境准备与版本说明2.1 运行环境要求Claude Code 和 Codex CLI 都是命令行工具跨平台支持。常见环境如下macOS 12 或更高版本。Windows 10/11推荐在 PowerShell 或 Git Bash 中运行。Linux例如 Ubuntu 22.04。Node.js 18 或更高版本建议 20 LTS。npm 9 以上。Git方便管理配置和脚本。如果你已经在用 VS Code可以直接在集成终端中操作。如果只是想体验 MCP也可以用 Claude Desktop 或 Dify 这类支持 MCP 的客户端。2.2 安装 Node.js 与 npmNode.js 是 Claude Code 和 Codex 的共同依赖。在 macOS 上可以用 Homebrew 安装brew install node node -v npm -vWindows 建议直接下载官方安装包安装完成之后重启终端确保node和npm都能被识别。2.3 安装 Claude CodeClaude Code 的安装命令很简单npm install -g anthropic-ai/claude-code claude --version如果你希望在项目里锁定版本也可以安装为项目依赖npm install -D anthropic-ai/claude-code npx claude --version第一次运行claude时通常需要登录 Anthropic 账号或配置 API Key。企业环境如果使用内网网关需要额外设置接口地址但我建议先走官方标准流程避免一开始就陷入代理配置问题。2.4 安装 Codex CLICodex 是 OpenAI 的命令行编程 Agent安装方式类似npm install -g openai/codex codex --version不同版本的 Codex 对账号和模型要求不同部分版本需要先在官网生成 Access Token再通过 CLI 登录。安装之后建议先运行codex --help查看当前版本支持的子命令因为 Codex 的更新频率很高不同版本的 MCP 配置方式可能不一样。2.5 常见安装报错我在实际配置过程中遇到过几个高频问题这里直接列出来。问题现象常见原因解决思路claude不是内部或外部命令npm 全局目录不在 PATH 路径里执行npm config get prefix把对应目录加入环境变量claude native binary not installed安装时原生二进制下载失败重装或换 npm 源后重新安装不要忽略 postinstall 输出cc switch local proxy failed while handling codex endpoint /responses第三方本地代理配置错误先用官方 API 验证 Codex 能正常工作再检查代理的 base URL 和模型名the gpt-5.6-sol model is not supported when using codex with a当前服务商不支持指定模型把模型名改成服务商实际支持的值重新启动 Codex这里特别说一下 CC Switch 这类工具。它本身不是官方产品本质上是本地代理用来在多个模型服务商之间切换。如果配置不对会出现local proxy failed之类的报错。排查时建议先绕过代理确认 Codex 本体能连通官方接口再逐步检查本地代理配置。不要把这类第三方工具和官方 CLI 混为一谈。3. MCP 协议理解与配置方式3.1 MCP 是什么MCP 是 Model Context Protocol 的缩写翻译过来是“模型上下文协议”。它由 Anthropic 提出后来被多个 AI 生态接受逐渐成为连接模型与工具的标准。一个 MCP Server 可以暴露若干工具客户端负责把模型的工具调用请求转发给对应的 Server再把结果返回给模型。你可以把 MCP 理解成“AI 应用的 USB 接口”。过去每个模型接入一个新工具都要写 SDK现在只要实现同一个协议就能被主流 Agent 使用。无论是 Claude Code、Codex、Claude Desktop 还是 Dify理论上都能共享同一套 MCP Server。3.2 Claude Code 配置 MCP ServerClaude Code 支持在项目根目录创建.mcp.json文件来注册 MCP Server。下面是一个最小示例{ mcpServers: { playwright: { command: npx, args: [playwright/mcplatest] }, fetch: { command: npx, args: [-y, modelcontextprotocol/server-fetch] }, sqlite: { command: npx, args: [-y, modelcontextprotocol/server-sqlite, data/outreach.db] } } }配置项解释playwright提供浏览器操作能力可以访问动态页面适合查看 LinkedIn 公开资料。fetch提供网页抓取能力适合读取不涉及登录的公开信息。sqlite提供本地数据库读写适合存储外联记录和状态。配置完成后在项目目录运行claude然后输入/mcp可以查看已加载的 Server。如果 MCP Server 启动失败Claude Code 会在交互界面中给出错误信息。3.3 Codex 配置 MCP ServerCodex 的 MCP 配置在不同版本有过调整。有的版本通过~/.codex/config.toml管理有的版本支持项目级配置文件还有的版本需要在启动命令里传入。官方推荐的做法是先运行codex --help或codex mcp确认当前版本支持的配置方式。下面是一个思路示例字段名需要对照官方文档调整[mcp_servers.playwright] command npx args [playwright/mcplatest]如果你的 Codex 版本较旧可能还不支持 MCP此时需要先升级。MCP 生态更新很快看到和旧教程不一致的配置时优先看官方 README不要硬套。3.4 本地 MCP Server 与远程 MCP ServerMCP Server 可以本地启动也可以是远程服务。本地服务通过command args拉起子进程远程服务通过url暴露 HTTP 或 SSE 接口。比如你开发了一个团队内部的外联服务部署到内网后配置可以写成{ mcpServers: { outreach-api: { url: https://internal.example.com/mcp, headers: { Authorization: Bearer YOUR_TOKEN } } } }远程配置的好处是多个 Agent 可以共用一套工具坏处是要自己处理认证、限流和审计。生产环境建议走内部网络不要把 Token 提交到 Git 仓库。4. LinkedIn Outreach 自动化流程拆解4.1 先想清楚流程再上工具“让 Claude/Codex 跑 1000s 的 LinkedIn outreach”听起来很爽但真正落地时第一步不是写代码而是把流程拆清楚。一次外联通常会经过几个阶段导入目标客户列表来源可以是 CSV、CRM 或数据库。调研客户画像公司、职位、近期动态。根据画像生成个性化消息。发送 LinkedIn 连接请求或 InMail。记录已发送、待跟进、已回复状态。定时跟进未回复客户。如果直接让 Agent“给所有人发消息”很容易失控。正确做法是让 Agent 按批次执行每批 20~50 条并且要求先写入人工审核队列审核通过后再发送。4.2 数据源工具数据源是整条流水线的起点。第一版建议直接用 CSV 或 SQLite后续再接 Airtable 或 HubSpot。下面是一条客户记录示例first_name,last_name,title,company,linkedin_url,status James,Smith,CTO,Acme Inc,https://www.linkedin.com/in/jamessmith,pending Maria,Garcia,VP Marketing,Globex,https://www.linkedin.com/in/mariagarcia,pendingAgent 可以读取这个 CSV过滤出statuspending的记录再逐条处理。这样做的好处是即使任务中断也可以从上次进度继续。4.3 调研与个性化消息生成调研阶段最耗时间也是最能让 AI 模型发挥价值的地方。你可以让 Claude Code 先调用搜索类工具查询公司近期新闻和职位变化再调用浏览器工具访问 LinkedIn 公开页。需要注意LinkedIn 对未登录访问限制很严通过登录态爬取页面存在账号风险建议优先使用官方 API 或合规的销售数据服务。生成消息时不要完全让模型自由发挥。更好的方式是用模板 变量例如你好 {first_name}看到你在 {company} 负责 {title}最近你们在关注 {topic}。我们刚好有一份资料可能对你有帮助方便 10 分钟交流吗模型只需要把模板变量替换成调研结果消息质量和可读性都会更稳定。4.4 发送与行为记录发送动作是整个流程中风险最高的环节。LinkedIn 官方并不鼓励自动化发消息过度自动化容易触发风控甚至限制账号登录。因此最稳妥的方式不是让 Agent 直接点击“发送”而是让它生成“准备发送的消息队列”再由人工在合规的外联工具中批量发送或者接入经过 LinkedIn 批准的合作 API。行为记录建议写入数据库。一个简单的表结构如下CREATE TABLE outreach_log ( id INTEGER PRIMARY KEY AUTOINCREMENT, linkedin_url TEXT NOT NULL, status TEXT NOT NULL, message TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );每次状态变化都记录一条日志方便后续分析回复率也方便审计。4.5 约 30 个 MCP 工具如何协作用一张 ASCII 图来展示整体协作方式CSV/CRM 数据读取 ↓ 搜索/浏览工具调研 ↓ 模板生成个性化消息 ↓ 队列 去重 人工审核 ↓ 发送工具可控限速 ↓ 结果写入 SQLite/CRM30 个 MCP 工具并不是一次性全部暴露给模型。为了减少误调用和 Token 消耗更推荐的做法是按阶段分组注册调研阶段只暴露搜索、抓取、浏览工具生成阶段只暴露模板和内容工具发送阶段才暴露队列和外部 API 工具。这样既容易定位问题也能降低操作风险。5. 完整实战用 Claude Code 跑通一条外联流水线5.1 创建项目结构先创建项目目录linkedin-outreach/ ├── .mcp.json ├── data/ │ └── prospects.csv ├── output/ │ └── messages.csv ├── scripts/ │ └── start.sh └── prompt.txt目录里放不同用途的文件Agent 能更稳定地定位路径也方便人工审核结果。5.2 准备 MCP 配置在项目根目录创建.mcp.json{ mcpServers: { playwright: { command: npx, args: [playwright/mcplatest] }, fetch: { command: npx, args: [-y, modelcontextprotocol/server-fetch] }, sqlite: { command: npx, args: [-y, modelcontextprotocol/server-sqlite, data/outreach.db] } } }配置里用到了三个 MCP Server。如果你只需要先测试“读取 CSV - 生成消息 - 写入审核队列”实际上只需要一个能读文件和写文件的工具。Playwright 可以等真正要访问网页时再加。5.3 编写任务提示词在prompt.txt中写入你是外联运营助手。请按以下步骤执行任务 1. 读取 data/prospects.csv找出 status 为 pending 的记录最多 20 条。 2. 对每条记录先判断 linkedin_url 是否为空为空则跳过。 3. 使用调研和浏览工具补充公司近期信息最多 2 条要点。 4. 根据模板生成一条不超过 200 字符的个性化消息。 5. 将结果写入 output/messages.csv字段顺序为 linkedin_url,message,research_notes。 6. 最后输出一份摘要包括成功生成条数和被跳过的条数。 注意只生成消息不要发送。这个提示词的关键是“边界清晰”。明确告诉 Agent 不要发送只做生成和写入可以避免很多不可控的后果。5.4 运行并观察在项目根目录启动 Claude Codecd linkedin-outreach claude -p $(cat prompt.txt)-p参数表示非交互式执行适合批量任务。首次运行会看到 Agent 依次调用工具。如果配置了 Playwright MCP可能会看到它打开浏览器访问页面。运行结束后检查output/messages.csvlinkedin_url,message,research_notes https://www.linkedin.com/in/jamessmith,你好 James看到你们最近在扩张数据团队...,公司官网发布招聘信息到这里一条最小可用的外联消息生成流水线就跑通了。5.5 Codex 版本调整如果你的主力环境是 Codex可以将同样的提示词交给codex执行。Codex 更适合编码类任务外联流程也能用但 MCP 配置方式不同。运行前先确认codex --help然后根据当前版本支持的配置格式把.mcp.json中的服务转换过去。两种 CLI 并不冲突可以在一台机器上同时安装按项目切换。6. 并发、队列与限速设计6.1 1000 条目标怎么落地标题里的“1000s”是可以做到的但它不是靠一次并发 1000 个浏览器窗口实现的而是靠多个小批次堆出来的。原因很简单LinkedIn 对异常行为有风控短时间内大量连接请求容易让账号受限甚至无法登录。一个比较稳妥的起步策略是每次处理 20 条每天最多 100 条稳定运行一周后再逐步提高。具体阈值取决于账号年龄、地区和历史操作频率没有统一标准。重要的是先证明消息质量再谈放大规模。6.2 用队列控制状态每一条外联都应该有状态机pending - researching - generated - approved - sent - replied用数据库记录状态Agent 每次执行只处理pending和generated的记录。这样即使任务中断也可以从上次位置继续不会重复发送。6.3 限速与随机延迟发送动作建议加随机延迟避免机械规律。例如每两条之间间隔 30~90 秒每小时最多 10 条。这个等待可以写在提示词里也可以由队列工具控制。如果接入的是第三方外联服务使用对方官方提供的限速参数即可不要强行绕过。6.4 日志与监控外联自动化的日志非常重要。至少记录以下信息消息内容。发送时间。目标 LinkedIn 地址。状态变化。模型使用的工具列表。错误信息。日志可以写进 SQLite也可以输出为 JSON Lines 文件。后续分析回复率时这些数据都是基础。7. 常见问题与排查7.1 安装类问题问题现象常见原因解决思路Claude 命令找不到npm 全局目录不在 PATH检查npm config get prefix加入 PATH或改用npx anthropic-ai/claude-codeclaude native binary not installed安装时原生依赖下载失败重装换 npm 源后重新执行Codex 启动报 MCP 相关错误版本过旧或配置字段变化升级 Codex查看codex --help第三方代理报 local proxy failed本地代理 base URL 或模型名错误先绕过代理验证官方 API再调整代理配置7.2 MCP Server 连接失败MCP Server 连接失败很常见原因可能是npx首次下载包太慢也可能是 Node.js 版本过低。建议先在独立终端手动执行一次启动命令例如npx playwright/mcplatest确认命令能正常拉起进程再回到 Claude Code 里加载。如果服务是远程 URL检查网络、Token 和接口是否可达。7.3 LinkedIn 登录与页面变化浏览器自动化访问 LinkedIn 时最麻烦的是登录态失效。可以每次运行前由人工确认登录状态或者用持久化浏览器上下文保存登录态避免重复扫码。另外LinkedIn 页面结构经常变化Playwright 选择器如果写死必然失效。所以在用 MCP 操作页面时尽量让模型通过元素文本定位而不是固定 CSS 路径。7.4 模型生成风格不一致如果用 Claude Code 和 Codex 交替执行生成的消息风格会不同。解决办法是把消息模板固化并要求模型严格遵循。模板中所有可变部分统一放在{{变量}}中再写个校验脚本检查变量是否被正确替换。8. 安全、合规与最佳实践8.1 先合法授权再自动化LinkedIn 外联自动化涉及目标用户数据、账号安全和平台服务条款。无论用什么技术实现都要先确认你有权处理这些联系人数据。目标市场和你的业务存在合理相关关系。平台规则允许你使用第三方工具。发送前有退订和投诉处理机制。任何自动化都不应该伪装成人也不应该绕过平台审核。建议优先使用 LinkedIn 官方批准的销售工具或合作伙伴 API这是最不容易违规的路径。8.2 最小权限与密钥管理MCP Server 的 Token、Cookie、API Key 都属于敏感信息。不要把密钥写进.mcp.json提交到 Git。更推荐的做法是用环境变量占位由启动脚本注入{ mcpServers: { outreach-api: { url: https://internal.example.com/mcp, headers: { Authorization: Bearer ${OUTREACH_API_TOKEN} } } } }给 Agent 的权限也要最小化只给访问外联数据的权限不给删除数据库的权限。8.3 数据备份与人工审核发送动作最好永远保留“人工确认”这一环。生成消息是一回事真正发送是另一回事。很多自动化项目都死在不该省的人工审核上。哪怕只是每天花 15 分钟看一遍待发送列表也能避免大批量低质消息毁掉账号和品牌。8.4 工程化建议配置版本化MCP 配置、提示词、模板都放进 Git方便回滚。任务幂等用记录 ID 做唯一约束重复执行不会产生重复数据。抽检机制每天随机抽 5% 的消息评估质量。指标追踪关注连接请求接受率、回复率而不是发送量。9. 总结与下一步到这里你应该理解了 MCP 在 LinkedIn 外联自动化中的位置它让 Claude Code 和 Codex 这类 Agent 可以调用真实工具把“找客户、写消息、排任务、记录结果”变成一条可复制的流水线。真正跑起来重心仍然是三件事拆流程、控节奏、留人工审核。下一步建议先在自己的测试账号上跑通“读取 CSV - 生成消息 - 写入审核队列”暂时不要碰发送。等流程稳定后再接浏览器或官方 API再逐步把批次放大。最后想提醒的是外联自动化拼的从来不是谁发得多而是谁的消息让目标客户愿意回复。先做到精准再追求规模账号和品牌都能走得更远。
返回列表