Odel
Mooring

Mooring

Local
@seayniclabsPythonMITUpdated 3mo ago

Git and GitHub operations — repo status, diffs, branches, PRs, issues, and Actions.

Mooring — Git & GitHub MCP Server

License: MIT

Mooring lines for your code — Git and GitHub operations for AI tools.

Mooring is an MCP server that gives AI assistants structured access to local Git repositories and the GitHub API. Local operations use GitPython (no subprocess calls). GitHub operations use the PyGithub library with token masking and rate limit handling built in.


Tools

Local Git

ToolDescriptionKey Parameters
repo_statusBranch, ahead/behind, stash count, staged/unstaged/untracked filesrepo_path
repo_logCommit log with optional filtersrepo_path, max_count, author, since, path, search
repo_diffUnified diff — working tree, staged, or between refsrepo_path, staged, from_ref, to_ref
repo_blameGit blame with optional line rangerepo_path, file_path, start_line, end_line
repo_branchesAll branches with tracking info, last commit, ahead/behindrepo_path
repo_stashStash operations: list, push, pop, applyrepo_path, action, message

GitHub

ToolDescriptionKey Parameters
gh_pr_listList pull requestsrepo, state, author, label
gh_pr_detailPR detail with reviews, comments, and check runsrepo, number
gh_pr_createCreate a pull requestrepo, title, body, head, base, labels, reviewers
gh_issuesList, create, or update issuesrepo, state, action, title, body, number
gh_actionsList recent GitHub Actions workflow runsrepo, workflow, status

Utility

ToolDescriptionKey Parameters
healthServer version and status check(none)

Installation

# PyPI
pip install mooring-mcp

# Isolated install
pipx install mooring-mcp

Usage

Run the server directly:

mooring

Claude Code

claude mcp add mooring -- mooring

Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "mooring": {
      "command": "mooring",
      "env": {
        "GITHUB_TOKEN": "your-github-personal-access-token"
      }
    }
  }
}

The GITHUB_TOKEN environment variable is required for all GitHub tools (gh_*). Local Git tools work without it.


Security

  • Path traversal protection — file paths are resolved and validated against the repository root before any operation
  • Symlink escape detection — symlinks that resolve outside the repository are rejected
  • Ref validation — Git refs are checked against a safe character pattern and verified to exist before use
  • Token masking — error messages are scrubbed for GitHub token patterns (ghp_*, gho_*, github_pat_*) before being returned
  • Rate limit handling — GitHub 403 responses are caught and surfaced as clear messages instead of raw exceptions

Development

git clone https://github.com/seayniclabs/mooring.git
cd mooring
python -m venv .venv && source .venv/bin/activate
pip install -e ".[test]"
python -m pytest tests/ -q

Using with a Gateway

If you're running multiple MCP servers, route them through a gateway like tbxark/mcp-proxy to manage all child processes from a single persistent service. The proxy handles process lifecycle, centralized config, and crash recovery — each server still gets its own SSE endpoint but you manage everything from one config file instead of scattered Claude Code entries.

For a full walkthrough of how this works in practice, see The Hidden Cost of a Loaded MCP Stack on charlieseay.com.

License

MIT