Skip to main content
Glama
M-SAAD-BIN-MAZHAR

github-repo-manager-mcp

README.md
# GitHub Repo Manager MCP

This MCP server lets an AI client manage GitHub repositories through the GitHub REST and GraphQL APIs.

## What This MCP Tool Can Do

- Create new repositories
- Update repo details, including description, homepage, topics/tags, and visibility
- Delete repositories
- Add topics/labels to repos for organization
- List all repos with filters
- Rename repositories
- Archive old repos
- Pin repositories via the GitHub GraphQL API
- Read file contents from repositories
- Create or update files in repositories, such as `README.md`

## Security Note

Never hard-code a GitHub token in source files. Set it as an environment variable named `GITHUB_TOKEN`.

If you pasted a real token into chat or committed it anywhere, revoke it in GitHub and create a new token.

## Setup

```bash
npm install
```

Create a `.env` file in this project folder:

```bash
GITHUB_TOKEN=github_pat_your_token_here
```

The token needs permissions for the operations you want to use. For fine-grained personal access tokens, grant repository administration, contents, and metadata access for the target repositories.

Classic PAT notes:

- Deleting repositories requires the `delete_repo` scope.
- Updating repository files requires repo contents write access.
- Pinning repositories uses GitHub GraphQL `addPinnedItem`; use a token that can access the target repository and update the authenticated user's pinned items.

## Run

```bash
npm start
```

## Install From npm

After this package is published, users can run it without cloning the repo:

```bash
npx github-repo-manager-mcp
```

Or install it globally:

```bash
npm install -g github-repo-manager-mcp
github-repo-manager-mcp
```

Set `GITHUB_TOKEN` in your MCP client environment. If you clone this repository locally, the server can also load `GITHUB_TOKEN` from a `.env` file in the project folder.

## MCP Client Config

Example client config using `npx`:

```json
{
  "mcpServers": {
    "github-repo-manager": {
      "command": "npx",
      "args": ["-y", "github-repo-manager-mcp"],
      "env": {
        "GITHUB_TOKEN": "github_pat_your_token_here"
      }
    }
  }
}
```

Example local development config:

```json
{
  "mcpServers": {
    "github-repo-manager": {
      "command": "C:/PROGRA~1/nodejs/node.exe",
      "args": ["C:/Users/msaad/OneDrive/Documents/github_organized/src/server.js"],
      "env": {
        "GITHUB_TOKEN": "github_pat_your_token_here"
      }
    }
  }
}
```

The server also loads `GITHUB_TOKEN` from the local `.env` file automatically, so the `env` block is optional if `.env` is present.

## Publish to npm

Before publishing, make sure you are logged in:

```bash
npm login
```

Then publish:

```bash
npm publish --access public
```

The package publishes only `src`, `README.md`, `LICENSE`, and `run-mcp.cmd`.

## MCP Inspector on Windows

Use these settings in MCP Inspector:

**Transport Type**

```text
STDIO
```

**Command**

```text
C:\PROGRA~1\nodejs\node.exe
```

**Arguments**

```text
C:/Users/msaad/OneDrive/Documents/github_organized/src/server.js
```

Use the short Node path to avoid the space in `Program Files`. Use forward slashes in the server path because MCP Inspector can strip backslashes from Windows paths in the Arguments field.

## Available Tools

- `create_repository`: Create a repository for the authenticated user or an organization. Supports description, homepage, privacy, auto-init, `.gitignore`, license, and topics.
- `update_repository`: Update description, homepage, visibility/privacy, feature flags, default branch, archived state, and topics.
- `delete_repository`: Delete a repository. Requires `confirm=true`.
- `add_repository_topics`: Add topics without removing existing topics.
- `add_repository_labels`: Create labels, or update existing labels if they already exist.
- `list_repositories`: List repositories visible to the authenticated user, an owner, or an organization with filters for visibility, archived state, topic, name, sort, and direction.
- `rename_repository`: Rename a repository.
- `archive_repository`: Archive a repository.
- `pin_repository`: Pin a repository to the authenticated user's GitHub profile via GraphQL.
- `get_file_content`: Read a file from a repository, defaulting to `README.md`.
- `update_file_content`: Create or update a file in a repository, defaulting to `README.md`; it auto-fetches the current SHA when updating an existing file.

## Tool Inputs

Most tools accept an optional `owner`. If omitted, the server uses the authenticated GitHub user's login.

`get_file_content` inputs:

```json
{
  "owner": "optional-owner",
  "repo": "repo-name",
  "path": "README.md",
  "branch": "optional-branch"
}
```

`update_file_content` inputs:

```json
{
  "owner": "optional-owner",
  "repo": "repo-name",
  "path": "README.md",
  "content": "# New content",
  "message": "Update README via MCP",
  "branch": "optional-branch"
}
```

To update an existing file, `sha` is optional because the server attempts to fetch it automatically.

TDQS

B3/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have distinct purposes, but update_repository overlaps with archive_repository and rename_repository. Descriptions help clarify boundaries.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern using snake_case (e.g., create_repository, delete_repository, update_file_content).

Tool Count5/5

11 tools is well-scoped for a repository manager, covering core operations without being overwhelming.

Completeness4/5

Covers CRUD and common operations like labels and topics, but missing explicit get single repo details and collaboration management.

Maintenance

ActivityInactive
ResponsivenessNo issues