1. 项目概述:构建基于Laravel Workflow的MCP服务
在现代化应用开发中,我们经常需要处理长时间运行的异步任务,同时还要为AI客户端提供结构化的访问能力。这正是Laravel Workflow与MCP(Machine Client Protocol)结合的绝佳场景。我最近在实际项目中实现了这套方案,它完美解决了异步任务管理和AI集成两大痛点。
Laravel Workflow是一个强大的工作流引擎,擅长处理持久化、有状态的任务执行。而MCP则是专门为AI客户端设计的协议,能够将外部能力封装成结构化工具。当二者结合时,我们可以实现:
- 异步AI操作:启动工作流后继续对话,稍后再检查结果
- 可靠执行:工作流能够在崩溃、重试和长时间等待中保持状态
- 完整可观测性:通过Waterline仪表板跟踪每个工作流状态
- 无状态服务:MCP服务器不保存状态,由客户端跟踪工作流ID
这种模式特别适合需要AI辅助完成复杂任务的场景,比如数据处理、报告生成或系统管理。接下来,我将详细分享这套系统的实现细节和实战经验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计
2.1 技术选型考量
选择Laravel Workflow作为底层引擎有几个关键优势:
- 状态持久化:工作流状态自动保存到数据库,即使服务器重启也不会丢失进度
- 内置重试机制:任务失败后可以自动重试,非常适合不稳定的外部API调用
- 可视化监控:与Laravel Waterline无缝集成,提供直观的工作流状态展示
而MCP协议则为AI交互提供了标准化接口,使得Copilot等AI助手能够:
- 发现可用工具(工作流)
- 获取工具使用说明和参数结构
- 以标准化格式调用工具并获取结果
2.2 系统组件设计
我们需要构建三个核心工具组件:
| 工具名称 | 功能描述 | 使用场景 |
|---|---|---|
| list_workflows | 列出可用工作流及最近执行记录 | 发现可用功能,检查历史任务 |
| start_workflow | 启动指定工作流并返回跟踪ID | 初始化异步任务 |
| get_workflow_result | 检查工作流状态并获取结果 | 轮询任务进度,获取最终输出 |
这种设计模拟了人类委派任务的自然模式:"开始这个报告,我稍后再检查。"AI助手可以像人类助手一样启动任务,然后在适当的时候检查完成情况。
3. 详细实现步骤
3.1 环境准备与安装
首先确保你的Laravel项目已经配置好队列系统(推荐使用Redis或数据库驱动):
bash复制composer require laravel/mcp
composer require workflow/laravel-workflow
php artisan vendor:publish --tag=workflow-config
php artisan vendor:publish --tag=ai-routes
这组命令会:
- 安装MCP核心包
- 添加Laravel Workflow支持
- 发布工作流配置文件
- 创建AI路由文件(routes/ai.php)
提示:在生产环境中,记得配置好队列工作者(php artisan queue:work)并设置进程管理工具如Supervisor,确保任务能够持续处理。
3.2 创建MCP服务器
生成工作流服务器骨架:
bash复制php artisan make:mcp-server WorkflowServer
然后完善服务器逻辑:
php复制namespace App\Mcp\Servers;
use App\Mcp\Tools\GetWorkflowResultTool;
use App\Mcp\Tools\ListWorkflowsTool;
use App\Mcp\Tools\StartWorkflowTool;
use Laravel\Mcp\Server;
class WorkflowServer extends Server
{
protected string $name = 'Laravel Workflow Server';
protected string $version = '1.0.0';
protected string $instructions = <<<'MARKDOWN'
## 典型使用模式
1. 调用`list_workflows`查看可用工作流
2. 调用`start_workflow`启动工作流
3. 保存返回的`workflow_id`
4. 定期调用`get_workflow_result`检查状态
5. 当状态为`WorkflowCompletedStatus`时获取输出
## 状态值说明
- `WorkflowCreatedStatus`
