把 Claude Code 或 Codex CLI 接到大约 30 个 MCP 工具上,去跑 LinkedIn 外联自动化,这个思路最近讨论得很热。我直接说结论:方向可行,但大多数人第一步就会走偏——先照着教程装了一堆 MCP server,却没有先设计任务流。Claude Code 和 Codex 在这里不是聊天窗口里的机器人,它们是能读文件、跑脚本、调接口、写数据库的编码 Agent;MCP 是给 Agent 接外部能力的协议;LinkedIn 外联能不能跑出规模,关键要看三件事:数据源是否干净、发送队列是否合理、失败重试和合规控制是否到位。下面按实际落地顺序拆一遍,把我建议的最小流程、批量思路和常见报错整理出来。
1. 先想清楚:Claude Code / Codex 在这种自动化里到底扮演什么角色
1.1 Agent 是调度中心,不是发送器
先说一个容易被忽略的点。很多人看到“Claude/Codex run outreach”,以为是一个按钮自动向几百人发消息。实际不是这样,也不应该这样。
Claude Code 和 Codex CLI 都是终端里的编码 Agent。它们的核心能力是:能理解你的任务提示,然后主动调用终端工具、读写代码文件、执行命令、连接外部服务。它们不会像网页聊天那样只给一个答案就结束,而是可以拆成多步任务去执行。比如“读取名单 CSV、筛掉已联系过的、给前 20 人生成个性化首条消息、把结果写回表格、标记状态”。这一连串动作,AI Agent 可以逐步完成。
所以在这个自动化方案里,Agent 的角色是“流程调度中心”。它连接各个 MCP 工具,负责把命令拆成步骤,把步骤串成任务,把任务结果写回状态。后面能排到成百上千条,是因为同样的流程可以重复执行,而不是 AI 真的在同时“想”一千条消息。
效率来源就在这里:重复劳动自动化,但最终发送动作,我建议仍然保留人工确认。
1.2 MCP 是 Agent 的外部接口,和 Skill 不是一回事
MCP 的全称是 Model Context Protocol,模型上下文协议。它的作用是让 Agent 能调用外部工具,而不是只靠内置能力做文本生成。你可以把 Agent 比作大脑,MCP 比作手、眼和输出设备。
有了 MCP,Agent 就能做几类事情:
- 读文件、写文件、操作 CSV 或数据库;
- 调用浏览器自动化,打开页面、搜索公开信息、保存页面内容;
- 发送 HTTP 请求,调用 CRM、客户平台或内容服务的 API;
- 操作表格、读取日志、维护任务状态。
热词里有人问“Agent Skill 和 MCP 有什么区别”,这里顺带说清楚:Skill 更像是给 Agent 的“经验说明”,比如一套提示词和流程规则;MCP 则是真正可以执行的接口函数。Skill 教 Agent 怎么做,MCP 让 Agent 做得成。二者搭配使用很正常,不是替代关系。
一句话总结:Claude Code / Codex 是执行者,MCP 是工具箱,LinkedIn 外联只是其中一个使用场景。
2. 环境准备:Claude Code 与 Codex CLI 安装和 MCP 接入
2.1 安装和启动的常见坑
要跑这个方案,首先在本地装好 Claude Code 或 Codex CLI 其中至少一个。安装通常走 npm 全局安装或官方安装包,不同版本差异不小,以官方文档为准。Windows、macOS、Linux 都能用;Windows 下我更建议用 PowerShell 或 WSL 跑,因为路径、转义和环境变量更接近 Linux 习惯。
启动阶段最容易遇到几类报错,很多不是工具不能用,而是环境没准备好:
- 终端提示“claude 不是内部或外部命令”,或者“无法将‘claude’项识别为 cmdlet、函数、脚本文件”,说明安装没成功,或者 Node 全局 bin 目录没有加入 PATH。先重装确认安装输出,再看 PATH。
- 提示
claude native binary not installed. either postinstall did not run,一般是 npm 安装后 postinstall 脚本没执行。常见原因包括 Node 版本偏老、权限不足、网络中断。处理方式通常是清掉 node_modules 和缓存,重新安装,或者换一个 Node 版本再试。 - Codex 启动时如果报
model not supported,说明配置里写了一个当前 CLI 版本不支持的模型名。先更新 CLI,再查看当前支持的模型列表,不要把一个自定义模型名直接写进配置。
安装工具这件事我建议固定一个版本慢慢用,不要追最新。很多配置文件的字段、MCP 注册语法、模型名会随版本变化,固定版本能减少反复踩坑。
2.2 连接 MCP server 的正确方式
Claude Code 和 Codex 都有各自的 MCP 配置入口。你可以通过 CLI 命令交互式添加,也可以直接编辑配置文件。配置文件里要写清楚三样东西:MCP server 的名字、启动方式、必要参数。
按启动方式分,MCP server 大致两类:
- stdio 类型:本地启动一个子进程,通过标准输入输出通信。多数本地文件操作、数据库操作、脚本工具属于这一类。
- HTTP/SSE 类型:连接一个远程服务地址,适合团队共享的工具或云端服务。
无论哪种,注册完成后都要重启 CLI 会话,让配置生效。
我强烈建议不要一开始就配置 30 个 MCP server。先只加两个:一个用来读文件和写文件,一个用来执行 HTTP 请求或数据库操作。把最小链路跑通,再一步步加其他工具。MCP server 加多了以后,Agent 的工具选择会变慢,出错时排查也更难。工具数量是规模扩大的结果,不是开始的条件。
在 VSCode 里配置 Claude Code 或 Codex 时,有一点很容易忽略:编辑器里的终端环境变量可能和系统终端不完全一样。MCP server 启动时会继承那个终端里的 PATH、环境变量、代理设置。所以会出现“系统终端能运行,编辑器里却报错”的情况,这种时候先比较两边的环境变量差异。
3. 外联工作流需要哪几类 MCP 工具,30 个不是目的
3.1 按用途分五类 MCP 工具
30 这个数字听起来唬人,但拆分到实际外联工作流里,你很快会发现每个环节都需要几个工具。按照“数据输入、数据清洗、内容生成、发送通道、进度管理”这五类来划分,会比一堆名字清晰得多。
| 工具类别 | 解决什么问题 | 常见实现方式 |
|---|---|---|
| 数据读取 | 把联系人信息读进 Agent | 文件系统 MCP、数据库 MCP、CRM 数据源 |
| 数据清洗 | 去重、字段校验、避免重复触达 | 读写 CSV / 表格的 MCP,配合清洗脚本 |
| 内容生成 | 根据联系人动态生成个性化外联草稿 | 文本处理类 MCP、提示词流程 |
| 发送通道 | 把消息通过合法通道发出或保存待发 | 浏览器自动化 MCP(如 Playwright 类)、HTTP 请求 MCP、业务 API |
| 状态管理 | 记录每条记录的处理进度和结果 | SQLite / 表格 / 日志类 MCP |
外联任务里最费人工的不是“打字”,而是“记状态”:谁是今天要联系的,谁上周发了没回复,谁说过不要联系,谁已经变成有效线索。状态管理类工具是整个流程能持续跑起来的地基。
3.2 筛选 MCP 工具的三个标准
不是说“看到有 30 个就要全装上”,也不是“装得越多越专业”。我判断一个 MCP 工具值不值得接入,只看三点。
第一,它是否补上了一个具体断点。比如从 CRM 导出的联系人 CSV,Agent 能不能直接读取;读完之后能不能把生成结果写回。如果某个 MCP 只是听起来很炫,但和当前流程没有交集,就先不装。
第二,它能否重复执行。MCP 工具本质上是一个函数,要能接收参数并返回结果。如果一个工具需要人工点击界面才能完成,那它有等于没有。
第三,它是否可观测。工具调用前后的输入、输出、错误码,都要能通过日志看到。规模化外联最怕黑盒:某天任务跑完但没有输出,或者中间发了一批错误消息,而你没有日志可查。
如果你的目标真的就是所谓 30 个左右 MCP 工具,那么合理的构成大概是:数据类 6-8 个,内容类 5-6 个,浏览器和接口类 8-10 个,状态和日志类 6-8 个,再留几个备用替换工具。它是在流程需求中自然长出来的,不是一开始的目标。
4. 最小可运行流程:从单条外联到小批量验证
4.1 先跑通最小闭环
第一次测试不要接触浏览器、不要配置几十个工具。我建议用四步把“读文件→生成→写回文件”这个最小闭环跑通。
第一步:准备一个小 CSV,只有 10 行,字段至少包含姓名、职位、公司、地区、备注。不要用真实敏感数据测试,先用模拟数据。
第二步:在 CLI 里给 Agent 一条明确指令,大意是:
读取 contacts.csv,筛选出地区为“上海”的联系人, 为前 5 人各生成一条 150 字以内的第一封外联草稿。 草稿开头必须提到对方职位和公司,不要出现群发语气。 结果写入 output.csv,列包含:姓名、公司、草稿内容。第三步:让 Agent 执行后,打开 output.csv 检查内容。
第四步:如果没问题,把同样的指令再跑一遍,观察是否会重复写入。重复执行时是否追加、是否覆盖、是否生成重复文件,这是自动化里第一个要确认的点。
这个流程不需要写代码。Agent 会通过文件系统类 MCP 完成读写,你在终端里看到的就是一步步的工具调用记录。看到“读取文件→筛选→生成→写入”都正常,基础环境就算过关了。
4.2 小批量验证的判断标准
小批量测试不能只看“有没有输出”,要看四个点:
- 内容质量:草稿是否像真人写的,有没有把公司和职位写错,有没有明显的模板感。
- 格式稳定:CSV 的列是否对齐,中英文是否正常,带引号的字段是否被拆散。
- 幂等性:重复执行会不会重复生成或重复写入。
- 错误日志:执行过程中每一类工具调用的输入、输出、耗时能不能看到。
如果这一阶段出现“草稿方向不对”“链接和称呼写错”“任务跑一半不继续”等错误,不要急着调并发。先分析是提示词问题,还是 MCP 工具没有正确返回数据,还是数据本身字段缺失。
速度预期方面,本地环境差别很大。如果只是学习验证,默认配置通常够用;如果要跑几千条,单条生成 20 秒和 60 秒的总耗时会差出好几个小时。先记录单条平均耗时,后面设计队列时才有依据。
5. 扩展到上千条外联:队列、限速、失败重试和合规边界
5.1 怎么设计真正能跑上千条的流程
很多项目卡在“推不进生产”,不是因为 AI 不行,而是流程没有按批次处理。要把外联规模做大,我在实际落地里会先设计三样东西:批次、状态、队列。
第一,数据分批。不要一次性把 3000 条丢给 Agent。按 100-200 条一批,每批完成“读取清单→生成草稿→写回结果→更新状态”,做完一批再进下一批。批次能让失败控制在局部,也让日志更好排查。
第二,状态管理。每一批数据都要有一个状态字段,记录当前联系人处于哪个阶段。可以是一张 state 表,也可以是一个带 status 列的 CSV。至少要包含:未处理、草稿完成、已发送、已回复、暂不联系、已拒绝。
第三,失败重试。每条记录都要有重试次数和最大重试上限。遇到网络错误、MCP 工具暂时无响应,可以在 2-3 次重试后继续;如果连续多次都是同一错误,应该让任务主动停下来,而不是无限循环。
要给这个“停”设置一些硬条件。比如连续失败超过 10 条、写入结果为空超过 5 条、单次任务执行时间超过预定时长,这些信号说明不是个例问题,而是环境或输入有问题。停下来查,比重试十次更有意义。
{ "batch_size": 200, "max_retry": 3, "max_consecutive_failures": 10, "delay_range_seconds": [15, 45], "output_dir": "./outbound_results" }这是一个通用的批次配置示例,实际参数以你的场景为准。delay_range_seconds的意义是给每条发送间隔加一个随机范围,避免出现“每秒一条”这种机器感太重的节奏。
5.2 合规和消息质量红线
关于 LinkedIn 自动化,我必须说清楚一个边界。自动向大量陌生人发送重复消息,本身就违反很多平台的服务条款,也容易被平台风控限制。真正值得做的“规模化外联”,前提是数据合法、对象准确、消息个性化、频率可控。
我的建议是采用“半自动”模式:AI 负责生成草稿、整理资料、更新状态;人工在发送前做最后确认。用一个外部工具或浏览器自动化把待发送消息加载到界面,人工扫一眼后点击发送。这样既保留了效率,又把发送这个高风险动作留在人手里。
消息里还要注意:不要伪装身份,不要声称你认识对方,不要用夸大收益、承诺回报的方式写开放信。如果对方明确拒绝或者要求不要联系,必须把人从名单里移除。这一点不是一个可选项,而是必须做。
跑“1000s 条”更准确的理解是:累计管理上千条线索,而不是一天群发上千条陌生消息。先以周为单位设计节奏,一天 20-30 条有效连接,长期跑下来自然积累到千级。这个速度在外联场景里已经非常可观,而且风险低得多。
6. 高频报错排查:从 CLI 启动失败到 MCP 端点异常
6.1 常见报错对照和优先排查项
热词里列出了很多安装和运行报错,我整理成一个排查表,按“现象、常见原因、先查什么”的顺序。
| 报错现象 | 常见原因 | 优先排查路径 |
|---|---|---|
| 终端提示 “claude 不是内部或外部命令” | 安装未完成或 PATH 未包含全局 bin | 重新安装,检查 npm 全局 bin 目录 |
claude native binary not installed. either postinstall did not run | postinstall 没执行 | 清缓存后重装,换 Node 版本,检查安装权限 |
| Codex 报某个模型 not supported | 配置里写了当前版本不支持的模型名 | 更新 CLI,查看官方支持的模型列表 |
cc switch local proxy failed while handling codex endpoint /responses | 本地代理配置、网络端点配置或环境变量冲突 | 检查代理设置、baseURL、本地服务状态;不需要代理时清空相关配置 |
| MCP server 能启动但 Agent 调不到工具 | 配置名、路径或环境变量不一致 | 查看 MCP server 日志,确认配置中的命令和参数正确 |
| 任务执行到一半不动,没有报错输出 | 工具调用等待输入、网络超时 |