GitHub仓库管理服务器

一个MCP服务器,允许Claude直接从Claude Desktop或Claude Code访问一个或多个GitHub仓库(包括私有仓库),并动态管理仓库列表。

  • by Haavi97
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Haavi97/github-mcp

使用说明

GitHub上下文MCP服务器

一个MCP(模型上下文协议)服务器,允许Claude直接从Claude Desktop或Claude Code访问一个或多个GitHub存储库,包括私有存储库。

对存储库进行管理 运行时动态:只需告诉Claude添加或删除一个repo,它就会立即持久化,不需要编辑配置文件。

先决条件

安装

npm install
npm run build

GitHub令牌设置

  1. 首选 GitHub→ 设置→ 开发者设置→ 个人访问令牌→ 代币(经典)
  2. 点击 生成新令牌(经典)
  3. 给它起个名字(例如。 claude-mcp)
  4. 选择 repo 范围(涵盖公共和私有存储库)
  5. 点击 生成令牌 并复制它

如果你只需要公共仓库 public_repo 范围是足够的。

Claude桌面配置

在以下位置编辑配置文件:

  • 窗户: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

在内部添加此块 "mcpServers":

{
  "mcpServers": {
    "github-context": {
      "command": "node",
      "args": ["path_to_repo/dist/index.js"],
      "env": {
        "GITHUB_TOKEN": "ghp_your_token_here"
      }
    }
  }
}

就是这样——这里不需要回购列表。保存后重新启动Claude Desktop。

管理存储库

Repos在运行时通过Claude本身进行管理。列表存储在 dist/repos.json 并在会话中持续存在。

添加回购

“将仓库myorg/backend添加到GitHub上下文中”

克劳德打电话来 add_repo → 验证是否可以使用您的令牌访问回购→ 保存到 repos.json.

删除repo

“从GitHub上下文中删除myorg/old项目”

克劳德打电话来 remove_repo → 更新 repos.json.

列出当前存储库

“您可以访问哪些存储库?”

克劳德打电话来 list_repos → 显示当前保存的所有内容。


更改立即生效,无需重新启动。

可用工具

回购管理

工具 说明
list_repos 显示所有已保存的存储库
add_repo 添加仓库(保存前验证访问权限)
remove_repo 从列表中删除仓库

数据访问

工具 说明
get_repo_info 元数据:描述、语言、星号、默认分支、可见性
list_files 浏览任何路径的文件和目录
get_file 读取任何文件的全部内容
search_code 跨回购的搜索代码(GitHub搜索API)
get_commits 最近的提交历史记录,可选择按分支或文件路径过滤
get_branches 列出所有分支(标记受保护的分支)
get_pull_requests 列出打开、关闭或所有拉取请求
get_issues 列出未解决、已解决或所有问题

通用参数

  • repo — "owner/repo" 格式,必须在已保存的列表中
  • branch --分支名称、标签或提交SHA(默认为回购的默认分支)
  • path --仓库内的文件或目录路径
  • max_results --要退回多少件物品
  • state — "open", "closed",或 "all" (用于PR和问题)

示例提示

Add the repo myorg/backend to GitHub context.

List all the files in the src/ directory of myorg/backend.

Read the file src/auth/middleware.ts from myorg/backend.

Search for "function authenticate" in myorg/backend.

Show me the last 10 commits on the main branch of myorg/frontend.

What open issues are there in myorg/backend?

Remove myorg/old-project from GitHub context.

重新存储文件位置

默认情况下,存储库存储在 dist/repos.json 在已构建的脚本旁边。要使用自定义路径,请设置 REPOS_FILE 克劳德桌面配置中的env-var:

"env": {
  "GITHUB_TOKEN": "ghp_your_token_here",
  "REPOS_FILE": "localpath/.config/github-mcp/repos.json"
}

如果您希望仓库列表在重建后仍然有效,或者希望在多个项目之间共享,这将非常有用。

发展

无需构建即可运行(适用于本地测试):

GITHUB_TOKEN=ghp_... npm run dev

更改源代码后重新编译:

npm run build

然后重新启动Claude Desktop。

项目结构

├── src/
│   └── index.ts          # MCP server — all tools, repo persistence logic
├── dist/                 # Compiled output (generated by npm run build)
│   ├── index.js
│   └── repos.json        # Persisted repo list (auto-created on first add_repo)
├── package.json
├── tsconfig.json
├── .env.example
└── claude-desktop-config.example.json

安全说明

  • 您的GitHub令牌通过环境变量传递,从未记录或发送给Claude。
  • 只有通过明确添加的repos add_repo 是可访问的——即使您的令牌具有更广泛的访问权限,Claude也无法访问其他存储库。
  • add_repo 在保存之前,验证仓库是否存在,以及是否可以使用您的令牌访问。
  • 文件内容被截断为100000个字符,以防止上下文溢出。