🚀 创建 PHP MCP 应用以发布 Darkwood 文章

发布: (2026年3月2日 GMT+8 04:09)
10 分钟阅读
原文: Dev.to

Source: Dev.to

大型语言模型在文本生成方面已经表现出色。
然而,在许多项目中仍然缺少一种简单的方法,将这种生成转化为真正的工作流:撰写草稿、复审、校正、发布,并以直观的方式集成到 AI 客户端应用中。

这正是 MCP(Model‑Centered Programming)应用变得有趣的地方。

为什么 MCP 应用程序很重要

MCP 应用程序增加了更实用的功能:它们允许工具 嵌入自己的用户界面
这会显著改变交互模型:

  • 与仅返回文本不同,工具现在可以在宿主系统中打开专用界面。
  • 该界面可以显示输入状态、呈现结果、在整个流程中引导用户,并触发额外的工具调用。
  • 工具不再是单纯的远程函数,而更像是 完整的应用程序界面

在编辑工作流中,这种模型远比纯文本更为适合。

用例:在 Darkwood 上发布博客文章

此 MCP 应用用于简化在 Darkwood 上发布博客文章的过程。工作流包括两个主要步骤:

  1. GenerateDraft – 根据主题或上下文生成初始草稿。
  2. PublishDraft – 处理发布过程。

注意:如果草稿尚未满意,流程可以继续。可以回退、修改或重新审阅,然后再尝试发布。这个迭代循环至关重要,因为第一稿往往过于草率、过于通用、过长,或不符合编辑意图。

MCP 服务器,多种使用方式

服务器可以通过不同的传输方式使用:

传输方式描述典型使用场景
Stdio主机启动服务器,通过标准输入发送 JSON‑RPC 消息,并从标准输出读取响应。Claude Desktop 扩展、本地集成、Claude Desktop 打包。
HTTP服务器提供 HTTP API。可以由专用且持久的进程提供服务(例如:flow worker)。面向浏览器的主机、本地测试、在 HTTP 限制比子进程更方便的环境中。

备注:当涉及 MCP 应用时,用户界面通过另一个 JSON‑RPC 通道(通常是 postMessage)与主机通信。因此存在 两个通信层级

  • 主机 ↔ 服务器通过 MCP,
  • UI 界面 ↔ 主机通过 postMessage

MCP 连接的生命周期

  1. 初始化 – 主机初始化连接并发现服务器的能力。
  2. 发现 – 主机列出可用的工具和资源。
  3. 调用 – 当用户触发工具时,主机在服务器上调用该工具。
  4. 资源 UI – 如果工具拥有界面资源 (ui://…),主机加载该资源并在隔离的 iframe 中显示。
  5. 交互 – MCP 应用变为交互式:它接收用户输入的数据,显示结果,并通过主机触发补充操作。

在 Darkwood 工作流中,这意味着用户(或助手)可以从草稿生成切换到发布,然后再回到修正循环,整个过程无需离开 MCP 交互模型。

架构

概览

+-------------------+        +-------------------+
|   Hôte MCP        |  |   Serveur PHP     |
| (client)          |        | (MCP server)      |
+-------------------+        +-------------------+
        ^                               ^
        |                               |
        | JSON‑RPC (Stdio / HTTP)       |
        |                               |
        v                               v
+-------------------+        +-------------------+
|   Interface UI   |  |   Ressources UI   |
+-------------------+        +-------------------+

MCP 主机连接到 PHP 服务器。
这种分离使得在兼容的主机上保持可移植的用户界面,同时在服务器端保持干净的 MCP 合约

详细传输

Stdio

  • 适用于 Claude Desktop 扩展。
  • 主机启动服务器,通过 stdin/stdout 交换 JSON‑RPC 消息。
  • 简单、本地且高效,适用于客户端管理进程的情况。

HTTP

  • 适用于面向浏览器的主机、本地测试或任何使用 HTTP 更方便的配置。
  • 两种实现模式:
    1. 专用且持久的进程(例如:flow worker)。
    2. 传统 HTTP 服务器(例如:Symfony Server)。

重要: “支持 HTTP” 并不自动意味着 “在所有地方都支持相同的执行模型”。

  • 使用 Stdio持久 HTTP worker,可以考虑使用持久进程,从而实现异步功能、事件循环和持续编排。
  • 使用 Symfony Server 时,每个请求都在同步的 HTTP 循环中处理:实现更简单,但工作流的编排需要委托(例如:Flow 层或外部协调)。

编辑流管理

  1. 初始化 – 主机负责传输、渲染以及用户界面与服务器之间的连接。
  2. 编排Flow 层在涉及多个操作和状态转换的工作流中进行编排。

编辑流通常涉及不止一个操作和不止一个状态转换;Flow 层确保这些步骤得到正确协调。

结论

MCP 应用提供了集成用户界面,将单纯的文本生成转变为完整工作流:撰写、审校、发布和迭代。
在 Darkwood 的情境下,这实现了:

  • 快速生成初稿。
  • 在不离开 MCP 环境的情况下轻松迭代(校正、审阅)。
  • 流畅地发布最终内容。

通过将 StdioHTTP 传输相结合,并采用清晰的架构(主机 ↔ 服务器 ↔ UI),开发者能够打造丰富、响应迅速且易于扩展的编辑体验。

这种设计对出版工作流有效吗?

这不仅仅是一次简单的函数调用,也不是完整的后台应用程序。
它需要足够的结构来管理状态和决策,同时又足够轻量,能够通过与 AI 的对话触发。

这正是 MCP 应用程序 在此处完美适用的原因。

各层的角色

  • 工具接口 – 为模型提供交互界面。
  • 用户界面 – 为用户或客户提供受控的工作流视图。
  • 流编排 – 使系统能够管理多步骤的转换。

这种组合之所以有效,是因为每一层都保持专注:

  • 模型决定 何时 使用工具,
  • 项目不仅仅是本地原型或浏览器演示;它可以安装在 Claude 中,作为真正的工具集成使用。

配置

  1. 扩展清单 – 定义 Claude 如何启动服务器。
  2. 从原型到真实编辑工具 – 项目已经为编辑工具定义了一种可复用的形式:
    • 用于生成草稿的工具,
    • 一旦该结构就位,工作流的改进就会变得更简单:
      • 优化生成质量,
      • 丰富发布元数据,
      • 添加验证,
      • 集成真正的 CMS。

托管方、用户界面和服务器之间的契约保持稳定。

开源

https://github.com/darkwood-com/darkwood-publish-article-mcp-apps

Conclusion

Darkwood 的案例中,最有趣的并不是 PHP 能够与 MCP 通信。
更有趣的是,一个 PHP MCP 服务器现在可以作为小型编辑应用的后端,能够通过 AI 客户端访问,同时具备:

  • 工具的语义,
  • 集成的用户界面。

这将“模型可以调用函数”的集成提升为“模型可以参与受控的发布工作流”。
这是一种更有用的场景。

来源

  • MCP 应用快速入门README.md
  • php‑mcp‑apps 的 MVP 架构php-mcp-apps-mvp-architecture.md
0 浏览
Back to Blog

相关文章

阅读更多 »