Add a patch-safe file update tool for large files
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 48/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- github, go
- Domaine
- backend-api-design
Piste de recherche
Commencez par suivre les outils existants create_or_update_file et push_files ainsi que leurs chemins d’écriture de contenu GitHub. Définissez l’outil proposé, sûr pour les patchs, autour des exigences énoncées de concurrence optimiste, de modification exacte, de validation et de comportement fail-closed, puis ajoutez des tests ciblés couvrant ces comportements ainsi que les métadonnées du commit renvoyées.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Problem
create_or_update_file and push_files require the MCP client/model to send the complete replacement file content. For large files this can exceed host/request limits before the GitHub API receives the intended bytes.
A real private-repository workflow hit this with a ~303 KB changelog: a one-entry append required resending the entire file, the MCP request was truncated upstream of GitHub, and the resulting commit contained only ~70 KB. The bad PR was detected and closed, but a local Git client was required to recover the exact patch.
Proposed capability
Add a narrowly scoped patch-safe update tool, e.g. apply_file_patch or create_commit_from_patch, that fetches the current file server-side and applies a bounded exact patch without requiring the MCP client to transmit the entire replacement file.
A conservative initial contract could use exact text replacements rather than fuzzy patching:
owner,repo,branch,pathexpected_head_shaexpected_blob_sha- ordered edits containing exact
old_textandnew_text - each edit must match exactly once (or an explicitly supplied exact occurrence count)
commit_message
Required behavior:
- Read current branch/head and fail if
expected_head_shadiffers. - Fetch the current blob/file server-side and fail if
expected_blob_shadiffers. - Apply edits exactly; no fuzzy offsets or best-effort matching.
- Preserve file mode/path and reject binary/oversized/ambiguous inputs for the initial implementation.
- Commit only after all edits and validations pass.
- Return before/after blob SHA, commit SHA, tree SHA, changed path, and size.
- Never force-update a ref; concurrent branch movement must fail closed.
A later version could support a bounded unified-diff parser and atomic multi-file commits through the Git database APIs.
Why this belongs in the server
The server already has the authenticated GitHub client and can fetch the full current blob directly. Keeping the full file server-side avoids model/context/request amplification and materially reduces the risk of truncation while retaining optimistic concurrency checks.
Scope / non-goals
- No arbitrary shell or local Git execution.
- No fuzzy patch application.
- No force push.
- No bypass of repository permissions or branch protections.
- Keep the tool outside read-only mode and subject to the same OAuth/repository scope filtering as existing content-write tools.
I can prepare a focused PR with tests if this shape is acceptable.
- Langage dominant
- Go
- Étoiles
- 33.1k
- Forks
- 5k
- Merge moyen
- 2 j 1 h
- PR mergées (30 j)
- 25
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de github/github-mcp-server
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
github/github-mcp-server#3235 ·
-
enhancement
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
github/github-mcp-server#3042 · 2 commentaires ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
github/github-mcp-server#3032 · 1 réaction ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
github/github-mcp-server#2803 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
github/github-mcp-server#2740 ·
Toutes les issues de github/github-mcp-server
Issues similaires
-
area/dev-productivity area/disaster-recovery area/ipcei kind/enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
kind/bug status/0-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
🤔 refinement needed
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
equinor/radix-operator#1979 ·