From 7389b2f801d5f5f0adaa0bf88c7c51798f340953 Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 07:27:48 +0000 Subject: [PATCH] fix(agentic): add missing plan MCP aliases Co-Authored-By: Virgil --- pkg/agentic/plan.go | 20 ++++++++++++++++++++ pkg/agentic/plan_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/pkg/agentic/plan.go b/pkg/agentic/plan.go index 65ecbdb..4e59d41 100644 --- a/pkg/agentic/plan.go +++ b/pkg/agentic/plan.go @@ -240,6 +240,10 @@ func (s *PrepSubsystem) registerPlanTools(server *mcp.Server) { Name: "agentic_plan_read", Description: "Read an implementation plan by ID. Returns the full plan with all phases, criteria, and status.", }, s.planRead) + mcp.AddTool(server, &mcp.Tool{ + Name: "agentic_plan_get", + Description: "Read an implementation plan by slug with progress details and full phases.", + }, s.planGetCompat) mcp.AddTool(server, &mcp.Tool{ Name: "agentic_plan_update", @@ -280,6 +284,10 @@ func (s *PrepSubsystem) registerPlanTools(server *mcp.Server) { Name: "plan_check", Description: "Check whether a plan or phase is complete using the compatibility surface.", }, s.planCheck) + mcp.AddTool(server, &mcp.Tool{ + Name: "agentic_plan_check", + Description: "Check whether a plan or phase is complete using the compatibility surface.", + }, s.planCheck) mcp.AddTool(server, &mcp.Tool{ Name: "plan_update", @@ -290,6 +298,10 @@ func (s *PrepSubsystem) registerPlanTools(server *mcp.Server) { Name: "plan_update_status", Description: "Update a plan lifecycle status by slug.", }, s.planUpdateStatusCompat) + mcp.AddTool(server, &mcp.Tool{ + Name: "agentic_plan_update_status", + Description: "Update a plan lifecycle status by slug.", + }, s.planUpdateStatusCompat) mcp.AddTool(server, &mcp.Tool{ Name: "plan_delete", @@ -300,11 +312,19 @@ func (s *PrepSubsystem) registerPlanTools(server *mcp.Server) { Name: "plan_archive", Description: "Archive a plan by slug without deleting the local record.", }, s.planArchiveCompat) + mcp.AddTool(server, &mcp.Tool{ + Name: "agentic_plan_archive", + Description: "Archive a plan by slug without deleting the local record.", + }, s.planArchiveCompat) mcp.AddTool(server, &mcp.Tool{ Name: "plan_from_issue", Description: "Create an implementation plan from a tracked issue slug or ID.", }, s.planFromIssue) + mcp.AddTool(server, &mcp.Tool{ + Name: "agentic_plan_from_issue", + Description: "Create an implementation plan from a tracked issue slug or ID.", + }, s.planFromIssue) } func (s *PrepSubsystem) planCreate(_ context.Context, _ *mcp.CallToolRequest, input PlanCreateInput) (*mcp.CallToolResult, PlanCreateOutput, error) { diff --git a/pkg/agentic/plan_test.go b/pkg/agentic/plan_test.go index e1ed6da..6affb2a 100644 --- a/pkg/agentic/plan_test.go +++ b/pkg/agentic/plan_test.go @@ -3,10 +3,12 @@ package agentic import ( + "context" "strings" "testing" core "dappco.re/go/core" + mcpsdk "github.com/modelcontextprotocol/go-sdk/mcp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -197,3 +199,39 @@ func TestPlan_ReadPlan_Ugly_EmptyFile(t *testing.T) { _, err := readPlan(dir, "empty") assert.Error(t, err) } + +func TestPlan_RegisterPlanTools_Good_RegistersAgenticCompatibilityAliases(t *testing.T) { + server := mcpsdk.NewServer(&mcpsdk.Implementation{Name: "test", Version: "0.1.0"}, &mcpsdk.ServerOptions{ + Capabilities: &mcpsdk.ServerCapabilities{ + Tools: &mcpsdk.ToolCapabilities{ListChanged: true}, + }, + }) + + subsystem := &PrepSubsystem{} + subsystem.RegisterTools(server) + + client := mcpsdk.NewClient(&mcpsdk.Implementation{Name: "test", Version: "0.1.0"}, nil) + clientTransport, serverTransport := mcpsdk.NewInMemoryTransports() + + serverSession, err := server.Connect(context.Background(), serverTransport, nil) + require.NoError(t, err) + t.Cleanup(func() { _ = serverSession.Close() }) + + clientSession, err := client.Connect(context.Background(), clientTransport, nil) + require.NoError(t, err) + t.Cleanup(func() { _ = clientSession.Close() }) + + result, err := clientSession.ListTools(context.Background(), nil) + require.NoError(t, err) + + var toolNames []string + for _, tool := range result.Tools { + toolNames = append(toolNames, tool.Name) + } + + assert.Contains(t, toolNames, "agentic_plan_get") + assert.Contains(t, toolNames, "agentic_plan_check") + assert.Contains(t, toolNames, "agentic_plan_update_status") + assert.Contains(t, toolNames, "agentic_plan_archive") + assert.Contains(t, toolNames, "agentic_plan_from_issue") +}