Claude-skill-registry github-interaction
Comprehensive guide for working with GitHub data and APIs. Use when fetching issues, PRs, discussions, comments, reviews, or any GitHub content. Covers tool selection (mcp_github vs fetch vs semantic search), complete conversation fetching patterns, pagination handling, and common workflows. Critical for avoiding standard API failures when fetching comments/reviews—MCP tools required.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/github-interaction" ~/.claude/skills/majiayu000-claude-skill-registry-github-interaction && rm -rf "$T"
skills/data/github-interaction/SKILL.mdGitHub Interaction
Guide for effective GitHub data retrieval covering tool selection, complete conversation fetching, and common patterns.
Critical Rule: MCP Tools for Comments and Reviews
ALWAYS use GitHub MCP tools (
) to fetch PR/issue comments and reviews. Standard API access will fail.mcp_github_*
This is the most common mistake. When you need comments, reviews, or discussion threads, you MUST use the MCP tools.
Tool Selection Decision Tree
When to use mcp_github_*
tools
mcp_github_*Use for ALL GitHub data operations:
- ✅ Fetching issues, PRs, discussions (individual or lists)
- ✅ Getting comments (issue comments, PR review comments, discussion comments)
- ✅ Getting reviews (PR reviews and review threads)
- ✅ Getting file contents from repos
- ✅ Creating/updating issues, PRs, comments
- ✅ Searching issues, PRs, code, repositories, users
- ✅ Managing branches, commits, assignees, labels
Examples:
mcp_github_issue_read (method: get, get_comments, get_sub_issues, get_labels) mcp_github_pull_request_read (method: get, get_diff, get_files, get_review_comments, get_reviews, get_comments) mcp_github_get_discussion + mcp_github_get_discussion_comments mcp_github_search_issues, mcp_github_search_pull_requests, mcp_github_search_code mcp_github_get_file_contents
When to use fetch_webpage
fetch_webpageUse ONLY for external web content:
- ✅ Public documentation sites
- ✅ Blog posts, articles (not on GitHub)
- ✅ External APIs or services
- ❌ NEVER for GitHub issues/PRs/discussions/comments
When to use github_repo
semantic search
github_repoUse for finding code patterns across GitHub repositories:
- ✅ Searching for function/class implementations across repos
- ✅ Finding usage examples in codebases
- ✅ Discovering patterns in specific GitHub repo source code
- ❌ Not for issues/PRs/discussions (use
instead)mcp_github_search_*
When to use grep_search
/ semantic_search
grep_searchsemantic_searchUse for LOCAL workspace files only:
- ✅ Searching files in current VS Code workspace
- ✅ Finding patterns in brain repository notes
- ✅ Locating local code or documentation
- ❌ NEVER for GitHub remote content
Complete Conversation Fetching Patterns
Fetching a Full Issue
Pattern: Get issue + get all comments
1. mcp_github_issue_read (method: get, issue_number: X) → Returns issue details (title, body, state, assignees, labels, etc.) 2. mcp_github_issue_read (method: get_comments, issue_number: X, perPage: 100) → Returns all comments with author, timestamp, body → Use pagination if > 100 comments (page parameter)
What you get: Complete issue thread including description and all discussion
Fetching a Full Pull Request
Pattern: Get PR + diff + files + review comments + reviews + general comments
1. mcp_github_pull_request_read (method: get, pullNumber: X) → Returns PR metadata (title, body, state, base/head, mergeable, etc.) 2. mcp_github_pull_request_read (method: get_diff, pullNumber: X) → Returns unified diff of all changes 3. mcp_github_pull_request_read (method: get_files, pullNumber: X, perPage: 100) → Returns list of changed files with stats → Paginate if many files changed 4. mcp_github_pull_request_read (method: get_review_comments, pullNumber: X, perPage: 100) → Returns review threads (line-specific comments grouped by thread) → Each thread has metadata: isResolved, isOutdated, isCollapsed → Use cursor-based pagination (after parameter) if needed 5. mcp_github_pull_request_read (method: get_reviews, pullNumber: X, perPage: 100) → Returns formal reviews (APPROVE, REQUEST_CHANGES, COMMENT) → Includes review body and state 6. mcp_github_pull_request_read (method: get_comments, pullNumber: X, perPage: 100) → Returns general PR comments (not line-specific) → These are issue-style comments on the PR conversation
What you get: Complete PR context including code changes, all review feedback, and discussion
Important distinctions:
: Line-specific code review threadsget_review_comments
: Formal review submissions (approve/request changes)get_reviews
: General conversation comments (not tied to code lines)get_comments
Fetching a Full Discussion
Pattern: Get discussion + get all comments with pagination
1. mcp_github_get_discussion (owner: X, repo: Y, discussionNumber: Z) → Returns discussion details (title, body, category, state) 2. mcp_github_get_discussion_comments (owner: X, repo: Y, discussionNumber: Z, perPage: 100) → Returns nested comment threads → Use cursor-based pagination (after: endCursor from previous response) → Each comment includes replies (nested threads)
What you get: Complete discussion with all threaded replies
Pagination note: Discussions use GraphQL cursor-based pagination. Check
pageInfo.hasNextPage and use pageInfo.endCursor in after parameter.
Common Patterns and Workflows
Searching for PRs/Issues with Filters
Date filtering:
mcp_github_search_pull_requests query: "author:jonmagic created:2025-11-01..2025-11-30" mcp_github_search_issues query: "involves:jonmagic updated:>=2025-11-01"
State filtering:
# Merged PRs only query: "is:merged author:jonmagic repo:github/github" # Open issues assigned to you query: "is:open assignee:jonmagic" # Closed issues in date range query: "is:closed closed:2025-11-01..2025-11-30"
Combining filters:
query: "is:pr is:merged author:jonmagic repo:github/hamzo created:2025-11-01..2025-11-30"
Fetching Multiple Items Efficiently
Batch pattern (for small lists):
1. Search for items: mcp_github_search_pull_requests 2. For each result (up to 5-10), fetch details in parallel: - mcp_github_pull_request_read (method: get, pullNumber: N)
Avoid: Fetching full details for 50+ items at once. Instead, ask user which specific items to deep-dive.
Creating PRs with Proper Formatting
mcp_github_create_pull_request title: "Clear, specific title" body: "## Summary\n\n...\n\n## Changes\n\n- Item 1\n- Item 2" head: "feature-branch-name" base: "main" draft: false (or true for work-in-progress)
Body formatting tips:
- Use Markdown (headings, lists, code blocks)
- Reference issues:
orCloses #123Relates to #456 - Include context for reviewers
- Add testing notes or screenshots if relevant
Adding Comments vs Reviews
Issue comment (general discussion):
mcp_github_add_issue_comment issue_number: X body: "Your comment text"
PR review (formal approval/changes requested):
1. Create pending review: mcp_github_pull_request_review_write (method: create) body: "Overall feedback" event: null (omit to create pending) 2. Submit review: mcp_github_pull_request_review_write (method: submit_pending) body: "Final summary" event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT"
Pagination Best Practices
REST-based Pagination (page/perPage)
Used by:
list_issues, list_pull_requests, get_comments, get_files, get_reviews
perPage: 100 (max) page: 1, 2, 3, ... (1-based)
Pattern:
1. First call: perPage: 100, page: 1 2. If results.length === 100, likely more pages 3. Next call: perPage: 100, page: 2 4. Repeat until results.length < 100
GraphQL Cursor Pagination (after/endCursor)
Used by:
list_issues (GraphQL mode), get_discussion_comments, get_review_comments
perPage: 100 after: "cursor-string-from-previous-response"
Pattern:
1. First call: perPage: 100 (no after) 2. Check response.pageInfo.hasNextPage 3. If true, next call: perPage: 100, after: response.pageInfo.endCursor 4. Repeat until hasNextPage === false
Common Mistakes to Avoid
❌ Using
for GitHub issues/PRsfetch_webpage
- Standard web scraping doesn't work for GitHub content
- Always use MCP tools
❌ Forgetting pagination
- Default limits are often 30 items
- Set
to reduce round tripsperPage: 100 - Check for more pages before concluding
❌ Mixing up comment types
- Issue comments ≠ PR review comments ≠ PR general comments
- Use correct method for each type
❌ Not filtering by date range
- Fetching all historical data when you only need recent work
- Use
,created:
,updated:
filtersmerged:
❌ Ignoring PR state when searching for completed work
- Open PRs should go to "Ideas" section in snippets
- Only merged/closed PRs belong in "Ships"
- Use
oris:merged
filtersis:closed
Quick Reference: Method Cheat Sheet
Issues
- Get issue:
issue_read (method: get) - Get comments:
issue_read (method: get_comments) - Get sub-issues:
issue_read (method: get_sub_issues) - Create/update:
issue_write (method: create | update) - Search:
search_issues
Pull Requests
- Get PR:
pull_request_read (method: get) - Get diff:
pull_request_read (method: get_diff) - Get files:
pull_request_read (method: get_files) - Get review comments:
pull_request_read (method: get_review_comments) - Get reviews:
pull_request_read (method: get_reviews) - Get general comments:
pull_request_read (method: get_comments) - Create PR:
create_pull_request - Update PR:
update_pull_request - Search:
search_pull_requests
Discussions
- Get discussion:
get_discussion - Get comments:
get_discussion_comments - List:
list_discussions
Other
- Search code:
search_code - Search repos:
search_repositories - Get file:
get_file_contents - List branches:
list_branches - Get commit:
get_commit