Provides OAuth authentication flow, repository listing, and issue creation capabilities for GitHub through an MCP server with tools for authorization, repository management, and issue tracking.
GitHub Integration Hub
Built by Cristian to demonstrate OAuth orchestration, secure token storage, SDK/CLI tooling, and MCP servers in TypeScript.
Why this project exists
I wanted a hands-on showcase proving I can:
Design an OAuth flow (GitHub) with state handling and token persistence.
Build a lightweight data layer on SQLite using TypeScript.
Expose the same business logic via HTTP routes, an SDK, a CLI, and an MCP server for AI agents.
Everything runs on Node.js LTS with Express, better-sqlite3, and TypeScript.
Feature highlights
(OAuth)
/auth/github/startand/auth/github/callbackwrap the GitHub dance.(Storage) Automatic SQLite table creation plus refresh scaffolding and repository helpers.
(Services) Shared orchestration reused by HTTP routes, the CLI, the SDK, and MCP tools.
(Tooling) Type-safe
IntegrationHubClientSDK together with thegithub-integration-hubCLI.(Agents) MCP tools
github_start_auth,github_list_repos, andgithub_create_issue.
Getting started
1. Install dependencies
2. Configure environment
Copy .env.example to .env and set your GitHub OAuth credentials:
Ensure the GitHub OAuth app redirect matches
GITHUB_REDIRECT_URI.
3. Run the backend
Development mode with hot reload:
Production-style build + run:
The server logs: GitHub Integration Hub listening on port <port>.
MCP server (for AI agents)
Compile once, then launch the stdio server:
Tools available:
github_start_auth– returns an authorization URL for auserId.github_list_repos– lists repos for the stored connection.github_create_issue– posts an issue using the saved token.
Point your MCP-aware IDE/CLI (for example Codex) to this stdio process and the tools become callable immediately.
HTTP API reference
Method | Path | Description |
POST |
| Returns
for
|
GET |
| Exchanges
+
, saves tokens |
GET |
| Lists connections (
optional) |
POST |
| Lists repos via stored token |
POST |
| Creates an issue |
GET |
| Service heartbeat |
CLI (github-integration-hub)
Flags:
--base-urloverridesGITHUB_INTEGRATION_HUB_BASE_URL.connections:list --user <userId>filters entries.
SDK example
Manual OAuth test plan
POST /auth/github/startwith{ "userId": "demo-user" }.Visit the returned
authUrl, approve the GitHub app.Callback stores the connection automatically.
Trigger actions using HTTP, the CLI, SDK, or MCP tools.
Project structure
Made by Cristian. Ping me if you want to talk about backend integrations, OAuth design, or MCP tooling.
This server cannot be installed