GitHub集成中心
由Cristian构建,用于演示OAuth编排、安全令牌存储、SDK/CLI工具和TypeScript中的MCP服务器。
为什么这个项目存在
我想要一个实践展示,证明我可以:
- 设计一个具有状态处理和令牌持久性的OAuth流(GitHub)。
- 使用TypeScript在SQLite上构建一个轻量级数据层。
- 通过HTTP路由、SDK、CLI和用于AI代理的MCP服务器公开相同的业务逻辑。
所有内容都在Node.js LTS上运行,包括Express、better squelite3和TypeScript。
功能亮点
- (OAuth)
/auth/github/start和/auth/github/callback结束GitHub之舞。 - (存储)自动创建SQLite表以及刷新脚手架和存储库助手。
- (服务)HTTP路由、CLI、SDK和MCP工具重用的共享编排。
- (工具)类型安全
IntegrationHubClientSDK与github-integration-hubCLI。 - (代理)MCP工具
github_start_auth,github_list_repos,以及github_create_issue.
入门
1.安装依赖项
npm install2.配置环境
复制 .env.example 到 .env 并设置您的GitHub OAuth凭据:
PORT=3000
DATABASE_FILE=./github-integration-hub.db
GITHUB_CLIENT_ID=your-client-id
GITHUB_CLIENT_SECRET=your-client-secret
GITHUB_OAUTH_AUTHORIZE_URL=https://github.com/login/oauth/authorize
GITHUB_OAUTH_TOKEN_URL=https://github.com/login/oauth/access_token
GITHUB_API_BASE_URL=https://api.github.com
GITHUB_REDIRECT_URI=http://localhost:3000/auth/github/callback
GITHUB_INTEGRATION_HUB_BASE_URL=http://localhost:3000确保GitHub OAuth应用程序重定向匹配 GITHUB_REDIRECT_URI.3.运行后端
热重载开发模式:
npm run dev生产风格构建+运行:
npm run build
npm start服务器记录: GitHub Integration Hub listening on port .
MCP服务器(用于AI代理)
编译一次,然后启动stdio服务器:
npm run build
npm run start:mcp可用工具:
github_start_auth–返回一个授权URLuserId.github_list_repos–列出存储连接的存储库。github_create_issue–使用保存的令牌发布问题。
将您的MCP感知IDE/CLI(例如Codex)指向此stdio进程,工具将立即可调用。
HTTP API参考
| 方法 | 路径 | 描述 |
|---|---|---|
| 职位 | /auth/github/start | 退货 { authUrl } 为了 userId |
| 得到 | /auth/github/callback | 交易所 code + state,保存令牌 |
| 得到 | /connections | 列出连接(?userId= 可选) |
| 职位 | /actions/github/list-repos | 通过存储的令牌列出存储库 |
| 职位 | /actions/github/create-issue | 产生问题 |
| 得到 | /health | 服务心跳 |
CLI(github-integration-hub)
npm run build
npx github-integration-hub connections:list
npx github-integration-hub actions:list-repos --user alice
npx github-integration-hub actions:create-issue --user alice --owner my-org --repo api --title "Hello" --body "Proof from Cristian"旗帜:
--base-url覆盖GITHUB_INTEGRATION_HUB_BASE_URL.connections:list --user过滤条目。
SDK示例
import { IntegrationHubClient } from 'github-integration-hub/sdk';
const client = new IntegrationHubClient({ baseUrl: process.env.GITHUB_INTEGRATION_HUB_BASE_URL! });
async function showcase() {
const { authUrl } = await client.startGithubAuth('user-123');
console.log('Send someone to authorize:', authUrl);
const repos = await client.listGithubRepos('user-123');
console.log(repos.map((repo) => repo.full_name));
}OAuth手动测试计划
POST /auth/github/start随着{ "userId": "demo-user" }.- 访问返回
authUrl,批准GitHub应用程序。 - 回调会自动存储连接。
- 使用HTTP、CLI、SDK或MCP工具触发操作。
项目结构
.
|-- cli/ # CLI entry point
|-- sdk/ # TypeScript SDK
|-- src/
| |-- config/ # Environment helpers
| |-- db/ # SQLite init + repository
| |-- mcp/ # MCP server
| |-- providers/ # GitHub OAuth + API clients
| |-- routes/ # Express routers
| `-- services/ # Token manager + actions
|-- .env.example
|-- package.json
|-- tsconfig.json
`-- README.md______________________________________________________________________
由Cristian制造。 如果你想谈谈后端集成、OAuth设计或MCP工具,请给我打电话。
