Skip to main content
Glama

COA Goldfish MCP

by anortham
CheckpointTool.csโ€ข4.71 kB
using COA.Goldfish.McpServer.Services.Storage; using COA.Goldfish.McpServer.Services; using COA.Goldfish.McpServer.Models; using COA.Mcp.Framework.Models; using Microsoft.Extensions.Logging; namespace COA.Goldfish.McpServer.Tools; /// <summary> /// Tool for checkpoint operations - save and restore session state /// </summary> public class CheckpointTool : GoldfishToolBase<CheckpointParameters, CheckpointResult> { private readonly IStorageService _storage; private readonly WorkspaceService _workspaceService; private readonly ILogger<CheckpointTool> _logger; public CheckpointTool(IServiceProvider serviceProvider, ILogger<CheckpointTool> logger, IStorageService storage, WorkspaceService workspaceService) : base(serviceProvider, logger) { _storage = storage; _workspaceService = workspaceService; _logger = logger; } public override string Name => "checkpoint"; public override string Description => "Save progress or restore session context. Use after completing tasks, before breaks, when resuming work, or asking \"what was I working on?\""; protected override async Task<CheckpointResult> ExecuteInternalAsync( CheckpointParameters parameters, CancellationToken cancellationToken) { try { var result = new CheckpointResult(); switch (parameters.Action.ToLowerInvariant()) { case "save": if (string.IsNullOrEmpty(parameters.Description)) { result.Success = false; result.Error = new ErrorInfo { Code = "MISSING_DESCRIPTION", Message = "Description is required for save action" }; return result; } var checkpoint = new Checkpoint { Id = Guid.NewGuid().ToString(), WorkspaceId = parameters.Workspace ?? _workspaceService.GetCurrentWorkspace(), SessionId = parameters.SessionId ?? Guid.NewGuid().ToString(), Description = parameters.Description, WorkContext = parameters.WorkContext ?? "", ActiveFiles = parameters.ActiveFiles ?? new List<string>(), Highlights = parameters.Highlights ?? new List<string>(), GitBranch = parameters.GitBranch ?? "", IsGlobal = parameters.Global }; result.Checkpoint = await _storage.SaveCheckpointAsync(checkpoint); result.Message = "Checkpoint saved successfully"; result.Success = true; break; case "restore": if (!string.IsNullOrEmpty(parameters.CheckpointId)) { result.Checkpoint = await _storage.GetCheckpointAsync(parameters.CheckpointId); } else { result.Checkpoint = await _storage.GetLatestCheckpointAsync(parameters.Workspace ?? _workspaceService.GetCurrentWorkspace()); } if (result.Checkpoint != null) { result.Message = "Checkpoint restored successfully"; result.Success = true; } else { result.Success = false; result.Error = new ErrorInfo { Code = "CHECKPOINT_NOT_FOUND", Message = "No checkpoint found" }; } break; default: result.Success = false; result.Error = new ErrorInfo { Code = "INVALID_ACTION", Message = $"Unknown action: {parameters.Action}" }; break; } return result; } catch (Exception ex) { _logger.LogError(ex, "Checkpoint operation failed"); return new CheckpointResult { Success = false, Error = new ErrorInfo { Code = "CHECKPOINT_ERROR", Message = ex.Message } }; } } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/anortham/coa-goldfish-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server