MCPcopy Index your code
hub / github.com/github/github-mcp-server / CreateIssue

Function CreateIssue

pkg/github/issues.go:2158–2210  ·  view source on GitHub ↗
(ctx context.Context, client *github.Client, owner string, repo string, title string, body string, assignees []string, labels []string, milestoneNum int, issueType string, issueFieldValues []*github.IssueRequestFieldValue)

Source from the content-addressed store, hash-verified

2156}
2157
2158func CreateIssue(ctx context.Context, client *github.Client, owner string, repo string, title string, body string, assignees []string, labels []string, milestoneNum int, issueType string, issueFieldValues []*github.IssueRequestFieldValue) (*mcp.CallToolResult, error) {
2159 if title == "" {
2160 return utils.NewToolResultError("missing required parameter: title"), nil
2161 }
2162
2163 // Create the issue request
2164 issueRequest := &github.IssueRequest{
2165 Title: github.Ptr(title),
2166 Body: github.Ptr(body),
2167 Assignees: &assignees,
2168 Labels: &labels,
2169 IssueFieldValues: issueFieldValues,
2170 }
2171
2172 if milestoneNum != 0 {
2173 issueRequest.Milestone = &milestoneNum
2174 }
2175
2176 if issueType != "" {
2177 issueRequest.Type = github.Ptr(issueType)
2178 }
2179
2180 issue, resp, err := client.Issues.Create(ctx, owner, repo, issueRequest)
2181 if err != nil {
2182 return ghErrors.NewGitHubAPIErrorResponse(ctx,
2183 "failed to create issue",
2184 resp,
2185 err,
2186 ), nil
2187 }
2188 defer func() { _ = resp.Body.Close() }()
2189
2190 if resp.StatusCode != http.StatusCreated {
2191 body, err := io.ReadAll(resp.Body)
2192 if err != nil {
2193 return utils.NewToolResultErrorFromErr("failed to read response body", err), nil
2194 }
2195 return ghErrors.NewGitHubAPIStatusErrorResponse(ctx, "failed to create issue", resp, body), nil
2196 }
2197
2198 // Return minimal response with just essential information
2199 minimalResponse := MinimalResponse{
2200 ID: fmt.Sprintf("%d", issue.GetID()),
2201 URL: issue.GetHTMLURL(),
2202 }
2203
2204 r, err := json.Marshal(minimalResponse)
2205 if err != nil {
2206 return utils.NewToolResultErrorFromErr("failed to marshal response", err), nil
2207 }
2208
2209 return utils.NewToolResultText(string(r)), nil
2210}
2211
2212// UpdateIssueOptions controls which optional fields are included in an issue update request.
2213type UpdateIssueOptions struct {

Callers 1

IssueWriteFunction · 0.85

Calls 4

NewToolResultErrorFunction · 0.92
NewToolResultTextFunction · 0.92
CloseMethod · 0.80

Tested by

no test coverage detected