GitHub API MCP 服务器
一个独立示例,展示了如何构建一个MCP(模型上下文协议)服务器,该服务器使用KeyCard OAuth SDK进行委托令牌交换,以代表经过身份验证的用户访问GitHub API。
特点/特性
- 多区域支持服务器通过URL路径支持多个KeyCard区域(例如。,
/{zone_id}/) - 代币交换使用委托令牌交换来访问GitHub API
- MCP集成使用FastMCP框架实现MCP工具
- KeyCard SDK(密钥卡软件开发工具包)展示使用方法
keycardai-oauth并且keycardai-mcp包裹;软件包 - 错误处理使用 Pydantic 进行适当的错误处理和数据验证
先决条件
- Python 3.10+(或“Python 3.10及以上版本”)
- 紫外线 安装好的
注这个项目使用了KeyCard Python SDK包(keycardai-oauth并且keycardai-mcp从 TestPyPI 索引中获取。这些包会在设置过程中自动安装。
设置
- 克隆此项目:
git clone https://github.com/keycardai/python-github-api-mcp-server
cd python-github-api-mcp-server- 安装依赖项:
uv sync运行服务器
本地开发
# Copy environment template
cp .env.example .env
# Edit .env with your KeyCard client credentials
# (Create a client in KeyCard Console if you haven't already)
# Run the server
uv run mcp-github-api-server服务器运行于 http://0.0.0.0:7878 默认情况下。
注本地开发需要手动设置BasicAuth凭据,因为KeyCard无法访问localhost以获取用于动态注册的JWKS。请参阅 部署说明文件(DEPLOYMENT.md) 用于具有真正多租户功能的生产环境部署。
多区域配置
这台服务器已配置为 enable_multi_zone=True,意思是:
- 路线可通过以下方式获取:
/{zone_id}/而不是/ - 每个区域可以拥有独立的OAuth配置
- 在请求处理过程中,从URL路径中提取区域ID
示例:如果您的区域ID是 abc1234,则MCP端点将是:
http://0.0.0.0:7878/abc1234/可用工具
get_repositories
为已认证用户获取GitHub仓库。
参数:
per_page(int, 默认: 30):每页显示的仓库数量(1-100)page(int, 默认值: 1): 分页的页码sort(str, 默认值: "updated"):排序顺序 - 创建时间、更新时间、推送时间、完整名称direction(str, 默认: "desc"):排序方向 - 升序或降序
示例回复:
{
"repositories": [
{
"id": 123456,
"name": "my-repo",
"full_name": "user/my-repo",
"private": false,
"html_url": "https://github.com/user/my-repo",
"description": "My awesome project",
"language": "Python",
"stargazers_count": 42,
...
}
],
"requestId": "abc12345",
"totalRepositories": 1,
"pagination": {
"page": 1,
"per_page": 30
}
}KeyCard 控制台配置
使用KeyCard连接此服务器:
- 在KeyCard控制台中创建一个MCP资源
- 将资源URL设置为与您的服务器基础URL相匹配(例如。,
http://0.0.0.0:7878/{zone_id}/) - 将GitHub配置为凭据提供程序
- 设置GitHub API访问的OAuth流程
- 将GitHub凭据链接到您的MCP资源
部署
如需了解具有动态客户端注册和真正多租户功能的生产部署,请参阅 DEPLOYMENT.md 翻译为中文是:“部署指南.md” 或 “部署说明文件.md”。
快速部署到渲染环境:
# Commit your changes
git add .
git commit -m "Deploy GitHub MCP Server"
git push
# Use render.yaml blueprint at https://render.com发展
# Install with development dependencies
uv sync --dev
# Run linting
uv run ruff check src/这个例子所展示的内容
- 代币交换使用委托令牌交换来访问GitHub API
- 多区域支持基于URL路径的多租户支持,适用于多个KeyCard区域
- MCP集成使用FastMCP框架实现MCP工具
- KeyCard SDK(软件开发工具包)展示使用方法
keycardai-mcp使用私钥的JWT认证打包 - 错误处理使用 Pydantic 进行适当的错误处理和数据验证
