Skip to main content
Glama
README.md4.53 kB
# 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/start` and `/auth/github/callback` wrap 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 `IntegrationHubClient` SDK together with the `github-integration-hub` CLI. - (Agents) MCP tools `github_start_auth`, `github_list_repos`, and `github_create_issue`. ## Getting started ### 1. Install dependencies ```bash npm install ``` ### 2. Configure environment Copy `.env.example` to `.env` and set your GitHub OAuth credentials: ``` 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 ``` > Ensure the GitHub OAuth app redirect matches `GITHUB_REDIRECT_URI`. ### 3. Run the backend Development mode with hot reload: ```bash npm run dev ``` Production-style build + run: ```bash npm run build npm start ``` The server logs: `GitHub Integration Hub listening on port <port>`. ## MCP server (for AI agents) Compile once, then launch the stdio server: ```bash npm run build npm run start:mcp ``` Tools available: - `github_start_auth` – returns an authorization URL for a `userId`. - `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 | `/auth/github/start` | Returns `{ authUrl }` for `userId` | | GET | `/auth/github/callback` | Exchanges `code` + `state`, saves tokens | | GET | `/connections` | Lists connections (`?userId=` optional) | | POST | `/actions/github/list-repos` | Lists repos via stored token | | POST | `/actions/github/create-issue` | Creates an issue | | GET | `/health` | Service heartbeat | ## CLI (`github-integration-hub`) ```bash 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" ``` Flags: - `--base-url` overrides `GITHUB_INTEGRATION_HUB_BASE_URL`. - `connections:list --user <userId>` filters entries. ## SDK example ```ts 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)); } ``` ## Manual OAuth test plan 1. `POST /auth/github/start` with `{ "userId": "demo-user" }`. 2. Visit the returned `authUrl`, approve the GitHub app. 3. Callback stores the connection automatically. 4. Trigger actions using HTTP, the CLI, SDK, or MCP tools. ## Project structure ``` . |-- 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 ``` --- **Made by Cristian.** Ping me if you want to talk about backend integrations, OAuth design, or MCP tooling.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CrBatista/mcp-cli-github-integration'

If you have feedback or need assistance with the MCP directory API, please join our Discord server