Hangfire MCP 
使用Hangfire MCP服务器取消后台作业队列。
动机
与的交互 *航火* 使用 *Hangfire MCP服务器* 允许您从任何支持MCP协议的客户端将作业排队。 例如,您可以直接从以下位置使用Hangfire MCP *VS代码* 在……里面 *代理模式* 以及排队作业。它可以在不编写额外代码的情况下执行任何类型的代码。
以下是VS代码的MCP服务器配置:
{
"servers": {
"hangfire-mcp": {
"url": "http://localhost:3001"
}
}
}代码示例
其工作原理如下:
sequenceDiagram
participant User as User
participant MCPHangfire as MCP Hangfire
participant IBackgroundJobClient as IBackgroundJobClient
participant Database as Database
participant HangfireServer as Hangfire Server
User->>MCPHangfire: Enqueue Job
MCPHangfire->>IBackgroundJobClient: Send Job Message
IBackgroundJobClient->>Database: Store Job Message
HangfireServer->>Database: Fetch Job Message
HangfireServer->>HangfireServer: Process Job单独模式
它是一个常规的MCP包装。NET全局工具。以下是如何在VSCode中将其设置为MCP服务器。
dotnet tool install --global --add-source Nall.HangfireMCP配置:
{
"servers": {
"hangfire-mcp-standalone": {
"type": "stdio",
"command": "HangfireMCP",
"args": [
"--stdio"
],
"env": {
"HANGFIRE_JOBS_ASSEMBLY": "path/to/Jobs.dll",
"HANGFIRE_JOBS_MATCH_EXPRESSION": "[?IsInterface && contains(Name, 'Job')]",
"HANGFIRE_CONNECTION_STRING": "Host=localhost;Port=5432;Username=postgres;Password=postgres;Database=hangfire"
}
}
}
}渴望
var builder = DistributedApplication.CreateBuilder(args);
var postgresServer = builder
.AddPostgres("postgres-server")
.WithDataVolume()
.WithLifetime(ContainerLifetime.Persistent);
var postgresDatabase = postgresServer.AddDatabase("hangfire");
builder.AddProject
("server")
.WithReference(postgresDatabase)
.WaitFor(postgresDatabase);
var mcp = builder
.AddProject
("hangfire-mcp")
.WithEnvironment("HANGFIRE_JOBS_ASSEMBLY", "path/to/Jobs.dll")
.WithEnvironment("HANGFIRE_JOBS_MATCH_EXPRESSION", "[?IsInterface && contains(Name, 'Job')]")
.WithReference(postgresDatabase)
.WaitFor(postgresDatabase);
builder
.AddMCPInspector()
.WithSSE(mcp)
.WaitFor(mcp);
builder.Build().Run();因此,作业从指定的程序集中动态加载,并可以使用MCP协议排队。匹配作业名称的规则可以使用指定 HANGFIRE_JOBS_MATCH_EXPRESSION 环境变量。例如,表达式 [?IsInterface && contains(Name, 'Job')] 将匹配名称中包含“Job”的所有接口。它是一个 JMESPath 表达式,这样您就可以根据需要定义如何匹配作业名称。
自定义设置(作为代码)模式
您可以创建自己的MCP服务器,并将此项目作为起点。您可以使用自己的工具和功能对其进行扩展。下面是一个如何在自定义项目中设置Hangfire MCP服务器的示例。
渴望
var builder = DistributedApplication.CreateBuilder(args);
var postgresServer = builder
.AddPostgres("postgres-server")
.WithDataVolume()
.WithLifetime(ContainerLifetime.Persistent);
var postgresDatabase = postgresServer.AddDatabase("hangfire");
builder.AddProject
("server")
.WithReference(postgresDatabase)
.WaitFor(postgresDatabase);
var mcp = builder
.AddProject
("hangfire-mcp")
.WithReference(postgresDatabase)
.WaitFor(postgresDatabase);
builder
.AddMCPInspector()
.WithSSE(mcp)
.WaitFor(mcp);
builder.Build().Run();MCP服务器
var builder = WebApplication.CreateBuilder(args);
builder.WithMcpServer(args).WithToolsFromAssembly();
builder.Services.AddHangfire(cfg => cfg.UsePostgreSqlStorage(options =>
options.UseNpgsqlConnection(builder.Configuration.GetConnectionString("hangfire")))
);
builder.Services.AddHangfireMcp();
builder.Services.AddTransient();
var app = builder.Build();
app.MapMcpServer(args);
app.Run();以下是Hangfire工具的示例:
[McpServerToolType]
public class HangfireTool(IHangfireDynamicScheduler scheduler)
{
[McpServerTool(Name = "RunJob")]
public string Run(
[Required] string jobName,
[Required] string methodName,
Dictionary? parameters = null
)
{
var descriptor = new JobDescriptor(jobName, methodName, parameters);
return scheduler.Enqueue(descriptor, typeof(ITimeJob).Assembly);
}
}