GitHub API 的 MCP 服务器,提供文件操作、仓库管理和高级搜索功能,具有自动分支创建和全面的错误处理功能。
935 查看 · 2026-07-07 更新
简介
GitHub API 的 MCP 服务器,提供文件操作、仓库管理和高级搜索功能,具有自动分支创建和全面的错误处理功能。
简介
GitHub API 的 MCP 服务器,提供文件操作、仓库管理和高级搜索功能,具有自动分支创建和全面的错误处理功能。
GitHub MCP Server Plus
MCP 服务器用于 GitHub API,支持文件操作、仓库管理、搜索功能等。
功能
- 自动分支创建:在创建/更新文件或推送更改时,如果分支不存在,则会自动创建
- 全面的错误处理:针对常见问题提供清晰的错误信息
- Git 历史记录保留:操作过程中不会强制推送,从而保持正确的 Git 历史记录
- 批量操作:支持单个文件和多个文件的操作,可以使用内容或文件路径
- 高级搜索:支持代码、问题/PR 和用户的搜索
工具
-
create_or_update_file- Create or update a single file in a repository
- Inputs:
owner(string): Repository owner (username or organization)repo(string): Repository namepath(string): Path where to create/update the filecontent(string): Content of the filemessage(string): Commit messagebranch(string): Branch to create/update the file insha(optional string): SHA of file being replaced (for updates)
- Returns: File content and commit details
-
push_files_content- Push multiple files with direct content in a single commit
- Inputs:
owner(string): Repository ownerrepo(string): Repository namebranch(string): Branch to push tofiles(array): Files to push, each withpathandcontentmessage(string): Commit message
- Returns: Updated branch reference
-
push_files_from_path- Push multiple files from filesystem paths in a single commit
- Inputs:
owner(string): Repository ownerrepo(string): Repository namebranch(string): Branch to push tofiles(array): Files to push, each with:path(string): Target path in the repositoryfilepath(string): Source filesystem path to read from
message(string): Commit message
- Returns: Updated branch reference
-
search_repositories- Search for GitHub repositories
- Inputs:
query(string): Search querypage(optional number): Page number for paginationperPage(optional number): Results per page (max 100)
- Returns: Repository search results
-
create_repository- Create a new GitHub repository
- Inputs:
name(string): Repository namedescription(optional string): Repository descriptionprivate(optional boolean): Whether repo should be privateautoInit(optional boolean): Initialize with README
- Returns: Created repository details
-
get_file_contents- Get contents of a file or directory
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepath(string): Path to file/directorybranch(optional string): Branch to get contents from
- Returns: File/directory contents
-
create_issue- Create a new issue
- Inputs:
owner(string): Repository ownerrepo(string): Repository nametitle(string): Issue titlebody(optional string): Issue descriptionassignees(optional string[]): Usernames to assignlabels(optional string[]): Labels to addmilestone(optional number): Milestone number
- Returns: Created issue details
-
create_pull_request- Create a new pull request
- Inputs:
owner(string): Repository ownerrepo(string): Repository nametitle(string): PR titlebody(optional string): PR descriptionhead(string): Branch containing changesbase(string): Branch to merge intodraft(optional boolean): Create as draft PRmaintainer_can_modify(optional boolean): Allow maintainer edits
- Returns: Created pull request details
-
fork_repository- Fork a repository
- Inputs:
owner(string): Repository ownerrepo(string): Repository nameorganization(optional string): Organization to fork to
- Returns: Forked repository details
-
create_branch- Create a new branch
- Inputs:
owner(string): Repository ownerrepo(string): Repository namebranch(string): Name for new branchfrom_branch(optional string): Source branch (defaults to repo default)
- Returns: Created branch reference
-
list_issues- List and filter repository issues
- Inputs:
owner(string): Repository ownerrepo(string): Repository namestate(optional string): Filter by state ('open', 'closed', 'all')labels(optional string[]): Filter by labelssort(optional string): Sort by ('created', 'updated', 'comments')direction(optional string): Sort direction ('asc', 'desc')since(optional string): Filter by date (ISO 8601 timestamp)page(optional number): Page numberper_page(optional number): Results per page
- Returns: Array of issue details
-
update_issue- Update an existing issue
- Inputs:
owner(string): Repository ownerrepo(string): Repository nameissue_number(number): Issue number to updatetitle(optional string): New titlebody(optional string): New descriptionstate(optional string): New state ('open' or 'closed')labels(optional string[]): New labelsassignees(optional string[]): New assigneesmilestone(optional number): New milestone number
- Returns: Updated issue details
-
add_issue_comment- Add a comment to an issue
- Inputs:
owner(string): Repository ownerrepo(string): Repository nameissue_number(number): Issue number to comment onbody(string): Comment text
- Returns: Created comment details
-
search_code- Search for code across GitHub repositories
- Inputs:
q(string): Search query using GitHub code search syntaxsort(optional string): Sort field ('indexed' only)order(optional string): Sort order ('asc' or 'desc')per_page(optional number): Results per page (max 100)page(optional number): Page number
- Returns: Code search results with repository context
-
search_issues- Search for issues and pull requests
- Inputs:
q(string): Search query using GitHub issues search syntaxsort(optional string): Sort field (comments, reactions, created, etc.)order(optional string): Sort order ('asc' or 'desc')per_page(optional number): Results per page (max 100)page(optional number): Page number
- Returns: Issue and pull request search results
-
search_users- Search for GitHub users
- Inputs:
q(string): Search query using GitHub users search syntaxsort(optional string): Sort field (followers, repositories, joined)order(optional string): Sort order ('asc' or 'desc')per_page(optional number): Results per page (max 100)page(optional number): Page number
- Returns: User search results
-
list_commits- Gets commits of a branch in a repository
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepage(optional string): page numberper_page(optional string): number of record per pagesha(optional string): branch name
- Returns: List of commits
-
get_issue- Gets the contents of an issue within a repository
- Inputs:
owner(string): Repository ownerrepo(string): Repository nameissue_number(number): Issue number to retrieve
- Returns: GitHub Issue object & details
-
get_pull_request- Get details of a specific pull request
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): Pull request number
- Returns: Pull request details including diff and review status
-
list_pull_requests- List and filter repository pull requests
- Inputs:
owner(string): Repository ownerrepo(string): Repository namestate(optional string): Filter by state ('open', 'closed', 'all')head(optional string): Filter by head user/org and branchbase(optional string): Filter by base branchsort(optional string): Sort by ('created', 'updated', 'popularity', 'long-running')direction(optional string): Sort direction ('asc', 'desc')per_page(optional number): Results per page (max 100)page(optional number): Page number
- Returns: Array of pull request details
-
create_pull_request_review- Create a review on a pull request
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): Pull request numberbody(string): Review comment textevent(string): Review action ('APPROVE', 'REQUEST_CHANGES', 'COMMENT')commit_id(optional string): SHA of commit to reviewcomments(optional array): Line-specific comments, each with:path(string): File pathposition(number): Line position in diffbody(string): Comment text
- Returns: Created review details
-
merge_pull_request- Merge a pull request
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): Pull request numbercommit_title(optional string): Title for merge commitcommit_message(optional string): Extra detail for merge commitmerge_method(optional string): Merge method ('merge', 'squash', 'rebase')
- Returns: Merge result details
-
get_pull_request_files- Get the list of files changed in a pull request
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): Pull request number
- Returns: Array of changed files with patch and status details
-
get_pull_request_status- Get the combined status of all status checks for a pull request
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): Pull request number
- Returns: Combined status check results and individual check details
-
update_pull_request_branch- Update a pull request branch with the latest changes from the base branch
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): Pull request numberexpected_head_sha(optional string): The expected SHA of the pull request's HEAD ref
- Returns: Success message when branch is updated
-
get_pull_request_comments- Get the review comments on a pull request
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): Pull request number
- Returns: Array of pull request review comments
-
get_pull_request_reviews- Get the reviews on a pull request
- Inputs:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): Pull request number
- Returns: Array of pull request reviews
搜索查询语法
代码搜索
language:javascript: 按编程语言搜索repo:owner/name: 在特定仓库中搜索path:app/src: 在特定路径中搜索extension:js: 按文件扩展名搜索- 示例:
q: "import express" language:typescript path:src/
问题搜索
is:issue或is:pr: 按类型过滤is:open或is:closed: 按状态过滤label:bug: 按标签搜索author:username: 按作者搜索- 示例:
q: "memory leak" is:issue is:open label:bug
用户搜索
type:user或type:org: 按账户类型过滤followers:>1000: 按关注者数量过滤location:London: 按位置搜索- 示例:
q: "fullstack developer" location:London followers:>100
有关详细的搜索语法,请参阅 GitHub 的搜索文档。
设置
个人访问令牌
- 前往 个人访问令牌(在 GitHub 设置 > 开发者设置)
- 选择此令牌可以访问的仓库(公共、全部或选择)
- 创建一个具有
repo范围的令牌(“对私有仓库的完全控制”)- 或者,如果仅处理公共仓库,则只选择
public_repo范围
- 或者,如果仅处理公共仓库,则只选择
- 复制生成的令牌
使用 Claude Desktop
要在 Claude Desktop 中使用此功能,请将以下内容添加到您的 claude_desktop_config.json 文件中:
Docker
{ "mcpServers": { "github": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "mcp/github" ], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>" } } } }
NPX
{ "mcpServers": { "github": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-github" ], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>" } } } }
构建
Docker 构建:
docker build -t mcp/github -f src/github/Dockerfile .
许可证
此 MCP 服务器根据 MIT 许可证许可。这意味着您可以在遵守 MIT 许可证条款和条件的前提下自由使用、修改和分发该软件。更多详情,请参见项目存储库中的 LICENSE 文件。
服务配置
[{'mcpServers': {'github': {'args': ['-y', '@modelcontextprotocol/server-github'], 'command': 'npx', 'env': {'GITHUB_PERSONAL_ACCESS_TOKEN': '<YOUR_TOKEN>'}}}}]