From 9ea60701d2d333571953b1ac6039a05c75823330 Mon Sep 17 00:00:00 2001 From: mika kuns Date: Sat, 30 May 2026 14:12:18 +0200 Subject: [PATCH] feat(worker): add external MCP app-settings read tool Co-Authored-By: Claude Opus 4.7 --- .../External/AppSettingsMcpTools.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/ClaudeDo.Worker/External/AppSettingsMcpTools.cs diff --git a/src/ClaudeDo.Worker/External/AppSettingsMcpTools.cs b/src/ClaudeDo.Worker/External/AppSettingsMcpTools.cs new file mode 100644 index 0000000..8e065f5 --- /dev/null +++ b/src/ClaudeDo.Worker/External/AppSettingsMcpTools.cs @@ -0,0 +1,31 @@ +using System.ComponentModel; +using ClaudeDo.Data; +using ClaudeDo.Data.Repositories; +using Microsoft.EntityFrameworkCore; +using ModelContextProtocol.Server; + +namespace ClaudeDo.Worker.External; + +public sealed record AppSettingsReadDto( + string DefaultModel, int DefaultMaxTurns, string DefaultPermissionMode, + string WorktreeStrategy, string? CentralWorktreeRoot, + bool WorktreeAutoCleanupEnabled, int WorktreeAutoCleanupDays); + +[McpServerToolType] +public sealed class AppSettingsMcpTools +{ + private readonly IDbContextFactory _dbFactory; + + public AppSettingsMcpTools(IDbContextFactory dbFactory) => _dbFactory = dbFactory; + + [McpServerTool, Description("Read the worker's app-level defaults (model, max turns, permission mode, worktree strategy). Read-only.")] + public async Task GetAppSettings(CancellationToken cancellationToken) + { + using var ctx = await _dbFactory.CreateDbContextAsync(cancellationToken); + var row = await new AppSettingsRepository(ctx).GetAsync(cancellationToken); + return new AppSettingsReadDto( + row.DefaultModel, row.DefaultMaxTurns, row.DefaultPermissionMode, + row.WorktreeStrategy, row.CentralWorktreeRoot, + row.WorktreeAutoCleanupEnabled, row.WorktreeAutoCleanupDays); + } +}