diff --git a/pkg/github/issues.go b/pkg/github/issues.go index e27215ce1..0e3376373 100644 --- a/pkg/github/issues.go +++ b/pkg/github/issues.go @@ -261,6 +261,9 @@ func createIssue(client *github.Client, t translations.TranslationHelperFunc) (t }, ), ), + mcp.WithNumber("milestone", + mcp.Description("Milestone number"), + ), ), func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { owner, err := requiredParam[string](request, "owner") @@ -294,12 +297,24 @@ func createIssue(client *github.Client, t translations.TranslationHelperFunc) (t return mcp.NewToolResultError(err.Error()), nil } + // Get optional milestone + milestone, err := optionalIntParam(request, "milestone") + if err != nil { + return mcp.NewToolResultError(err.Error()), nil + } + + var milestoneNum *int + if milestone != 0 { + milestoneNum = &milestone + } + // Create the issue request issueRequest := &github.IssueRequest{ Title: github.Ptr(title), Body: github.Ptr(body), Assignees: &assignees, Labels: &labels, + Milestone: milestoneNum, } issue, resp, err := client.Issues.Create(ctx, owner, repo, issueRequest) diff --git a/pkg/github/issues_test.go b/pkg/github/issues_test.go index d9fdeb548..f29e2b04d 100644 --- a/pkg/github/issues_test.go +++ b/pkg/github/issues_test.go @@ -392,6 +392,7 @@ func Test_CreateIssue(t *testing.T) { assert.Contains(t, tool.InputSchema.Properties, "body") assert.Contains(t, tool.InputSchema.Properties, "assignees") assert.Contains(t, tool.InputSchema.Properties, "labels") + assert.Contains(t, tool.InputSchema.Properties, "milestone") assert.ElementsMatch(t, tool.InputSchema.Required, []string{"owner", "repo", "title"}) // Setup mock issue for success case @@ -403,6 +404,7 @@ func Test_CreateIssue(t *testing.T) { HTMLURL: github.Ptr("https://github.com/owner/repo/issues/123"), Assignees: []*github.User{{Login: github.Ptr("user1")}, {Login: github.Ptr("user2")}}, Labels: []*github.Label{{Name: github.Ptr("bug")}, {Name: github.Ptr("help wanted")}}, + Milestone: &github.Milestone{Number: github.Ptr(5)}, } tests := []struct { @@ -423,6 +425,7 @@ func Test_CreateIssue(t *testing.T) { "body": "This is a test issue", "labels": []any{"bug", "help wanted"}, "assignees": []any{"user1", "user2"}, + "milestone": float64(5), }).andThen( mockResponse(t, http.StatusCreated, mockIssue), ), @@ -435,6 +438,7 @@ func Test_CreateIssue(t *testing.T) { "body": "This is a test issue", "assignees": []string{"user1", "user2"}, "labels": []string{"bug", "help wanted"}, + "milestone": float64(5), }, expectError: false, expectedIssue: mockIssue,
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: