持久任务MCP集成
一个原型实现 MCP任务规范 使用
概述
MCP服务器开发人员构建由持久任务支持的可靠、可观察、长时间运行的工具 调度程序。MCP工具映射到持久任务编排或活动,以及框架 自动处理所有协议细节。
为什么是持久任务?
- 可靠性 --任务状态在DTS中持久保存。编排自动恢复
服务器重新启动后,不会丢失进度。
- 可观测性 --内置 DTS仪表板 提供实时可见性
将任务执行历史、时间线、输入/输出和故障详细信息。
- 可扩展性 --DTS是一种独立于MCP服务器扩展的托管服务。
- 丰富的执行模型 --简单的单活动工具和复杂的多步骤编排
在人类参与的情况下,所有这些都使用相同的编程模型。
运作原理
MCP Client ──► MCP Server (.NET)
│
IMcpTaskStore
│
DurableTaskMcpTaskStore ◄── maps MCP lifecycle to orchestrations
│
DurableTaskClient
│
┌─────┴──────┐
│ DTS │ (Emulator or Azure)
└────────────┘每个MCP工具都通过以下方式注册 WithDurableTaskTool() 获取内部 包装编排器 处理MCP协议问题(TTL、状态报告、启发)。用户的编排器 或者活动在这个包装器内运行,因此开发人员编写没有MCP的简单持久任务代码 样板。
概念图
| MCP任务概念 | 持久任务概念 |
|---|---|
| 任务ID | 业务流程实例ID |
| 任务生命周期 | 编排生命周期 |
working | Pending 或 Running |
input_required | Running +自定义状态 |
completed | Completed |
failed | Failed |
cancelled | Terminated |
| 任务状态消息 | 自定义状态 |
| 激励 | WaitForExternalEvent +自定义状态 |
| TTL | 持久定时器逻辑 |
| 列出任务 | 列出编排 |
| 取消任务 | 终止业务流程 |
编程模型
将编排和活动注册为MCP工具,每个工具只需一行代码:
// Program.cs
builder.Services.AddDurableTaskClient(b => b.UseDurableTaskScheduler(connectionString));
builder.Services.AddDurableTaskWorker(b =>
{
b.UseDurableTaskScheduler(connectionString);
b.AddTasks(tasks =>
{
tasks.AddOrchestrator
();
tasks.AddActivity();
tasks.AddActivity
();
});
});
builder.Services.AddMcpServer(options => { /* ... */ })
.AddDurableTaskMcpTaskStore()
.WithDurableTaskTool
() // registers as MCP tool
.WithTools() // regular tools work too
.WithHttpTransport();编排器使用标准的持久任务API和MCP扩展方法来处理状态和 启发:
[McpDurableTaskTool(Name = "purchase_order")]
[Description("Submit a purchase order. Orders over $1,000 require approval.")]
public class PurchaseOrderOrchestrator : TaskOrchestrator
{
public override async Task RunAsync(
TaskOrchestrationContext context, PurchaseOrderInput input)
{
context.SetMcpStatus("Validating order...");
await context.CallActivityAsync(nameof(ValidateOrderActivity), input);
if (input.Amount > 1000)
{
// Pauses the task and sets status to "input_required"
var decision = await context.WaitForMcpInputAsync(
$"Approve order for ${input.Amount}?");
if (!decision.Approved)
return "Order rejected.";
}
context.SetMcpStatus("Processing items...");
await context.CallActivityAsync(nameof(ProcessItemsActivity), input.ItemCount);
return "Order completed.";
}
}样品
两个样本都暴露了相同的两个工具(process_data 和 purchase_order)并演示 完整的MCP任务生命周期,包括人工在环审批。每个示例README包括 使用测试的分步说明 MCP检查员.
| 样品 | 运输 | 描述 |
|---|---|---|
| StreamableHttpServer | 流式HTTP | ASP。NET Core MCP服务器 http://localhost:5000 |
| 标准服务器 | stdio | MCP客户端作为子进程启动的控制台应用程序 |
先决条件
- .NET 10 SDK
- 码头工人 (适用于DTS仿真器)
- (供MCP检查员使用)
快速开始
# 1. Start the DTS emulator
docker run -d -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:latest
# 2. Run a sample
dotnet run --project samples/StreamableHttpServer然后按照示例的README获取测试说明。
配置
从以下位置读取DTS连接字符串 DurableTask:ConnectionString 在配置中 (appsettings.json 或环境变量 DurableTask__ConnectionString).
| 环境 | 连接字符串 |
|---|---|
| 本地仿真器 | Endpoint=http://localhost:8080;TaskHub=default;Authentication=None |
| Azure DTS | Endpoint=https://.westus2.durabletask.io;TaskHub=default;Authentication=DefaultAzure |
项目结构
├── src/Microsoft.DurableTask.Mcp/ # Core library (NuGet package)
│ ├── DurableTaskMcpTaskStore.cs # IMcpTaskStore implementation
│ ├── DurableTaskMcpServerTool.cs # Custom McpServerTool
│ ├── McpToolWrapperOrchestrator.cs # Internal wrapper orchestrator
│ ├── McpDurableTaskToolAttribute.cs # [McpDurableTaskTool] attribute
│ ├── McpOrchestrationExtensions.cs # SetMcpStatus / WaitForMcpInputAsync
│ ├── ServiceCollectionExtensions.cs # DI registration
│ └── StatusMapping.cs # Orchestration → MCP status mapping
├── samples/
│ ├── StreamableHttpServer/ # Streamable HTTP sample
│ └── StdioServer/ # stdio sample
├── tests/
│ └── Microsoft.DurableTask.Mcp.Tests/
└── docs/
├── PRD.md # Product Requirements Document
├── design.md # Technical Design (V1)
├── DesignV2.md # Simplified Programming Model (V2)
└── spec-feedback.md # MCP Task Spec feedback文档
| 文档 | 描述 |
|---|---|
| 产品需求文档 | 产品要求、场景和成功标准 |
| 设计V1 | 原始技术设计 IMcpTaskStore 整合 |
| 设计V2 | 简化 WithDurableTaskTool() 程序设计模型 |
| 规格反馈 | 对MCP任务规范的观察和反馈 |
许可证
麻省理工学院
