piyushgIITian
服务介绍
GitHub Enterprise MCP 服务器
MCP 服务器用于 GitHub API,支持文件操作、仓库管理、搜索功能等。
功能
- 自动分支创建:在创建/更新文件或推送更改时,如果分支不存在则会自动创建
- 全面的错误处理:针对常见问题提供清晰的错误信息
- Git 历史记录保留:操作过程中保持正确的 Git 历史记录,不会强制推送
- 批量操作:支持单个文件和多个文件的操作
- 高级搜索:支持代码、问题/PR 和用户的搜索
Cline 安装指南
本指南将帮助您在 Cline 中安装和配置 GitHub Enterprise MCP 服务器,使您能够直接通过 Cline 使用 GitHub API 功能。
先决条件
- 系统上已安装 Node.js
- 拥有适当权限的 GitHub 个人访问令牌
- 系统上已安装 Cline
安装步骤
1. 克隆仓库
bash
git clone https://github.com/yourusername/github-enterprise-mcp.git
cd github-enterprise-mcp
2. 安装依赖并构建
bash
npm install
npm run build
这将在 dist 目录中生成编译后的 JavaScript 文件。
3. 创建 GitHub 个人访问令牌
- 转到 GitHub 个人访问令牌(在 GitHub 设置 > 开发者设置中)
- 点击“生成新令牌”
- 选择此令牌可以访问的仓库(公开、全部或选择)
- 创建一个具有
repo范围的令牌(“对私有仓库的完全控制”)- 或者,如果您仅与公共仓库合作,请仅选择
public_repo范围
- 或者,如果您仅与公共仓库合作,请仅选择
- 复制生成的令牌
4. 配置 Cline MCP 设置
对于 Cline VS Code 扩展
-
打开 VS Code
-
定位到 Cline MCP 设置文件:
- Windows:
%APPDATA%CodeUserglobalStoragesaoudrizwan.claude-devsettingscline_mcp_settings.json - macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json - Linux:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
- Windows:
-
将 GitHub Enterprise MCP 服务器配置添加到
mcpServers对象中:
json
{
"mcpServers": {
"github-enterprise": {
"command": "node",
"args": [
"/absolute/path/to/github-enterprise-mcp/dist/index.js"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-personal-access-token",
"GITHUB_API_URL": "https://api.github.com" // 对于 GitHub.com
// 对于 GitHub Enterprise,请使用您的实例 URL,例如 "https://github.yourdomain.com/api/v3"
},
"disabled": false,
"autoApprove": []
}
}
}
将 /absolute/path/to/github-enterprise-mcp/dist/index.js 替换为构建后的 index.js 文件的绝对路径。
对于 Claude 桌面应用程序
-
定位到 Claude 桌面配置文件:
- Windows:
%APPDATA%Claudeclaude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
- Windows:
-
将 GitHub Enterprise MCP 服务器配置添加到
mcpServers对象中:
json
{
"mcpServers": {
"github-enterprise": {
"command": "node",
"args": [
"/absolute/path/to/github-enterprise-mcp/dist/index.js"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-personal-access-token",
"GITHUB_API_URL": "https://api.github.com" // 对于 GitHub.com
// 对于 GitHub Enterprise,请使用您的实例 URL,例如 "https://github.yourdomain.com/api/v3"
},
"disabled": false,
"autoApprove": []
}
}
}
5. 重启 Cline
配置完 MCP 设置后,重启 Cline(VS Code 或 Claude 桌面应用程序)以应用更改。
验证要验证 GitHub Enterprise MCP 服务器是否已正确安装和配置,您可以要求 Cline 使用其中一个 GitHub 工具:
Can you search for repositories with the keyword "react" using the GitHub Enterprise MCP server?
Cline 应该能够使用 search_repositories 工具来搜索包含关键字 "react" 的仓库。
与 Cline 进行交互式安装
为了获得交互式的安装体验,请将以下文本复制并粘贴到 Cline 中,它将引导您完成安装过程:
I want you to help me install the GitHub Enterprise MCP server. Here's what I need you to do:
-
First, explain what the GitHub Enterprise MCP server is and what capabilities it will give you.
-
Guide me through the installation process:
- Help me clone the repository (if I haven't already)
- Help me install dependencies and build the project
- Guide me through creating a GitHub Personal Access Token if I don't have one
- Help me configure the MCP settings in either VS Code or Claude Desktop
- Verify the installation is working
-
Show me some examples of how I can use the GitHub Enterprise MCP server once it's installed.
Please start by explaining what the GitHub Enterprise MCP server is and what it will allow you to do for me.
示例用法
安装完成后,您可以直接让 Cline 执行 GitHub 操作,例如:
- "创建一个名为 my-project 的新仓库"
- "搜索与机器学习相关的仓库"
- "从我的功能分支向主分支创建拉取请求"
- "获取仓库 X 中 README.md 文件的内容"
- "列出我的仓库中的开放问题"
故障排除
如果您在使用 GitHub Enterprise MCP 服务器时遇到问题:
- 检查 MCP 设置中 index.js 文件的路径是否正确
- 确认您的 GitHub 个人访问令牌具有必要的权限
- 确保 GitHub API URL 对于您的 GitHub 实例是正确的
- 查看日志以查找任何错误消息
额外配置选项
GitHub API 版本
您可以通过添加 GITHUB_API_VERSION 环境变量来指定 GitHub API 版本:
json
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-personal-access-token",
"GITHUB_API_URL": "https://api.github.com",
"GITHUB_API_VERSION": "2022-11-28"
}
企业认证
对于使用不同认证方法的 GitHub Enterprise 实例,您可能需要提供额外的配置。请参阅 Octokit 文档 获取更多信息。
工具
-
create_or_update_file- 在仓库中创建或更新单个文件
- 输入:
owner(字符串): 仓库所有者(用户名或组织)repo(字符串): 仓库名称path(字符串): 创建/更新文件的路径content(字符串): 文件内容message(字符串): 提交信息branch(字符串): 要创建/更新文件的分支sha(可选字符串): 被替换文件的 SHA(用于更新)
- 返回: 文件内容和提交详情
-
push_files- 在单次提交中推送多个文件
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称branch(字符串): 推送的目标分支files(数组): 要推送的文件,每个文件都有path和contentmessage(字符串): 提交信息
- 返回: 更新后的分支引用
-
search_repositories- 搜索 GitHub 仓库
- 输入:
query(字符串): 搜索查询page(可选数字): 分页的页码perPage(可选数字): 每页结果数(最大 100)
- 返回: 仓库搜索结果
-
create_repository- 创建一个新的 GitHub 仓库
- 输入:
name(字符串): 仓库名称description(可选字符串): 仓库描述-private(可选布尔值): 是否应将仓库设为私有autoInit(可选布尔值): 初始化时包含README文件
- 返回: 创建的仓库详情
-
get_file_contents- 获取文件或目录的内容
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称path(字符串): 文件/目录路径branch(可选字符串): 获取内容的分支
- 返回: 文件/目录内容
-
create_issue- 创建一个新的问题
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称title(字符串): 问题标题body(可选字符串): 问题描述assignees(可选字符串数组): 分配给用户的用户名labels(可选字符串数组): 添加的标签milestone(可选数字): 里程碑编号
- 返回: 创建的问题详情
-
create_pull_request- 创建一个新的拉取请求
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称title(字符串): PR标题body(可选字符串): PR描述head(字符串): 包含更改的分支base(字符串): 合并到的目标分支draft(可选布尔值): 作为草稿PR创建maintainer_can_modify(可选布尔值): 允许维护者编辑
- 返回: 创建的拉取请求详情
-
fork_repository- 叉一个仓库
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称organization(可选字符串): 叉到的组织
- 返回: 叉出的仓库详情
-
create_branch- 创建一个新的分支
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称branch(字符串): 新分支名称from_branch(可选字符串): 源分支(默认为仓库默认分支)
- 返回: 创建的分支引用
-
list_issues- 列出并过滤仓库中的问题
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称state(可选字符串): 按状态过滤 ( open , closed , all )labels(可选字符串数组): 按标签过滤sort(可选字符串): 排序依据 ( created , updated , comments )direction(可选字符串): 排序方向 ( asc , desc )since(可选字符串): 按日期过滤 (ISO 8601时间戳)page(可选数字): 页码per_page(可选数字): 每页结果数
- 返回: 问题详情数组
-
update_issue- 更新现有问题
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称issue_number(数字): 要更新的问题编号title(可选字符串): 新标题body(可选字符串): 新描述state(可选字符串): 新状态 ( open 或 closed )labels(可选字符串数组): 新标签assignees(可选字符串数组): 新分配人员milestone(可选数字): 新里程碑编号
- 返回: 更新后的问题详情
-
add_issue_comment- 向问题添加评论
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称issue_number(数字): 要评论的问题编号body(字符串): 评论文本
- 返回: 创建的评论详情
-
search_code- 在GitHub仓库中搜索代码
- 输入:
q(字符串): 使用GitHub代码搜索语法的搜索查询sort(可选字符串): 排序字段 (仅支持 indexed )order(可选字符串): 排序顺序 ( asc 或 desc )per_page(可选数字): 每页结果数(最大100)page(可选数字): 页码
- 返回: 带有仓库上下文的代码搜索结果
-
search_issues- 搜索问题和拉取请求
- 输入:-
q(字符串): 使用 GitHub 问题搜索语法的搜索查询sort(可选字符串): 排序字段(如 comments, reactions, created 等)order(可选字符串): 排序顺序( asc 或 desc )per_page(可选数字): 每页结果数(最大为100)page(可选数字): 页码
- 返回: 问题和拉取请求的搜索结果
-
search_users- 搜索 GitHub 用户
- 输入:
q(字符串): 使用 GitHub 用户搜索语法的搜索查询sort(可选字符串): 排序字段(如 followers, repositories, joined)order(可选字符串): 排序顺序( asc 或 desc )per_page(可选数字): 每页结果数(最大为100)page(可选数字): 页码
- 返回: 用户搜索结果
-
list_commits
- 获取仓库中某个分支的提交记录
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称page(可选字符串): 页码per_page(可选字符串): 每页记录数sha(可选字符串): 分支名称
- 返回: 提交列表
get_issue
- 获取仓库中某个问题的内容
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称issue_number(数字): 要检索的问题编号
- 返回: GitHub 问题对象及详情
get_pull_request
- 获取特定拉取请求的详细信息
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称pull_number(数字): 拉取请求编号
- 返回: 包括差异和审查状态在内的拉取请求详细信息
list_pull_requests
- 列出并过滤仓库中的拉取请求
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称state(可选字符串): 按状态过滤( open, closed, all )head(可选字符串): 按头用户/组织和分支过滤base(可选字符串): 按基础分支过滤sort(可选字符串): 按( created, updated, popularity, long-running )排序direction(可选字符串): 排序方向( asc, desc )per_page(可选数字): 每页结果数(最大为100)page(可选数字): 页码
- 返回: 拉取请求详细信息数组
create_pull_request_review
- 在拉取请求上创建审查
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称pull_number(数字): 拉取请求编号body(字符串): 审查评论文本event(字符串): 审查操作( APPROVE, REQUEST_CHANGES, COMMENT )commit_id(可选字符串): 要审查的提交 SHAcomments(可选数组): 针对特定行的评论,每个包含:path(字符串): 文件路径position(数字): 差异中的行位置body(字符串): 评论文本
- 返回: 创建的审查详细信息
merge_pull_request
- 合并拉取请求
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称pull_number(数字): 拉取请求编号commit_title(可选字符串): 合并提交的标题commit_message(可选字符串): 合并提交的额外详情merge_method(可选字符串): 合并方法( merge, squash, rebase )
- 返回: 合并结果详细信息
get_pull_request_files
- 获取拉取请求中更改的文件列表
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称pull_number(数字): 拉取请求编号
- 返回: 包含补丁和状态详情的更改文件数组
get_pull_request_status
- 获取拉取请求的所有状态检查的综合状态
- 输入:
owner(字符串): 仓库所有者repo(字符串): 仓库名称-pull_number(number): 拉取请求编号
- 返回值: 合并状态检查结果和各个检查的详细信息
update_pull_request_branch
- 使用基础分支的最新更改更新拉取请求分支(相当于 GitHub 的“更新分支”按钮)
- 输入参数:
owner(string): 仓库所有者repo(string): 仓库名称pull_number(number): 拉取请求编号expected_head_sha(可选 string): 拉取请求 HEAD 引用的预期 SHA
- 返回值: 分支更新成功时的消息
get_pull_request_comments
- 获取拉取请求上的审查评论
- 输入参数:
owner(string): 仓库所有者repo(string): 仓库名称pull_number(number): 拉取请求编号
- 返回值: 包含评论文本、作者和在差异中的位置等详细信息的拉取请求审查评论数组
get_pull_request_reviews
- 获取拉取请求上的审查
- 输入参数:
owner(string): 仓库所有者repo(string): 仓库名称pull_number(number): 拉取请求编号
- 返回值: 包含审查状态(APPROVED, CHANGES_REQUESTED 等)、审查者和审查正文等详细信息的拉取请求审查数组
搜索查询语法
代码搜索
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 文件中:
json
{
"mcpServers": {
"github": {
"command": "node",
"args": [
"/path/to/github-enterprise-mcp/dist/index.js"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}
构建
bash
安装依赖
npm install
构建项目
npm run build
启动服务器
npm start
许可证
此 MCP 服务器根据 MIT 许可证许可。这意味着您可以自由地使用、修改和分发该软件,但须遵守 MIT 许可证的条款和条件。更多详情,请参见项目仓库中的 LICENSE 文件。