Reactive Agentic Loop Engineer (RALE) is a production-oriented C# Model Context Protocol server scaffold for decomposing large prompts into persisted, goal-bounded work loops.
The server uses .NET 10, ModelContextProtocol 1.4.0, ReactiveUI.Primitives 4.0.0, EF Core SQLite, and TUnit on Microsoft.Testing.Platform.
Click to install in your preferred environment:
Note: These install links are prepared for the intended NuGet package identity
CP.Reactive.Agentic.Loop.Engineer.MCP.Server. If the latest package has not been published yet, use the manual source-build configuration below.
- Persisted loops, goals, agents, goal results, and append-only loop events.
- A reactive
Signal<Goal>pipeline for ready-goal emission. - Prompt decomposition that never emits a goal whose
Prompt.Lengthexceeds the configured limit. - Optimistic database concurrency for goal claiming so duplicate execution is rejected.
- Goal pause/resume and complete/fail transitions.
- MCP tools for loop creation, loop inspection, goal claiming, completion, pause, and resume.
- TUnit tests covering decomposition, persistence, ready-goal emission, claiming, completion, and pause/resume.
src/RALE.Server/
Program.cs
Data/
RALEContext.cs
RaleDatabaseInitializer.cs
Migrations/
Models/
Services/
LoopEngineer.cs
AgentExecutor.cs
PromptDecomposer.cs
Tools/
RaleLoopTools.cs
RaleDtos.cs
tests/RALE.Tests/
images/
rale-icon.png
rale-image.ico
rale-image.png
rale-package-icon.png
rale-logo.png
.mcp/server.json
skills/RALE/SKILL.md
| Tool | Purpose |
|---|---|
rale_create_loop |
Create a loop and decompose the primary prompt into ordered goals. |
rale_get_loop |
Fetch a loop and its goals. |
rale_list_goals |
List ordered goals for a loop. |
rale_claim_next_goal |
Claim the next ready goal with optimistic concurrency. |
rale_complete_goal |
Persist a result, complete a goal, and emit dependent goals. |
rale_pause_goal |
Pause a pending or in-progress goal. |
rale_resume_goal |
Resume a paused goal and re-emit when ready. |
SQLite tables:
Loops: primary objective, status, token limit, optimistic version.Goals: sequence, description, bounded prompt, JSON dependencies, status, optimistic version.Agents: agent name, JSON capabilities, optional assigned goal.GoalResults: output, JSON metadata, completion time.LoopEvents: append-only audit trail for loop and goal transitions.
The schema is initialized through EF Core migrations at server startup.
- .NET 10 SDK
- An MCP-capable client such as VS Code, Visual Studio, Claude Desktop, or another MCP 1.x host
Once the NuGet package is published:
dotnet tool install -g CP.Reactive.Agentic.Loop.Engineer.MCP.ServerThen configure your MCP client:
{
"type": "stdio",
"command": "reactive-agentic-loop-engineer-mcp-server"
}Use the badge links at the top of this file, or configure manually:
{
"type": "stdio",
"command": "dnx",
"args": ["CP.Reactive.Agentic.Loop.Engineer.MCP.Server@1.*", "--yes"]
}Clone the repository and configure your MCP client to launch the server from source:
{
"name": "reactive-agentic-loop-engineer-mcp-server",
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"/path/to/ReactiveAgenticLoopEngineer/src/RALE.Server/RALE.Server.csproj"
]
}dotnet run --project src/RALE.Server/RALE.Server.csprojBy default RALE stores SQLite data at:
src/RALE.Server/bin/<Configuration>/net10.0/data/rale.db
Override it with configuration key ConnectionStrings:RALE.
dotnet test ReactiveAgenticLoopEngineer.slnx -c DebugCoverage with Microsoft.Testing.Platform:
dotnet test ReactiveAgenticLoopEngineer.slnx -c Debug --results-directory TestResults -- --coverage --coverage-output TestResults/coverage.cobertura.xml --coverage-output-format cobertura- Keep logs on stderr for stdio MCP transport.
- Treat MCP tool inputs as untrusted; tool methods validate required values and use
McpExceptionfor client-visible validation errors. - Keep
tokenLimitconservative. RALE currently treats the limit as a character ceiling and exposesEstimateTokensfor a conservative 4-chars-per-token estimate. - Subscribers may receive the same pending goal event more than once; executors must claim before executing. Only one claim succeeds.
- Persisted results and loop events allow crash recovery and audit inspection.