HG Server
FreeNot checkedEnables AI assistants to interact with Mercurial repositories, supporting version control operations like cloning, committing, branching, merging, and remote sy
About
Enables AI assistants to interact with Mercurial repositories, supporting version control operations like cloning, committing, branching, merging, and remote synchronization through natural language.
README
A Model Context Protocol (MCP) server for Mercurial repository interaction, written in Python 3.10+ with AsyncIO.
Features
Core Version Control
- Repository Creation: Create new repositories (
hg_init) or clone existing ones (hg_clone) - Status & Diff: View working directory status (
hg_status) and line-by-line changes (hg_diff) - Commit Management: Add files (
hg_add), commit changes (hg_commit), remove files (hg_remove), and amend the last commit (hg_amend) - Stashing: Temporarily shelve changes (
hg_shelve) and restore them (hg_unshelve) - File Inspection: View file content at any revision (
hg_cat) and rename or move files (hg_rename)
Branching & Navigation
- Navigation: Update to any revision, branch, or bookmark (
hg_update) - Named Branches: Create and list permanent Mercurial branches (
hg_branch) - Bookmarks: Manage lightweight, Git-like pointers (
hg_bookmark,hg_bookmarks) - Advanced Topics: WIP feature isolation with lightweight branches (
hg_topic,hg_topics,hg_topic_current) - Phases: Manage changeset phases for safe history rewriting (
hg_phases) - Tags: Create, remove, and list repository tags (
hg_tag,hg_tags)
Remote Synchronization
- Push/Pull: Sync changes with remote repositories (
hg_push,hg_pull) - Remote Insights: Preview incoming or outgoing changesets (
hg_incoming,hg_outgoing) - Path Management: List and manage configured remote paths (
hg_paths) - Branch Heads: Identify branch heads across the repository (
hg_heads)
History Rewriting & Recovery
- Rebase & Strip: Move changesets (
hg_rebase) or permanently remove them (hg_strip) - Evolve Toolset: Auto-amend (
hg_absorb), fold changesets (hg_fold), split changesets (hg_split), uncommit (hg_uncommit), prune (hg_prune), rewind for undo (hg_rewind), edit metadata (hg_metaedit) - Stack Navigation: Move through topic stacks (
hg_next,hg_previous,hg_stack) - Interactive Editing: Modify a linear series of changesets non-interactively (
hg_histedit) - Graft & Transplant: Copy changesets via merge machinery (
hg_graft) or patch-based (hg_transplant) - Backout: Reverse the effects of earlier changesets (
hg_backout) - Evolve: Track the evolution of rewritten changesets (
hg_evolve)
Merge & Conflict Resolution
- Merging: Combine changes from different branches (
hg_merge) - Conflict Management: List and track files with unresolved merge conflicts (
hg_resolve) - Revert: Discard uncommitted changes and restore files to their last committed state (
hg_revert)
Repository Inspection & Diagnostics
- Blame/Annotate: Show line-by-line changeset information (
hg_annotate) - Bisect: Binary search for regression-introducing changesets (
hg_bisect) - File Listing: List all tracked files in the current revision (
hg_files) - State Summary: Get a concise summary of the working directory state (
hg_summary) - Integrity & Identity: Verify repository integrity (
hg_verify) and identify the current revision (hg_identify) - Patch Management: Export changesets as patches (
hg_export) or import patch files (hg_import)
Technical Features
- Async I/O: Asynchronous command execution for high-performance operations
- Git Integration (hg-git): Automatic detection of Git-backed repos and branch mapping (
hg_git) - HTTP Transports: Streamable HTTP and SSE support for web-based clients (e.g., llama.cpp WebUI)
- Security: Jail path restriction (required for HTTP) and secure API key authentication
- JSON Output: Automatic JSON formatting for 20+ commands for easy machine parsing
- Large File Support: Management of binaries outside normal history (
hg_largefiles) - Diagnostics & Help: List extensions (
hg_extensions), config (hg_config), and access built-in help (hg_help) - Reliability: 349 tests with 87% coverage, using tmpfs on Linux for extremely fast verification
- 62 MCP Tools: Comprehensive coverage of Mercurial 7.1.x standard commands and built-in extensions
Installation
# Clone the repository
git clone <repository-url>
cd hg-mcp
# Create and activate virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install in editable mode
pip install -e .
# Optional: Install with performance enhancements
pip install uvloop # On Unix/macOS
pip install winloop # On Windows
Usage
Standard Input/Output (stdio) - Default Mode
# Activate your virtual environment first
source .venv/bin/activate # On Windows: .venv\Scripts\activate
hg-mcp
This starts the MCP server using stdio transport, which can be used with MCP clients like Claude for Desktop, Qwen-Coder, Gemini-CLI, and OpenCode.
HTTP Transport (SSE and/or Streamable HTTP)
For web-based MCP clients like llama.cpp WebUI, you can run the server with HTTP transport:
# SSE only (compatible with llama.cpp WebUI)
hg-mcp --transport sse --port 8000
# Streamable HTTP only
hg-mcp --transport streamable-http --port 8000
# Both SSE and Streamable HTTP on the same server
hg-mcp --transport sse streamable-http --port 8000
Endpoints:
- SSE:
http://localhost:8000/sse - Streamable HTTP:
http://localhost:8000/mcp
Options:
--transport: One or more transport protocols (stdio,sse,streamable-http)- Default:
stdio - Multiple values:
--transport sse streamable-http
- Default:
--port: Port to listen on (default: 8000)--host: Host to bind to (default: 0.0.0.0)--api-key: Optional. Enable mandatory API key authentication. When set, clients must provide this key in their request headers.--jail: Required for HTTP transports. Restrict repository access to this directory tree for security.--mercurial: Optional. Path to the Mercurial (hg) executable. Defaults tohg(resolved from PATH). Example:--mercurial /usr/local/bin/hg
Security Features
When exposing the MCP server over TCP/IP, two security mechanisms are available:
1. Jail Path Restriction (--jail)
Required for all HTTP transports. This restricts repository access to a specific directory tree, preventing unauthorized access to paths outside the jail:
# Restrict access to /home/user/projects and its subdirectories
hg-mcp --transport streamable-http --port 8000 --jail /home/user/projects
2. API Key Authentication (--api-key)
Optional. You can require clients to authenticate by providing a valid API key. When this option is enabled, the server will reject any request that does not include a matching X-API-Key or API-Key header:
# Enable mandatory API key authentication
hg-mcp --transport streamable-http --port 8000 --jail /home/user/projects --api-key your-secret-key
Integration with AI Assistants
To use this MCP server with your AI coding assistant, point to the correct executable path in your virtual environment.
Configuration Examples
Claude Desktop / Qwen-Coder / Gemini-CLI
{
"mcpServers": {
"hg-mcp": {
"command": "/path/to/your/venv/bin/hg-mcp"
}
}
}
OpenCode
{
"mcp": {
"hg-mcp": {
"type": "local",
"command": ["/path/to/your/venv/bin/hg-mcp"],
"enabled": true
}
}
}
Requirements
- Python 3.10+
- Mercurial installed and available in PATH
- MCP-compatible client
Development
Running Tests
# Install development dependencies
pip install -e ".[dev]"
# Run all tests with coverage
./scripts/runtest.sh
Code Quality
# Run linting
./scripts/lint-check-and-fix.sh
# Run type checking
./scripts/type-check.sh
# Run formatter
./scripts/code-format.sh
Acknowledgments
This project is inspired by mcp-server-mercurial.
Install HG Server in Claude Desktop, Claude Code & Cursor
unyly install hg-mcp-serverInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add hg-mcp-server -- uvx hg-mcpFAQ
Is HG Server MCP free?
Yes, HG Server MCP is free — one-click install via Unyly at no cost.
Does HG Server need an API key?
No, HG Server runs without API keys or environment variables.
Is HG Server hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install HG Server in Claude Desktop, Claude Code or Cursor?
Open HG Server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
by modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
by xuzexin-hzCompare HG Server with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All ai MCPs
