skipper

Local git plus GitHub, GitLab, Gitea and Forgejo through one short, workflow-shaped tool set

By Abdelkader Boudih (individual) Rust Local · stdio Git and code hostingDevOps and monitoring

17 popularity score ★ 23

Connect your client

Local (from source)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
cargo install skipper
Claude CodeTerminal
claude mcp add skipper -- skipper
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "skipper": {
      "command": "skipper",
      "args": []
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "skipper": {
      "command": "skipper",
      "args": []
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "skipper": {
      "type": "stdio",
      "command": "skipper",
      "args": []
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.skipper]
command = "skipper"
args = []
Gemini CLITerminal
gemini mcp add --scope user skipper skipper

Settings 1

GH_TOKEN secret Optional: GitHub token `gh auth token` hands over instead of its stored login. For GitHub tools.

What it does

skipper is a Rust MCP server, run over stdio as the `skipper` binary, that works on the git repository it is started in. Local git operations (status, diff, log, show, blame, staging, committing, local branches) run in-process through the gitoxide library and touch no network. Forge features cover GitHub (REST and GraphQL), GitLab (through the `glab` CLI) and Gitea/Forgejo (REST), and are mostly about following work: CI run and pipeline status, waiting on a build or a PR's checks, and watching PRs for comments, reviews, pushes and merges.

It registers 20 tools, but shows only those the current checkout can use: forge tools appear when a remote points at that forge and its CLI is installed, new enough and logged in. Visibility is re-checked on every call, so adding or changing a remote takes effect without a restart. The git router goes further than the README says: `git_add` is only listed while the working tree has changes, and `git_commit` only while something is staged (src/mcp/git.rs). Much of the read side is offered as MCP resources rather than tools: the workspace, issues, a PR's merge-readiness, changed files, check matrix and full comment thread with bot noise stripped.

By default nothing it does reaches a remote: the four write tools (`pr_merge`, `git_push`, `git_pull`, `git_fetch`) stay hidden until `[writes] enabled = true` is set in the global config, and merges and pushes then ask the user for approval through the client unless `confirm = false`. The example config also documents a `[providers.<forge>] disabled = true` switch, not mentioned in the README, that hides a forge's tools whatever the remotes say. Gitea and Forgejo count as one forge there (skipper.example.toml).

What it needs

RuntimeA prebuilt binary
Runs onLinux, macOS
GitHubFreeOptional, for GitHub tools: uses the token from `gh auth login`
GitLabFreeOptional, for GitLab tools: uses `glab auth login`
Gitea or ForgejoYour own instanceOptional, for Gitea/Forgejo tools: uses the login saved by `tea login add`
Also
  • Must be started inside a git repository
  • gh 2.50+ on PATH for GitHub tools
  • glab 1.40+ on PATH for GitLab tools
  • tea 0.9+ configured for Gitea/Forgejo tools

The install script fetches a prebuilt binary for Linux or macOS on x86_64 or arm64 into ~/.local/bin. Building with `cargo install skipper` needs Rust 1.99 or newer. A forge CLI that is missing, too old or logged out only hides that forge's tools. The Gitea/Forgejo token needs the `read:issue` scope for issues.

Limits

  • Not covered No tools to create, close, delete or fork anything on a forge, and no issue or PR creation
  • Read only `git_push` refuses force and delete refspecs, and `git_pull` only fast-forwards
  • Limit Write tools stay hidden until `[writes] enabled = true` is set in the global config. A repository's `skipper.toml` cannot turn them on
  • Limit With `confirm` on (the default), merges and pushes are refused in a client without MCP elicitation
  • Not covered PR watching, PR checks and `pr_merge` are GitHub only, and Gitea/Forgejo get no CI tools
  • Size cap Issue and PR list resources return the last 30
  • Limit Self-hosted forges must be mapped under `[hosts]`. Only github.com, gitlab.com and codeberg.org are known out of the box
  • Platform Prebuilt binaries are for Linux and macOS only

Has no tools to create, delete, close or fork anything on a forge, and no issue or PR creation; `git_push` refuses force and delete refspecs, `git_pull` only fast-forwards. Writes need the global config and cannot be enabled from a repository's `skipper.toml`; with `confirm` on, a client without MCP elicitation is refused. PR watching, PR checks and `pr_merge` are GitHub only; Gitea/Forgejo get no CI tools. Issue and PR list resources return the last 30. Self-hosted forges must be mapped under `[hosts]`; only github.com, gitlab.com and codeberg.org are known out of the box.

Who it suits

Suits a developer who wants an assistant to inspect a local repository, commit locally, and follow CI and PR reviews across several forges without a large tool list, and who prefers forge writes off unless switched on with per-action approval. Pick a forge's own API-wide server instead if the assistant must open issues or PRs, manage releases or administer repositories, since skipper leaves those out on purpose. It is a personal project, not published by GitHub, GitLab or the Gitea/Forgejo projects, and it runs entirely on your machine.

Tools 20

13 only read, 6 change things, 1 can delete or overwrite. A ? marks an optional parameter.

repo_search
Search Gitea/Forgejo repositories by name, page by page
gh_repo_list
List the signed-in user's GitHub repositories
glab_project_list
List the signed-in user's GitLab projects
build_status
Report CI run or pipeline status for this repository on GitHub or GitLab
build_watch
Wait for a CI run, or every run of a commit, to change status within a bounded time
pr_build_wait
Wait for a GitHub PR's checks to finish and return a summary verdict
pr_watch
Follow GitHub PRs for comments, reviews, checks, pushes, merges and closes
pr_merge changes
Merge a GitHub PR after checking its state, checks and merge method. Opt-in write
git_push changes
Push branches and tags to one or more remotes without forcing. Opt-in write
git_pull changes
Fast-forward the current branch to its upstream. Opt-in write
git_fetch changes
Fetch one or all remotes and prune removed branches. Opt-in write
git_status
Show staged, unstaged and untracked files
git_diff
Return patches, stats or changed paths for a chosen scopescope: enumformat: enumcheck: booleanbase?: stringpaths?: array
git_log
List recent commits, 20 by defaultlimit?: integerbranch?: string
git_show
Show one commit with its message and trailersrev?: string
git_show_file
Return a tracked file's contents at a given revisionfile_path: stringrev?: stringstart_line?: integerend_line?: integer
git_blame
Show which commit last changed each linefile_path: stringstart_line?: integerend_line?: integer
git_add changes
Stage the named pathspaths: array
git_commit changes
Commit staged changes, optionally amending or adding trailersmessage: stringtrailers?: arrayamend?: boolean
git_branch deletes
Create or delete a local branchoperation: enumname: stringstart_point?: stringforce?: boolean

Resources 12

skipper://workspace
Working directory, repo root, branch, HEAD, dirty state and remotes with the forge each maps to
skipper://repo
The Gitea/Forgejo repository the workspace's remote points at
skipper://issues/{state}
The last 30 open, closed or all issues of the current remote (GitHub, Gitea/Forgejo)
skipper://issue/{number}
One issue with its body and every comment, cleaned up (GitHub, Gitea/Forgejo)
skipper://pr/{number}
What a merge decision needs for a GitHub PR: state, mergeability, reviews, checks verdict, merge methods
skipper://pr/{number}/files
Files a GitHub PR changes, with added and deleted line counts
skipper://pr/{number}/checks
A GitHub PR's checks by workflow, with detail on failures only
skipper://pr/{number}/comments
A GitHub PR's description and every review and conversation comment, with bot noise removed
skipper://pr/{number}/comments/{kind}
The same thread filtered to inline, comment or review notes
skipper://watch/comments/{kind}
Comment threads for every PR under `pr_watch` in one read
skipper://prs/{state}/{author}
The last 30 GitHub PRs by an author in a given state
skipper://watch
PRs under `pr_watch` with status, checks and recent events

Similar servers