ConnectGet API Key API Key https://gateway.mewcp.com/github/mcp Copy Infrastructure You Can Trust for Agentic Products
© 2026 MewCP. All rights reserved.
A Model Context Protocol (MCP) server that exposes GitHub's API for repository management, search, collaboration workflows, and automation tasks.
Overview
The GitHub MCP Server provides stateless, multi-user GitHub API access through 40+ MCP tools:
Repository, branch, commit, and file operations
Issues and pull request lifecycle management
Search, releases, labels, and Copilot workflow automation
Perfect for:
AI-driven code maintenance and repository automation
Engineering workflow orchestration across GitHub resources
Building custom assistants for issue triage and PR operations
get_repo — Get repository detailsFetches core metadata for a repository, including owner, visibility, stars, and default branch.
Inputs:
oauth_token (object, required) — GitHub token payload { "token" : "..." , "scopes" : [ "repo" ] }
owner (string, required) — Repository owner
repo (string, required) — Repository name
Output:
{
"ok" : true ,
"data" : {
"full_name" : "owner/repo" ,
"default_branch" : "main" ,
"private" : false
}
} usage Example:
POST /mcp/cl-github-mcp-server/get_repo
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs"
}
list_branches — List repository branchesReturns paginated branch metadata for a repository.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
page (integer, optional) — Page number
perPage (integer, optional) — Items per page
Output:
{
"ok" : true ,
"data" : [
{ "name"
search_repositories — Search GitHub repositoriesSearches repositories by query with sorting and pagination.
Inputs:
oauth_token (object, required) — GitHub token payload
query (string, required) — Search query
sort (string, optional) — stars , forks , updated
order (string, optional) — asc or desc
page (integer, optional) — Page number
search_code — Search code across GitHubPerforms precise code search using GitHub query syntax.
Inputs:
oauth_token (object, required) — GitHub token payload
query (string, required) — Code search query
sort (string, optional) — indexed
order (string, optional) — asc or desc
page (integer, optional) — Page number
perPage (integer, optional) — Items per page
Output:
search_users — Search GitHub usersFinds users by profile attributes and query filters.
Inputs:
oauth_token (object, required) — GitHub token payload
query (string, required) — User search query
sort (string, optional) — followers , repositories , joined
order (string, optional) — asc or desc
page (integer, optional) — Page number
(integer, optional) — Items per page
search_issues — Search issues and pull requestsSearches issues/PRs globally or scoped to a repository.
Inputs:
oauth_token (object, required) — GitHub token payload
query (string, required) — Issue search query
sort (string, optional) — updated , created , comments
order (string, optional) — asc or desc
owner (string, optional) — Repository owner (requires )
list_commits — List repository commitsLists commits with optional filters such as author, date range, path, and SHA.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
sha (string, optional) — Branch or commit SHA
author (string, optional) — Author login
since (string, optional) — ISO date
Output:
get_commit — Get commit detailsFetches one commit and optionally includes changed files in the response.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
sha (string, required) — Commit SHA
include_diff (boolean, optional) — Include file diff data
Output:
{
"ok" : true ,
"data" : {
"sha"
list_issues — List repository issuesReturns issues with filters for state, labels, and pagination.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
state (string, optional) — open , closed , all
labels (string, optional) — Comma-separated labels
Output:
get_issue — Get issue detailsRetrieves full metadata for a single issue.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
issue_number (integer, required) — Issue number
Output:
{
"ok" : true ,
"data" : {
"number" : 101 ,
"title" :
get_issue_comments — Get issue commentsLists comments on a single issue with pagination support.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
issue_number (integer, required) — Issue number
page (integer, optional) — Page number
perPage (integer, optional) — Results per page
Output:
create_issue — Create issueCreates a repository issue with optional body, assignees, labels, and milestone.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
title (string, required) — Issue title
body (string, optional) — Issue body
labels (array, optional) — Label names
Output:
add_issue_comment — Add issue/PR commentAdds a markdown comment to an issue or pull request.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
issue_number (integer, required) — Issue/PR number
body (string, required) — Comment body
Output:
{
"ok" : true ,
"data" : { "id" :
update_issue — Update issue fieldsUpdates issue title, body, state, labels, assignees, and milestone.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
issue_number (integer, required) — Issue number
state (string, optional) — open or closed
state_reason (string, optional) — completed or
get_file_contents — Get repository file/directory contentReturns file content or directory listing for a path and ref.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
path (string, optional) — File or directory path
ref (string, optional) — Branch, tag, or commit SHA
Output:
{
"ok" : true ,
"data" : { "type"
list_org_repositories_by_contributor — Find org repositories by contributorFinds organization repositories where one or more contributors have commit history.
Inputs:
oauth_token (object, required) — GitHub token payload
org (string, required) — Organization login
contributor_usernames (string, required) — Comma-separated usernames
repo_type (string, optional) — all , public , or private
Output:
list_tags — List repository tagsReturns tag names, commit references, and archive URLs.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
page (integer, optional) — Page number
perPage (integer, optional) — Results per page
Output:
{
"ok" : true ,
"data" : { "tags" : [{
get_tag — Get tag detailsFetches metadata for one git tag reference.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
tag (string, required) — Tag name
Output:
{
"ok" : true ,
"data" : { "ref" : "refs/tags/v1.0.0" , "object" : { "sha"
create_repository — Create repositoryCreates a repository in a personal account or organization.
Inputs:
oauth_token (object, required) — GitHub token payload
name (string, required) — Repository name
description (string, optional) — Repository description
private (boolean, optional) — Private visibility
org (string, optional) — Organization target
Output:
{
"ok" : true ,
"data" : { "id" :
create_or_update_file — Create or update a repository fileWrites content to a file path, creating or updating with optional SHA protection.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
path (string, required) — File path
content (string, required) — File content
message (string, required) — Commit message
Output:
fork_repository — Fork repositoryForks a repository into the authenticated user account or specified organization.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Source owner
repo (string, required) — Source repository
org (string, optional) — Destination organization
Output:
{
"ok" : true ,
"data" : { "full_name" : "my-user/repo" , "fork" :
create_branch — Create branchCreates a new branch from a specified SHA or the default branch head.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
branch_name (string, required) — New branch name
sha (string, optional) — Base commit SHA
Output:
{
"ok" : true ,
"data" : { "ref" :
push_files — Push multiple files atomicallyCommits multiple file changes in one tree/commit update operation.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
files_json (string, required) — JSON array of file path/content objects
message (string, required) — Commit message
branch (string, optional) — Target branch
Output:
pull_request_read — Read pull request detailsFetches PR data with method variants for files, status, comments, and review comments.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
pull_number (integer, required) — Pull request number
method (string, optional) — get , get_files , get_status , get_comments ,
list_pull_requests — List pull requestsLists pull requests with filter and sorting options.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
state (string, optional) — open , closed , all
sort (string, optional) — created , updated , ,
search_pull_requests — Search pull requestsSearches pull requests using GitHub search syntax with optional repository scope.
Inputs:
oauth_token (object, required) — GitHub token payload
query (string, required) — Search query
sort (string, optional) — Sort field
order (string, optional) — asc or desc
owner (string, optional) — Repository owner
repo (string, optional) — Repository name
Output:
create_pull_request — Create pull requestCreates a PR from head to base with optional draft mode and body.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
title (string, required) — PR title
head (string, required) — Source branch
base (string, required) — Target branch
Output:
update_pull_request — Update pull requestUpdates PR title, body, state, base branch, draft state, and reviewer requests.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
pull_number (integer, required) — Pull request number
title (string, optional) — Updated title
state (string, optional) — open or closed
Output:
merge_pull_request — Merge pull requestMerges a PR with merge, squash, or rebase strategy.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
pull_number (integer, required) — Pull request number
merge_method (string, optional) — merge , squash , rebase
Output:
update_pull_request_branch — Update PR branch from baseUpdates the PR branch with latest changes from the base branch.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
pull_number (integer, required) — Pull request number
expected_head_sha (string, optional) — Concurrency guard SHA
Output:
{
"ok" : true ,
"data" : { "message"
pull_request_review_write — Write PR reviews and thread actionsCreates, submits, and deletes pending reviews, and resolves/unresolves review threads.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
pull_number (integer, required) — Pull request number
method (string, required) — create , submit_pending , delete_pending , resolve_thread ,
add_reply_to_pull_request_comment — Reply to PR commentAdds a reply to an existing pull request review comment thread.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
pull_number (integer, required) — Pull request number
comment_id (integer, required) — Comment ID to reply to
body (string, required) — Reply text
Output:
get_latest_release — Get latest releaseReturns the latest published release of a repository.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
Output:
{
"ok" : true ,
"data" : { "tag_name" : "v2.3.0" , "name" : "Release 2.3.0" , "draft" : false
list_releases — List releasesLists repository releases with pagination.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
page (integer, optional) — Page number
per_page (integer, optional) — Results per page
Output:
{
"ok" : true ,
"data" : { "releases" : [{
get_release_by_tag — Get release by tagFetches one release by tag name.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
tag (string, required) — Tag name
Output:
{
"ok" : true ,
"data" : { "tag_name" : "v2.3.0" , "name" : "Release 2.3.0"
get_label — Get repository labelRetrieves metadata for a specific repository label.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
name (string, required) — Label name
Output:
{
"ok" : true ,
"data" : { "name" : "bug" , "color" : "d73a4a"
get_me — Get authenticated userReturns identity details for the token owner.
Inputs:
oauth_token (object, required) — GitHub token payload
Output:
{
"ok" : true ,
"data" : { "login" : "octocat" , "id" : 1 , "html_url" : "https://github.com/octocat" }
} usage Example:
sub_issue_write — Manage sub-issuesAdds, removes, or reprioritizes sub-issues for a parent issue.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
issue_number (integer, required) — Parent issue number
method (string, required) — add , remove , reprioritize
sub_issue_id (integer, required) — Sub-issue identifier
Output:
assign_copilot_to_issue — Assign Copilot coding agentAssigns GitHub Copilot coding agent to work on an issue.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
issue_number (integer, required) — Issue number
base_ref (string, optional) — Branch to start from
custom_instructions (string, optional) — Extra agent instructions
Output:
request_copilot_review — Request Copilot PR reviewRequests an automated Copilot review on a pull request.
Inputs:
oauth_token (object, required) — GitHub token payload
owner (string, required) — Repository owner
repo (string, required) — Repository name
pull_number (integer, required) — Pull request number
Output:
{
"ok" : true ,
"data" : { "pull_number" : 8 , "status" :
API Parameters Reference
Common Parameters
oauth_token — Structured token object with token and optional scopes list
owner — GitHub repository owner or organization login
repo — Repository name
page / perPage / per_page — Pagination controls used by listing/search tools
method — Operation selector for multiplexed tools (for example PR read/review operations)
Resource Formats Repository Resource:
owner/repo
Example: github/docs branch Reference:
refs/heads/{ branch_name }
Example: refs/heads/main issue / Pull Request Number:
integer identifier
Example: 101 file Path Resource:
Authentication Guide
OAuth / API Key Setup All tools require GitHub authentication. You can use a GitHub personal access token, or generate OAuth tokens with the included helper script.
Step 1: Create GitHub OAuth App
Go to GitHub Developer Settings
Open OAuth Apps and click New OAuth App
Set Authorization callback URL to http: //127.0.0.1:3000/callback
Add credentials to environment variables:
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
Optional: GITHUB_SCOPES=repo,read:org
Step 3: Authenticate Run the OAuth helper script from project root:
Troubleshooting
Common Issues & Solutions Missing or Invalid Token
Cause: oauth_token.token missing or malformed
Solution:
Provide oauth_token as { "token" : "..." , "scopes" : [ ... ] }
Verify the token is active in GitHub settings
Re-run OAuth flow or generate a new PAT
Missing Scope Error
Cause: Token does not include required scope (repo in most tools)
Solution:
Regenerate token with required scopes
Pass the granted scopes list in oauth_token.scopes
Resources
:
"main"
,
"sha"
:
"abc123"
,
"protected"
:
true
}
]
}
POST /mcp/cl-github-mcp-server/list_branches
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"page" : 1 ,
"perPage" : 30
}
perPage (integer, optional) — Items per page{
"ok" : true ,
"data" : {
"total_count" : 123 ,
"items" : [{ "full_name" : "owner/repo" , "description" : "..." }]
}
} POST /mcp/cl-github-mcp-server/search_repositories
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"query" : "topic:mcp language:python" ,
"sort" : "stars" ,
"order" : "desc"
} {
"ok" : true ,
"data" : {
"total_count" : 42 ,
"items" : [{ "repository" : "owner/repo" , "path" : "src/main.py" }]
}
} POST /mcp/cl-github-mcp-server/search_code
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"query" : "path:github_mcp class GitHubServiceError" ,
"page" : 1 ,
"perPage" : 20
} perPage
{
"ok" : true ,
"data" : {
"items" : [{ "login" : "octocat" , "profile_url" : "https://github.com/octocat" }]
}
} POST /mcp/cl-github-mcp-server/search_users
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"query" : "location:berlin followers:>100"
} repo
repo (string, optional) — Repository name (requires owner ){
"ok" : true ,
"data" : {
"items" : [{ "number" : 12 , "title" : "Bug report" , "state" : "open" }]
}
} POST /mcp/cl-github-mcp-server/search_issues
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"query" : "is:open label:bug" ,
"owner" : "github" ,
"repo" : "docs"
} ,
"data" : [
{ "sha" : "abc123" , "message" : "feat: add endpoint" , "author" : "octocat" }
]
}
POST /mcp/cl-github-mcp-server/list_commits
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"page" : 1 ,
"perPage" : 30
} :
"abc123"
,
"message" : "fix: handle null scope" ,
"files" : [{ "filename" : "github_mcp/service.py" , "status" : "modified" }]
}
}
POST /mcp/cl-github-mcp-server/get_commit
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"sha" : "abc123" ,
"include_diff" : true
} {
"ok" : true ,
"data" : {
"issues" : [{ "number" : 101 , "title" : "Improve docs" , "state" : "open" }],
"count" : 1
}
}
POST /mcp/cl-github-mcp-server/list_issues
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"state" : "open"
} "Improve docs"
,
"state" : "open" ,
"labels" : [ "documentation" ]
}
}
POST /mcp/cl-github-mcp-server/get_issue
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" , "public_repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"issue_number" : 101
} ,
"data" : {
"comments" : [{ "id" : 1 , "body" : "Looks good" , "user" : "octocat" }],
"page" : 1 ,
"per_page" : 30
}
}
POST /mcp/cl-github-mcp-server/get_issue_comments
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"issue_number" : 101
} "data" : { "id" : 12345 , "number" : 102 , "url" : "https://github.com/owner/repo/issues/102" }
}
POST /mcp/cl-github-mcp-server/create_issue
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"title" : "Add API pagination examples" ,
"labels" : [ "documentation" ]
} 9876
,
"url"
:
"https://github.com/owner/repo/issues/101#issuecomment-1"
}
}
POST /mcp/cl-github-mcp-server/add_issue_comment
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"issue_number" : 101 ,
"body" : "Thanks, I can work on this."
} not_planned
{
"ok" : true ,
"data" : { "number" : 101 , "title" : "Improve docs" , "state" : "closed" }
} POST /mcp/cl-github-mcp-server/update_issue
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"issue_number" : 101 ,
"state" : "closed" ,
"state_reason" : "completed"
} :
"file"
,
"name"
:
"README.md"
,
"encoding"
:
"base64"
}
}
POST /mcp/cl-github-mcp-server/get_file_contents
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"path" : "/README.md" ,
"ref" : "main"
} "ok" : true ,
"data" : { "org" : "github" , "repositories" : [{ "name" : "docs" , "contributors" : [ "octocat" ]}]}
}
POST /mcp/cl-github-mcp-server/list_org_repositories_by_contributor
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" , "read:org" ]},
"org" : "github" ,
"contributor_usernames" : "octocat,hubot" ,
"repo_type" : "all"
} "name"
:
"v1.0.0"
,
"commit"
: {
"sha"
:
"abc123"
}}]}
}
POST /mcp/cl-github-mcp-server/list_tags
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs"
} :
"abc123"
}}
}
POST /mcp/cl-github-mcp-server/get_tag
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"tag" : "v1.0.0"
} 2222
,
"full_name"
:
"owner/new-repo"
,
"private"
:
true
}
}
POST /mcp/cl-github-mcp-server/create_repository
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"name" : "cl-github-mcp-demo" ,
"description" : "Demo repository" ,
"private" : true ,
"auto_init" : true
} ,
"data" : { "content" : { "path" : "README.md" }, "commit" : { "sha" : "abc123" }}
}
POST /mcp/cl-github-mcp-server/create_or_update_file
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"path" : "README.md" ,
"content" : "# Demo" ,
"message" : "docs: add readme"
} true
}
}
POST /mcp/cl-github-mcp-server/fork_repository
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs"
} "refs/heads/feature/new-api"
,
"object"
: {
"sha"
:
"abc123"
}}
}
POST /mcp/cl-github-mcp-server/create_branch
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"branch_name" : "feature/new-api"
} ,
"data" : { "commit_sha" : "abc123" , "branch" : "main" , "message" : "chore: update files" }
}
POST /mcp/cl-github-mcp-server/push_files
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"files_json" : "[{ \" path \" : \" docs/a.md \" , \" content \" : \" A \" },{ \" path \" : \" docs/b.md \" , \" content \" : \" B \" }]" ,
"message" : "docs: add two files"
} get_review_comments
{
"ok" : true ,
"data" : { "number" : 7 , "title" : "feat: add API" , "state" : "open" }
} POST /mcp/cl-github-mcp-server/pull_request_read
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"pull_number" : 7 ,
"method" : "get_files"
} popularity
long-running
direction (string, optional) — asc or desc {
"ok" : true ,
"data" : { "pull_requests" : [{ "number" : 7 , "title" : "feat: add API" }], "count" : 1 }
} POST /mcp/cl-github-mcp-server/list_pull_requests
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"state" : "open"
} {
"ok" : true ,
"data" : { "items" : [{ "number" : 7 , "title" : "feat: add API" , "state" : "open" }]}
}
POST /mcp/cl-github-mcp-server/search_pull_requests
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"query" : "is:pr is:open review:required" ,
"owner" : "octocat" ,
"repo" : "demo"
} ,
"data" : { "number" : 8 , "url" : "https://github.com/owner/repo/pull/8" , "state" : "open" }
}
POST /mcp/cl-github-mcp-server/create_pull_request
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"title" : "feat: add docs" ,
"head" : "feature/docs" ,
"base" : "main"
} {
"ok" : true ,
"data" : { "number" : 8 , "state" : "open" , "title" : "feat: add docs v2" }
}
POST /mcp/cl-github-mcp-server/update_pull_request
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"pull_number" : 8 ,
"title" : "feat: add docs v2"
} {
"ok" : true ,
"data" : { "merged" : true , "sha" : "abc123" , "message" : "Pull Request successfully merged" }
}
POST /mcp/cl-github-mcp-server/merge_pull_request
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"pull_number" : 8 ,
"merge_method" : "squash"
} :
"Branch update requested"
}
}
POST /mcp/cl-github-mcp-server/update_pull_request_branch
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"pull_number" : 8
} unresolve_thread
event (string, optional) — APPROVE , REQUEST_CHANGES , COMMENT {
"ok" : true ,
"data" : { "status" : "review_updated" , "pull_number" : 8 }
} POST /mcp/cl-github-mcp-server/pull_request_review_write
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"pull_number" : 8 ,
"method" : "submit_pending" ,
"event" : "APPROVE" ,
"body" : "Looks good"
} true
,
"data" : { "id" : 1001 , "body" : "Thanks for the note" }
}
POST /mcp/cl-github-mcp-server/add_reply_to_pull_request_comment
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"pull_number" : 8 ,
"comment_id" : 100 ,
"body" : "Addressed in latest commit"
} }
}
POST /mcp/cl-github-mcp-server/get_latest_release
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs"
} "tag_name"
:
"v2.3.0"
,
"name"
:
"Release 2.3.0"
}],
"count"
:
1
}
}
POST /mcp/cl-github-mcp-server/list_releases
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"page" : 1 ,
"per_page" : 30
} ,
"url"
:
"https://github.com/owner/repo/releases/tag/v2.3.0"
}
}
POST /mcp/cl-github-mcp-server/get_release_by_tag
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"tag" : "v2.3.0"
} ,
"description"
:
"Something is not working"
}
}
POST /mcp/cl-github-mcp-server/get_label
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "github" ,
"repo" : "docs" ,
"name" : "bug"
} POST /mcp/cl-github-mcp-server/get_me
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : []}
}
{
"ok" : true ,
"data" : { "status" : "updated" , "issue_number" : 101 }
} POST /mcp/cl-github-mcp-server/sub_issue_write
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"issue_number" : 101 ,
"method" : "add" ,
"sub_issue_id" : 202
} true
,
"data" : { "issue_number" : 101 , "status" : "assigned" , "pull_request_url" : null }
}
POST /mcp/cl-github-mcp-server/assign_copilot_to_issue
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"issue_number" : 101 ,
"base_ref" : "main"
} "review_requested"
}
}
POST /mcp/cl-github-mcp-server/request_copilot_review
{
"oauth_token" : { "token" : "${GITHUB_TOKEN}" , "scopes" : [ "repo" ]},
"owner" : "octocat" ,
"repo" : "demo" ,
"pull_number" : 8
} /{ path }
Example: /README.md python3 oauth_script.py
the script opens the browser, handles callback locally, exchanges the code, and prints token JSON.
Step 4: Required Scopes Ensure your token has these scopes:
repo — Required by the repository, file, issue, PR, release, and Copilot tools
read:org — Recommended for organization contributor discovery workflows
public_repo — Optional for public-only issue/comment reads
Retry the request and confirm scope_check in meta
Cause: Invalid JSON or wrong field names/types
Solution:
Validate JSON syntax
Ensure required fields are provided
Match parameter casing (for example perPage vs per_page ) by tool schema
GitHub API Forbidden (403)
Cause: Scope restrictions, organization policy, or branch protection
Solution:
Check token scopes and org permissions
Validate branch protection rules for write/merge operations
Retry with sufficient repository permissions
OAuth Callback Timeout
Cause: OAuth browser approval not completed within timeout
Solution:
Ensure callback URL is exactly http: //127.0.0.1:3000/callback
Re-run python 3 oauth_script.py
Approve authorization promptly in browser