by kurdin
Enables MCP clients to perform full‑stack GitHub repository operations—issues, pull requests, branches, files, collaborators, and more—using only a personal access token, without Docker or external CLI tools.
GitHub Repos Manager provides a Model Context Protocol (MCP) server that connects your MCP‑compatible client (Claude Desktop, Roo Code, Cursor, etc.) directly to the GitHub REST API. By supplying a personal access token, the server delivers a comprehensive toolbox of 89 GitHub‑specific actions, ranging from simple repo listing to advanced PR reviews, secret management, and workflow triggers.
repo, user:read, and optionally read:org scopes.mcpServers section (see the serverConfig block below). The server will start automatically when the client calls any tool.list_issues, create_pull_request, set_default_repo, etc., using natural language or programmatic RPC. The server resolves the request via the GitHub API and returns structured results.gh CLI, just a PAT.set_default_repo tool.npx.GH_ALLOWED_REPOS to restrict actions to a whitelist of orgs or repos.Q: Do I need Docker?
A: No. The server runs as a plain Node.js process, started via npx or a local node command.
Q: Which environment variable holds my token?
A: GH_TOKEN. It must be supplied in the env block of the MCP configuration.
Q: How do I set a default repository?
A: Either define GH_DEFAULT_OWNER and GH_DEFAULT_REPO in the environment, pass --default-owner / --default-repo flags, or call the set_default_repo tool during a session.
Q: Can I limit which tools are available?
A: Yes. Use GH_ALLOWED_TOOLS or GH_DISABLED_TOOLS (or the corresponding CLI flags) to whitelist or blacklist tools.
Q: What if I hit GitHub’s rate limit?
A: The server detects 403 responses with X-RateLimit-Remaining: 0 and returns a clear error, advising you to wait for the reset window or rotate the token.
Q: Is the server compatible with Windows?
A: Absolutely. Use npx.cmd in the MCP config on Windows, or run node server.cjs directly.
Token-based GitHub automation management. No Docker for optimal performance, Flexible configuration for fine-grained control, 89 tools with direct API integration.
A comprehensive Model Context Protocol (MCP) server that enables your MCP client (Claude Desktop, Roo Code, Cline, Cursor, Windsurf, etc.) to interact with GitHub repositories using your GitHub personal access token.
This tool simplifies managing GitHub repositories using only a GitHub token for setup. By skipping Docker, it avoids unnecessary complexity, delivering fast and effective results through direct API integration.
This server is built using Node.js and provides a complete toolkit for repository management, issue tracking, collaboration management, and more, all while leveraging the GitHub API for optimal performance.
Skip to Quick Setup and MCP Client Configuration
🎯 Simplicity: Token-based access eliminates complexity. 🌿 Efficiency: No Docker ensures lightweight, optimal performance. 💪 Power: 89 tools with direct API integration offer unmatched flexibility. 🔒 Flexibility: Fine-grained control with configurable tools.
✅ No Docker required - Simple Node.js server that runs anywhere
✅ One token setup - Only needs a GitHub Personal Access Token to work
✅ Direct API integration - No dependency on gh CLI, faster and more reliable
✅ Zero configuration - Works out of the box with just the token
✅ Allowed repositories - Restrict operations to specific repos or owners
✅ Tool management - Enable/disable specific tools for fine-grained control
✅ Default repository - Set a default repo for streamlined workflows
✅ Flexible permissions - Configure exactly what the server can access
✅ Comprehensive toolkit - 89 powerful tools for complete GitHub workflow
✅ Branch & commit management - Create branches, explore history, compare changes
✅ Image upload support - Upload and embed images directly in issues
✅ Advanced filtering - Sort, filter, and search with multiple criteria
✅ Rate limit handling - Built-in GitHub API rate limit management
repo (Full control of private repositories) - Recommended for full functionality.user:read or user:email (to read user profile data).read:org (if you need to access organization information).Make sure you have Node.js installed, then use npx to run the server directly
Check that you have exported your GitHub token as an environment variable named GH_TOKEN or include it in your MCP client configuration.
You can run this server directly without cloning or installing:
# Run directly with npx
npx -y github-repos-manager-mcp
For macOS/Linux:
{
"mcpServers": {
"github-repos-manager": {
"command": "npx",
"args": [
"-y",
"github-repos-manager-mcp"
],
"env": {
"GH_TOKEN": "ghp_YOUR_ACTUAL_TOKEN_HERE"
}
}
}
}
For Windows, in some cases you may need to use npx.cmd instead of npx:
{
"mcpServers": {
"github-repos-manager": {
"command": "npx.cmd",
"args": [
"-y",
"github-repos-manager-mcp"
],
"env": {
"GH_TOKEN": "ghp_YOUR_ACTUAL_TOKEN_HERE"
}
}
}
}
This command will automatically download and run the latest version of the server without needing to install anything locally.
If you prefer to run the server locally, clone the repository and install dependencies:
git clone https://github.com/kurdin/github-repos-manager.git
cd github-repos-manager
npm install
Then, configure your MCP client to point to the local server using the full path to server.cjs:
{
"mcpServers": {
"github-repos-manager": {
"command": "node",
"args": ["/full/path/to/your/project/github-repos-manager-mcp/server.cjs"],
"env": {
"GH_TOKEN": "ghp_YOUR_ACTUAL_TOKEN_HERE"
}
}
}
}
Important: Replace "ghp_YOUR_ACTUAL_TOKEN_HERE" with your actual GitHub Personal Access Token.
Once the MCP client is configured with the correct path to server.cjs and your GH_TOKEN, the server should start automatically when the client attempts to use one of its tools.
You can also test the server script directly for basic authentication, but this requires temporarily setting the GH_TOKEN environment variable in your shell for this specific test:
# For direct script testing ONLY (normal operation uses MCP client config)
export GH_TOKEN="ghp_YOUR_TEMPORARY_TEST_TOKEN"
node server.cjs
unset GH_TOKEN # Important: unset after testing
If successful, you should see "GitHub API authentication successful" and "GitHub Repos Manager MCP Server running on stdio".
Note: The server will only set a default repository if you explicitly configure it through environment variables, command line arguments, or use the set_default_repo tool. It never automatically sets a default repository.
Example File Locations for Claude Desktop claude_desktop_config.json:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.json (path may vary)You can set a default repository to streamline your workflow and avoid specifying owner and repo in every command. There are three ways to configure this:
Add environment variables to your MCP client configuration:
Using npx:
{
"mcpServers": {
"github-repos-manager": {
"command": "npx",
"args": ["-y", "github-repos-manager-mcp"],
"env": {
"GH_TOKEN": "ghp_YOUR_ACTUAL_TOKEN_HERE",
"GH_DEFAULT_OWNER": "octocat",
"GH_DEFAULT_REPO": "Hello-World"
}
}
}
}
Using local installation:
{
"mcpServers": {
"github-repos-manager": {
"command": "node",
"args": ["/full/path/to/your/project/github-repos-manager-mcp/server.cjs"],
"env": {
"GH_TOKEN": "ghp_YOUR_ACTUAL_TOKEN_HERE",
"GH_DEFAULT_OWNER": "octocat",
"GH_DEFAULT_REPO": "Hello-World"
}
}
}
}
When running the server directly, you can pass default repository settings:
node server.cjs --default-owner octocat --default-repo Hello-World
Use the set_default_repo tool during your conversation to set or change the default repository:
microsoft/vscode"username/my-project"Configuration Priority (highest to lowest):
--default-owner, --default-repo)GH_DEFAULT_OWNER, GH_DEFAULT_REPO)set_default_repo)Benefits of Default Repository:
owner and repo in every commandset_default_repo toolOnce a default repository is set, you can omit owner and repo parameters from commands:
You can restrict which repositories the server can access using the GH_ALLOWED_REPOS environment variable or --allowed-repos command line argument. This is a security feature that ensures the server can only operate on approved repositories.
1. Environment Variable (for MCP clients)
{
"mcpServers": {
"github-repos-manager": {
"command": "node",
"args": ["/path/to/server.cjs"],
"env": {
"GH_TOKEN": "ghp_YOUR_TOKEN",
"GH_ALLOWED_REPOS": "owner1/repo1,owner2/repo2,owner3"
}
}
}
}
2. Command Line Argument
node server.cjs --allowed-repos "microsoft/vscode,facebook/react,google"
How it works:
owner/repo): Only that specific repository is allowedowner): All repositories from that owner are allowedExamples:
"microsoft/vscode" - Only the vscode repository from Microsoft"kurdin" - All repositories owned by kurdin"kurdin,microsoft/vscode,facebook/react" - All kurdin's repos plus specific reposDisable tools that you don't want to be available by setting the GH_DISABLED_TOOLS environment variable or using --disabled-tools command line argument.
For maximum security, you can restrict the server to only allow specific tools by setting the GH_ALLOWED_TOOLS environment variable or using --allowed-tools command line argument.
Important: If both GH_ALLOWED_TOOLS and GH_DISABLED_TOOLS are set, GH_ALLOWED_TOOLS takes precedence.
Using npx (macOS/Linux):
{
"mcpServers": {
"github-repos-manager": {
"command": "npx",
"args": ["-y", "github-repos-manager-mcp"],
"env": {
"GH_TOKEN": "ghp_YOUR_ACTUAL_TOKEN_HERE",
"GH_DEFAULT_OWNER": "mycompany",
"GH_DEFAULT_REPO": "main-project",
"GH_ALLOWED_REPOS": "mycompany,trusted-org/specific-repo",
"GH_ALLOWED_TOOLS": "list_issues,create_issue,list_prs,get_repo_info"
}
}
}
}
Using npx (Windows):
{
"mcpServers": {
"github-repos-manager": {
"command": "npx.cmd",
"args": ["-y", "github-repos-manager-mcp"],
"env": {
"GH_TOKEN": "ghp_YOUR_ACTUAL_TOKEN_HERE",
"GH_DEFAULT_OWNER": "mycompany",
"GH_DEFAULT_REPO": "main-project",
"GH_ALLOWED_REPOS": "mycompany,trusted-org/specific-repo",
"GH_ALLOWED_TOOLS": "list_issues,create_issue,list_prs,get_repo_info"
}
}
}
}
Using local installation:
{
"mcpServers": {
"github-repos-manager": {
"command": "node",
"args": ["/full/path/to/your/project/github-repos-manager-mcp/server.cjs"],
"env": {
"GH_TOKEN": "ghp_YOUR_ACTUAL_TOKEN_HERE",
"GH_DEFAULT_OWNER": "mycompany",
"GH_DEFAULT_REPO": "main-project",
"GH_ALLOWED_REPOS": "mycompany,trusted-org/specific-repo",
"GH_ALLOWED_TOOLS": "list_issues,create_issue,list_prs,get_repo_info"
}
}
}
}
Command Line Equivalents:
node server.cjs \
--default-owner mycompany \
--default-repo main-project \
--allowed-repos "mycompany,trusted-org/specific-repo" \
--allowed-tools "list_issues,create_issue,list_prs,get_repo_info"
This server provides 89 comprehensive tools for complete GitHub workflow management:
create_pull_request: Create a new pull request with title, body, and branch specifications.
owner (string, optional), repo (string, optional), title (string, required), body (string, optional), head (string, required - branch with changes), base (string, required - target branch), draft (boolean, optional), maintainer_can_modify (boolean, optional)edit_pull_request: Update an existing pull request's title, body, state, or base branch.
owner (string, optional), repo (string, optional), pull_number (integer, required), title (string, optional), body (string, optional), state (string, optional - "open" or "closed"), base (string, optional)get_pr_details: Get comprehensive information about a pull request including status and merge details.
owner (string, optional), repo (string, optional), pull_number (integer, required)list_pr_reviews: List all reviews on a pull request with their status and comments.
owner (string, optional), repo (string, optional), pull_number (integer, required), per_page (integer, optional, default 30)create_pr_review: Submit a review on a pull request with comments and approval status.
owner (string, optional), repo (string, optional), pull_number (integer, required), body (string, optional), event (string, optional - "APPROVE", "REQUEST_CHANGES", "COMMENT"), comments (array, optional)list_pr_files: List all files changed in a pull request with additions/deletions stats.
owner (string, optional), repo (string, optional), pull_number (integer, required), per_page (integer, optional, default 30)create_file: Create a new file in the repository with content and commit message.
owner (string, optional), repo (string, optional), path (string, required), content (string, required), message (string, required), branch (string, optional), committer (object, optional)update_file: Update an existing file's content with a new commit.
owner (string, optional), repo (string, optional), path (string, required), content (string, required), message (string, required), sha (string, required - current file SHA), branch (string, optional)upload_file: Upload a local file to the repository (binary files supported).
owner (string, optional), repo (string, optional), local_path (string, required), repo_path (string, required), message (string, required), branch (string, optional)delete_file: Delete a file from the repository with a commit message.
owner (string, optional), repo (string, optional), path (string, required), message (string, required), sha (string, required - current file SHA), branch (string, optional)list_deploy_keys: List all deploy keys for a repository with their permissions.
owner (string, optional), repo (string, optional), per_page (integer, optional, default 30)create_deploy_key: Add a new deploy key to the repository for secure access.
owner (string, optional), repo (string, optional), title (string, required), key (string, required - public SSH key), read_only (boolean, optional, default true)delete_deploy_key: Remove a deploy key from the repository.
owner (string, optional), repo (string, optional), key_id (integer, required)list_webhooks: List all webhooks configured for the repository.
owner (string, optional), repo (string, optional), per_page (integer, optional, default 30)create_webhook: Create a new webhook for repository events.
owner (string, optional), repo (string, optional), config (object, required - url and content_type), events (array, optional, default ["push"]), active (boolean, optional)edit_webhook: Update webhook configuration, events, or active status.
owner (string, optional), repo (string, optional), hook_id (integer, required), config (object, optional), events (array, optional), active (boolean, optional)delete_webhook: Remove a webhook from the repository.
owner (string, optional), repo (string, optional), hook_id (integer, required)list_secrets: List repository secrets (names only, values are encrypted).
owner (string, optional), repo (string, optional), per_page (integer, optional, default 30)update_secret: Create or update a repository secret for Actions.
owner (string, optional), repo (string, optional), secret_name (string, required), encrypted_value (string, required), key_id (string, required)Note: These tools are placeholders for future GitHub Actions integration.
list_workflows: List all GitHub Actions workflows in the repository.list_workflow_runs: List workflow runs with filtering options.get_workflow_run_details: Get detailed information about a workflow run.trigger_workflow: Manually trigger a workflow dispatch event.download_workflow_artifacts: Download artifacts from a workflow run.cancel_workflow_run: Cancel a workflow run in progress.get_repo_stats: Get comprehensive repository statistics including contributor activity.
owner (string, optional), repo (string, optional)list_repo_topics: List all topics (tags) associated with the repository.
owner (string, optional), repo (string, optional)update_repo_topics: Update the topics for better repository discovery.
owner (string, optional), repo (string, optional), names (array of strings, required)get_repo_languages: Get programming languages used in the repository with byte counts.
owner (string, optional), repo (string, optional)list_stargazers: List users who have starred the repository.
owner (string, optional), repo (string, optional), per_page (integer, optional, default 30)list_watchers: List users watching the repository for notifications.
owner (string, optional), repo (string, optional), per_page (integer, optional, default 30)list_forks: List all forks of the repository with sorting options.
owner (string, optional), repo (string, optional), sort (string, optional - "newest", "oldest", "stargazers"), per_page (integer, optional)get_repo_traffic: Get repository traffic data including views and clones (requires admin access).
owner (string, optional), repo (string, optional)search_issues: Search for issues and pull requests across GitHub.
query (string, required), sort (string, optional - "comments", "reactions", "interactions", "created", "updated"), order (string, optional - "asc", "desc"), per_page (integer, optional)search_commits: Search for commits across repositories.
query (string, required), sort (string, optional - "author-date", "committer-date"), order (string, optional), per_page (integer, optional)search_code: Search for code across GitHub repositories.
query (string, required), sort (string, optional - "indexed"), order (string, optional), per_page (integer, optional)search_users: Search for users and organizations.
query (string, required), sort (string, optional - "followers", "repositories", "joined"), order (string, optional), per_page (integer, optional)search_topics: Search for repository topics.
query (string, required), per_page (integer, optional, default 30)list_org_repos: List all repositories in an organization.
org (string, required), type (string, optional - "all", "public", "private", "forks", "sources", "member"), sort (string, optional), per_page (integer, optional)list_org_members: List members of an organization.
org (string, required), filter (string, optional - "2fa_disabled", "all"), role (string, optional - "all", "admin", "member"), per_page (integer, optional)get_org_info: Get detailed information about an organization.
org (string, required)list_org_teams: List all teams in an organization.
org (string, required), per_page (integer, optional, default 30)get_team_members: List members of a specific team.
org (string, required), team_slug (string, required), role (string, optional - "member", "maintainer", "all"), per_page (integer, optional)manage_team_repos: Add or remove repository access for a team.
org (string, required), team_slug (string, required), owner (string, required), repo (string, required), permission (string, optional - "pull", "push", "admin"), action (string, required - "add" or "remove")Note: Some of these tools are placeholders for future enhancements.
list_repo_projects: List repository projects (classic projects).code_quality_checks: Placeholder for future code quality analysis.custom_dashboards: Placeholder for custom dashboard creation.automated_reporting: Placeholder for automated report generation.notification_management: Placeholder for notification settings.release_management: Placeholder for release management features.dependency_analysis: Placeholder for dependency scanning.set_default_repo: Set a default owner and repository for subsequent commands to streamline your workflow.
owner (string, required), repo (string, required)list_repos: List GitHub repositories for the authenticated user with advanced filtering.
per_page (number, optional, default 10, max 100), visibility (string, optional, enum: "all", "public", "private", default "all"), sort (string, optional, enum: "created", "updated", "pushed", "full_name", default "updated")get_repo_info: Get comprehensive information about a specific repository including stats and metadata.
owner (string, required if no default), repo (string, required if no default)search_repos: Search for repositories across GitHub with advanced sorting options.
query (string, required), per_page (number, optional, default 10, max 100), sort (string, optional, enum: "stars", "forks", "help-wanted-issues", "updated", default "stars")get_repo_contents: Browse files and directories in any repository with branch/commit support.
owner (string, required if no default), repo (string, required if no default), path (string, optional, default ""), ref (string, optional, e.g., branch name or commit SHA)list_issues: List issues with filtering by state and comprehensive pagination.
owner (string, required if no default), repo (string, required if no default), state (string, optional, enum: "open", "closed", "all", default "open"), per_page (number, optional, default 10, max 100)create_issue: Create feature-rich issues with image uploads, labels, and assignees.
owner (string, required if no default), repo (string, required if no default), title (string, required), body (string, optional), image_path (string, optional, full local path to image), labels (array of strings, optional), assignees (array of strings, optional)edit_issue: Modify existing issues including title, body, state, labels, assignees, and image uploads.
owner (string, optional), repo (string, optional), issue_number (integer, required), title (string, optional), body (string, optional), state (string, optional, enum: "open", "closed"), image_path (string, optional, full local path to image), labels (array of strings, optional), assignees (array of strings, optional)get_issue_details: Get comprehensive information about any specific issue.
owner (string, optional), repo (string, optional), issue_number (integer, required)lock_issue: Lock issues to prevent further comments with customizable reasons.
owner (string, optional), repo (string, optional), issue_number (integer, required), lock_reason (string, optional, enum: "off-topic", "too heated", "resolved", "spam")unlock_issue: Unlock previously locked issues to resume discussions.
owner (string, optional), repo (string, optional), issue_number (integer, required)add_assignees_to_issue: Add one or more team members to an issue.
owner (string, optional), repo (string, optional), issue_number (integer, required), assignees (array of strings, required)remove_assignees_from_issue: Remove assignees from issues for better task management.
owner (string, optional), repo (string, optional), issue_number (integer, required), assignees (array of strings, required)list_issue_comments: List all comments for an issue with timestamp filtering.
owner (string, optional), repo (string, optional), issue_number (integer, required), per_page (integer, optional, default 30, max 100), since (string, optional, ISO 8601 format date-time)create_issue_comment: Add new comments to ongoing issue discussions.
owner (string, optional), repo (string, optional), issue_number (integer, required), body (string, required)edit_issue_comment: Modify existing comments for corrections or updates.
owner (string, optional), repo (string, optional), comment_id (integer, required), body (string, required)delete_issue_comment: Remove comments when necessary for content management.
owner (string, optional), repo (string, optional), comment_id (integer, required)list_prs: List pull requests with state filtering and pagination.
owner (string, required if no default), repo (string, required if no default), state (string, optional, enum: "open", "closed", "all", default "open"), per_page (number, optional, default 10, max 100)list_branches: List all branches in a repository with protection status and commit information.
owner (string, optional), repo (string, optional), protected_only (boolean, optional, default false), per_page (number, optional, default 30)create_branch: Create a new branch from an existing branch or commit.
owner (string, optional), repo (string, optional), branch_name (string, required), from_branch (string, optional, defaults to repository default branch)list_commits: List commits in a repository with detailed information and filtering options.
owner (string, optional), repo (string, optional), sha (string, optional, branch/tag/commit to list from), per_page (number, optional, default 20), since (string, optional, ISO 8601 date-time), until (string, optional, ISO 8601 date-time), author (string, optional, GitHub username or email)get_commit_details: Get detailed information about a specific commit including files changed.
owner (string, optional), repo (string, optional), commit_sha (string, required)compare_commits: Compare two commits or branches to see differences.
owner (string, optional), repo (string, optional), base (string, required, base branch or commit SHA), head (string, required, head branch or commit SHA)get_user_info: Get detailed information about any GitHub user or your own profile.
username (string, optional - defaults to authenticated user)list_repo_collaborators: List repository collaborators with permission-based filtering.
owner (string, optional), repo (string, optional), affiliation (string, optional, enum: "outside", "direct", "all", default "all"), permission (string, optional, enum: "pull", "triage", "push", "maintain", "admin"), per_page (integer, optional, default 30, max 100)list_repo_labels: List all labels in a repository with their colors and descriptions.
owner (string, optional), repo (string, optional), per_page (integer, optional, default 30, max 100)create_label: Create custom labels with colors and descriptions for better issue organization.
owner (string, optional), repo (string, optional), name (string, required), color (string, optional, hex color without #, default "f29513"), description (string, optional)edit_label: Modify existing label properties including name, color, and description.
owner (string, optional), repo (string, optional), current_name (string, required), name (string, optional), color (string, optional, hex color without #), description (string, optional)delete_label: Remove labels from repository when no longer needed.
owner (string, optional), repo (string, optional), name (string, required)list_milestones: List repository milestones with filtering by state and sorting options.
owner (string, optional), repo (string, optional), state (string, optional, enum: "open", "closed", "all", default "open"), sort (string, optional, enum: "due_on", "completeness", default "due_on"), direction (string, optional, enum: "asc", "desc", default "asc"), per_page (integer, optional, default 30, max 100)create_milestone: Create new milestones with due dates for project planning.
owner (string, optional), repo (string, optional), title (string, required), state (string, optional, enum: "open", "closed", default "open"), description (string, optional), due_on (string, optional, ISO 8601 date-time format)edit_milestone: Update milestone details including title, description, state, and due dates.
owner (string, optional), repo (string, optional), milestone_number (integer, required), title (string, optional), state (string, optional, enum: "open", "closed"), description (string, optional), due_on (string, optional, ISO 8601 date-time format)delete_milestone: Remove milestones from repository when no longer needed.
owner (string, optional), repo (string, optional), milestone_number (integer, required)Once configured, you can ask your MCP client (e.g., Claude) to perform powerful GitHub operations:
octocat/Spoon-Knife for easier workflow."microsoft/vscode repository."src/main.js file in microsoft/vscode on the develop branch."src/main.js file in the default repository on the develop branch." (requires default repo set)my-org/my-repo who have admin permissions."my-org/my-repo with title 'Urgent: UI Bug' and body 'The login button is broken on mobile.' Assign it to user1 and user2 and add the bug label."enhancement label." (requires default repo set)/Users/me/screenshots/bug_report.png to issue #42 in microsoft/vscode."/Users/me/screenshots/bug_report.png to issue #42 in the default repository." (requires default repo set)enhancement label, and close it."old-assignee from issue #12 and add new-assignee instead."my-org/my-repo to see current organization system."my-org/project-x sorted by due date."microsoft/vscode."my-org/project-x."github_username."my-org/my-repo and show their protection status."my-org/secure-repo."feature/dark-mode from the develop branch."main branch."john-doe from the last week."abc123def including all file changes."main branch with feature/new-ui to see what's different."v1.0.0 and v2.0.0 tags."my-org/main-project as default, then list all open issues assigned to me."/path/to/error.png, assign to dev-team, and add labels bug and high-priority."reviewer1, lock it with reason 'resolved', and add a final comment 'Issue resolved in PR #51'."Token Problems:
GH_TOKEN value in your MCP client's configuration is correct and doesn't have typosexport TEMP_TOKEN="ghp_YOUR_TOKEN_TO_TEST"
curl -H "Authorization: token $TEMP_TOKEN" https://api.github.com/user
unset TEMP_TOKEN
This should return your GitHub user information.Configuration Issues:
GH_TOKEN is correctly placed within the env object in your MCP client's server configurationserver.cjs is absolute and correctnode --versionGH_DEFAULT_OWNER and GH_DEFAULT_REPO environment variables, verify they're correct and the repository existsPermission Issues:
repo or public_repo (for repository access)user (for user information)read:org (for organization access, if needed)GH_DEFAULT_OWNER and GH_DEFAULT_REPO in your MCP client config--default-owner and --default-repo flagsowner/repo format in the set_default_repo toolserver.cjs is executable: chmod +x server.cjsGH_TOKEN to version control or share it publiclyenv block in your MCP client configuration# Clone and setup
mkdir github-repos-manager-mcp
cd github-repos-manager-mcp
# Add the server files
npm install
chmod +x server.cjs
# For development testing with nodemon
npm run dev
The recommended approach is configuring your MCP client (e.g., Claude Desktop) to point to your development version with proper GH_TOKEN configuration. Changes to server.cjs require restarting the server connection.
# Temporarily set token for quick verification
export GH_TOKEN="ghp_YOUR_DEVELOPMENT_TOKEN"
node server.cjs
unset GH_TOKEN # Always clean up after testing
MIT License - Feel free to use, modify, and distribute this MCP server.
Please log in to share your review and rating for this MCP.
{
"mcpServers": {
"github-repos-manager": {
"command": "npx",
"args": [
"-y",
"github-repos-manager-mcp"
],
"env": {
"GH_TOKEN": "<YOUR_GITHUB_PERSONAL_ACCESS_TOKEN>"
}
}
}
}claude mcp add github-repos-manager npx -y github-repos-manager-mcpExplore related MCPs that share similar capabilities and solve comparable challenges
by zed-industries
A high‑performance, multiplayer code editor designed for speed and collaboration.
by modelcontextprotocol
Model Context Protocol Servers
by modelcontextprotocol
A Model Context Protocol server for Git repository interaction and automation.
by modelcontextprotocol
A Model Context Protocol server that provides time and timezone conversion capabilities.
by cline
An autonomous coding assistant that can create and edit files, execute terminal commands, and interact with a browser directly from your IDE, operating step‑by‑step with explicit user permission.
by continuedev
Enables faster shipping of code by integrating continuous AI agents across IDEs, terminals, and CI pipelines, offering chat, edit, autocomplete, and customizable agent workflows.
by upstash
Provides up-to-date, version‑specific library documentation and code examples directly inside LLM prompts, eliminating outdated information and hallucinated APIs.
by github
Connects AI tools directly to GitHub, enabling natural‑language interactions for repository browsing, issue and pull‑request management, CI/CD monitoring, code‑security analysis, and team collaboration.
by daytonaio
Provides a secure, elastic infrastructure that creates isolated sandboxes for running AI‑generated code with sub‑90 ms startup, unlimited persistence, and OCI/Docker compatibility.