github-mcp-lite
Allows creating and managing GitHub repositories, committing files in a single commit, publishing releases, and deleting repositories via the GitHub REST API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@github-mcp-litecreate a new public repository named hello-world"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
github-mcp-lite
A minimal MCP (Model Context Protocol) server for creating GitHub repositories, committing files, and publishing releases using a plain Personal Access Token (PAT).
No Docker, no local Git installation, and no GitHub Copilot subscription
required — unlike the hosted api.githubcopilot.com/mcp/
server, which gates access
behind a Copilot entitlement. This server talks directly to the regular
GitHub REST API (api.github.com) over plain fetch, so it's a single
dependency-light file you can read top to bottom in a few minutes.
Why this exists
Most MCP GitHub integrations either require a full local git toolchain, a
Docker container, or a Copilot-gated hosted endpoint. github-mcp-lite is
for cases where you just want an AI assistant to be able to:
spin up a new repo,
push a batch of files to it in one commit, and
tag a release,
using nothing but a token you already have.
Related MCP server: mcp-github-server
Tools
Tool | Description | Destructive? |
| Return the login/profile for the account owning the configured token. | No |
| List repositories the token can see, newest-updated first. | No |
| Create a repo owned by the authenticated user. Auto-initialized with a README so a default branch exists immediately. | No |
| Create or update one or more text files in a single commit. | Yes (overwrites file contents) |
| Upload an entire local directory in one commit. Handles binary files and respects | Yes (overwrites file contents) |
| Publish a tagged GitHub release. | No |
| Permanently delete a repository. Requires the | Yes, irreversible |
| Authenticated passthrough to any | Yes — full token authority |
Each tool is annotated with readOnlyHint / destructiveHint /
openWorldHint metadata so MCP clients can surface appropriate confirmation
prompts.
get_authenticated_user
No input. Returns { login, html_url, name } for the token's owner.
list_repositories
Param | Type | Required | Notes |
| string | no | Comma-separated: |
|
| no | Defaults to |
| number | no | 1–100, defaults to |
| number | no | Defaults to |
Wraps GET /user/repos, sorted by most recently updated. Returns an array of
{ full_name, private, language, updated_at, html_url }. Results are paginated
— a full page means you should ask for the next one.
create_repository
Param | Type | Required | Notes |
| string | yes | Repository name |
| string | no | Repository description |
| boolean | no | Defaults to |
Returns { full_name, html_url, clone_url, default_branch }.
commit_files
Param | Type | Required | Notes |
| string | yes | Repository owner |
| string | yes | Repository name |
| string | no | Defaults to the repo's default branch |
| string | yes | Commit message |
| array of | yes | UTF-8 text content only; at least one file |
Internally this creates blobs, a tree, and a commit via the Git Data API,
then fast-forwards the branch ref — so it's a real single commit, not one
commit per file. Returns { commit_sha, html_url, files_changed }.
commit_directory
Param | Type | Required | Notes |
| string | yes | Repository owner |
| string | yes | Repository name |
| string | yes | Absolute path to the local directory to upload |
| string | no | Defaults to the repo's default branch |
| string | yes | Commit message |
| array of string | no | Extra path substrings to skip, e.g. |
Use this instead of commit_files when pushing a whole project. Inside a git
work tree it defers to git ls-files so .gitignore is honoured; otherwise it
walks the directory and prunes the usual junk (node_modules, .git, dist,
build, .next, coverage). Binary files are detected and uploaded as blobs;
text files are inlined into the tree, and the tree is built in chunks so a
large project stays within a handful of round trips. Returns
{ commit_sha, html_url, files_uploaded, skipped }.
Note: this merges onto the existing tree — it adds and updates files but never deletes. A file removed locally will still be present on GitHub.
create_release
Param | Type | Required | Notes |
| string | yes | Repository owner |
| string | yes | Repository name |
| string | yes | e.g. |
| string | no | Release title |
| string | no | Release notes (Markdown) |
| string | no | Branch or commit SHA to tag; defaults to the default branch |
| boolean | no | Defaults to |
| boolean | no | Defaults to |
Returns { html_url, id, tag_name }.
delete_repository
Param | Type | Required | Notes |
| string | yes | Repository owner |
| string | yes | Repository name |
Permanently deletes the repository. Returns { deleted: true, full_name }.
Requires a classic PAT with the delete_repo scope — fine-grained tokens
generally cannot delete repositories.
github_request
Param | Type | Required | Notes |
| string | yes | API path beginning with |
|
| no | Defaults to |
| object | no | JSON body for |
An escape hatch for anything the dedicated tools don't cover: code scanning and
secret scanning alerts, deployments, commit statuses, repository invitations,
issues, pull requests, orgs, gists. path is everything after
https://api.github.com, e.g. /repos/OWNER/REPO/code-scanning/alerts.
Returns the parsed JSON response.
One generic tool rather than a wrapper per endpoint means the server can't fall behind your token — a scope you add later is reachable with no code change.
Warning: this carries the token's full authority, including
DELETEon any resource the token can reach. It is annotateddestructiveHint: true. If you want the reach without the risk, narrow themethodenum inindex.jstoGETand it becomes a read-only window over every scope.
Paths are validated to begin with a single /, so absolute URLs
(https://…) and protocol-relative paths (//…) are rejected — without that,
a crafted path would send your bearer token to another host. test.js covers
this; run it with node test.js.
Installation
Prerequisites
Node.js 18+ (for native
fetchsupport)A GitHub Personal Access Token with the
reposcope (adddelete_repotoo if you want to usedelete_repository)
Note: Repository creation isn't reliably supported by fine-grained PATs, so a classic token is recommended.
Clone and install dependencies
git clone https://github.com/MatinMHF/github-mcp-lite.git
cd github-mcp-lite
npm installConfigure your token
The server reads the token from either GITHUB_PERSONAL_ACCESS_TOKEN or
GITHUB_TOKEN in its environment. Set one of these before it starts — the
process exits immediately with an error if neither is present.
Usage
Run directly
GITHUB_PERSONAL_ACCESS_TOKEN=ghp_xxx node index.jsThe server communicates over stdio, so it's meant to be launched by an MCP client (Claude Code, Claude Desktop, etc.), not run interactively on its own.
Register with Claude Code
claude mcp add github-lite -s user -e GITHUB_PERSONAL_ACCESS_TOKEN=<your_token> -- node /path/to/index.jsOn Windows PowerShell, quote the separator as "--" — PowerShell silently
strips a bare -- before it reaches the script's arguments, which breaks
argument parsing:
claude mcp add github-lite -s user -e GITHUB_PERSONAL_ACCESS_TOKEN=<your_token> "--" node "C:/path/to/index.js"Register with Claude Desktop (or any MCP-compatible client)
Add an entry to your client's MCP server config (e.g.
claude_desktop_config.json):
{
"mcpServers": {
"github-lite": {
"command": "node",
"args": ["C:/path/to/github-mcp-lite/index.js"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx"
}
}
}
}Example workflow
A typical session once the server is registered with your MCP client:
"Who am I authenticated as?" → calls
get_authenticated_user"Create a public repo called
my-project" → callscreate_repository(auto-initializes with a README so a default branch exists)"Commit these files to it" → calls
commit_fileswith an array of{ path, content }entries, written in a single commit"Publish a v1.0.0 release" → calls
create_release
Security notes
The token is read once from the environment at startup and never logged.
commit_files,commit_directory,delete_repositoryandgithub_requestare markeddestructiveHint: truein their tool annotations — well-behaved MCP clients should prompt for confirmation before invoking them.github_requestis the widest of these: it can reach any endpoint the token is allowed to reach, with any verb. On a classic PAT thereposcope also grants its children —repo:status,repo_deployment,public_repo,repo:inviteandsecurity_events— which cannot be unticked individually. That last one means read and write access to code scanning and secret scanning alerts across every repo you own. A fine-grained token scoped to Contents, Administration and Metadata avoids it, at the cost of repository creation being unreliable.Because this server has
openWorldHint: trueon every tool (it makes real network calls toapi.github.com), only run it with a token scoped to what you actually need.
Contributing
See CONTRIBUTING.md for guidelines. This project follows a Code of Conduct. To report a security issue, see SECURITY.md.
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityBmaintenanceStandalone MCP server for GitHub that enables repository management, branch operations, pull request handling, and commit retrieval via tools listed in the README.Last updated1
- Flicense-qualityCmaintenanceA simple MCP server that provides repository information (list repos, get repo details) using GitHub's public REST API, without needing any API keys or tokens.Last updated
- AlicenseCqualityBmaintenanceA production-ready MCP server for GitHub operations, providing tools for repository management, issues, pull requests, and more via both MCP stdio and REST API.Last updated27MIT
- Alicense-qualityBmaintenanceSimple MCP server for GitHub operations, currently supports creating repositories.Last updated146MIT
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
An MCP server that gives your AI access to the source code and docs of all public github repos
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/MatinMHF/github-mcp-lite'
If you have feedback or need assistance with the MCP directory API, please join our Discord server