---
name: github-operations
description: 管理 GitHub Pull Request 和 Issue。包括创建/更新/合并 PR、添加评论、管理 Issue 等。注意：文件读写、分支操作、代码提交等请使用 git-delegation 技能。
assign_when: Worker 需要管理 Pull Request（创建、审查、合并、评论）或 Issue（创建、更新、评论、标签）
---

# GitHub PR & Issue Management

## Overview

This skill allows you to manage **Pull Requests and Issues** via the centralized MCP Server. For git operations (clone, pull, push, commit, branch), use the **git-delegation** skill instead.

## Environment Variables

No environment variables needed — `mcporter` reads its config from the default path `./config/mcporter.json` automatically.

| Task | Use This Skill | Use git-delegation |
|------|---------------|-------------------|
| Create/update/close PR | ✅ | |
| Review/merge PR | ✅ | |
| Comment on PR/Issue | ✅ | |
| Create/update/close Issue | ✅ | |
| Clone repository | | ✅ |
| Pull/fetch changes | | ✅ |
| Read/write files | | ✅ |
| Create branches | | ✅ |
| Commit/push code | | ✅ |

---

## How to Call GitHub Tools

Use `mcporter` CLI to call MCP Server tools:

```bash
# Method 1: key=value format (recommended for simple args)
mcporter \
  call mcp-github.<TOOL_NAME> key1=value1 key2=value2

# Method 2: JSON format with --args flag (for complex objects)
mcporter \
  call mcp-github.<TOOL_NAME> --args '{"key1":"value1","key2":"value2"}'
```

**IMPORTANT**:
- Always place `--config` BEFORE the `call` subcommand
- For JSON arguments, use the `--args` flag (not bare JSON string)
- Use `mcp-github.<tool_name>` selector format

### Output

mcporter returns JSON output. Parse with `jq` for clean results.

---

## Pull Request Operations

### create_pull_request

Create a new Pull Request:

```bash
mcporter \
  call mcp-github.create_pull_request --args '{
    "owner": "higress-group",
    "repo": "hiclaw",
    "title": "Add new feature",
    "body": "## Summary\n- Change 1\n- Change 2\n\n## Test plan\n- [ ] Test A\n- [ ] Test B",
    "head": "feature-branch",
    "base": "main"
  }'
```

### list_pull_requests

List PRs in a repository:

```bash
mcporter \
  call mcp-github.list_pull_requests owner=higress-group repo=hiclaw state=open
```

### get_pull_request

Get details of a specific PR:

```bash
mcporter \
  call mcp-github.get_pull_request owner=higress-group repo=hiclaw pull_number=1
```

### update_pull_request

Update PR title, body, or state:

```bash
mcporter \
  call mcp-github.update_pull_request --args '{
    "owner": "higress-group",
    "repo": "hiclaw",
    "pull_number": 1,
    "title": "Updated title",
    "body": "Updated description"
  }'
```

### merge_pull_request

Merge a PR:

```bash
mcporter \
  call mcp-github.merge_pull_request owner=higress-group repo=hiclaw pull_number=1 merge_method=squash
```

### get_pull_request_files

List files changed in a PR:

```bash
mcporter \
  call mcp-github.get_pull_request_files owner=higress-group repo=hiclaw pull_number=1
```

### get_pull_request_status

Get CI status of a PR:

```bash
mcporter \
  call mcp-github.get_pull_request_status owner=higress-group repo=hiclaw pull_number=1
```

### request_reviewers

Request reviewers for a PR:

```bash
mcporter \
  call mcp-github.request_reviewers --args '{
    "owner": "higress-group",
    "repo": "hiclaw",
    "pull_number": 1,
    "reviewers": ["reviewer-username"]
  }'
```

---

## PR Comments & Reviews

### add_issue_comment (general PR comments)

Add a general comment to a PR (PRs are also issues):

```bash
mcporter \
  call mcp-github.add_issue_comment owner=higress-group repo=hiclaw issue_number=1 body="LGTM! Great work."
```

### list_issue_comments

List comments on a PR:

```bash
mcporter \
  call mcp-github.list_issue_comments owner=higress-group repo=hiclaw issue_number=1
```

### create_pull_request_review_comment

Comment on a specific code line in a PR:

```bash
# First get the latest commit SHA from the PR
PR_DATA=$(mcporter \
  call mcp-github.get_pull_request owner=higress-group repo=hiclaw pull_number=1)
COMMIT_SHA=$(echo "$PR_DATA" | jq -r '.head.sha')

# Create a review comment
mcporter \
  call mcp-github.create_pull_request_review_comment --args '{
    "owner": "higress-group",
    "repo": "hiclaw",
    "pull_number": 1,
    "body": "Consider using a helper function here.",
    "commit_id": "'"$COMMIT_SHA"'",
    "path": "src/utils/helpers.ts",
    "line": 42,
    "side": "RIGHT"
  }'
```

### get_pull_request_comments

List all review comments on a PR:

```bash
mcporter \
  call mcp-github.get_pull_request_comments owner=higress-group repo=hiclaw pull_number=1
```

### get_pull_request_reviews

List reviews on a PR:

```bash
mcporter \
  call mcp-github.get_pull_request_reviews owner=higress-group repo=hiclaw pull_number=1
```

---

## Issue Operations

### create_issue

Create a new issue:

```bash
mcporter \
  call mcp-github.create_issue owner=higress-group repo=hiclaw title="Bug report" body="Description..."
```

### list_issues

List issues in a repository:

```bash
mcporter \
  call mcp-github.list_issues owner=higress-group repo=hiclaw state=open
```

### get_issue

Get details of a specific issue:

```bash
mcporter \
  call mcp-github.get_issue owner=higress-group repo=hiclaw issue_number=1
```

### update_issue

Update issue title, body, state, or labels:

```bash
mcporter \
  call mcp-github.update_issue --args '{
    "owner": "higress-group",
    "repo": "hiclaw",
    "issue_number": 1,
    "title": "Updated title",
    "state": "closed"
  }'
```

### add_issue_comment

Add a comment to an issue:

```bash
mcporter \
  call mcp-github.add_issue_comment owner=higress-group repo=hiclaw issue_number=1 body="Comment text"
```

### list_issue_comments

List comments on an issue:

```bash
mcporter \
  call mcp-github.list_issue_comments owner=higress-group repo=hiclaw issue_number=1
```

---

## Labels

### list_labels

List labels in a repository:

```bash
mcporter \
  call mcp-github.list_labels owner=higress-group repo=hiclaw
```

### get_label

Get details of a label:

```bash
mcporter \
  call mcp-github.get_label owner=higress-group repo=hiclaw name=bug
```

---

## Search Operations

### search_issues

Search issues and PRs:

```bash
mcporter \
  call mcp-github.search_issues q="is:issue is:open repo:higress-group/hiclaw"
```

### search_code

Search code in repositories:

```bash
mcporter \
  call mcp-github.search_code q="function handleAuth repo:higress-group/hiclaw"
```

### search_repositories

Search repositories:

```bash
mcporter \
  call mcp-github.search_repositories query="hiclaw language:go"
```

### search_users

Search users:

```bash
mcporter \
  call mcp-github.search_users q="john location:shanghai"
```

---

## Utility Operations

### get_me

Get current authenticated user:

```bash
mcporter \
  call mcp-github.get_me
```

### list_notifications

List notifications:

```bash
mcporter \
  call mcp-github.list_notifications all=false
```

### list_teams

List teams in an organization:

```bash
mcporter \
  call mcp-github.list_teams
```

### list_team_members

List members of a team:

```bash
mcporter \
  call mcp-github.list_team_members org=higress-group team_slug=core-team
```

---

## Known Issues

- `create_pull_request_review`: Has a template processing bug. For adding PR review comments, use:
  - **General PR comment**: Use `add_issue_comment`
  - **Comment on specific code line**: Use `create_pull_request_review_comment`

---

## Important Notes

- **Transport**: The MCP Server uses HTTP transport (configured in mcporter-servers.json)
- **Auth**: HTTP endpoint requires Authorization header with Bearer token (auto-configured)
- **Rate limits**: GitHub API rate limits apply. If you get 403 responses, wait and retry
- **Permissions**: Your MCP access is controlled by the Manager. If you get 403 from the MCP Server, the Manager may need to re-authorize your access

---

## Typical Workflow

1. **Clone & modify** → Use `git-delegation` skill
2. **Push changes** → Use `git-delegation` skill
3. **Create PR** → Use `create_pull_request` (this skill)
4. **Review PR** → Use `add_issue_comment`, `create_pull_request_review_comment` (this skill)
5. **Merge PR** → Use `merge_pull_request` (this skill)

