mcpbeat

Github MCP

vibeeval/github-mcp

GitHub MCP Server ile GitHub API erisimi. Repo, issue, PR, code search, release yonetimi.

2k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
521
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/vibeeval/vibecosystem --skill github-mcp

The instruction itself

51 sections, as written by the author

GitHub MCP Server

GitHub MCP vs gh CLI

| Ozellik | GitHub MCP | gh CLI |

|---------|-----------|--------|

| Kurulum | MCP server config | brew install gh |

| Auth | PAT token (MCP env) | gh auth login (interactive) |

| Kullanim | Tool call (agent icinden) | Bash komutu |

| Rate limit | REST API limit (5000/h) | Ayni |

| Avantaj | Agent workflow icinde seamless | Terminal scripting |

| Dezavantaj | MCP server calisir olmali | Agent context'ten cikmak lazim |

Ne Zaman Hangisi

GitHub MCP kullan:
  - Agent workflow icinde GitHub islemleri gerektiginde
  - Birden fazla API call zincirlenecekse
  - Structured data response lazimsa

gh CLI kullan:
  - Tek seferlik terminal islemleri
  - PR olusturma/merge (interaktif)
  - Git hook'lari icinde
  - Script/otomasyon icinde

MCP Server Kurulumu

1. GitHub PAT Token Olustur

GitHub Settings > Developer Settings > Personal Access Tokens > Fine-grained
Gerekli permission'lar:
  - Repository: Read/Write
  - Issues: Read/Write
  - Pull Requests: Read/Write
  - Actions: Read/Write (workflow tetikleme)
  - Webhooks: Read/Write (webhook yonetimi)
  - Organization: Read (org API)

2. MCP Config (~/.mcp.json)

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<PAT_TOKEN>"
      }
    }
  }
}

3. Alternatif: Docker ile

{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<PAT_TOKEN>"
      }
    }
  }
}

Repository Yonetimi

Repo Olusturma

mcp_github.create_repository({
  name: "my-project",
  description: "Proje aciklamasi",
  private: true,
  auto_init: true  // README ile baslat
})

Repo Bilgisi

mcp_github.get_repository({
  owner: "username",
  repo: "repo-name"
})
// Response: stars, forks, open_issues, default_branch, language

Fork

mcp_github.fork_repository({
  owner: "original-owner",
  repo: "original-repo"
})

Branch Yonetimi

// Branch olustur
mcp_github.create_branch({
  owner: "username",
  repo: "repo-name",
  branch: "feature/new-feature",
  from_branch: "main"
})

// Branch listele
mcp_github.list_branches({
  owner: "username",
  repo: "repo-name"
})

Issue Yonetimi

Issue Olusturma

mcp_github.create_issue({
  owner: "username",
  repo: "repo-name",
  title: "Bug: Login form broken",
  body: "## Steps to reproduce\n1. Go to /login\n2. Enter credentials\n3. Click submit\n\n## Expected\nRedirect to dashboard\n\n## Actual\n500 error",
  labels: ["bug", "P1"],
  assignees: ["developer-username"]
})

Issue Listeleme / Filtreleme

mcp_github.list_issues({
  owner: "username",
  repo: "repo-name",
  state: "open",
  labels: "bug",
  sort: "created",
  direction: "desc"
})

Issue Guncelleme

mcp_github.update_issue({
  owner: "username",
  repo: "repo-name",
  issue_number: 42,
  state: "closed",
  labels: ["bug", "resolved"]
})

Issue Yorum

mcp_github.add_issue_comment({
  owner: "username",
  repo: "repo-name",
  issue_number: 42,
  body: "Fixed in PR #45"
})

Pull Request Yonetimi

PR Olusturma

mcp_github.create_pull_request({
  owner: "username",
  repo: "repo-name",
  title: "feat: Add user authentication",
  body: "## Summary\n- JWT auth implementation\n- Login/register endpoints\n\n## Test plan\n- [ ] Unit tests pass\n- [ ] Integration tests pass",
  head: "feature/auth",
  base: "main",
  draft: false
})

PR Review

// Review olustur
mcp_github.create_review({
  owner: "username",
  repo: "repo-name",
  pull_number: 45,
  event: "APPROVE",  // APPROVE | REQUEST_CHANGES | COMMENT
  body: "LGTM! Clean implementation."
})

PR Merge

mcp_github.merge_pull_request({
  owner: "username",
  repo: "repo-name",
  pull_number: 45,
  merge_method: "squash"  // merge | squash | rebase
})

PR Dosya Degisiklikleri

mcp_github.get_pull_request_files({
  owner: "username",
  repo: "repo-name",
  pull_number: 45
})
// Response: filename, status (added/modified/removed), additions, deletions

Repository Icinde Arama

mcp_github.search_code({
  query: "useEffect cleanup repo:username/repo-name",
  per_page: 10
})

Global Arama

// Dil filtreyle
mcp_github.search_code({
  query: "rate limiter language:typescript stars:>100"
})

// Organizasyon icinde
mcp_github.search_code({
  query: "database migration org:my-org"
})

Arama Operatorleri

repo:owner/name       # Spesifik repo
org:organization      # Organizasyon icinde
path:src/utils        # Path filtresi
filename:config.ts    # Dosya adi
extension:py          # Uzanti
language:typescript   # Dil
stars:>100            # Minimum star
size:>1000            # Minimum byte

Actions Workflow

Workflow Tetikleme

mcp_github.create_workflow_dispatch({
  owner: "username",
  repo: "repo-name",
  workflow_id: "deploy.yml",
  ref: "main",
  inputs: {
    environment: "production",
    version: "v1.2.3"
  }
})

Workflow Runs Listeleme

mcp_github.list_workflow_runs({
  owner: "username",
  repo: "repo-name",
  workflow_id: "ci.yml",
  status: "completed",
  per_page: 5
})

Workflow Run Loglari

mcp_github.get_workflow_run_logs({
  owner: "username",
  repo: "repo-name",
  run_id: 12345
})

Release Management

Release Olusturma

mcp_github.create_release({
  owner: "username",
  repo: "repo-name",
  tag_name: "v1.2.3",
  name: "Release v1.2.3",
  body: "## What's Changed\n- feat: User auth (#42)\n- fix: Login redirect (#45)\n\n## Breaking Changes\nNone",
  draft: false,
  prerelease: false
})

Release Listeleme

mcp_github.list_releases({
  owner: "username",
  repo: "repo-name",
  per_page: 10
})

Latest Release

mcp_github.get_latest_release({
  owner: "username",
  repo: "repo-name"
})

Webhook Yonetimi

Webhook Olusturma

mcp_github.create_webhook({
  owner: "username",
  repo: "repo-name",
  config: {
    url: "https://my-server.com/webhook",
    content_type: "json",
    secret: "webhook-secret-123"
  },
  events: ["push", "pull_request", "issues"],
  active: true
})

Webhook Events

| Event | Ne Zaman | Kullanim |

|-------|----------|----------|

| push | Commit push | CI/CD tetikle |

| pull_request | PR acildi/kapandi | Review notify |

| issues | Issue degisti | Triage bot |

| release | Release yayinlandi | Deploy tetikle |

| workflow_run | Action tamamlandi | Status notify |

| star | Repo star'landi | Analytics |

Organization & Team API

Org Bilgisi

mcp_github.get_organization({
  org: "my-organization"
})

Team Listeleme

mcp_github.list_teams({
  org: "my-organization"
})

Team Members

mcp_github.list_team_members({
  org: "my-organization",
  team_slug: "backend-team"
})

Org Repo'lari

mcp_github.list_org_repos({
  org: "my-organization",
  type: "all",
  sort: "updated"
})

Rate Limiting

Limitler

| Auth Tipi | Limit | Reset |

|-----------|-------|-------|

| PAT (authenticated) | 5000 req/h | 1 saat |

| Unauthenticated | 60 req/h | 1 saat |

| Search API | 30 req/min | 1 dakika |

| GraphQL | 5000 points/h | 1 saat |

Rate Limit Kontrol

mcp_github.get_rate_limit()
// Response: { limit, remaining, reset_at }

Best Practices

1. Conditional requests (If-None-Match header) kullan
2. Pagination ile kucuk sayfalarda cek (per_page: 30)
3. Search API'yi 30 req/min altinda tut
4. 403 + "rate limit exceeded" alirsan reset_at kadar bekle
5. Webhook kullan (polling yerine event-driven)
6. GraphQL kullan (birden fazla REST call yerine tek query)

Workflow Ornekleri

Yeni Feature Workflow

1. Issue olustur (task tanimla)
2. Branch olustur (feature/X)
3. Kod yaz, commit et
4. PR olustur (issue'ya referans ver)
5. Review iste
6. Merge et (squash)
7. Release olustur (tag ile)

Bug Fix Workflow

1. Issue olustur (bug raporu)
2. Branch olustur (fix/X)
3. Fix yaz, test ekle
4. PR olustur (Fixes #issue-number)
5. CI gectigini dogrula
6. Merge et
7. Issue otomatik kapanir

CI/CD Tetikleme

1. Push event -> CI workflow calisir
2. PR event -> Test + lint + security scan
3. Release event -> Deploy workflow calisir
4. Workflow dispatch -> Manuel deploy

Anti-Patterns

| Anti-Pattern | Dogru Yol |

|-------------|-----------|

| PAT'i koda gomme | .env veya MCP config env |

| Tum permission'lari ver | Minimum gerekli scope |

| Polling ile status kontrol | Webhook kullan |

| Buyuk sayfa boyutu (100+) | per_page: 30, pagination |

| Rate limit'i yoksay | get_rate_limit ile kontrol |

| Force push main'e | Branch protection + PR |

How to use it

Copy the folder

Take vibeeval/github-mcp from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.

Install what it needs

The instructions reference brew. Without those the skill loads but fails at the first command.