mcpField
G
GitHub MCP Server

GitHub MCP Server

本地服务
github.com/minimind-org版本控制082 周前更新

关于 GitHub MCP Server

GitHub MCP Server 将 GitHub API 操作提供给 MCP 客户端,适用于管理代码仓库、问题和拉取请求的工作流。它支持文件批量操作、搜索,并在创建或更新文件时自动创建缺失分支。

主要功能

  1. 01创建或更新仓库文件
  2. 02单次提交推送多个文件
  3. 03搜索仓库、代码、问题和用户
  4. 04管理问题与拉取请求
  5. 05自动创建缺失分支
  6. 06保留 Git 历史且不强制推送

适用场景

  1. 01批量提交仓库文件变更
  2. 02查找代码、仓库或 GitHub 用户
  3. 03筛选并更新问题
  4. 04查看、审查或合并拉取请求

MCP 相关

该 MCP 服务将 GitHub API 功能封装为工具,供 MCP 客户端执行仓库、文件、问题、拉取请求及搜索操作。README 提供 Claude Desktop 的 Docker 和 npx 配置方式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"github-mcp-server-minimind-org": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
启动命令docker run -i --rm build

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocibuild

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

GitHub MCP 服务

重要:本项目是从 modelcontextprotocol/servers/src/github 分叉而来。

用于 GitHub API 的 MCP 服务,支持文件操作、仓库管理、搜索功能等。

功能
  • 自动创建分支:创建或更新文件、推送更改时,如果分支不存在,会自动创建
  • 全面的错误处理:为常见问题提供清晰的错误消息
  • 保留 Git 历史记录:操作会妥善保留 Git 历史记录,不会强制推送
  • 批量操作:支持单文件和多文件操作
  • 高级搜索:支持搜索代码、问题/PR 和用户

工具

  1. create_or_update_file

    • 在仓库中创建或更新单个文件
    • 输入:
      • owner(string):仓库所有者(用户名或组织)
      • repo(string):仓库名称
      • path(string):要创建或更新文件的路径
      • content(string):文件内容
      • message(string):提交消息
      • branch(string):创建或更新文件所在的分支
      • sha(可选 string):被替换文件的 SHA(用于更新)
    • 返回:文件内容和提交详情
  2. push_files

    • 在一次提交中推送多个文件
    • 输入:
      • owner(string):仓库所有者
      • repo(string):仓库名称
      • branch(string):要推送到的分支
      • files(array):要推送的文件,每个文件包含 path 和 content
      • message(string):提交消息
    • 返回:更新后的分支引用
  3. search_repositories

    • 搜索 GitHub 仓库
    • 输入:
      • query(string):搜索查询
      • page(可选 number):分页页码
      • perPage(可选 number):每页结果数(最多 100)
    • 返回:仓库搜索结果
  4. create_repository

    • 创建新的 GitHub 仓库
    • 输入:
      • name(string):仓库名称
      • description(可选 string):仓库描述
      • private(可选 boolean):是否将仓库设为私有
      • autoInit(可选 boolean):使用 README 初始化
    • 返回:已创建仓库的详情
  5. get_file_contents

    • 获取文件或目录的内容
    • 输入:
      • owner(string):仓库所有者
      • repo(string):仓库名称
      • path(string):文件/目录路径
      • branch(可选 string):要从中获取内容的分支
    • 返回:文件/目录内容
  6. create_issue

    • 创建新的问题
    • 输入:
      • owner(string):仓库所有者
      • repo(string):仓库名称
      • title(string):问题标题
      • body(可选 string):问题描述
      • assignees(可选 string[]):要指派的用户名
      • labels(可选 string[]):要添加的标签
      • milestone(可选 number):里程碑编号
    • 返回:已创建问题的详情
  7. create_pull_request

    • 创建新的拉取请求
    • 输入:
      • owner(string):仓库所有者
      • repo(string):仓库名称
      • title(string):PR 标题
      • body(可选 string):PR 描述
      • head(string):包含更改的分支
      • base(string):要合并到的分支
      • draft(可选 boolean):将 PR 创建为草稿
      • maintainer_can_modify(可选 boolean):允许维护者编辑
    • 返回:已创建拉取请求的详情
  8. fork_repository

    • 分叉仓库
    • 输入:
      • owner(string):仓库所有者
      • repo(string):仓库名称
      • organization(可选 string):要分叉到的组织
    • 返回:已分叉仓库的详情
  9. create_branch

    • 创建新分支
    • 输入:
      • owner (string):仓库所有者
      • repo (string):仓库名称
      • branch (string):新分支名称
      • from_branch (optional string):源分支(默认为仓库默认分支)
    • 返回:已创建的分支引用
  10. list_issues

    • 列出并筛选仓库问题
    • 输入:
      • owner (string):仓库所有者
      • repo (string):仓库名称
      • state (optional string):按状态筛选('open'、'closed'、'all')
      • labels (optional string[]):按标签筛选
      • sort (optional string):按('created'、'updated'、'comments')排序
      • direction (optional string):排序方向('asc'、'desc')
      • since (optional string):按日期筛选(ISO 8601 时间戳)
      • page (optional number):页码
      • per_page (optional number):每页结果数
    • 返回:问题详情数组
  11. update_issue

    • 更新现有问题
    • 输入:
      • owner (string):仓库所有者
      • repo (string):仓库名称
      • issue_number (number):要更新的问题编号
      • title (optional string):新标题
      • body (optional string):新描述
      • state (optional string):新状态('open' 或 'closed')
      • labels (optional string[]):新标签
      • assignees (optional string[]):新受理人
      • milestone (optional number):新里程碑编号
    • 返回:已更新的问题详情
  12. add_issue_comment

    • 为问题添加评论
    • 输入:
      • owner (string):仓库所有者
      • repo (string):仓库名称
      • issue_number (number):要评论的问题编号
      • body (string):评论内容
    • 返回:已创建的评论详情
  13. search_code

    • 在 GitHub 仓库中搜索代码
    • 输入:
      • q (string):使用 GitHub 代码搜索语法的搜索查询
      • sort (optional string):排序字段(仅支持 'indexed')
      • order (optional string):排序顺序('asc' 或 'desc')
      • per_page (optional number):每页结果数(最多 100)
      • page (optional number):页码
    • 返回:包含仓库上下文的代码搜索结果
  14. search_issues

    • 搜索问题和拉取请求
    • 输入:
      • q (string):使用 GitHub 问题搜索语法的搜索查询
      • sort (optional string):排序字段(comments、reactions、created 等)
      • order (optional string):排序顺序('asc' 或 'desc')
      • per_page (optional number):每页结果数(最多 100)
      • page (optional number):页码
    • 返回:问题和拉取请求搜索结果
  15. search_users

    • 搜索 GitHub 用户
    • 输入:
      • q (string):使用 GitHub 用户搜索语法的搜索查询
      • sort (optional string):排序字段(followers、repositories、joined)
      • order (optional string):排序顺序('asc' 或 'desc')
      • per_page (optional number):每页结果数(最多 100)
      • page (optional number):页码
    • 返回:用户搜索结果
  16. list_commits

  • 获取仓库分支的提交记录
  • 输入:
    • owner (string):仓库所有者
    • repo (string):仓库名称
    • page (optional string):页码
    • per_page (optional string):每页记录数
    • sha (optional string):分支名称
  • 返回:提交记录列表
  1. get_issue
  • 获取仓库中某个问题的内容
  • 输入:
    • owner (string):仓库所有者
    • repo (string):仓库名称
    • issue_number (number):要获取的问题编号
  • 返回:GitHub Issue 对象及详情
  1. get_pull_request
  • 获取特定拉取请求的详细信息
  • 输入:
    • owner(字符串):仓库所有者
    • repo(字符串):仓库名称
    • pull_number(数字):拉取请求编号
  • 返回:拉取请求的详细信息,包括差异和审核状态
  1. list_pull_requests
  • 列出并筛选仓库的拉取请求
  • 输入:
    • owner(字符串):仓库所有者
    • repo(字符串):仓库名称
    • state(可选字符串):按状态筛选('open'、'closed'、'all')
    • head(可选字符串):按 head 用户/组织和分支筛选
    • base(可选字符串):按 base 分支筛选
    • sort(可选字符串):按('created'、'updated'、'popularity'、'long-running')排序
    • direction(可选字符串):排序方向('asc'、'desc')
    • per_page(可选数字):每页结果数(最多 100)
    • page(可选数字):页码
  • 返回:拉取请求详细信息数组
  1. create_pull_request_review
  • 在拉取请求上创建审核
  • 输入:
    • owner(字符串):仓库所有者
    • repo(字符串):仓库名称
    • pull_number(数字):拉取请求编号
    • body(字符串):审核评论文本
    • event(字符串):审核操作('APPROVE'、'REQUEST_CHANGES'、'COMMENT')
    • commit_id(可选字符串):要审核的提交 SHA
    • comments(可选数组):针对特定行的评论,每条评论包含:
      • path(字符串):文件路径
      • position(数字):差异中的行位置
      • body(字符串):评论文本
  • 返回:已创建审核的详细信息
  1. merge_pull_request
  • 合并拉取请求
  • 输入:
    • owner(字符串):仓库所有者
    • repo(字符串):仓库名称
    • pull_number(数字):拉取请求编号
    • commit_title(可选字符串):合并提交的标题
    • commit_message(可选字符串):合并提交的补充说明
    • merge_method(可选字符串):合并方式('merge'、'squash'、'rebase')
  • 返回:合并结果的详细信息
  1. get_pull_request_files
  • 获取拉取请求中已更改文件的列表
  • 输入:
    • owner(字符串):仓库所有者
    • repo(字符串):仓库名称
    • pull_number(数字):拉取请求编号
  • 返回:已更改文件的数组,包含补丁和状态详细信息
  1. get_pull_request_status
  • 获取拉取请求所有状态检查的综合状态
  • 输入:
    • owner(字符串):仓库所有者
    • repo(字符串):仓库名称
    • pull_number(数字):拉取请求编号
  • 返回:综合状态检查结果和各项检查的详细信息
  1. update_pull_request_branch
  • 使用 base 分支的最新更改更新拉取请求分支(相当于 GitHub 的“Update branch”按钮)
  • 输入:
    • owner(字符串):仓库所有者
    • repo(字符串):仓库名称
    • pull_number(数字):拉取请求编号
    • expected_head_sha(可选字符串):拉取请求 HEAD 引用的预期 SHA
  • 返回:分支更新成功时的消息
  1. get_pull_request_comments
  • 获取拉取请求上的审核评论
  • 输入:
    • owner(字符串):仓库所有者
    • repo(字符串):仓库名称
    • pull_number(数字):拉取请求编号
  • 返回:拉取请求审核评论数组,包含评论文本、作者和在差异中的位置等详细信息
  1. get_pull_request_reviews
  • 获取拉取请求的审核
  • 输入:
    • owner(字符串):仓库所有者
    • repo(字符串):仓库名称
    • pull_number(数字):拉取请求编号
  • 返回:拉取请求审核数组,包含审核状态(APPROVED、CHANGES_REQUESTED 等)、审核者和审核正文等详细信息

搜索查询语法

代码搜索
  • language:javascript:按编程语言搜索
  • repo:owner/name:在指定仓库中搜索
  • path:app/src:在指定路径中搜索
  • extension:js:按文件扩展名搜索
  • 示例:q: "import express" language:typescript path:src/
Issues 搜索
  • 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 个人访问令牌,并授予适当权限:

  • 前往 Personal access tokens(位于 GitHub Settings > Developer settings 中)
  • 选择此令牌可访问的仓库(Public、All 或 Select)
  • 创建具有 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 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。