lgh
LGH is a local Git hosting server that manages repositories, provides backup workflows, and exposes health/logging tools.
Repository registration: Register a local Git repo with LGH (auto-initializes git if needed, optional custom name).
List repositories: Show all registered repos with filter by name/path.
View changes: Show uncommitted diffs (stat + unified patch) for review.
Local commits: Create a local checkpoint (
save) without pushing, with .gitignore enforcement and trash detection.One-click push: Commit and push to LGH (
up) with project type detection, trash detection, force option, and optional triggered job IDs.Dry-run pushes: Preview what
upwould do without making changes.Rollback: Revert the working directory by N commits after inspecting with diff/dry-run.
Server control: Start/stop the LGH HTTP server in the background.
Health status: Check LGH and ActionD running state, PID, listen address, repo count, read-only flag.
Log retrieval: Read recent server log entries from
~/.localgithub/logs/server.jsonl.Unregistration: Remove a repo from LGH (deletes bare backup, removes remote; local files untouched).
Allows exposing the local Git server to the internet via Cloudflare Tunnel (cloudflared).
Allows exposing the local Git server to the internet through ngrok tunnels for remote access.
LGH - LocalGitHub
LGH (LocalGitHub) is a lightweight local Git hosting service. It wraps git http-backend to provide GitHub-like HTTP access, running entirely on localhost - turning your local directory into a Git server.
β¨ Features
π Lightweight - Single binary, no external dependencies
π§ Easy to Use - Intuitive CLI commands, one-click repository setup
π HTTP Access - Standard Git HTTP protocol, compatible with all Git clients
π Authentication - Built-in Basic Auth with salted password hashing
π‘οΈ Read-Only Mode - Optional read-only mode to protect repositories
π‘ mDNS Discovery - Automatic LAN discovery for team collaboration
π Tunnel Support - One-click expose to internet (ngrok, cloudflared)
β‘ Smart Archival (v1.2.0) -
lgh up/lgh savecommands with auto .gitignoreπ€ MCP Server (v1.2.0) - AI Agent integration (Cursor, Claude Desktop)
Related MCP server: my-local-mcp
π¦ Installation
Option 1: Download Pre-built Binary (Recommended)
Download the pre-built binary for your system β these links always point to the latest release:
OS | Architecture | Download |
macOS | Apple Silicon (M1/M2/M3) | |
macOS | Intel | |
Linux | x86_64 | |
Linux | ARM64 | |
Windows | x86_64 |
# Install after download (macOS ARM64 example)
chmod +x lgh-darwin-arm64
sudo mv lgh-darwin-arm64 /usr/local/bin/lghWindows Installation
Download
lgh-windows-amd64.exeRename to
lgh.exeMove to a folder in your
%PATH%(e.g.,C:\Program Files\lgh\)Run in PowerShell or Command Prompt
Option 2: Install Script
# Install
curl -sSL https://raw.githubusercontent.com/JoeGlenn1213/lgh/main/install.sh | bash
# Uninstall
curl -sSL https://raw.githubusercontent.com/JoeGlenn1213/lgh/main/uninstall.sh | bashOption 3: Homebrew (macOS)
# Add tap
brew tap JoeGlenn1213/tap
# Install
brew install lgh
# Uninstall
brew uninstall lghOption 4: Build from Source
git clone https://github.com/JoeGlenn1213/lgh.git
cd lgh
make build
sudo make install
# Or manually
go build -o lgh ./cmd/lgh/
sudo mv lgh /usr/local/bin/Option 5: Go Install
go install github.com/JoeGlenn1213/lgh/cmd/lgh@latestπ Quick Start
1. Initialize LGH Environment
lgh initThis creates the necessary directories and config files in ~/.localgithub/.
2. Start the Server
# Start in foreground
lgh serve
# Start in background (daemon mode)
lgh serve -d
# Check server status
lgh status
# Stop the server
lgh stopServer listens on http://127.0.0.1:9418 by default.
3. One-Step Add & Push (v1.0.9+)
The fastest way to host a local project:
cd your-project
lgh add . --pushThis single command will:
Initialize a Git repo (if not already one).
Auto-Commit all files (if the repo is empty).
Register it with LGH.
Auto-Push to the server immediately.
4. Add Without Pushing
If you prefer manual control:
lgh add .
# Then push manually later
git push -u lgh main5. Smart Archival (v1.2.0+)
The fastest way to backup and sync your code:
# One-click: auto .gitignore + add + commit + push
lgh up "commit message"
# Local save only (no push)
lgh save "WIP: work in progress"Smart Ignore automatically:
Detects project type (Python, Go, Node, Java, Rust, AI/ML)
Generates appropriate
.gitignorefileBlocks large files (>50MB) and sensitive files (.env, *.key)
(v1.2.3+) When used via MCP, returns exact
triggered_job_ids: [...]array, allowing AI to track pipeline status with zero blind spots
5. Push Code
After adding, you can use standard Git commands:
git push lgh main
# or
git push5. Clone from Elsewhere
git clone http://127.0.0.1:9418/your-project.gitπ Command Reference
Command | Description | Example |
| Initialize LGH environment |
|
| Start HTTP server |
|
| Stop running server |
|
| Add repository to LGH |
|
| List all repositories (detailed) |
|
| View server status and repo list |
|
| Remove repository (use status/list first) |
|
| Expose to internet |
|
| Manage authentication |
|
| Show version |
|
| Check system health |
|
| Check repo connection state |
|
| Switch active remote |
|
| Simple clone from LGH |
|
| View/watch system event logs |
|
| One-click commit and push (MCP returns ActionD triggered_job_ids) |
|
| Local save (no push) |
|
| View server logs |
|
| Start MCP server for AI |
|
Repository Management (v1.0.4+)
LGH provides tools to manage your local repository state without complex git commands.
Check Connection State
See exactly which remote you are pushing to:
lgh repo statusSwitch Remote
Easily switch between LGH and origin (e.g., GitHub):
lgh remote use lgh # Switch upstream to LGH
lgh remote use origin # Switch upstream to OriginOther Tools
# Clone easily (no full URL needed)
lgh clone my-project
# Inspect bare repo details (HEAD, branches)
lgh repo inspect my-project
# Set default branch for bare repo
lgh repo set-default my-project main
# Check system health
lgh doctorMonitoring & Logs (v1.0.5+)
Track system activity and repository changes in real-time.
# View recent events
lgh events
# Watch for new events (like 'tail -f')
lgh events --watch
```bash
# Filter by type
lgh events --type git.pushAgent Integration (v1.1.0+)
LGH is designed to be the "source of truth" for AI Agents.
1. Real-time Subscription (Socket)
Connect to the Unix Domain Socket at ~/.localgithub/lgh.sock to receive a real-time stream of JSON events for every action (repo added, git push, etc.).
Protocol: Unix Socket, JSON Lines.
Security: Read-Only. Only the local user can connect.
2. Event Replay (Simulation) Inject past events back into the system to test your Agents without performing real Git actions.
# Replay last 10 events to all connected agents
lgh events replay --last 10
# Replay specific event types
lgh events replay --type git.pushNote: Replayed events include β_replayedβ: true in their payload.
Server Options
# Daemon mode (background)
lgh serve -d
# Read-only mode (disable push)
lgh serve --read-only
# Custom port
lgh serve --port 8080
# Enable mDNS for LAN discovery
lgh serve --mdns
# Bind to all interfaces (LAN access)
lgh serve --bind 0.0.0.0π€ MCP Quick Setup Guide
Want to connect LGH to Cursor or Claude Desktop?
Scenario 1: You already have LGH installed
Simply update your AI editor's config file (e.g., ~/.cursor/mcp.json) with:
{
"mcpServers": {
"lgh": {
"command": "lgh",
"args": ["mcp"]
}
}
}Scenario 2: You don't have LGH yet (One-Click Install)
Run this single command to install the latest binary:
curl -sSL https://raw.githubusercontent.com/JoeGlenn1213/lgh/main/install.sh | bashOnce installed, follow the "Scenario 1" step. We designed LGH as a single binary, so you don't need a separate "MCP Plugin". The lgh binary IS the MCP server!
Verify Setup
Ask your AI Agent:
"Check LGH status" If it calls
lgh_statusand responds, you're all set!
Add Repository Options
# Custom name
lgh add . --name custom-name
# Don't auto-add remote
lgh add . --no-remoteπ Authentication
Enable authentication when sharing repositories over the network:
Setup Authentication
# Interactive setup (hidden password input)
lgh auth setup
# View auth status
lgh auth status
# Generate password hash (for manual config)
lgh auth hash
# Disable auth
lgh auth disableClient Authentication
# Method 1: URL embedded credentials
git clone http://username:password@192.168.1.100:9418/repo.git
# Method 2: Use Git credential helper
git config credential.helper store
git clone http://192.168.1.100:9418/repo.git
# Enter username/password on first accessSecurity Best Practices
Scenario | Recommended Config |
Local development | Default config (127.0.0.1) |
LAN sharing |
|
Internet exposure | Reverse proxy (Caddy/Nginx) + TLS + Auth |
β οΈ Security Note: Password must be at least 8 characters. Config file stores salted hash, not plaintext.
See docs/SECURITY.md for detailed security guidelines.
ποΈ Directory Structure
~/.localgithub/
βββ config.yaml # Global config
βββ mappings.yaml # Repository mappings
βββ lgh.pid # Server PID file
βββ repos/ # Bare repository storage
βββ MyApp.git/
βββ ProjectB.git/βοΈ Configuration
~/.localgithub/config.yaml:
port: 9418
bind_address: "127.0.0.1"
repos_dir: "/Users/you/.localgithub/repos"
read_only: false
mdns_enabled: false
# Authentication (optional)
auth_enabled: true
auth_user: "git-user"
auth_password_hash: "salt:hash..."π Tunnel Feature
LGH supports multiple ways to expose your local service to the internet:
# Show all available tunnel methods
lgh tunnel
# Use ngrok
lgh tunnel --method ngrok
# Use Cloudflare Tunnel
lgh tunnel --method cloudflared
# SSH reverse proxy
lgh tunnel --method sshβ οΈ Security Note: Always enable authentication (
lgh auth setup) or use a reverse proxy before exposing to the internet.
π§ Advanced Usage
LAN Sharing (with Auth)
# 1. Setup auth
lgh auth setup
# 2. Bind to all interfaces with read-only mode
lgh serve --bind 0.0.0.0 --read-only --mdns
# 3. Access from other devices (requires auth)
git clone http://username:password@your-hostname.local:9418/repo.gitProduction Deployment (Recommended)
# 1. LGH listens on localhost only
lgh serve
# 2. Use Caddy reverse proxy + auto HTTPS
# Caddyfile:
# git.example.com {
# basicauth * {
# user $2a$14$...
# }
# reverse_proxy localhost:9418
# }CI/CD Integration
# Temporarily expose for GitHub Actions
lgh auth setup
lgh tunnel --method ngrok &
# Use ngrok URL + credentialsβοΈ Comparison with Other Solutions
Feature | LGH | GitLab | Gitea | git daemon | File Sharing |
Setup Complexity | β Single binary | β Needs database | β οΈ Needs config | β Simple | β No install |
HTTP Protocol | β | β | β | β | β |
Authentication | β Optional | β Required | β Required | β | β |
Web UI | β | β | β | β | β |
Resource Usage | β <10MB | β >1GB | β οΈ ~100MB | β <5MB | β None |
Startup Time | β <1s | β >30s | β οΈ ~10s | β <1s | β Instant |
LAN Discovery | β mDNS | β | β | β | β |
Use Case | Local/Temp | Enterprise | Team | Simple share | File transfer |
LGH's Position: Fills the gap between "simple file sharing" and "full Git platform".
π§ͺ Testing
# Run all tests
go test ./... -v
# Run integration tests
go test ./test/... -v
# Skip long-running tests
go test ./... -v -shortπ System Requirements
Go 1.23+ (for building)
Git (runtime)
macOS, Linux, or Windows
π€ Contributing
Contributions are welcome! See CONTRIBUTING.md for details.
Fork the repository
Create feature branch (
git checkout -b feature/amazing-feature)Commit changes (
git commit -m 'Add amazing feature')Push to branch (
git push origin feature/amazing-feature)Create Pull Request
π License
This project is licensed under the MIT License - see LICENSE file.
π Acknowledgments
spf13/cobra - CLI framework
spf13/viper - Configuration management
fatih/color - Terminal coloring
hashicorp/mdns - mDNS support
Available Tools
13 toolslgh_addA
Register a local Git repository with the LGH local server. Creates a bare repository under the LGH repos dir and adds an "lgh" remote pointing at it to the source repo. Initializes a git repo first if the directory is not one yet; refuses with an error if the path does not exist, the name is already registered, or a bare repo already exists at the target path. Returns the repository name and its clone URL. Use lgh_up to push subsequent commits and lgh_remove to unregister.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional custom name for the repository on LGH | |
| path | Yes | Absolute path to the LOCAL working directory containing the Git repository |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly discloses all side effects: it creates a bare repository, adds a remote, initializes a git repo if needed, and lists specific error conditions (path not exist, name already registered, bare repo already exists). It also mentions the return value (repo name and clone URL). This transparency exceeds the annotations, which only indicate it's not read-only or destructive, and aligns with the mutating nature described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but not overly verbose. It packs essential information (actions, error cases, related tools, return value) into a few sentences without redundancy. While slightly longer than necessary, the structure is logical, progressing from the main action to side effects to error handling to related guidance, which aids comprehension. It earns a 4 for being effective without being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description explicitly states what the tool returns: 'Returns the repository name and its clone URL.' It also mentions prerequisite behavior (initializes repo if needed) and error handling, covering all operational aspects. With a list of sibling tools, it provides enough context for an agent to understand the tool's role in the workflow. This is complete and self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides clear descriptions for both parameters: 'Optional custom name for the repository on LGH' and 'Absolute path to the LOCAL working directory containing the Git repository.' The description does not add significant extra meaning beyond the schema, but it does reference the 'name' in an error condition, which slightly reinforces its role. Since schema coverage is 100% and descriptions are adequate, this is a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary function: 'Register a local Git repository with the LGH local server.' It specifies the verb (register), the object (local Git repository), and the target (LGH local server), making the purpose unambiguous. It also implicitly distinguishes it from siblings by describing a unique setup action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on subsequent tool usage: 'Use lgh_up to push subsequent commits and lgh_remove to unregister.' This tells the agent when to use other tools after this one, clearly framing this as the initial registration step. It also implies that this tool is for initial setup, which distinguishes it from update/removal operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_cloneA
Clone a repository from the LGH local server into a new working directory on this machine β the restore side of the backup loop and the inverse of lgh_up. Use it to recover a working copy after data loss or to materialize an existing backup on a new machine: find the exact registered name with lgh_list, make sure the server is up (lgh_status, otherwise lgh_serve_start), then clone. The name may carry a .git suffix. Refuses with a clear error when the name is not registered, the server is not running, or the destination directory already exists and is not empty β it never overwrites existing files. Returns JSON with name, clone_url, destination (absolute path), and the checked-out branch and HEAD commit.
| Name | Required | Description | Default |
|---|---|---|---|
| dest | No | Optional destination directory (absolute path recommended; defaults to ./<name> under the MCP server's working directory) | |
| name | Yes | Name of the repository registered with LGH, with or without .git suffix (find exact names with lgh_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false, openWorldHint=false, destructiveHint=false. The description goes well beyond by disclosing refusal conditions (unregistered name, server down, non-empty destination), the no-overwrite guarantee, and the returned JSON fields (name, clone_url, destination, branch, HEAD). This is rich behavioral context the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage, then error semantics, then return shape. Dense but every clause earns its place; slightly long with multi-clause sentences, costing a point against maximal tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description compensates by naming the returned fields. Combined with prerequisites, failure modes, and no-overwrite guarantees, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are already documented in the schema, including dest defaulting and the .git suffix note. The description repeats the .git allowance without adding format or syntax beyond the schema, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (clone) plus resource (repository from LGH local server into a working directory), and immediately positions it relative to siblings: 'the restore side of the backup loop and the inverse of lgh_up.' An agent can distinguish it from lgh_up without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('recover a working copy after data loss or materialize an existing backup on a new machine') and a prerequisite chain: find the name with lgh_list, ensure server is up via lgh_status otherwise lgh_serve_start. This is exactly the routing guidance the dimensions reward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_diffARead-onlyIdempotent
Show uncommitted changes in a Git working directory: runs git diff --stat for a per-file summary plus the full unified diff, and returns JSON with has_changes, stat, diff, truncated, and staged. The full diff is truncated at 32KB to protect the caller's context. Refuses with an error when the path is not inside a git work tree. Use this to review patch content before lgh_save or lgh_up; use lgh_up_dryrun instead when you only need the changed-file list, trash detection, and LGH registration state.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path to the LOCAL working directory (defaults to current directory) | |
| staged | No | Show only staged (cached) changes (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, and idempotent behavior. The description adds critical behavioral details: truncation at 32KB to protect context and refusal outside a Git work tree. These are not inferable from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant phrasing, and the content is logically ordered: what it does, what it returns, key constraints, and when to use alternatives. Every sentence carries meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although no output schema is provided, the description lists all return fields (has_changes, stat, diff, truncated, staged) and covers the error condition (non-Git path). Combined with sibling-tool context, an agent has sufficient information to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for both parameters (path with default and staged with default). The description adds no extra semantic information beyond what the schema already states, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show'), resource ('uncommitted changes in a Git working directory'), and differentiates from the sibling lgh_up_dryrun by describing its distinct output (full diff vs. change list). This makes the tool's purpose immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use this tool ('to review patch content before lgh_save or lgh_up') and when to use an alternative ('use lgh_up_dryrun instead when you only need the changed-file list, trash detection, and LGH registration state'). No ambiguity remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_listARead-onlyIdempotent
List every Git repository registered with the LGH local server, each with its name, source_path (local working dir), bare_path, clone_url (LGH server URL), and created_at. Reads only the local registry under ~/.localgithub; no network access. Use it to discover the clone_url of an existing backup or the exact registered name required by lgh_remove. Returns a JSON array, empty when nothing is registered.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional substring filter applied to repository name or source path (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the read-only, idempotent, and non-destructive nature indicated by annotations, adding specific details like 'Reads only the local registry' and 'no network access.' It also states the return format (JSON array) and behavior when nothing is registered, making the tool's behavior transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, covering purpose, output details, and usage guidance in a few sentences without redundancy or unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool, the description provides sufficient context: what it does, what it returns, when to use it, and the local-only scope. The lack of an output schema is mitigated by the explicit mention of 'Returns a JSON array,' making the tool self-explanatory.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides a single optional parameter 'filter' with a clear description ('Optional substring filter applied to repository name or source path (case-insensitive)'). However, the tool description itself does not mention the parameter or add any extra meaning beyond the schema, so it stays at the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing every Git repository registered with the LGH local. It specifies the exact fields returned (name, source_path, bare_path, clone_url, created_at) and distinguishes it from sibling tools like lgh_add, lgh_remove, and lgh_log, which perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: discovering the clone_url of an existing backup or finding the exact registered name for lgh_remove. It also notes that the operation reads only the local registry with no network access, clarifying appropriate scenarios and contrasting with potential remote-oriented tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_logARead-onlyIdempotent
Read the LGH server's runtime log from ~/.localgithub/logs/server.jsonl and return the most recent entries as a JSON array of {ts, level, msg, component} objects (an empty array if no log file exists yet). A level filter keeps only entries at exactly that severity, so level=ERROR surfaces just the failures. Use this to investigate why a push or the server misbehaved in the past: lgh_status only shows the current health snapshot, while lgh_log shows the history that led to it.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Filter by log level (DEBUG, INFO, WARN, ERROR) | |
| limit | No | Number of log entries to return (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Descriptors in the description (reading log, empty array if no file) align with the annotations (readOnly, idempotent, not destructive). The description adds useful behavioral details about output format and empty-case handling, though it doesn't need to restate the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the core action in the first sentence, then adds the level filter and use-case context. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description explicitly defines the return shape ('JSON array of {ts, level, msg, component} objects') and the empty-array behavior. It also mentions the sibling tool lgh_status for contrast, providing enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters (level with enum values, limit with description). The description reinforces the meaning of level ('exactly that severity') and its purpose, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and a specific resource ('the LGH server's runtime log'). Clearly distinguishes from lgh_status by noting that lgh_log shows history rather than current health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use when investigating why a push or the server misbehaved in the past, and contrasts with lgh_status which shows the current health snapshot. This gives clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_removeADestructive
Unregister a repository from LGH. Deletes the bare backup repository from the LGH repos dir and removes the "lgh" remote from the local working directory; the local working tree and its git history are never touched. Fails with an error if the name is not registered. Destructive: the LGH-side backup copy and its history are permanently deleted and only come back by re-registering (lgh_add) and pushing again (lgh_up). Use lgh_list first to find the exact registered name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the repository to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses destructive behavior: permanently deletes the LGH-side backup and history, and explains recovery via lgh_add and lgh_up. It also states the local working tree and git history are never touched, providing complete transparency beyond the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct yet comprehensive, covering all essential aspectsβwhat it does, what it doesn't do, failure conditions, and recoveryβwithout unnecessary verbosity. It is well-structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description sufficiently explains side effects, failure modes, and prerequisites. It provides all necessary context for an agent to safely and correctly invoke the tool, including a clear warning about destructiveness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for 'name' is present (100% coverage), and the description adds meaningful context by emphasizing that the name must be an exact registered name and that it will error otherwise. While it doesn't specify format details, the added guidance is useful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool unregisters a repository from LGH, detailing that it deletes the bare backup repository and removes the 'lgh' remote. It distinguishes itself from sibling tools like lgh_add and lgh_up by focusing on removal, and mentions that the local working tree is untouched.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using lgh_list first to find the exact registered name, and notes that the tool fails if the name is not registered. This gives clear situational guidance and prerequisites, effectively telling when to use it relative to other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_rollbackADestructive
Roll the repository back N commits by running git reset --hard HEAD~N. Destructive: uncommitted changes and the rolled-back commits are discarded from the local branch, so run lgh_up or lgh_save first if anything there is worth keeping. With push enabled it also force-pushes the reset state to the LGH server so the backup matches; without push only the local branch moves. Returns JSON with from_commit, to_commit, rolled_back (the discarded commit's subject), and push success. Use lgh_diff or lgh_up_dryrun to inspect what would be lost before rolling back.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path to the LOCAL working directory (defaults to current directory) | |
| push | No | Force push to LGH after rollback (default: false) | |
| steps | No | Number of commits to roll back (default: 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description explicitly states that uncommitted changes and rolled-back commits are discarded, explains push behavior (force-push to LGH), and details the JSON return fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not verbose; every sentence adds critical information (action, destructiveness, push behavior, return format, and alternatives). It is well-structured and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core action, destructive consequences, push behavior, return value, and recommended pre-rollback inspection tools. No essential context is missing for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds context for push (force-push when enabled) and steps (N commits), and explains the overall effect on the repository. While the schema already covers parameter definitions, the description enriches understanding of their behavioral impact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: rolling back N commits via git reset --hard HEAD~N. It distinguishes from siblings by mentioning lgh_up and lgh_save for saving before rollback and lgh_diff/lgh_up_dryrun for inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to run lgh_up or lgh_save first if anything is worth keeping, and to use lgh_diff or lgh_up_dryrun to inspect what would be lost. This provides clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_saveA
Create a local checkpoint: ensures a .gitignore exists, then git add + git commit in the working directory WITHOUT pushing anywhere β nothing is synced to the LGH server or any other remote. Initializes git if the directory is not a repo yet, and aborts when trash detection finds blocking issues. Use this for intermediate saves; switch to lgh_up when the work should also reach the LGH backup. Returns JSON with success and a human-readable output line ("Nothing to commit, working tree clean" when there are no changes).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path to the LOCAL working directory (defaults to current directory) | |
| message | Yes | Git commit message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses all behavioral traits beyond annotations: it 'ensures a .gitignore exists', 'Initializes git if the directory is not a repo yet', 'commits locally without pushing', and returns JSON with a human-readable output line. These details are consistent with the annotations (readOnlyHint=false, destructiveHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose (four sentences) but each sentence adds essential information: action, side effects, usage guidance, and return format. It is logically structured and not redundant, meriting a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema, no nested objects), the description is complete: it covers purpose, usage, side effects, and return format. The absence of an output schema is compensated by explicitly describing the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'path' and 'message' have clear descriptions. The tool-level description adds no additional parameter-specific details beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a local checkpoint: ensures a .gitignore exists, then git add + git commit in the working directory WITHOUT pushing anywhere'. It also explicitly differentiates from lgh_up by noting 'switch to lgh_up when the work should also reach the LGH backup', making the resource and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides direct usage guidance: 'Use this for intermediate saves; switch to lgh_up when the work should also reach the LGH backup.' It also mentions when it aborts ('aborts when trash detection finds blocking issues'), giving clear conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_serve_startAIdempotent
Start the LGH HTTP server in the background by spawning "lgh serve --daemon" from the current binary. The server hosts the git endpoints that repos push to, so start it before lgh_up or before cloning from LGH. Returns the daemon's startup output, or an error with that output if the server cannot start (for example the port is already taken). Check lgh_status afterwards to confirm the PID and listen address.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Port to listen on (default: 9418) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description transparently communicates that it spawns a background daemon, returns startup output or an error (e.g., port already taken), and implies a persistent side effect. This matches the annotations (readOnlyHint=false, destructiveHint=false) and provides sufficient detail for expected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and well-structured, using two sentences to convey the core action, its context, and expected outputs. No redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It includes when to use the tool, what to expect (startup output or error), and how to verify success (lgh_status). The absence of an output schema is acceptable given the clear narrative of returned information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, port, is fully described with its default value and purpose. Schema coverage is 100%, and the description adds the default context, so no ambiguity remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (start), the resource (LGH HTTP server), and its purpose (hosts git endpoints). It distinguishes from siblings like lgh_serve_stop and lgh_status by focusing on the startup action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('before lgh_up or before cloning from LGH') and advises checking lgh_status afterwards to confirm the PID and listen address, providing clear operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_serve_stopAIdempotent
Stop the background LGH HTTP server by shutting down its PID. Registered repositories and local commits are unaffected; pushes simply fail until the server is restarted with lgh_serve_start. Returns a friendly notice instead of an error when the server is not running, so it is safe to call speculatively as a cleanup step. Takes no arguments; use lgh_status to check state first if you want to avoid a no-op call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=false, destructive=false, idempotent=true; the description adds context that repositories/commits are unaffected and that it returns a friendly notice when not running, but does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that convey purpose, safety, and return behavior with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter tool, the description covers what happens, when to use it, and what to expect (friendly notice). No output schema needed as return behavior is described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is trivially 100%. The baseline score of 4 applies and the description adds no unnecessary parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (stop) and the resource (LGH HTTP server). No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly notes it is safe to call speculatively as a cleanup step and recommends using lgh_status to avoid a no-op call, giving clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_statusARead-onlyIdempotent
Get a unified health snapshot of the LGH server and the ActionD daemon. Aggregates LGH running state, PID, listen address, registered repo count, repos dir, and read-only flag, plus the ActionD daemon's running state and PID (probed via its PID file). Takes no arguments and reads only local state, so it is safe to call at any time. Use this to answer "is LGH up?"; use lgh_log when you need the historical runtime events that led to the current state. Returns pretty-printed JSON with top-level "lgh" and "actiond" objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is transparent about the tool's behavior: it 'reads only local state,' implying no side effects, and explains how the ActionD PID is obtained ('probed via its PID file'). It also discloses the output format (pretty-printed JSON), giving the agent a clear expectation of the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, using three well-structured sentences. It front-loads the purpose, lists the aggregated data, and provides usage and output details without redundancy or unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's role in the ecosystem: it defines the health snapshot, explains the source of data (local state, PID file), specifies the return format, and explicitly contrasts with lgh_log for historical context. This is sufficient for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the description explicitly states 'Takes no arguments.' This eliminates any ambiguity about parameter usage, exceeding the baseline for parameterless tools by confirming there is nothing to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: 'Get a unified health snapshot of the LGH server and the ActionD daemon.' It enumerates the specific data points aggregated (running state, PID, listen address, etc.) and distinguishes it from the sibling tool lgh_log, making its role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly tells the agent when and how to use the tool: 'Takes no arguments' and 'safe to call at any time.' It also provides explicit selection guidance by contrasting with lgh_log for historical events, ensuring the agent chooses the correct tool for the situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_upA
One-click backup: ensures a .gitignore exists, then git add + git commit + git push to the LGH local server (localhost, NOT GitHub/GitLab). Auto-registers the repo with LGH and initializes git if needed, so it also works on a fresh directory. Aborts with an error when trash detection finds blocking issues (large files, .env secrets) unless force is set. If ActionD is running, the result includes event_id and triggered_job_ids for the CI jobs spawned by this push; use the ActionD server's dev_cycle_run tool when you need full job tracing. Returns JSON with success, output, project_type, commit, and optional triggered_job_ids.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path to the LOCAL working directory (defaults to current directory) | |
| force | No | Skip trash detection (large files, .env) and force push | |
| message | Yes | Git commit message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the full workflow (git add, commit, push), the auto-init and registration behavior, and the abort-on-trash-detection logic when force is not set. It also notes the return format and CI trigger condition. However, it does not explicitly warn about potential remote overwrite or that pushes modify the remote repository state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is unnecessarily verbose and repetitive. It restates the same information multiple times (e.g., 'one-click backup', 'auto-registers', 'trash detection') and includes tangential details about ActionD that could be condensed. A shorter version would convey the same meaning more effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the operation's side effects, error conditions, and return structure (success, output, project_type, commit, triggered_job_ids). It also explains the auto-initialization and registration behavior. It lacks only a note on typical failure modes or environmental prerequisites, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are documented in the schema with clear descriptions. The tool description adds contextual meaning, particularly for 'force' (skip trash detection) and 'message' (commit message). Since schema coverage is 100%, the description supplements rather than compensates, making this a strong but not maximal score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: a one-click backup that runs git add, commit, and push to the LGH local server. It also explicitly distinguishes LGH from GitHub/GitLab, eliminating ambiguity. The verb and resource are specific and immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives like lgh_up_dryrun or lgh_save. It mentions behavior but not selection criteria. The user is left to infer the appropriate context from the operation itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lgh_up_dryrunARead-onlyIdempotent
Dry-run preview of lgh_up without touching any state: nothing is committed, pushed, registered, or written. Reports whether the directory is a git repo, the pending changed files, LGH registration status (or the name it would auto-register as), and trash-detection results including whether lgh_up would fail and why. Call this before lgh_up whenever you are unsure what a backup would include; use lgh_diff when you want the actual patch content instead of the changed-file list. Returns a JSON object with dry_run=true.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path to the LOCAL working directory (defaults to current directory) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by enumerating exactly what the tool reports (git repo status, changed files, LGH registration status, auto-register name, trash-detection results, failure reasons) and states it returns a JSON with dry_run=true. It also reaffirms the no-side-effect guarantee ('nothing is committed, pushed, registered, or written'), matching the readOnly and idempotent hints with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient: two sentences convey the core purpose, a third gives scoping and alternatives, and a fourth states the return format. No redundant wording; every sentence serves a distinct role.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description includes all necessary context for an agent to decide when to invoke this tool: what it does, what it outputs, when to use it instead of lgh_up or lgh_diff, and its non-destructive nature. It is self-contained without needing external references.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'path' is described fully as 'Absolute path to the LOCAL working directory (defaults to current directory)', providing both meaning and default behavior. With 100% schema coverage, the parameter semantics are complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a dry-run preview of lgh_up, explicitly names the sibling tool it simulates, and differentiates it from lgh_diff by contrasting the output type. The purpose is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides direct guidance on when to use this tool ('Call this before lgh_up whenever you are unsure what a backup would include') and when to use the alternative lgh_diff for patch content instead of a changed-file list. The situational selection is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.2- Added
lgh_clone
1 tool update
v0.1.1- Changed
lgh_log1 field changed- added
Input schema / properties / level / enumAdded value: +[ + "DEBUG", + "INFO", + "WARN", + "ERROR" +]
12 tool updates
v0.1.0- First observed
lgh_add - First observed
lgh_diff - First observed
lgh_list - First observed
lgh_log - First observed
lgh_remove - First observed
lgh_rollback - First observed
lgh_save - First observed
lgh_serve_start - First observed
lgh_serve_stop - First observed
lgh_status - First observed
lgh_up - First observed
lgh_up_dryrun
TDQS
Scored across 13 tools
Most tools target distinct actions and descriptions explicitly cross-reference siblings (e.g. lgh_save vs lgh_up, lgh_diff vs lgh_up_dryrun, lgh_status vs lgh_log), so selection is clear. Minor overlap remains: lgh_up auto-registers, duplicating lgh_add, and lgh_up vs lgh_save differ only in whether a push happens.
Every tool shares the lgh_ prefix and uses snake_case, giving a predictable scheme. A few break the verb-first pattern (lgh_serve_start/lgh_serve_stop place the object first, lgh_up_dryrun appends a modifier), a small deviation but still readable.
13 tools is well-scoped for a git backup/server-management server. Each tool maps to a distinct lifecycle step (server control, registration, checkpoint/backup, inspection, recovery) and none feels redundant.
The surface covers the full loop: server start/stop/status, add/remove/list/clone, save/up/up_dryrun, diff, rollback, and log inspection. Minor gaps exist around pulling/fetching into an existing tree and branch/tag management, but core backup and restore workflows are covered.
Maintenance
Related MCP Connectors
AI-native git hosting β repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Git-backed platform for skills, tools, and context for AI agents
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
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceA lightweight MCP server that enables AI assistants to manage local Git repositories by executing commands like status, add, and commit. It streamlines development workflows by providing repository context and diffs directly to the assistant.Apache 2.0
- FlicenseNot gradedqualityDmaintenanceA local MCP server that turns AI clients into power users of local git repositories, enabling clone, browse, search, and inspect code without burning API tokens.-
- AlicenseNot gradedqualityBmaintenanceA secure and scalable Git MCP server giving AI agents powerful version control for local and (soon) serverless environments.142 npmApache 2.0
- FlicenseNot gradedqualityCmaintenanceA local-only MCP server that exposes git repository history, diffs, and status as tools for LLM clients, working entirely against a local git repo on disk.-