MewCP Github MCP
About
Hosted, Stateless & Multitenant GitHub MCP server connects AI tools directly to GitHub's platform
Details
- Author
- asthetech
- Categories
- Developer Tools, Other
Jump to
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.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





