wt-mcp
Provides tools for managing git worktrees per product, enabling creation, listing, syncing, and removal of task-based worktrees across multiple repositories.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@wt-mcp create a worktree for TASK-123 using the fullstack preset"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
worktree-manager
CLI para gerenciar git worktrees por produto: várias tasks em paralelo, com config YAML reutilizável, cópia de arquivos/dependências e workspace Cursor/VS Code gerado automaticamente.
Binário: wt · MCP: wt-mcp · Python 3.11+
Índice
Related MCP server: batuta-mcp
Para quem é
Útil quando você:
Mantém mais de um repositório por produto (ex.: API + web, backend + mobile)
Cria uma pasta por task/ticket com worktrees git isoladas
Quer reaproveitar arquivos locais (
.env,launch.json,node_modules, etc.)Abre tudo num
.code-workspacecom pastas extras (docs, utilitários, specs)
Não é um wrapper genérico de git worktree para um único repo solto — o foco é o workspace de produto com N projetos.
Como funciona
Pasta do produto/
├── api/ ← repositório git
├── web/ ← repositório git
├── docs/ ← pasta extra no workspace
└── .worktree-manager/ ← pasta do manager
├── config.yml ← config (versionável)
├── state.yml ← estado local (não versionar)
└── worktrees/
└── TASK-123/
├── api/ ← worktree
├── web/ ← worktree
└── TASK-123.code-workspaceDois caminhos para criar tasks:
Em etapas —
create(pasta + workspace + estado) e depoisaddprojeto a projetoPreset —
create --preset …encadeia create + vários adds
A branch de trabalho default é o nome da task (--branch sobrescreve; no preset, --branch proj=b por projeto).
A base de origem é por projeto (default_base no YAML, com override via --base).
Execute os comandos na pasta base do produto (pai de
.worktree-manager/) ou dentro de.worktree-manager/.
Outro produto = outra pasta = outroinit.
Instalação
Desenvolvimento (recomendado hoje)
git clone <url-deste-repo> worktree-manager
cd worktree-manager
uv venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"
wt --versionAlternativa com pip:
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"Deixe o venv ativo (ou exponha wt no PATH) para usar em qualquer pasta de produto.
Início rápido
1. Entre na pasta do produto
cd ~/projetos/meu-produtoEstrutura mínima esperada: repositórios git lado a lado (ex.: api/, web/).
2. Inicialize a config
wt initO assistente pergunta:
Nome do produto
Loop de projetos: path → nome (default: basename) → default base
Cria .worktree-manager/config.yml (worktrees em .worktree-manager/worktrees/).
Depois edite copy, workspace_folders e presets, ou use wt projects add.
3. Complete o YAML (exemplo)
name: meu-produto
root: .
worktrees_dir: worktrees
workspace_file: "{task}.code-workspace"
workspace_folders:
- path: docs
projects:
api:
path: api
default_base: main
copy:
- from: .env.local
to: .env.local
web:
path: web
default_base: main
copy:
- from: node_modules
to: node_modules
strategy: rsync
presets:
backend: [api]
frontend: [web]
fullstack: [api, web]Veja o schema completo em docs/configuracao.md e exemplos em docs/exemplos/.
4. Crie uma task
Rápido (preset):
wt create TASK-123 --preset fullstack --open
# ou com branches explícitas:
wt create TASK-123 --preset fullstack --branch feature/TASK-123 --openEm etapas:
wt create TASK-123
wt add TASK-123 api
wt add TASK-123 web --base develop
wt open TASK-1235. Gerencie
wt list
wt status TASK-123
wt sync TASK-123
wt doctor
wt doctor --fix
wt prune
wt remove TASK-123 --forceFluxos de trabalho
Só um projeto da stack
wt create TASK-10 --preset backendComeçar parcial e evoluir
wt create TASK-11
wt add TASK-11 api --branch feature/TASK-11
# ... trabalhar só na API ...
wt add TASK-11 web --branch feature/TASK-11Branches e bases diferentes por projeto no mesmo preset
wt create TASK-12 \
--preset fullstack \
--branch api=feature/TASK-12-api \
--branch web=feature/TASK-12-ui \
--base api=main \
--base web=developSimular antes de executar
wt create TASK-13 --preset fullstack --dry-run
wt add TASK-13 api --dry-run
wt remove TASK-13 --force --dry-run
wt sync TASK-13 --dry-runRemover um projeto sem apagar a task
wt remove TASK-12 web --forceRemover tudo (e opcionalmente a branch local)
wt remove TASK-12 --force --delete-branchComandos
Comando | Descrição |
| Cria |
| Cria task vazia (pasta + workspace + estado) |
| Create + adds do preset |
| Adiciona projeto à task (branch default = task) |
| Remove projeto da task ou a task inteira |
| Lista tasks do estado |
| Lista projetos do |
| Adiciona projeto à config (nome default = basename) |
| Remove projeto da config |
|
|
| Fetch + rebase/merge na base registrada |
| Abre o |
| Diagnóstico; |
| Limpa órfãos e ghosts |
| Ajuda detalhada |
| Ajuda curta e versão |
Opções úteis:
Opção | Onde | Efeito |
|
| Branch de trabalho (default: nome da task) |
|
| Branch por projeto (repetível) |
|
| Base de origem (senão usa |
|
| Override de base por projeto |
|
|
|
|
| Abre o workspace ao terminar |
|
| Apaga a branch local criada |
|
| Mostra o plano sem alterar nada |
|
| Confirma remoção / permite dirty no sync |
Referência detalhada: docs/comandos.md.
Configuração
Arquivo: .worktree-manager/config.yml.
Campo | Obrigatório | Default | Descrição |
| sim | — | Nome do produto |
| não |
| Raiz relativa ao produto (pai de |
| não |
| Pasta das tasks (relativa a |
| não |
| Nome do workspace gerado |
| não |
| Pastas extras no workspace |
| sim | — | Path do repositório (relativo à raiz do produto) |
| sim | — | Branch de origem padrão |
| não |
| Arquivos/pastas a copiar no |
| não |
|
|
| não |
| Nome → lista de ids de projeto |
Não existem allowed_bases nem pattern automático de branch.
Guia completo do schema, init e estado: docs/configuracao.md.
Estado
Arquivo local: .worktree-manager/state.yml.
Config | Estado | |
Responde | O que pode ser feito | O que já existe |
Versionar? | Sim ( | Não |
Quem escreve |
| Só o CLI |
Sugestão de .gitignore no produto:
.worktree-manager/state.ymlO wt doctor compara estado, pastas em disco e git worktree list (órfãos, drift de branch, worktrees fantasma, etc.).wt doctor --fix e wt prune corrigem o que for seguro; wt sync atualiza as branches da task com a base.
MCP para agentes
O servidor wt-mcp expõe as mesmas operações da CLI via Model Context Protocol (stdio), para agentes Cursor (e outros clientes MCP) criarem/listarem/sincronizarem tasks sem parsear stdout.
Pré-requisito: pacote instalado (uv tool install --editable . ou uv pip install -e .) e wt-mcp no PATH (which wt-mcp).
Adicionar no Cursor
Abra Cursor Settings → MCP (ou edite o JSON de MCP).
Inclua o servidor abaixo.
Salve e confirme que
worktree-manageraparece como conectado (tools disponíveis no chat/agente).
Global (~/.cursor/mcp.json):
{
"mcpServers": {
"worktree-manager": {
"command": "wt-mcp",
"args": []
}
}
}Só neste repo (.cursor/mcp.json na raiz do projeto):
{
"mcpServers": {
"worktree-manager": {
"command": "wt-mcp",
"args": []
}
}
}Se wt-mcp não estiver no PATH, use o caminho absoluto do venv:
{
"mcpServers": {
"worktree-manager": {
"command": "/caminho/para/worktree-manager/.venv/bin/wt-mcp",
"args": []
}
}
}Uso pelo agente
Passe
product_root(path absoluto da pasta do produto) quando o cwd do agente não for o produto.Respostas:
{ "ok": true, "data": … }ou{ "ok": false, "error": { "kind", "message" } }.Ações destrutivas (
remove,prune,doctorcomfix) exigemconfirm=true(oudry_run=truepara simular).
Tool | Equivale a |
| inventário |
|
|
|
|
|
|
|
|
| path do workspace / |
Skill opcional (orquestra MCP ou CLI): .cursor/skills/worktree-manager/.
Detalhes e contrato de erro: docs/mcp.md.
Vários produtos
Cada produto tem sua própria pasta .worktree-manager/:
ProdutoA/
├── api/
└── .worktree-manager/
├── config.yml
└── worktrees/
ProdutoB/
├── backend/
├── mobile/
└── .worktree-manager/
├── config.yml
└── worktrees/cd ~/projetos/ProdutoA && wt init
cd ~/projetos/ProdutoB && wt initDocumentação
Documento | Conteúdo |
Porta de entrada (este arquivo) | |
Schema YAML, init, estado | |
Referência detalhada dos comandos | |
Servidor MCP ( | |
YAMLs de exemplo (genérico + casos) | |
Caso: migrar script legado Clinic → | |
Histórico de fases / backlog interno |
Exemplos prontos para copiar:
# stack API + web (genérico)
mkdir -p /caminho/do/produto/worktree-manager
cp docs/exemplos/api-web.yml /caminho/do/produto/.worktree-manager/config.yml
# caso Clinic (referência)
mkdir -p /caminho/do/Clinic/worktree-manager
cp docs/exemplos/clinic.yml /caminho/do/Clinic/.worktree-manager/config.ymlSkill opcional do Cursor (orquestra MCP/wt, sem reimplementar lógica):.cursor/skills/worktree-manager/
Desenvolvimento
source .venv/bin/activate
uv pip install -e ".[dev]"
pytest
wt --help
wt-mcp # sobe o servidor MCP em stdio (usado pelo Cursor)Layout do pacote:
src/worktree_manager/
├── cli/ # comandos Typer
├── config/ # load/validate/write YAML
├── state/ # estado local
├── git/ # operações git
├── workspace/ # geração .code-workspace
├── mcp/ # servidor MCP (wt-mcp)
├── copyops.py # cópias declarativas
└── services.py # create/add/remove/sync/doctor/prunePlano e backlog: docs/plano-desenvolvimento.md.
Licença
MIT (ver pyproject.toml).
Available Tools
13 toolsadd_projectB
Adiciona um projeto (pelo nome da config) a uma task existente.
Inputs: task (required), project (required), base, branch, +2 more. Returns: object
create_taskB
Cria uma task vazia (pasta + workspace + estado), sem worktrees git.
Inputs: task (required), dry_run, product_root. Returns: object
create_with_presetC
Cria task e adiciona os projetos do preset (branch default = nome da task).
Inputs: task (required), preset (required), branch, dry_run, +3 more. Returns: object
doctorC
Diagnostica inconsistências; com fix=true tenta corrigir (exige confirm).
Inputs: fix, confirm, dry_run, product_root. Returns: object
list_projectsB
Lista projetos configurados no config.yml.
Inputs: product_root. Returns: object
list_tasksC
Lista tasks do estado (empty/ready/broken) com projetos e branches.
Inputs: product_root. Returns: object
open_workspaceC
Abre o .code-workspace no Cursor/VS Code.
Inputs: task (required), product_root. Returns: object
pruneA
Remove pastas órfãs e worktrees git fantasma. Exige confirm=true (ou dry_run).
Inputs: confirm, dry_run, product_root. Returns: object
removeC
Remove um projeto da task ou a task inteira. Exige confirm=true (ou dry_run).
Inputs: task (required), confirm, dry_run, project, +2 more. Returns: object
resolve_productC
Resolve o produto e resume name, projects, presets e tasks.
Inputs: product_root. Returns: object
statusB
Retorna git status (linhas) de cada projeto da task.
Inputs: task (required), product_root. Returns: object
syncC
Fetch + rebase/merge na base registrada de cada projeto da task.
Inputs: task (required), force, dry_run, project, +2 more. Returns: object
workspace_pathA
Retorna o path do .code-workspace da task (não abre o editor).
Inputs: task (required), product_root. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Most tools have clear, distinct purposes: listing, creating, syncing, removing, and diagnosing. Minor overlap exists between create_task and create_with_preset, and between remove and add_project, but descriptions clarify the differences.
Names mix styles: some are verb_noun (list_tasks, create_task), while others are bare verbs (sync, remove, status, prune) or noun-ish (workspace_path, open_workspace). This inconsistency makes it less predictable, though still readable.
With 13 tools, the server is well-scoped for managing development tasks and projects. Each tool addresses a distinct need without being overwhelming.
The tool surface covers core lifecycle operations: create, list, resolve, add, remove, sync, status, and maintenance. Minor gaps exist (e.g., no explicit update/rename task), but the set is sufficient for the domain.
Maintenance
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server that gives AI agents deep code understanding across multiple git repositories, combining git lifecycle management, Zoekt-based trigram code search, and cross-repo dependency analysis.MIT
- AlicenseNot gradedqualityFmaintenanceMCP server that decomposes tasks into plans with disjoint file boundaries, validates overlaps, and creates git worktrees with a ready prompt per plan.398 npmApache 2.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that wraps git-worktree-runner to enable AI agents to manage git worktrees safely.Apache 2.0
- AlicenseAqualityDmaintenanceA filesystem-based MCP server for AI coding agents to coordinate work across git worktrees by claiming files, checking for conflicts, and logging progress without affecting the repository's git history.5MIT