MewCP Github MCP

by asthetech

Not rated
GitHub

About

Hosted, Stateless & Multitenant GitHub MCP server connects AI tools directly to GitHub's platform

Details

Author
asthetech
Categories
Developer Tools, Other

Setup

Install MewCP Github MCP in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/asthetech/mewcp-github

Follow the installation instructions in the repository README, then restart your MCP client.

Comprehensive GitHub API access for repositories, issues, pull requests, and code — all through typed MCP tools.

A Model Context Protocol (MCP) server that exposes GitHub's API for managing repositories, issues, pull requests, branches, releases, tags, branch protection, and repository rulesets.

- Repository management — get, create, update, and fork repositories; create or update files and push multi-file commits
- Search across GitHub — repositories, code, users, issues, and pull requests
- Issue tracking — list, get, create, comment on, and update issues, including sub-issue relationships and Copilot assignment
- Pull request workflows — read, list, create, update, merge PRs, manage branch updates, write reviews, reply to comments, and request Copilot review
- Repository administration — branches, commits, file contents, tags, releases, labels, branch protection, PR review protection, and repository rulesets

- AI agents that need to read and act on GitHub repository state (issues, PRs, files, commits)
- Automating routine GitHub workflows — issue triage, PR review requests, release lookups
- Enforcing and auditing repository governance — branch protection, PR review requirements, rulesets

Get basic details for a GitHub repository.

- owner (string, required) — Repository owner, for example octocat - repo (string, required) — Repository name
{ id: number | null; name: string | null; full_name: string | null; owner: object | null; html_url: string | null; description: string | null; private: boolean | null; fork: boolean | null; url: string | null; default_branch: string | null; created_at: string | null; updated_at: string | null; stargazers_count: number | null; language: string | null; has_issues: boolean | null; has_downloads: boolean | null; forks_count: number | null; }

Updates repository metadata or renames a repository. Only the fields you provide are changed — others keep their current value. NOTE: this overwrites the current field values — the original state is not stored after the call. The response includes both the before and after state so you have a full record of what changed.

- owner (string, required) — Repository owner - repo (string, required) — Repository name - name (string, optional) — New repository name (to rename) - description (string, optional) — Repository description - private (boolean, optional) — Make repository private/public - default_branch (string, optional) — Default branch name
{ before: { id: number | null; name: string | null; full_name: string | null; owner: object | null; html_url: string | null; description: string | null; private: boolean | null; fork: boolean | null; url: string | null; default_branch: string | null; created_at: string | null; updated_at: string | null; stargazers_count: number | null; language: string | null; has_issues: boolean | null; has_downloads: boolean | null; forks_count: number | null; }; after: { id: number | null; name: string | null; full_name: string | null; html_url: string | null; private: boolean | null; description: string | null; default_branch: string | null; }; }

Create a new GitHub repository in your personal account or an organization.

- name (string, required) — Repository name (required). Must be unique in account/organization. - description (string, optional) — Repository description (optional). - private (boolean, optional, default: false) — Make repository private (default: False for public). - auto_init (boolean, optional, default: false) — Auto-initialize with README (default: False). - gitignore_template (string, optional) — Gitignore template name. Example: 'Python', 'Node'. - org (string, optional) — Organization name to create repo in (optional).
{ id: number | null; name: string | null; full_name: string | null; url: string | null; html_url: string | null; owner: object | null; private: boolean | null; created_at: string | null; }

Fork a repository to your personal account or an organization.

- owner (string, required) — Original repository owner. - repo (string, required) — Original repository name. - org (string, optional) — Organization name to fork into (optional).
{ id: number | null; name: string | null; full_name: string | null; url: string | null; html_url: string | null; owner: object | null; fork: boolean | null; }

Create or update a file in a repository. Prevents accidental overwrites with SHA validation.

- owner (string, required) — Repository owner name. - repo (string, required) — Repository name. - path (string, required) — File path in repository. Example: 'src/main.py'. - content (string, required) — File content to write. - message (string, required) — Commit message. - branch (string, optional) — Target branch name (optional). - sha (string, optional) — File SHA for updates (optional).
{ content: object | null; commit: object | null; }

Push multiple files to a repository in a single atomic commit.

- owner (string, required) — Repository owner name. - repo (string, required) — Repository name. - files_json (string, required) — JSON array of file objects with path and content keys. Example: '[{"path": "file1.txt", "content": "hello"}]' - message (string, required) — Commit message. - branch (string, optional) — Target branch name (optional). - author_name (string, optional) — Author name (optional). - author_email (string, optional) — Author email (optional).
{ commit_sha: string | null; tree_sha: string | null; branch: string | null; message: string | null; url: string | null; }
- query (string, required) — Search query - sort (string, optional, default: "stars") — Sort by: stars, forks, updated - order (string, optional, default: "desc") — Order: asc or desc - page (integer, optional, default: 1) — Page number - perPage (integer, optional, default: 30) — Items per page
{ items: { id: number | null; name: string | null; full_name: string | null; private: boolean | null; html_url: string | null; description: string | null; stars: number | null; }[]; total_count: number; }

Fast and precise code search across GitHub repositories.

- query (string, required) — Search query using GitHub code search syntax. - sort (string, optional, default: "indexed") — Sort field. Only 'indexed' is supported. - order (string, optional, default: "desc") — Sort order: asc or desc. - page (integer, optional, default: 1) — Page number. - perPage (integer, optional, default: 30) — Results per page (1-100).
{ total_count: number; incomplete_results: boolean; items: { name: string | null; path: string | null; repository: string | null; url: string | null; }[]; }

Search GitHub users by name, location, followers, or other attributes.

- query (string, required) — User search query using GitHub's search syntax. - sort (string, optional, default: "followers") — Sort field: followers, repositories, joined. - order (string, optional, default: "desc") — Sort order: asc or desc. - page (integer, optional, default: 1) — Page number. - perPage (integer, optional, default: 30) — Results per page (1-100).
{ total_count: number; incomplete_results: boolean; items: { login: string | null; id: number | null; profile_url: string | null; avatar_url: string | null; }[]; }

Search issues and pull requests across GitHub.

- query (string, required) — Search query using GitHub issue search syntax. - sort (string, optional, default: "updated") — Sort field: updated, created, comments. - order (string, optional, default: "desc") — Sort order: asc or desc. - owner (string, optional) — Repository owner (optional). - repo (string, optional) — Repository name (optional). - page (integer, optional, default: 1) — Page number. - perPage (integer, optional, default: 30) — Results per page (1-100).
{ total_count: number; incomplete_results: boolean; items: { number: number | null; title: string | null; state: string | null; body: string | null; url: string | null; comments: number | null; user: string | null; }[]; }

Search for pull requests across GitHub using search syntax.

- query (string, required) — Search query using GitHub search syntax. - sort (string, optional, default: "updated") — Sort field: updated, created, comments. - order (string, optional, default: "desc") — Sort order: asc or desc. - owner (string, optional) — Repository owner (optional). - repo (string, optional) — Repository name (optional). - page (integer, optional, default: 1) — Page number. - per_page (integer, optional, default: 30) — Results per page.
{ total_count: number; incomplete_results: boolean; pull_requests: { number: number | null; title: string | null; state: string | null; url: string | null; user: string | null; created_at: string | null; updated_at: string | null; comments: number | null; }[]; page: number | null; per_page: number | null; }
- owner (string, required) — Repository owner - repo (string, required) — Repository name - state (string, optional, default: "open") — Filter by state: open, closed, all - labels (string, optional) — Comma-separated label names to filter by - page (integer, optional, default: 1) — Page number - perPage (integer, optional, default: 30) — Items per page
{ issues: { number: number | null; title: string | null; state: string | null; url: string | null; body: string | null; user: string | null; labels: string[]; created_at: string | null; updated_at: string | null; }[]; count: number; }

Get detailed information about a specific GitHub issue.

- owner (string, required) — Repository owner name. - repo (string, required) — Repository name. - issue_number (integer, required) — Issue number.
{ number: number | null; title: string | null; body: string | null; state: string | null; state_reason: string | null; labels: string[]; assignees: string[]; url: string | null; user: string | null; created_at: string | null; updated_at: string | null; closed_at: string | null; }

Get all comments on a GitHub issue with pagination support.

- owner (string, required) — Repository owner name. - repo (string, required) — Repository name. - issue_number (integer, required) — Issue number. - page (integer, optional, default: 1) — Page number. - perPage (integer, optional, default: 30) — Comments per page (1-100).
{ comments: { id: number | null; body: string | null; url: string | null; user: string | null; created_at: string | null; updated_at: string | null; }[]; page: number | null; per_page: number | null; }

Create a new GitHub issue in a repository.

- owner (string, required) — Repository owner name. - repo (string, required) — Repository name. - title (string, required) — Issue title (required). - body (string, optional) — Issue description (optional). - assignees (string[], optional) — List of usernames to assign (optional). - labels (string[], optional) — List of label names (optional). - milestone (integer, optional) — Milestone ID (optional).
{ id: number | null; number: number | null; url: string | null; title: string | null; }

Add a comment to a GitHub issue or pull request.

- owner (string, required) — Repository owner name. - repo (string, required) — Repository name. - issue_number (integer, required) — Issue or pull request number. - body (string, required) — Comment text (required).
{ id: number | null; url: string | null; body: string | null; user: string | null; }

Updates a GitHub issue's title, body, state, assignees, labels, or milestone. Only the fields you provide are changed — others keep their current value. NOTE: this overwrites the current field values — the original state is not stored after the call. The response includes both the before and after state so you have a full record of what changed.

- owner (string, required) — Repository owner name. - repo (string, required) — Repository name. - issue_number (integer, required) — Issue number to update. - title (string, optional) — New issue title (optional). - body (string, optional) — New issue description (optional). - state (string, optional) — New state: open or closed (optional). - state_reason (string, optional) — Reason when closing: completed, not_planned (optional). - assignees (string[], optional) — New list of assignees (optional). - labels (string[], optional) — New list of labels (optional). - milestone (integer, optional) — Milestone ID (optional).
{ before: { number: number | null; title: string | null; body: string | null; state: string | null; state_reason: string | null; labels: string[]; assignees: string[]; url: string | null; user: string | null; created_at: string | null; updated_at: string | null; closed_at: string | null; }; after: { id: number | null; number: number | null; url: string | null; title: string | null; state: string | null; }; }

Find all repositories in an organization where specific contributors have made contributions.

- org (string, required) — Organization name - contributor_usernames (string, required) — GitHub username(s) to filter by. Comma-separated for multiple. - repo_type (string, optional, default: "all") — Filter by type: all, public, or private.
{ filter_contributors: string[]; organization: string | null; repo_type_filter: string | null; total_repos_with_filtered_contributors: number; repos: { repo: string | null; full_name: string | null; url: string | null; private: boolean | null; description: string | null; contributors: { username: string | null; contributions: number; }[]; total_filtered_contributions: number; }[]; }

Manage sub-issues for a parent issue (add, remove, reprioritize).

- owner (string, required) — Repository owner - repo (string, required) — Repository name - issue_number (integer, required) — Parent issue number - method (string, required) — Operation: add, remove, or reprioritize - sub_issue_id (integer, required) — ID of the sub-issue - replace_parent (boolean, optional, default: false) — Replace current parent when adding - after_id (integer, optional) — Sub-issue ID to position after - before_id (integer, optional) — Sub-issue ID to position before
{ method: string | null; sub_issue_id: number | null; success: boolean | null; message: string | null; }

Assign GitHub Copilot to work on an issue.

- owner (string, required) — Repository owner - repo (string, required) — Repository name - issue_number (integer, required) — Issue number - base_ref (string, optional) — Git reference to start from (optional). - custom_instructions (string, optional) — Additional context for Copilot (optional).
{ issue_number: number | null; assigned: boolean | null; job_id: number | null; status: string | null; pull_request_url: string | null; }

Get details for a pull request with flexible method options (get, get_files, get_status, get_comments, get_review_comments).

- owner (string, required) — Repository owner - repo (string, required) — Repository name - pull_number (integer, required) — Pull request number - method (string, optional, default: "get") — Which PR data to retrieve: get, get_files, get_status, get_comments, get_review_comments - page (integer, optional, default: 1) — Page number - per_page (integer, optional, default: 30) — Results per page

Polymorphic shape covering all 5methodvariants. Only the fields relevant to the method used are populated; the rest staynull.

{ // method="get" number: number | null; title: string | null; body: string | null; state: string | null; state_reason: string | null; url: string | null; user: string | null; created_at: string | null; updated_at: string | null; merged_at: string | null; merged: boolean | null; merge_commit_sha: string | null; head: object | null; base: object | null; draft: boolean | null; additions: number | null; deletions: number | null; changed_files: number | null; commits: number | null; labels: string[] | null; assignees: string[] | null; reviewers: string[] | null; // method="get_files" files: object[] | null; total_files: number | null; // method="get_status" sha: string | null; total_count: number | null; statuses: object[] | null; // method="get_comments" comments: object[] | null; total_comments: number | null; // method="get_review_comments" review_comments: object[] | null; total_review_comments: number | null; // pagination (get_files / get_comments / get_review_comments) page: number | null; per_page: number | null; }

List pull requests in a GitHub repository with filtering and sorting options.

- owner (string, required) — Repository owner - repo (string, required) — Repository name - state (string, optional, default: "open") — Filter by state: open, closed, or all - sort (string, optional, default: "created") — Sort by: created, updated, popularity, or long-running - direction (string, optional, default: "desc") — Sort direction: asc or desc - base (string, optional) — Filter by base branch - head (string, optional) — Filter by head branch (user:branch format) - page (integer, optional, default: 1) — Page number - per_page (integer, optional, default: 30) — Results per page
{ pull_requests: { number: number | null; title: string | null; state: string | null; url: string | null; user: string | null; created_at: string | null; updated_at: string | null; draft: boolean | null; additions: number | null; deletions: number | null; changed_files: number | null; }[]; total_count: number; page: number | null; per_page: number | null; }

Create a new pull request in a GitHub repository.

- owner (string, required) — Repository owner - repo (string, required) — Repository name - title (string, required) — Pull request title - head (string, required) — Branch containing changes - base (string, required) — Branch to merge into - body (string, optional) — PR description (optional) - draft (boolean, optional, default: false) — Create as draft PR - maintainer_can_modify (boolean, optional, default: true) — Allow maintainer edits
{ number: number | null; title: string | null; state: string | null; draft: boolean | null; url: string | null; head_branch: string | null; base_branch: string | null; created_at: string | null; user: string | null; }

Updates a pull request's title, body, state, base branch, draft status, maintainer-edit permission, or requested reviewers. Only the fields you provide are changed — others keep their current value. NOTE: this overwrites the current field values — the original state is not stored after the call. The response includes both the before and after state so you have a full record of what changed.

- owner (string, required) — Repository owner - repo (string, required) — Repository name - pull_number (integer, required) — Pull request number - title (string, optional) — New title (optional) - body (string, optional) — New description (optional) - state (string, optional) — 'open' or 'closed' (optional) - base (string, optional) — New base branch (optional) - draft (boolean, optional) — Mark as draft/ready (optional) - maintainer_can_modify (boolean, optional) — Allow maintainer edits (optional) - reviewers (string[], optional) — Request reviews from users (optional)
{ before: { number: number | null; title: string | null; body: string | null; state: string | null; state_reason: string | null; url: string | null; user: string | null; created_at: string | null; updated_at: string | null; merged_at: string | null; merged: boolean | null; merge_commit_sha: string | null; head: object | null; base: object | null; draft: boolean | null; additions: number | null; deletions: number | null; changed_files: number | null; commits: number | null; labels: string[] | null; assignees: string[] | null; reviewers: string[] | null; files: object[] | null; total_files: number | null; sha: string | null; total_count: number | null; statuses: object[] | null; comments: object[] | null; total_comments: number | null; review_comments: object[] | null; total_review_comments: number | null; page: number | null; per_page: number | null; }; after: { number: number | null; title: string | null; state: string | null; draft: boolean | null; url: string | null; updated_at: string | null; }; }

Merges a pull request using the given merge method (merge, squash, or rebase). This action is irreversible — once merged, the pull request cannot be un-merged; undoing it requires a new commit or pull request.

- owner (string, required) — Repository owner - repo (string, required) — Repository name - pull_number (integer, required) — Pull request number - merge_method (string, optional, default: "merge") — 'merge', 'squash', or 'rebase' - commit_title (string, optional) — Custom commit title (optional) - commit_message (string, optional) — Commit message details (optional)
{ merged: boolean | null; sha: string | null; message: string | null; }

Update pull request branch with latest changes from base branch.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.