Retrieve code diff from a GitHub Pull Request via GitHub API. Use this as the first step in a code review pipeline when reviewing GitHub PRs.
An input skill that retrieves code diff and PR metadata from GitHub via the API. This is the entry point for reviewing GitHub Pull Requests.
| Input | Required | Description |
|---|---|---|
owner |
Yes | Repository owner (username or organization) |
repo |
Yes | Repository name |
pull_number |
Yes | Pull Request number |
| Output | Description |
|---|---|
pr_info |
PR metadata (title, description, author, state, labels) |
files |
List of changed files with patches |
commits |
List of commits in the PR |
base_ref |
Base branch reference |
head_ref |
Head branch reference |
diff |
Full unified diff content |
This skill uses the GitHub MCP server with the following tools:
| Tool | Purpose |
|---|---|
get_pull_request |
Get PR details (title, body, state, author) |
get_pull_request_files |
Get list of changed files with patches |
Accept PR reference in various formats:
| Format | Example | Parsing |
|---|---|---|
| Full URL | https://github.com/owner/repo/pull/123 |
Extract owner, repo, pull_number |
| Short reference | owner/repo#123 |
Split on / and # |
| Number only | 123 |
Requires owner/repo from context |
Regex for URL: github\.com/([^/]+)/([^/]+)/pull/(\d+)
Regex for short: ([^/]+)/([^#]+)#(\d+)
Use the GitHub MCP tool to get PR information:
{
"tool": "get_pull_request",
"server": "user-github",
"arguments": {
"owner": "<owner>",
"repo": "<repo>",
"pull_number": <number>
}
}
This returns:
Use the GitHub MCP tool to get file changes:
{
"tool": "get_pull_request_files",
"server": "user-github",
"arguments": {
"owner": "<owner>",
"repo": "<repo>",
"pull_number": <number>
}
}
This returns for each file:
filename: Path to the filestatus: added, removed, modified, renamedadditions: Lines addeddeletions: Lines deletedpatch: Unified diff patch for the fileStructure the output for the review pipeline:
## PR Retrieved
**Repository**: owner/repo
**PR #**: 123
**Title**: feat: add user authentication
### PR Info
| Field | Value |
|-------|-------|
| Author | @username |
| State | open |
| Base | main |
| Head | feature/auth |
| Commits | 3 |
| Changed Files | 5 |
### Description
<PR description content>
### Files Changed
| Status | File | +/- |
|--------|------|-----|
| modified | src/auth/login.ts | +50/-10 |
| added | src/utils/helper.ts | +30/-0 |
| deleted | src/deprecated.ts | +0/-25 |
### Diff Content
<unified diff for each file>
{
"source": "github-pr",
"repository": {
"owner": "owner",
"repo": "repo"
},
"pull_request": {
"number": 123,
"title": "feat: add user authentication",
"body": "PR description...",
"author": "username",
"state": "open",
"base": {
"ref": "main",
"sha": "abc123"
},
"head": {
"ref": "feature/auth",
"sha": "def456"
},
"labels": ["enhancement"],
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T12:00:00Z"
},
"stats": {
"files_changed": 5,
"additions": 120,
"deletions": 45,
"commits": 3
},
"files": [
{
"path": "src/auth/login.ts",
"status": "modified",
"additions": 50,
"deletions": 10,
"patch": "@@ -1,10 +1,50 @@\n..."
}
],
"diff": "<combined unified diff>"
}
After retrieving the PR diff, pass the output to:
ā” Parse PR Reference
ā” Extract owner, repo, pull_number
ā” Handle URL or short format
ā” Fetch PR Details
ā” Call get_pull_request MCP tool
ā” Extract metadata and head SHA
ā” Fetch Changed Files
ā” Call get_pull_request_files MCP tool
ā” Get patches for all files
ā” Format Output
ā” Structure for review pipeline
ā” Include commit SHA for review submission
1. retrieve-diff-from-github-pr (this skill)
ā
2. codereview-orchestrator (triage)
ā
3. Specialist skills (review)
ā
4. submit-github-review (post review)
| Error | Cause | Resolution |
|---|---|---|
| 404 Not Found | PR doesn't exist or no access | Verify PR number and permissions |
| 403 Forbidden | Rate limited or no auth | Check GitHub token |
| Invalid format | Can't parse PR reference | Use format: owner/repo#number |