diff --git a/src/mcp/github-file-ops-server.ts b/src/mcp/github-file-ops-server.ts index b4e8a190..9fcf00e1 100644 --- a/src/mcp/github-file-ops-server.ts +++ b/src/mcp/github-file-ops-server.ts @@ -385,15 +385,22 @@ server.tool( if (!updateRefResponse.ok) { const errorText = await updateRefResponse.text(); + + // Provide a more helpful error message for 403 permission errors + if (updateRefResponse.status === 403) { + const permissionError = new Error( + `Permission denied: Unable to push commits to branch '${branch}'. ` + + `Please rebase your branch from the main/master branch to allow Claude to commit.\n\n` + + `Original error: ${errorText}`, + ); + throw permissionError; + } + + // For other errors, use the original message const error = new Error( `Failed to update reference: ${updateRefResponse.status} - ${errorText}`, ); - // Only retry on 403 errors - these are the intermittent failures we're targeting - if (updateRefResponse.status === 403) { - throw error; - } - // For non-403 errors, fail immediately without retry console.error("Non-retryable error:", updateRefResponse.status); throw error; @@ -591,16 +598,23 @@ server.tool( if (!updateRefResponse.ok) { const errorText = await updateRefResponse.text(); + + // Provide a more helpful error message for 403 permission errors + if (updateRefResponse.status === 403) { + console.log("Received 403 error, will retry..."); + const permissionError = new Error( + `Permission denied: Unable to push commits to branch '${branch}'. ` + + `Please rebase your branch from the main/master branch to allow Claude to commit.\n\n` + + `Original error: ${errorText}`, + ); + throw permissionError; + } + + // For other errors, use the original message const error = new Error( `Failed to update reference: ${updateRefResponse.status} - ${errorText}`, ); - // Only retry on 403 errors - these are the intermittent failures we're targeting - if (updateRefResponse.status === 403) { - console.log("Received 403 error, will retry..."); - throw error; - } - // For non-403 errors, fail immediately without retry console.error("Non-retryable error:", updateRefResponse.status); throw error;