github / github/github-mcp-server

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

オープン
#2,242 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
request ai review
主要言語
Go
スター
33k
フォーク
5k
平均マージ
2日 1時間
マージ済み PR(30日)
52

説明

## 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.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。