github / github/github-mcp-server

get_diff / get_files: JSON serialization inflates diff payload far beyond token limits

Abierto
#2,242 1 comentario 0 reacciones 0 asignados Ver en GitHub
request ai review
Lenguaje dominante
Go
Estrellas
33k
Forks
5k
Merge medio
2 d 1 h
PR fusionados (30 d)
52

Descripción

## Problem

`pull_request_read` methods `get_diff` and `get_files` return diff content as JSON-encoded strings. A unified diff is already a text format, but wrapping it in a JSON string escapes every `\n`, `\"`, `\t`, etc. — inflating the payload **several times** over the raw text size.

### Real-world example

A PR with **2,920 lines** of diff (~73 KB of raw text) produces a **125 KB+** JSON response, exceeding the MCP token limit. The tool returns an error instead of the diff.

This is a ~1,700-line PR (additions + deletions) — not unusually large. It includes some generated files (`src/generated/graphql.ts`), but even without them the JSON overhead makes moderate PRs hit the limit.

### Why this matters

- The token limit is hit not because the diff is large, but because JSON serialization inflates it
- `get_files` has the same problem — each file's `patch` field is a JSON-encoded diff string
- This forces users to fall back to `gh pr diff` via shell, losing the benefit of MCP

## Suggestion

Return diff content as raw text rather than a JSON-wrapped string, or use a more efficient serialization that doesn't escape every newline. This would let `get_diff` handle PRs several times larger than it can today with no other changes.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.