Files
ColaFlow/docs/plans/sprint_5_story_14.md
Yaojia Wang 34a379750f
Some checks failed
Code Coverage / Generate Coverage Report (push) Has been cancelled
Tests / Run Tests (9.0.x) (push) Has been cancelled
Tests / Docker Build Test (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Clean up
2025-11-15 08:58:48 +01:00

222 lines
6.7 KiB
Markdown

---
story_id: story_14
sprint_id: sprint_5
parent_story_id: story_0
status: not_started
priority: P0
assignee: backend
created_date: 2025-11-09
estimated_days: 10
phase: 2
---
# Story 14: Tool Migration to SDK Attributes
**Parent Epic**: [Story 0](sprint_5_story_0.md) - Integrate Microsoft .NET MCP SDK
**Phase**: 2 - Tool Migration (Week 3-4)
**Priority**: P0 - Critical
**Estimated Effort**: 10 days (2 weeks)
**Dependencies**: Story 13 (Foundation must be complete)
## User Story
**As** a backend developer,
**I want** to migrate all 10 MCP Tools from custom implementation to SDK attribute-based registration,
**So that** we reduce boilerplate code and improve maintainability while preserving DiffPreview integration.
## Business Value
- **Code Reduction**: Remove 300-400 lines of custom Tool infrastructure
- **Developer Experience**: Attribute-based registration is cleaner and more intuitive
- **Performance**: SDK optimizations improve Tool execution by 20-30%
- **Maintainability**: Microsoft maintains protocol layer, we focus on business logic
## Tools to Migrate (10 Total)
### High Priority Tools (P0)
1. `create_issue` - Create Epic/Story/Task
2. `update_status` - Change issue status
3. `add_comment` - Add comment to issue
4. `assign_issue` - Assign issue to user
### Medium Priority Tools (P1)
5. `create_sprint` - Create new Sprint
6. `update_sprint` - Update Sprint details
7. `log_decision` - Log architecture decision
### Low Priority Tools (P2)
8. `generate_prd` - AI-generate PRD from description
9. `split_epic` - Split Epic into Stories
10. `detect_risks` - Detect project risks
## Migration Pattern
### Before (Custom Implementation)
```csharp
public class CreateIssueTool : IMcpTool
{
public string Name => "create_issue";
public string Description => "Create a new issue";
public McpToolInputSchema InputSchema => new()
{
Type = "object",
Properties = new Dictionary<string, object>
{
["projectId"] = new { type = "string", format = "uuid" },
["title"] = new { type = "string", minLength = 1 }
},
Required = new[] { "projectId", "title" }
};
public async Task<McpToolResult> ExecuteAsync(
McpToolCall toolCall,
CancellationToken ct)
{
// Manual parameter extraction
var projectId = GetParam<Guid>(toolCall.Arguments, "projectId");
var title = GetParam<string>(toolCall.Arguments, "title");
// Business logic...
}
}
```
### After (SDK Attributes)
```csharp
[McpTool(
Name = "create_issue",
Description = "Create a new issue (Epic/Story/Task) with Diff Preview"
)]
public class CreateIssueTool
{
private readonly IDiffPreviewService _diffPreview;
private readonly IPendingChangeService _pendingChange;
public CreateIssueTool(
IDiffPreviewService diffPreview,
IPendingChangeService pendingChange)
{
_diffPreview = diffPreview;
_pendingChange = pendingChange;
}
[McpToolParameter(Required = true)]
public Guid ProjectId { get; set; }
[McpToolParameter(Required = true, MinLength = 1, MaxLength = 200)]
public string Title { get; set; } = string.Empty;
[McpToolParameter]
public string? Description { get; set; }
[McpToolParameter]
public string Priority { get; set; } = "Medium";
public async Task<McpToolResult> ExecuteAsync(
McpContext context,
CancellationToken cancellationToken)
{
// Parameters auto-bound by SDK
// Generate Diff Preview (preserve existing logic)
var diff = await _diffPreview.GeneratePreviewAsync(
null, // CREATE operation
new { ProjectId, Title, Description, Priority },
"CREATE",
cancellationToken);
// Create PendingChange (preserve existing workflow)
var pendingChange = await _pendingChange.CreateAsync(
"create_issue",
diff,
cancellationToken);
return McpToolResult.Success(new
{
PendingChangeId = pendingChange.Id,
Message = "Issue creation pending approval",
DiffPreview = diff
});
}
}
```
## Key Changes
### What Changes
- ✅ Tool registration (custom → SDK attributes)
- ✅ Parameter declaration (schema → properties)
- ✅ Parameter validation (manual → SDK automatic)
- ✅ Error handling (custom → SDK standard)
### What Stays the Same
- ✅ DiffPreviewService integration (preserved)
- ✅ PendingChangeService workflow (preserved)
- ✅ TenantContext access (preserved via McpContext)
- ✅ API Key authentication (preserved)
- ✅ Business logic (unchanged)
## Acceptance Criteria
- [ ] All 10 Tools migrated to `[McpTool]` attributes
- [ ] DiffPreview workflow works for all write operations
- [ ] PendingChange creation works correctly
- [ ] Tool parameter validation automatic (SDK-based)
- [ ] Integration tests pass (>80% coverage)
- [ ] Performance improved by ≥20% (measured)
- [ ] Claude Desktop can call all migrated Tools
- [ ] Zero breaking changes for MCP clients
## Tasks Breakdown
- [ ] [Task 1](sprint_5_story_14_task_1.md) - Migrate P0 Tools (create_issue, update_status, add_comment, assign_issue) - 3 days
- [ ] [Task 2](sprint_5_story_14_task_2.md) - Migrate P1 Tools (create_sprint, update_sprint, log_decision) - 2 days
- [ ] [Task 3](sprint_5_story_14_task_3.md) - Migrate P2 Tools (generate_prd, split_epic, detect_risks) - 2 days
- [ ] [Task 4](sprint_5_story_14_task_4.md) - Update integration tests for all Tools - 2 days
- [ ] [Task 5](sprint_5_story_14_task_5.md) - Performance testing and optimization - 1 day
**Progress**: 0/5 tasks completed (0%)
## Testing Strategy
### Unit Tests (Per Tool)
- Parameter validation (required, types, ranges)
- DiffPreview generation correctness
- PendingChange creation
- Error handling (invalid params, missing tenant)
### Integration Tests (End-to-End)
- Claude Desktop Tool calls
- Diff Preview workflow
- Approval/rejection flow
- Multi-tenant isolation
### Performance Tests
- Benchmark each Tool (before/after)
- Target: 20-30% improvement
- Memory profiling
## Success Metrics
- **Code Reduction**: -300 lines (Tool infrastructure)
- **Performance**: +20-30% faster Tool execution
- **Test Coverage**: Maintain 80%+
- **Developer Time**: 50% faster to add new Tools
## Definition of Done
- [ ] All 10 Tools migrated to SDK attributes
- [ ] DiffPreview integration verified (all Tools)
- [ ] Integration tests pass (>80% coverage)
- [ ] Performance benchmarks show ≥20% improvement
- [ ] Code reviewed and approved
- [ ] Documentation updated
---
**Created**: 2025-11-09 by Product Manager Agent
**Owner**: Backend Team
**Start Date**: 2025-12-09 (Week 3)
**Target Date**: 2025-12-20 (End of Week 4)
**Status**: Not Started