MCPcopy
hub / github.com/github/github-mcp-server / NewGitHubAPIErrorResponse

Function NewGitHubAPIErrorResponse

pkg/errors/error.go:159–194  ·  view source on GitHub ↗

NewGitHubAPIErrorResponse returns an mcp.NewToolResultError and retains the error in the context for access via middleware

(ctx context.Context, message string, resp *github.Response, err error)

Source from the content-addressed store, hash-verified

157
158// NewGitHubAPIErrorResponse returns an mcp.NewToolResultError and retains the error in the context for access via middleware
159func NewGitHubAPIErrorResponse(ctx context.Context, message string, resp *github.Response, err error) *mcp.CallToolResult {
160 apiErr := newGitHubAPIError(message, resp, err)
161 if ctx != nil {
162 _, _ = addGitHubAPIErrorToContext(ctx, apiErr) // Explicitly ignore error for graceful handling
163 }
164
165 var rateLimitErr *github.RateLimitError
166 if stderrors.As(err, &rateLimitErr) {
167 resetTime := rateLimitErr.Rate.Reset.Time
168 if !resetTime.IsZero() {
169 retryIn := time.Until(resetTime).Round(time.Second)
170 if retryIn > 0 {
171 return utils.NewToolResultError(fmt.Sprintf(
172 "%s: GitHub API rate limit exceeded. Retry after %v.", message, retryIn))
173 }
174 }
175 return utils.NewToolResultError(fmt.Sprintf(
176 "%s: GitHub API rate limit exceeded. Wait before retrying.", message))
177 }
178
179 var abuseErr *github.AbuseRateLimitError
180 if stderrors.As(err, &abuseErr) {
181 if abuseErr.RetryAfter != nil {
182 retryAfter := abuseErr.RetryAfter.Round(time.Second)
183 if retryAfter > 0 {
184 return utils.NewToolResultError(fmt.Sprintf(
185 "%s: GitHub secondary rate limit exceeded. Retry after %v.",
186 message, retryAfter))
187 }
188 }
189 return utils.NewToolResultError(fmt.Sprintf(
190 "%s: GitHub secondary rate limit exceeded. Wait before retrying.", message))
191 }
192
193 return utils.NewToolResultErrorFromErr(message, err)
194}
195
196// NewGitHubGraphQLErrorResponse returns an mcp.NewToolResultError and retains the error in the context for access via middleware
197func NewGitHubGraphQLErrorResponse(ctx context.Context, message string, err error) *mcp.CallToolResult {

Calls 5

NewToolResultErrorFunction · 0.92
newGitHubAPIErrorFunction · 0.85
AsMethod · 0.80

Tested by 2

TestGitHubErrorContextFunction · 0.68