GitHub助手服务

一个连接Claude Desktop和GitHub API的MCP服务器,允许用户通过自然语言查询公共GitHub仓库的信息。

  • by Kamalesh-Kavin
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Kamalesh-Kavin/github-mcp

使用说明

GitHub助理MCP服务器

A. 模型上下文协议(MCP) 将Claude Desktop连接到GitHub API的服务器。在不离开对话的情况下,向Claude自然语言提问有关任何公共GitHub存储库的问题——问题、拉取请求、存储库元数据、README。

什么是MCP?

MCP(模型上下文协议)是一个开放标准,允许AI应用程序通过统一的接口连接到外部工具和数据源。将其视为AI的USB-C端口——任何兼容MCP的客户端(Claude Desktop、Cursor、VS Code Copilot等)都可以插入任何MCP服务器。

Claude Desktop (MCP Host)
       |
       |  stdio — JSON-RPC 2.0
       v
GitHub Assistant MCP Server   <-- this project
       |
       |  HTTPS
       v
  GitHub REST API v3

当你问克劳德 *“microsoft/vcode中有哪些悬而未决的问题?”*克劳德称此服务器为 list_issues 工具,服务器从GitHub获取数据,并返回答案——所有这些在对话中都是透明的。

工具

工具 说明
search_repos 按关键字搜索GitHub仓库。支持以下限定符 language:python, stars:>1000
get_repo 获取特定仓库的元数据:星、叉、语言、许可证、主题
list_issues 列出回购的未结/已结问题(不包括PR)
get_issue 按编号获取特定问题的全文和详细信息
list_pull_requests 列出打开/关闭的PR,包括草稿状态和分支机构信息

资源

URI模式 描述
repo://{owner}/{repo}/readme 任何存储库的原始README标记

对话示例

“在GitHub上搜索最受欢迎的Python web框架”

“告诉我有关microsoft/vcode存储库的信息”

“microsoft/vcode中最近更新的10个未决问题是什么?”

“显示microsoft/vcode中问题#301645的详细信息”

“fastapi/fastapi中有哪些开放拉取请求?”

设置

先决条件

安装

git clone https://github.com/yourusername/github-mcp
cd github-mcp

# Install dependencies
uv sync

# Copy and fill in your token
cp .env.example .env
# Edit .env and set GITHUB_TOKEN=ghp_your_token_here

连接到克劳德桌面

添加以下内容 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "github-assistant": {
      "command": "/path/to/uv",
      "args": [
        "--directory", "/absolute/path/to/github-mcp",
        "run", "python", "-m", "github_mcp.server"
      ],
      "env": {
        "GITHUB_TOKEN": "ghp_your_token_here"
      }
    }
  }
}

重新启动克劳德桌面。您应该在聊天输入中看到一个锤子图标——这是您的MCP工具。

项目结构

github-mcp/
├── src/
│   └── github_mcp/
│       ├── __init__.py
│       ├── github_client.py   # GitHub REST API wrapper (pure async httpx)
│       └── server.py          # MCP server — tool & resource definitions
├── .env                       # Your GITHUB_TOKEN (never commit this)
├── .gitignore
├── pyproject.toml
└── README.md

建筑

github_client.py 是围绕GitHub REST API v3的精简异步包装器。它不了解MCP,只知道返回字典的Python函数。这种分离使得独立测试变得容易。

server.py 是MCP层。它创造了一个 FastMCP 实例和装饰功能 @mcp.tool() 和 @mcp.resource().FastMCP根据Python类型提示和文档字符串自动为每个工具生成JSON模式——Claude读取的是您为人类编写的相同文档字符串来决定 当 调用你的工具。

运输: stdio(标准输入/标准输出)。Claude Desktop将此服务器作为子进程启动,并通过stdin发送JSON-RPC 2.0消息。服务器将响应写入stdout。这就是为什么我们登录到stderr——stdout是为协议保留的。

学到的关键概念

  • MCP图元:工具(可调用函数)、资源(可读数据)、提示(模板)
  • JSON-RPC 2.0:有线协议——请求/响应 id,通知无
  • 工具描述很重要:LLM读取您的docstring以决定何时调用工具
  • stdio传输:本地工具不需要HTTP服务器,只需要一个带管道的进程
  • 异步Python: httpx.AsyncClient 用于非阻塞的GitHub API调用
  • 身份验证模式:通过环境变量注入令牌——从不硬编码

许可证

麻省理工学院