MCP协议+Claude Code:打造LinkedIn外联自动化流水线
2026/8/28 19:11:17 网站建设 项目流程

如果你做过 B2B 销售或增长运营,大概率经历过这种场景:消息模板写好了,1000 条目标联系人名单也整理好了,但真正开始执行时,只能一条条复制、粘贴、微调、发送。一天下来能发出 50 条就算效率不错,还要时刻担心复制错人,或者发了 200 条之后就完全分不清谁回复过、谁还需要跟进。

最近 Claude Code 和 Codex 这类终端型 Agent 火了之后,很多人的第一反应是拿它们写代码、改 Bug。但还有一个非常值得关注的用法:把它们当作“外联自动化系统的主管”,通过 MCP 协议接入约 30 个工具,让 AI 自己完成线索筛选、背景调研、文案生成、审核队列、消息发送和效果追踪。

这篇文章要拆解的,就是标题里的这句话:Let Claude/Codex run actual 1000s of LinkedIn outreach with ~30 MCP tools

先给一个明确判断:真正难的已经不是让 AI 写一条消息,而是设计一套可以被 AI 调度的工具链,并且安排好人工审核节点。本文会从 MCP 协议讲起,然后拆解为什么外联场景需要约 30 个工具,接着给出环境搭建、MCP 配置、最小跑通示例、常见问题和工程化建议。无论你是做 B2B 营销、开发者关系、招聘,还是自己在做独立产品,这套思路都能直接落地。

1. 这篇文章真正要解决的问题

单看“用 AI 写 1000 条 LinkedIn 消息”这件事,很多人第一时间想到的是:让 ChatGPT 生成 1000 条个性化文案,然后人工去发。这个想法只对了一半。真正跑过外联的人都知道,一天能发出 30 到 50 条已经算很快,1000 条意味着接近一个月的体力劳动,而且越到后面,消息的个性化程度越低,回复率也越差。

所以这个场景的瓶颈从来不在“内容生成”,而在“流程执行”。你需要一个系统来承担这些环节:

  • 导入 1000 条线索,而不是每次手动粘贴一条;
  • 解析每条线索所在公司的背景和动态;
  • 为每个联系人生成差异化开场白;
  • 把所有草稿写入待审核队列;
  • 等待人工确认后统一发送;
  • 追踪消息状态,谁回复了,谁需要二次跟进;
  • 把有效回复回写到 CRM 或表格。

Claude Code 和 Codex 这类终端 Agent 的价值,正在于它们可以作为这个系统的大脑。MCP 协议则解决了大脑与外部系统之间的连接问题:每一个工具都是一台“外接设备”,Agent 在运行时会按需调用。

这篇文章适合以下几类读者:

  • 正在做 B2B 销售、增长、开发者关系、人才招聘的从业者;
  • 想用 Claude Code / Codex 做真实工作流的开发者;
  • 对 MCP 协议感兴趣,想理解它为什么这么火的技术人;
  • 想把自己的业务系统接入 Agent,但不知道从哪里开始的人。

如果你只是想知道“哪个模型写文案更好”,这篇文章可能不适合你。如果你想搞清楚“如何把一批 AI 工具编排成一条完整流水线”,那这篇文章能给你一套可以照做的路径。

2. MCP 协议、Claude Code 与 Codex:先弄清楚几个概念

2.1 MCP 到底是什么

MCP 全称是 Model Context Protocol,即模型上下文协议。它最早由 Anthropic 提出并开源,后来被 OpenAI 等公司接受,现在已经成为 Agent 工具接入的事实标准之一。

它定义了一种统一的 JSON-RPC 消息格式,让 AI 应用可以动态发现工具、调用工具、获取结果。不需要为每个工具写一套私有适配器,也不需要把工具逻辑硬编码进模型。

我习惯用一个类比来解释 MCP:USB-C。过去每个外设都有自己的接口,接一个设备要装一套驱动。MCP 相当于统一成一个标准接口,只要新的工具实现了 MCP 协议,Agent 就能即插即用。今天一个 MCP server 可以连接数据库、CRM、表格、浏览器自动化、邮件服务,甚至 Figma 这类设计工具。蓝湖 MCP、Figma MCP 能出现在技术圈热搜里,就是这个生态扩展的结果。

2.2 Claude Code 和 Codex 各是什么

Claude Code 是 Anthropic 推出的终端智能体,一般通过claude命令启动。它不只是简单的聊天机器人,而是能读取项目文件、执行命令、修改代码、调用外部工具的 Agent。

Codex 是 OpenAI 推出的终端智能体,定位和 Claude Code 很接近,默认使用 OpenAI 的模型,也支持配置自定义 endpoint 接入其他模型服务。两者都原生支持 MCP,这是它们能跑复杂任务的关键。

很多搜索词里出现的“Claude Code 安装”“Codex 安装”“VSCode 配置 Claude Code”,说明已经有一批开发者开始把这类 Agent 当作开发环境的一部分。但 Claude Code 和 Codex 的能力边界并不只是写代码,它们可以通过 MCP 调用几乎任何具备接口的外部系统。

2.3 MCP 与 Agent Skill 的区别

最近还有一个概念很火:Agent Skill。它和 MCP 容易混淆,但两者解决的问题不同。

  • Skill 是给 Agent 的“行为手册”,它改变的是 Agent 在思考时用什么方法论、按什么步骤做事;
  • MCP 是给 Agent 的“外接工具接口”,它改变的是 Agent 能调用什么真实世界能力。

举个例子:你可以给 Claude Code 写一个 Skill,规定“外联消息要先调研公司背景再动笔,长度不超过 200 字符”。这个 Skill 只负责规范行为。但真正去查询公司库、写入数据库、发消息,仍然要靠 MCP server。

在实际工程中,两者通常配合使用:Skill 负责约束流程,MCP 负责提供能力。很多人把这两个概念混为一谈,会导致配置了 Skill 却发现 Agent 仍然无法操作外部系统的困惑。

3. 为什么 1000 条外联需要约 30 个 MCP 工具

3.1 外联流程拆解

LinkedIn 外联不是“写一条消息发出去”这么简单。按工程化视角拆解,一条完整的外联链路由六个阶段组成:

  1. 定位与筛选:找到目标联系人,包括职位、公司、行业、地域等维度;
  2. 数据补全与验证:补齐公司简介、人员背景、邮箱或联系方式,验证数据有效性;
  3. 个性化内容生成:根据每个联系人的背景生成差异化消息;
  4. 审核与队列管理:把草稿放入待审核队列,人工确认后放行;
  5. 执行发送与跟踪:实际发送连接请求或私信,记录发送状态;
  6. 数据回写与复盘:把回复情况写回 CRM,统计回复率和后续跟进任务。

这六个阶段需要的能力完全不同,一个通用的聊天界面无法覆盖,甚至一个两个 MCP server 也覆盖不了。这就是为什么场景会需要约 30 个 MCP 工具。

3.2 工具不是越多越好,而是分类要全

“约 30 个 MCP 工具”这个数字看起来很夸张,实际上是把整套外联流水线中所有可能用到的外部能力加总。按类型拆开看,大约是下面这个结构:

工具分类典型能力数量范围
线索获取类搜索联系人、公司列表、Sales Navigator 数据、招聘信息5-8
数据增强类公司简介、职位变更、邮箱查找与验证、社交动态4-6
内容生成类模板管理、多语言翻译、文案改写、语气审查3-5
流程与存储类数据库、表格、队列、状态管理、消息通知4-7
执行发送类浏览器自动化、官方 API 发送、定时发送2-4
分析与监控类回复分类、链接点击、CRM 写入、日报生成3-5

累计数量在 21 到 35 之间,所以“约 30 个”是一个合理规模。

但这里要特别提醒:不是一次任务把所有工具全部启用。工具数量越多,Agent 的上下文占用越严重,选择出错的概率也越高。正确做法是把工具按阶段分组,比如“线索获取阶段”只启用线索类和数据增强类,“发送阶段”才启用发送和追踪类工具。

3.3 MCP 生态不限于 LinkedIn

MCP 的价值也不只是让 Agent 调浏览器或发私信。现在很多业务系统都在提供 MCP server,比如通过 MCP 直接连接数据库、通过 MCP 接入设计稿、通过 MCP 写入 CRM。Workbuddy 这类工具可以让 Agent 通过 MCP 直接访问数据库,本质上也是一种“外联系统”。

所以,本文讲的是 LinkedIn 外联,但背后的架构思路是通用的。你换一个场景,比如邮件营销、开发者社区招募、客户成功回访,只需要替换对应的 MCP server 即可。

4. 环境准备与前置条件

4.1 基础环境要求

在开始之前,你需要准备以下环境:

  • Node.js 18 及以上版本,因为 Claude Code、Codex 和大多数 MCP server 都基于 Node.js 生态;
  • 一个可用的 Claude 账号或 OpenAI 账号;
  • 一个终端环境。macOS、Linux 可以直接用系统终端,Windows 推荐使用 PowerShell 或 WSL;
  • 准备一个实验目录,不要直接在正式项目目录里做第一个测试。

如果使用 Claude Code 时遇到 “unfortunately, claude is not available to new users right now” 这类提示,说明当前注册通路受限,可以稍后再试,或使用已有账号和组织账号。

4.2 安装 Claude Code 与 Codex

安装命令以官方文档为准,下面给出常见安装方式作为示例:

# 检查 Node.js 环境 node -v npm -v # 安装 Claude Code(以官方安装文档为准) npm install -g @anthropic-ai/claude-code claude --version # 安装 Codex CLI(以官方安装文档为准) npm install -g @openai/codex codex --version

如果安装后终端提示“claude 不是内部或外部命令”,一般是 npm 全局 bin 目录没有加入 PATH,或者安装过程失败。重新安装前可以先执行npm config get prefix查看全局安装路径。

4.3 注册 MCP Server

确认 CLI 安装成功后,可以用内置命令注册 MCP server:

# 查看当前版本支持的 MCP 命令 claude mcp --help codex mcp --help # Claude Code 注册示例:添加一个线索查询 MCP claude mcp add linkedin-prospect \ --env LINKEDIN_ACCESS_TOKEN=your_token_here \ -- npx @example/linkedin-prospect-mcp # 查看已注册的 MCP server claude mcp list # Codex 注册示例 codex mcp add linkedin-prospect \ -- npx @example/linkedin-prospect-mcp codex mcp list

上面示例中的@example/linkedin-prospect-mcp是占位包名,实际使用时应换成你自己搭建或社区维护的 MCP server。这里想说明的是注册方式:通过mcp add命令,把某个可执行命令注册为 Agent 可调用的工具。

如果你管理大量 MCP server,更推荐使用项目级配置文件.mcp.json,下一章会给出完整示例。

5. 核心架构与编排设计:让 Agent 成为“流程主管”

5.1 分层架构

用 Claude Code / Codex 跑 1000 条 LinkedIn 外联,核心不是写一段提示词,而是设计一套分层架构。推荐按四层拆分:

  • 入口层:Claude Code 或 Codex CLI,负责接收任务指令;
  • 编排层:Agent 的推理能力,根据任务拆分步骤,决定何时调用哪个 MCP 工具;
  • 工具层:约 30 个 MCP server,提供读线索、查公司、写表格、发消息等能力;
  • 数据层:CSV、SQLite、PostgreSQL 或 Airtable,存放线索、草稿、发送记录和回复状态。

这套架构还有一个重要组成部分:审批层。审批层不一定是系统,而是流程节点,典型做法是“所有消息进入待审核队列,人工确认后才允许发送”。

5.2 状态机设计

外联系统的核心是一张状态表,每条线索在不同阶段之间流转。建议至少包含以下状态:

  • draft:AI 已生成消息草稿;
  • review:草稿进入人工审核队列;
  • approved:人工审核通过,允许发送;
  • sent:已发送;
  • replied:对方已回复;
  • archived:已归档或无效线索。

为什么要显式维护状态机?因为 1000 条外联不是一次性发完,而是分批进行。如果没有状态管理,AI 很容易重复生成、重复发送,或者遗漏跟进。状态机是防止这类事故最简单有效的办法。

5.3 为什么要加人工审核节点

很多人做外联自动化时,最担心的就是 AI 直接发送消息导致账号异常或者内容失控。更稳妥的方案是:

  1. AI 只负责生成草稿并写入审核队列;
  2. 人工检查 10% 到 20% 的样本,确认内容质量;
  3. 审核通过后,由另一个独立的发送工具执行发送;
  4. 发送间隔、每日上限单独控制。

这个模式牺牲了一点自动化程度,但换来了可审核、可回滚、可追责。在生产环境中,宁可慢一点,也不要让 AI 裸奔发送。

6. 完整示例:从 0 到 1 跑通最小外联任务

这一章用一个最小示例跑通流程。目标是:让 Claude Code 或 Codex 读取线索 CSV,调用两个 MCP 工具,生成 10 条待审核消息。

6.1 准备线索数据

在项目目录下创建leads.csv

name,company,title,linkedin_url 李华,云启科技,CTO,https://www.linkedin.com/in/lihua 张伟,星途数据,创始人,https://www.linkedin.com/in/zhangwei 王芳,晨光智能,市场总监,https://www.linkedin.com/in/wangfang

这是外联系统的输入。字段不需要太多,够用即可。

6.2 创建 MCP 配置文件

在项目根目录创建.mcp.json

{ "mcpServers": { "linkedin-prospect": { "command": "npx", "args": ["@example/linkedin-prospect-mcp"], "env": { "LINKEDIN_ACCESS_TOKEN": "your_token_here" } }, "company-info": { "command": "npx", "args": ["@example/company-info-mcp"] }, "spreadsheet-store": { "command": "npx", "args": ["@example/spreadsheet-store-mcp"] } } }

这是当前 Claude Code 和 Codex 都支持的 MCP 配置文件格式。其中linkedin-prospect负责查询联系人,company-info负责获取公司简介,spreadsheet-store负责把草稿写入表格。

6.3 编写任务 Prompt

创建task.md,内容就是让 Agent 执行外联任务的指令:

你是外联系统主管。请按以下步骤执行: 1. 读取 leads.csv 中前 10 条记录。 2. 对每条记录调用 company-info 中的 get_company_summary 工具,获取公司一句话简介。 3. 使用 create_draft_message 工具生成一条不超过 200 字符的个性化消息。 4. 将生成结果写入 spreadsheet-store 中的 pending_review 表,状态设为 draft。 5. 最后输出统计摘要,包括读取数量、生成数量和失败数量。

这段话里的工具名需要和你实际接入的 MCP server 暴露的方法保持一致。如果写错工具名,Agent 会返回tool not found错误。

6.4 运行任务

把任务文本交给 Claude Code 或 Codex:

# Claude Code 非交互模式 claude -p "$(cat task.md)" # 或进入交互模式后粘贴 task.md 内容 claude # Codex 执行 codex exec "$(cat task.md)"

如果你的 CLI 版本不支持exec子命令,不同版本可能使用其他子命令,以codex --help输出为准。

6.5 MCP 协议最小骨架示例

如果你对 MCP 协议本身感兴趣,或者想自己写一个简单的 MCP server,下面这个 Node.js 示例展示了协议最核心的三个方法:initializetools/listtools/call

// 文件路径:demo-mcp-server.js const readline = require("readline"); const tools = [ { name: "create_draft_message", description: "根据联系人信息生成外联消息草稿", inputSchema: { type: "object", properties: { name: { type: "string", description: "联系人姓名" }, company: { type: "string", description: "公司名称" } } } } ]; const rl = readline.createInterface({ input: process.stdin }); rl.on("line", (line) => { try { const req = JSON.parse(line); if (req.method === "initialize") { const result = { protocolVersion: "2024-11-05", capabilities: { tools: {} }, serverInfo: { name: "demo-mcp-server", version: "1.0.0" } }; process.stdout.write( JSON.stringify({ jsonrpc: "2.0", id: req.id, result }) + "\n" ); } else if (req.method === "tools/list") { process.stdout.write( JSON.stringify({ jsonrpc: "2.0", id: req.id, result: { tools } }) + "\n" ); } else if (req.method === "tools/call" && req.params.name === "create_draft_message") { const args = req.params.arguments || {}; const text = "Hi " + (args.name || "") + ", I came across " + (args.company || "your company") + " and wanted to connect."; process.stdout.write( JSON.stringify({ jsonrpc: "2.0", id: req.id, result: { content: [{ type: "text", text }] } }) + "\n" ); } } catch (err) { process.stderr.write(

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询