这是《Java 程序员的 AI 实战笔记》专栏的第一篇。这个专栏专门写给想用 AI 提效的 Java 工程师:不讲玄学算法,只讲能落地的工程实践。

我的博客:https://blog.csdn.net/qq_45896330 ,欢迎关注追更。

更新:这篇文章发布后,我把文中说的方案真正跑通了——AI 通过 MCP 成功把一篇测试文章发到了 CSDN。文末新增了完整的实战记录和踩坑实录,配截图。

一、起因:写文章的最后一公里太累了

作为 Java 工程师,我们写技术文章的流程通常是:

  1. 在 IDEA 里调通代码、踩完坑;
  2. 花一两个小时整理成 Markdown;
  3. 打开 CSDN 创作中心,把 Markdown 粘进去;
  4. 手动填标题、摘要、标签、专栏,逐项检查;
  5. 点发布,祈祷预览没乱。

前面 2 步是创作,没法省;但 3-5 步是纯机械劳动,每篇文章平均浪费 10 分钟,一年下来就是一部小说的时间。

于是我给自己定了个目标:让 AI 从"帮我写"进化到"帮我发"。

二、MCP 是什么?用 Java 工程师的话说

如果你是第一次接触 MCP(Model Context Protocol),可以把它类比成 JDBC:

  • JDBC 定义了 Java 程序访问数据库的标准接口,数据库厂商各自实现驱动;
  • MCP 定义了 AI Agent 访问外部工具的标准协议,工具提供方各自实现 Server。
AI Agent(客户端) ──MCP协议──> MCP Server(工具提供方) ──> 目标系统(CSDN / DB / 文件系统)

对 Java 工程师来说:你写一次 MCP Server,任何支持 MCP 的 AI 客户端都能调用你的工具,就像实现一次 JDBC 驱动,所有应用都能连你的库。

三、可选的三条路

方案 A:社区现成的 MCP Server

GitHub 上的开源项目 gulihua10010/mcp-server-article(Java + Spring AI MCP 实现),构建出一个 jar,配置到 MCP 客户端后即可用 publishArticle2Csdn 工具发文。这是本文最终跑通的方案,详见第五节。

方案 B:浏览器自动化直连

让 AI Agent 通过浏览器自动化直接操作创作中心。我在文章发布环节实测有效:标题、正文、标签、摘要全部由 AI 填写,一次成功。缺点是步骤多、每一步都要观察页面结构,遇到弹窗要逐个处理。

方案 C:自研 MCP Server

逆向创作中心的内部接口自己实现。自由度最高,但签名算法(x-ca-signature)可能变化,维护成本高,不推荐个人博主首选。

建议路线:先用浏览器自动化把流程跑通(顺便验证内容质量),再切到现成 MCP 提效,有特殊需求再自研。

四、方案 B 实战:AI 操作浏览器发文(已跑通)

我用 ZCode 的浏览器自动化实测,整个流程:

  1. 我在浏览器里登录 CSDN(人工只做这一步);
  2. AI 打开创作中心编辑页,把本地 Markdown 的标题填进标题栏;
  3. 正文写入 Markdown 编辑器(全选替换默认模板);
  4. 打开发布弹窗,添加标签、填写摘要;
  5. 我确认后点发布,10 秒后文章进入审核。

发布成功的瞬间:

【图1:发布成功页面】

在这里插入图片描述

这一步实测踩的坑(都是真实发生的,不是编的故事):

坑 1:CodeMirror 编辑器不能当普通输入框

CSDN 的 Markdown 编辑器是 CodeMirror 系,它真正的 <textarea> 是隐藏的(display:none),自动化工具直接对它 fill 会报"元素不可见"。解法:点击源码编辑区的可见文本获得焦点,再全选、粘贴。

坑 2:标题栏有两个长得一样的元素

页面里"【无标题】"出现了两次(一个真实标题栏、一个占位装饰),定位器直接按文本找会命中两个导致报错。解法:用标题栏的 class 精确定位。

坑 3:标签面板的重名文本

推荐标签列表里"Java"出现了 3 次,按文本点击会命中错误的元素。解法:改用标签搜索框输入 + 回车,100% 可靠。

坑 4:发布弹窗里不能直接新建专栏

"+ 新建分类专栏"会跳转到专栏管理页,在发布流程里走不通。解法:先建好专栏再发文。

五、方案 A 实战:MCP 自动发文(已跑通,重点)

浏览器方案跑通后,我把社区 MCP 项目真正接了进来,全过程 30 分钟:

第 1 步:构建

下载源码包 gulihua10010/mcp-server-article
mvn clean package -DskipTests
# 产出 target/mcp-server-0.0.1-SNAPSHOT.jar

第 2 步:配置 MCP 客户端

在工作区 .zcode/config.json 中注册(其他客户端同理,都是"命令 + 参数 + 环境变量"三件套):

{
  "mcp": {
    "servers": {
      "csdn-article": {
        "command": "java",
        "args": ["-jar", "mcp-server-article-main/target/mcp-server-0.0.1-SNAPSHOT.jar"],
        "env": { "CSDN_COOKIE": "你的CSDN Cookie" }
      }
    }
  }
}

第 3 步:验证

用 MCP 的 stdio 协议手工发一次 tools/call,Server 返回了 5 个注册工具(发布 CSDN/掘金/博客园、抓牛客面经、抓科技资讯),随即调用 publishArticle2Csdn 发了一篇测试文章。

23:10:54,测试文章出现在我的文章列表第一位——AI 全程无人值守发文成功:

【图2:MCP 发布的测试文章出现在文章管理列表】

在这里插入图片描述

它是怎么工作的

扒了一下源码,核心就一个类:带上你的 Cookie 和一组签名头,POST 到 bizapi.csdn.net 的 mdeditor/saveArticle 接口。所谓 MCP 发文,本质是用你的登录态调创作中心的内部接口。

这一阶段踩的坑

坑 5:GitHub 直连被重置

git clone 连续 SSL reset,解法:改用 codeload.github.com 的源码 zip 直链下载成功。网络不稳时 zip 比 clone 靠谱。

坑 6:Maven 阿里云镜像 Connection reset

构建中途断流。解法:原命令重试一次就过了,给 Maven 加重试参数更稳。

坑 7:MCP 工具的参数包了一层

tools/call 的入参不是直接的 {title, content, description},而是包在 articlePublishRequest 里(参数名对应 Java 方法形参)。第一次调用报参数校验失败,看了 tools/list 返回的 inputSchema 才发现。

坑 8:测试时别重复发文

stdio 手工测试如果管道写错,很容易重发第二篇。建议测试用最短内容,发完立刻去管理页确认篇数。

六、现在的完整工作流

  1. 我写好 Markdown 底稿(或 AI 起草、我改);
  2. 对 AI 说一句"把 xx.md 发到 CSDN";
  3. AI 调 MCP 工具发布,返回文章链接;
  4. 我去管理页看一眼,必要时编辑润色。

机械操作时间从 10 分钟降到约 1 分钟,且写完就想发,不再拖延。

七、还没解决的(下篇预告)

  • 工具只有"直接发布"没有"存草稿"(源码 status 写死 0),我计划加个 draft 参数;
  • 标签写死"后端",准备改成参数传入;
  • 签名头硬编码,CSDN 换算法就失效,属于长期风险;
  • Cookie 过期需要手动更新。

下一篇:《ZCode / Claude Code / Cursor:Java 工程师的 AI 编程客户端选型实测》。

你想让 AI 帮你自动化发文流程里的哪一步?评论区聊聊。

觉得有用的话,点个关注不迷路:《Java 程序员的 AI 实战笔记》每周二、周五更新 → https://blog.csdn.net/qq_45896330

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐