# Gitopia MCP Server
MCP server for [Gitopia](https://gitopia.com) — decentralized Git with on-chain governance, bounties, and DAO management. Works with Cursor, VS Code, Claude Code, Claude Desktop, Windsurf, and any MCP-compatible tool.
**57 tools** | **3 prompts** | **4 resource templates**
Zero-config start: a wallet is auto-generated on first use. No setup beyond pasting a config snippet.
## Quick Start
### Docker (Recommended)
```bash
docker pull ghcr.io/gitopia/gitopia-mcp-server:latest
```
Then add the config for your editor (see [Editor Setup](#editor-setup) below).
### Native Binary
Download from [GitHub Releases](https://github.com/gitopia/gitopia-mcp-server/releases), or:
```bash
go install github.com/gitopia/gitopia-mcp-server/cmd/server@latest
```
Requires Go 1.25+ and [git-remote-gitopia](https://docs.gitopia.com/git-remote-gitopia) (`curl https://get.gitopia.com | bash`).
## Editor Setup
OpenAI Codex
```bash
codex mcp add gitopia -- docker run --rm -i --platform linux/amd64 \
-v "${HOME}/.mcp/gitopia:/home/mcp/.mcp/gitopia" \
-e MCP_WORKSPACE_PATH=/home/mcp/.mcp/gitopia/workspace \
ghcr.io/gitopia/gitopia-mcp-server:latest stdio
```
Or add to `~/.codex/config.toml`:
```toml
[mcp_servers.gitopia]
command = "docker"
args = [
"run", "--rm", "-i", "--platform", "linux/amd64",
"-v", "${HOME}/.mcp/gitopia:/home/mcp/.mcp/gitopia",
"-e", "MCP_WORKSPACE_PATH=/home/mcp/.mcp/gitopia/workspace",
"ghcr.io/gitopia/gitopia-mcp-server:latest", "stdio"
]
```
[Full Codex guide](docs/installation-guides/codex.md)
Claude Code
Add to your project's `.mcp.json`:
```json
{
"mcpServers": {
"gitopia": {
"command": "docker",
"args": [
"run", "--rm", "-i", "--platform", "linux/amd64",
"-v", "${HOME}/.mcp/gitopia:/home/mcp/.mcp/gitopia",
"-v", "${PWD}:/workspace", "-w", "/workspace",
"-e", "MCP_WORKSPACE_PATH=/workspace",
"ghcr.io/gitopia/gitopia-mcp-server:latest", "stdio"
],
"env": {}
}
}
}
```
[Full Claude Code guide](docs/installation-guides/claude-code.md)
Cursor
Add to `~/.cursor/mcp.json` (macOS) or `%APPDATA%\Cursor\mcp.json` (Windows):
```json
{
"mcpServers": {
"gitopia": {
"command": "docker",
"args": [
"run", "--rm", "-i", "--platform", "linux/amd64",
"-v", "${HOME}/.mcp/gitopia:/home/mcp/.mcp/gitopia",
"-v", "${workspaceFolder}:/workspace", "-w", "/workspace",
"-e", "MCP_WORKSPACE_PATH=/workspace",
"ghcr.io/gitopia/gitopia-mcp-server:latest", "stdio"
],
"env": {}
}
}
}
```
[Full Cursor guide](docs/installation-guides/cursor.md)
VS Code
[Full VS Code guide](docs/installation-guides/vscode.md)
Windsurf
[Full Windsurf guide](docs/installation-guides/windsurf.md)
Claude Desktop
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
```json
{
"mcpServers": {
"gitopia": {
"command": "docker",
"args": [
"run", "--rm", "-i", "--platform", "linux/amd64",
"-v", "${HOME}/.mcp/gitopia:/home/mcp/.mcp/gitopia",
"-e", "MCP_WORKSPACE_PATH=/home/mcp/.mcp/gitopia/workspace",
"ghcr.io/gitopia/gitopia-mcp-server:latest", "stdio"
],
"env": {}
}
}
}
```
**Using an existing wallet?** Set `GITOPIA_MNEMONIC` in your shell, then add `"-e", "GITOPIA_MNEMONIC"` to the Docker args. Never hardcode mnemonics in config files.
## Tools (57)
### Context Management (4)
| Tool | Description |
|------|-------------|
| `get_user_context` | Get current identity, address, and available DAOs |
| `set_active_dao` | Switch operations to a DAO context |
| `refresh_user_context` | Reload user info from chain |
| `claim_fee_grant` | Claim fee grant from faucet |
### User Management (1)
| Tool | Description |
|------|-------------|
| `create_user` | Create on-chain Gitopia user for wallet |
### Repository Management (7)
| Tool | Description |
|------|-------------|
| `list_repos` | List repositories for owner |
| `create_repo` | Create remote repository |
| `get_repo` | Get repository details |
| `list_branches` | List branches |
| `get_file_contents` | Read file without cloning |
| `fork_repository` | Fork a repository |
| `toggle_repository_forking` | Enable/disable forking |
### Tags, Commits, Releases (4)
| Tool | Description |
|------|-------------|
| `list_tags` | List version tags |
| `list_commits` | Browse commit history for a branch |
| `list_releases` | List published releases |
| `create_release` | Publish a new release |
### Issue Management (5)
| Tool | Description |
|------|-------------|
| `list_issues` | List issues |
| `get_issue` | Get full issue details |
| `create_issue` | Create issue (on-chain) |
| `comment_on_issue` | Comment on issue (on-chain) |
| `update_issue` | Update state, labels, assignees |
### Pull Request Management (6)
| Tool | Description |
|------|-------------|
| `list_pull_requests` | List PRs |
| `get_pull_request` | Get full PR details |
| `get_pull_request_diff` | Get unified diff for a PR |
| `create_pull_request` | Create PR (on-chain) |
| `comment_on_pull_request` | Comment on PR (general or inline) |
| `merge_pull_request` | Merge PR (on-chain) |
### Git Operations (5)
| Tool | Description |
|------|-------------|
| `git_clone` | Clone repository to workspace |
| `git_push` | Push commits to remote |
| `create_feature_branch` | Create and checkout new branch |
| `sync_with_remote` | Fetch and merge/rebase |
| `commit_and_push_changes` | Stage + commit + push in one step |
### Workflow Orchestration (3)
| Tool | Description |
|------|-------------|
| `bootstrap_repo` | Create remote + local init + files + push |
| `create_feature_branch_pr` | Branch + changes + commit + push + PR |
| `update_feature_branch` | Add commits to existing branch/PR |
### Label Management (3)
| Tool | Description |
|------|-------------|
| `list_labels` | List repository labels |
| `create_label` | Create label (on-chain) |
| `delete_label` | Delete label (on-chain) |
### DAO & Governance (9)
| Tool | Description |
|------|-------------|
| `get_dao` | Get DAO details including group_id and group_policy_address |
| `create_dao` | Create DAO with members and voting |
| `dao_list_members` | List DAO members and weights |
| `dao_list_proposals` | List governance proposals |
| `dao_get_proposal` | Get proposal details with tally |
| `dao_update_members` | Add/remove/change member weights |
| `dao_submit_proposal` | Create governance proposal |
| `dao_vote` | Vote on proposal |
| `dao_exec` | Execute passed proposal |
### Bounty Management (6)
| Tool | Description |
|------|-------------|
| `list_bounties` | Discover bounties |
| `get_bounty` | Get bounty details |
| `create_bounty` | Attach crypto reward to issue |
| `update_bounty` | Modify bounty expiry |
| `close_bounty` | Deactivate bounty |
| `delete_bounty` | Permanently remove bounty |
### Batch & Approval (4)
| Tool | Description |
|------|-------------|
| `batch_execute` | Execute up to 10 ops in one transaction |
| `confirm_transaction` | Broadcast pending transaction |
| `reject_transaction` | Cancel pending transaction |
| `list_pending_transactions` | List pending transactions |
## Prompts
| Prompt | Description |
|--------|-------------|
| `fix-issue` | Complete workflow: clone, branch, fix, test, PR |
| `review-pr` | Review a pull request: inspect, comment, approve |
| `hunt-bounty` | Discover bounties, evaluate, claim, fix, submit |
## Security
- **Trust tiers** gate tool access: `readonly` < `localwrite` < `chainwrite`
- **Rate limiting** on chain-write operations (default 10/min, 100/hr)
- **Message allowlist** only signs `/gitopia.gitopia.gitopia.*` and `/cosmos.group.v1.*`
- **Workspace isolation** blocks path traversal attacks
- **Approval mode** holds transactions for explicit confirmation before broadcast
- **Non-root Docker** containers run as unprivileged user
See [SECURITY.md](SECURITY.md) for vulnerability reporting.
## Configuration
| Variable | Default | Description |
|----------|---------|-------------|
| `GITOPIA_MNEMONIC` | auto-generated | BIP-39 wallet mnemonic |
| `GITOPIA_GRPC_ENDPOINTS` | `gitopia-grpc.polkachu.com:11390` | gRPC endpoints |
| `TRUST_LEVEL` | `chainwrite` | `readonly`, `localwrite`, `chainwrite` |
| `TOOLSETS` | `all` | Comma-separated toolsets to enable (see below) |
| `DRY_RUN` | `false` | Preview transactions without broadcasting |
| `APPROVAL_MODE` | `false` | Require confirmation before chain writes |
| `MCP_WORKSPACE_PATH` | `~/.mcp/gitopia/workspace` | Workspace root |
| `MCP_LOG_LEVEL` | `info` | Log level |
| `TRANSPORT` | `stdio` | `stdio` or `http` |
| `PORT` | `8080` | HTTP listen port (when TRANSPORT=http) |
See [env.example](env.example) for the full list.
### Toolsets
Control which tools are exposed to the MCP client. Useful for reducing context window usage in AI assistants.
| Toolset | Tools | Description |
|---------|-------|-------------|
| `core` | 52 | All tools except workflow orchestrators (always included) |
| `workflow` | 5 | `bootstrap_repo`, `create_feature_branch`, `create_feature_branch_pr`, `update_feature_branch`, `commit_and_push_changes` |
- `TOOLSETS=all` (default): All 57 tools
- `TOOLSETS=core`: 52 tools (hides workflow orchestrators)
- `TOOLSETS=core,workflow`: Same as `all`
For Claude Code users, `TOOLSETS=core` is recommended since Claude can orchestrate git operations natively.
## Development
```bash
go build ./cmd/server # build
go test ./... # test
go vet ./... # lint
docker build -t gitopia-mcp-server:latest . # docker
```
See [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines.
## License
[MIT](LICENSE)