spec-forge
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., "@spec-forgeGet the next implementation task for the current feature"
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.
Spec-Forge
github.com/rafaelandrade74/spec-forge
MCP server + roadmap de especificações estilo spec-kit, com constitution → specify → clarify → plan → tasks → analyze persistidos em PostgreSQL. O implement fica fora do sistema: uma sessão de implementação (Claude Code ou outra IA) consome os itens já refinados via a tool MCP get_next_task. Ao concluir todas as tasks de uma feature, o sistema gera automaticamente a documentação final (banco + arquivo markdown no repo, com o ID único da feature).
Veja "Estrutura" mais abaixo para como o monorepo está organizado.
Setup
git clone https://github.com/rafaelandrade74/spec-forge.git
cd spec-forge
pnpm install
docker compose up -d # sobe Postgres local na porta 5433
pnpm db:generate # gera migrations a partir do schema (packages/db)
pnpm db:migrate # aplica migrationsVariável de ambiente DATABASE_URL (opcional, default aponta para o docker-compose local):
DATABASE_URL=postgres://spec_forge:spec_forge@localhost:5433/spec_forgeRelated MCP server: odin
Subir tudo de uma vez (Postgres + MCP + Web UI)
pnpm devSobe o Postgres local (docker compose up -d), o servidor MCP em modo HTTP (:8787) e a Web UI
(:3000) juntos, com logs coloridos por serviço no mesmo terminal. Ctrl+C encerra os dois. Use
isso quando quiser registrar o MCP no Claude Code apontando para http://localhost:8787/mcp (gere
o token em /tokens na Web UI) em vez de rodar via stdio.
Rodar o servidor MCP sozinho (stdio, para o Claude Code gerenciar o processo)
pnpm mcp:devCom --scope user (disponível em qualquer sessão do Claude Code, não só dentro deste repo) o
caminho precisa ser absoluto — rode a partir da raiz do seu checkout:
claude mcp add --scope user spec-forge -- npx tsx "$(pwd)/apps/mcp-server/src/index.ts"No PowerShell: claude mcp add --scope user spec-forge -- npx tsx "$PWD\apps\mcp-server\src\index.ts".
Se preferir essa config versionada só neste repo (.mcp.json, caminho relativo funciona), use
--scope project em vez de --scope user. Em qualquer um dos casos, dá pra apontar para o build
(pnpm --filter @spec-forge/mcp-server build) em vez de tsx, usando node .../apps/mcp-server/dist/index.js.
Testar o ciclo ponta a ponta sem UI
pnpm mcp:e2eExecuta localmente todo o fluxo create_project → set_constitution → create_feature → specify → clarify → plan → generate_tasks → analyze → mark_feature_ready → get_next_task → report_task_progress, e confirma a geração da documentação final em docs/features/<slug>.md no repo apontado por repoPath.
Rodar a Web UI
pnpm web:devAbre em http://localhost:3000 (ou porta configurada). Telas: dashboard de projetos, roadmap por status
(board), constitution, detalhe da feature (specification/clarifications/plan/tasks/analysis/histórico +
"Mark as Ready"), e fila de implementação. A UI usa Server Actions que chamam packages/core diretamente —
mesmo estado que o servidor MCP lê/escreve.
Deploy no homelab (servidor remoto + autenticação por token)
Além do modo stdio local, o servidor MCP tem um modo HTTP (Streamable HTTP) protegido por bearer token, pensado para rodar 24/7 no homelab e ser acessado de qualquer máquina — não só do PC onde o Postgres está.
1. Gerar um token
Via Web UI (recomendado): abra /tokens na Web UI (pnpm web:dev, ou a URL do homelab depois
do deploy), dê um nome ao token (ex. o nome da máquina) e clique em "Gerar token". A página já
mostra o comando claude mcp add pronto — com a URL do servidor MCP e o token no header de
autenticação — para você copiar e colar direto no terminal onde roda o Claude Code. Ajuste o campo
"URL do servidor MCP" se estiver gerando o comando de uma máquina diferente de onde o servidor
está publicado.
Via CLI (alternativa, sem precisar da Web UI no ar):
cd apps/mcp-server
DATABASE_URL="postgres://spec_forge:spec_forge@localhost:5433/spec_forge" pnpm token:create "meu-laptop"Em ambos os casos, o token em texto plano só é mostrado uma única vez (formato sf_...) — copie e guarde (ex.: no
gerenciador de senhas). O banco só guarda o hash SHA-256, nunca o valor original. Outros comandos:
pnpm token:list # lista tokens (sem expor o valor), status e último uso
pnpm token:revoke <id> # revoga um token (não deleta o histórico de uso)2. Subir no homelab via Docker
cp .env.prod.example .env # edite POSTGRES_PASSWORD com uma senha forte
docker compose -f docker-compose.prod.yml up -d --buildIsso sobe três serviços: postgres (só na rede interna do compose), mcp-server (HTTP na porta
8787) e web (porta 3000). Coloque um reverse proxy com TLS na frente (Caddy/Traefik/nginx — o que
você já usa no seu docker-services) apontando para mcp-server:8787/mcp e web:3000; não exponha
essas portas diretamente à internet sem TLS.
Um serviço migrate (one-shot, roda e sai — não fica de pé) aplica as migrations sozinho antes de
qualquer outro serviço subir; mcp-server e web esperam ele terminar com sucesso
(condition: service_completed_successfully) antes de iniciar. Isso evita uma race condition: sem
essa espera, mcp-server e web sobem em paralelo assim que o Postgres fica saudável, e como os
dois consultam o banco direto, um dos dois podia bater numa tabela que ainda não existia. Nenhum
passo manual necessário pra isso. O que ainda é manual, de propósito, é criar o primeiro token: abra a Web UI publicada (/tokens) e siga o
passo 1 acima — token não é algo que faça sentido gerar sozinho a cada boot do container.
Usando um Postgres que você já tem (em vez de subir um novo)
Se você já mantém um Postgres próprio (ex.: docker-services/postgres), use
docker-compose.external-db.yml no lugar de docker-compose.prod.yml — ele não define serviço de
postgres, só migrate, mcp-server e web, todos apontando para DATABASE_URL:
cp .env.prod.example .env
# edite o .env: comente/apague POSTGRES_PASSWORD e defina DATABASE_URL apontando
# pro seu Postgres existente, ex.:
# DATABASE_URL=postgres://spec_forge:sua-senha@host.docker.internal:5432/spec_forge
docker compose -f docker-compose.external-db.yml up -d --buildDuas coisas ficam por sua conta nesse modo:
Criar o database. O
migratesó aplica as migrations dentro de um database que já exista — crie o database (ex.spec_forge) e o usuário/senha no seu Postgres antes de subir.Alcançar o host. Como o Postgres não está na mesma rede do compose do spec-forge, os containers falam com ele pela porta publicada no host: no Docker Desktop (Windows/Mac),
host.docker.internaljá resolve para o host; no Linux, adicioneextra_hosts: ["host.docker.internal:host-gateway"]aos serviços emdocker-compose.external-db.yml(ou use o IP da rede local do host diretamente).
3. Registrar no Claude Code (de qualquer máquina)
claude mcp add --scope user --transport http spec-forge https://seu-dominio.exemplo/mcp \
--header "Authorization: Bearer sf_SEU_TOKEN_AQUI"Repita esse comando em cada máquina de onde você for usar o Claude Code (casa, trabalho, notebook) —
todas apontam para o mesmo servidor/banco no homelab, então o roadmap fica sincronizado
independente de onde você está. Gere um token por máquina (token:create "nome-da-maquina") para
poder revogar individualmente se perder um device.
Importante: quando o servidor roda remotamente, repoPath de um projeto (usado para escrever
o markdown final em docs/features/) só existe na máquina do desenvolvedor, não no homelab — a
escrita do arquivo falha silenciosamente nesse caso (best-effort) e a documentação final continua
disponível no banco/Web UI normalmente.
Integrar com outras IAs (MCP é um protocolo aberto)
O Spec-Forge é um servidor MCP padrão (stdio local ou Streamable HTTP remoto) — funciona com
qualquer cliente que fale o protocolo, não só o Claude Code. Os exemplos abaixo cobrem os mais
populares; a sintaxe exata de cada um muda de versão pra versão, então se algo não bater, confira a
doc de MCP da ferramenta. Em todos os casos: pra rodar local via stdio, use os mesmos argumentos do
comando claude mcp add acima (npx tsx <caminho absoluto>/apps/mcp-server/src/index.ts); pra
apontar pro homelab, troque por url + header Authorization: Bearer <token> (gerado em
/tokens na Web UI).
GitHub Copilot (VS Code)
Arquivo .vscode/mcp.json no projeto (ou no mcp.json de user settings, pra ficar disponível em
todo workspace):
{
"servers": {
"spec-forge": {
"type": "stdio",
"command": "npx",
"args": ["tsx", "C:\\caminho\\absoluto\\para\\spec-forge\\apps\\mcp-server\\src\\index.ts"]
}
}
}Versão HTTP (homelab):
{
"servers": {
"spec-forge": {
"type": "http",
"url": "https://seu-dominio.exemplo/mcp",
"headers": { "Authorization": "Bearer sf_SEU_TOKEN_AQUI" }
}
}
}OpenAI Codex CLI
~/.codex/config.toml:
[mcp_servers.spec-forge]
command = "npx"
args = ["tsx", "/caminho/absoluto/para/spec-forge/apps/mcp-server/src/index.ts"]Cursor
.cursor/mcp.json no projeto (ou ~/.cursor/mcp.json global):
{
"mcpServers": {
"spec-forge": {
"command": "npx",
"args": ["tsx", "/caminho/absoluto/para/spec-forge/apps/mcp-server/src/index.ts"]
}
}
}Homelab (HTTP): troque command/args por "url": "https://seu-dominio.exemplo/mcp", "headers": { "Authorization": "Bearer sf_SEU_TOKEN_AQUI" }.
Windsurf
~/.codeium/windsurf/mcp_config.json, mesmo formato mcpServers do Cursor acima.
Cline (extensão VS Code)
Configurável pela própria UI da extensão ("MCP Servers" → "Configure"), que edita
cline_mcp_settings.json — mesmo formato mcpServers do Cursor.
Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"spec-forge": {
"command": "npx",
"args": ["tsx", "/caminho/absoluto/para/spec-forge/apps/mcp-server/src/index.ts"]
}
}
}Estrutura
packages/db/ schema Drizzle + migrations + client Postgres
packages/core/ serviços de negócio (usados por mcp-server e web)
apps/mcp-server/ servidor MCP — stdio (dev local) ou HTTP com bearer token (homelab)
apps/web/ Next.js — dashboard/roadmap/refinamento (Server Actions sobre packages/core)
integrations/claude-skills/ skills /speckit-* adaptados para persistir no Spec-Forge (ver integrations/claude-skills/README.md)Usando seus comandos /speckit-* já existentes
Se você já usa o GitHub spec-kit (specify init) em outros
projetos com os skills /speckit-constitution, /speckit-specify, /speckit-clarify,
/speckit-plan, /speckit-tasks, /speckit-analyze, dá para continuar usando exatamente os mesmos
comandos — só trocando onde eles gravam. Um comando spec-forge init instala a versão adaptada
(que persiste no Spec-Forge em vez de specs/NNN-nome/*.md), perguntando se você quer instalar
neste repositório (sobrescreve os skills locais, se já existirem) ou globalmente
(~/.claude/skills — vale para qualquer projeto que ainda não tenha skills locais com o mesmo nome;
projetos com skills locais continuam usando a versão local, que tem prioridade).
Setup do comando (uma vez), estilo uv tool install
Equivalente a uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@vX.Y.Z
— testado de verdade contra github.com/rafaelandrade74/spec-forge.
Passo 1 — garanta que o bin global do pnpm está no PATH (só na primeira vez; se
pnpm add -g já funcionar no seu terminal, pule para o Passo 2):
pnpm setupIsso edita o profile do seu shell pra adicionar o diretório global do pnpm ao PATH. Feche e abra um terminal novo depois de rodar — o PATH só atualiza em sessões novas.
Passo 2 — instale:
pnpm add -g github:rafaelandrade74/spec-forge#path:apps/cli#path:apps/cli é sintaxe do pnpm (não do npm) para instalar a partir de um subdiretório de um
repo git — é o que faz funcionar sem precisar clonar nada manualmente. dist/ e templates/ do
apps/cli são versionados no repo de propósito (ver apps/cli/README.md), então não precisa
rodar nenhum build no seu lado.
Alternativa sem pnpm (não precisa do Passo 1; npm não entende a sintaxe #path:, então é
clone + install local em vez de instalar direto do git):
git clone https://github.com/rafaelandrade74/spec-forge.git
npm install -g ./spec-forge/apps/cliIsso também funciona direto de um checkout que você já tenha localmente (npm install -g ./apps/cli, rodando da raiz do repo).
Pra atualizar depois de uma nova versão: rode o mesmo comando de novo (reinstala por cima).
Alternativa via Docker (sem precisar de Node/pnpm/npm instalado no host): apps/cli/Dockerfile
compila a partir do source (pnpm install + tsc) e produz uma imagem final mínima (o CLI não
tem nenhuma dependência de runtime além de módulos nativos do Node, então a imagem final não leva
node_modules). Não faz parte do docker-compose.prod.yml (não é um serviço persistente) — build
e uso são via docker build/docker run direto, a partir da raiz do repo:
docker build -f apps/cli/Dockerfile -t spec-forge-cli .Rodar contra qualquer projeto (monte o diretório de destino como /workspace):
# PowerShell, a partir da pasta do projeto alvo
docker run --rm -v "${PWD}:/workspace" -w /workspace spec-forge-cli init --scope repo
# bash/git-bash no Windows precisa desabilitar a conversão automática de path do MSYS
MSYS_NO_PATHCONV=1 docker run --rm -v "$(pwd):/workspace" -w /workspace spec-forge-cli init --scope repoUso
cd /caminho/do/seu/projeto
spec-forge init # pergunta interativamente: repo ou global
spec-forge init --scope repo # não pergunta, instala neste repositório
spec-forge init --scope global # não pergunta, instala em ~/.claude/skills
spec-forge init --scope repo --target /outro/caminho/.claude/skills # caminho customizadoPróximos passos (ver plano completo)
Drag-and-drop de prioridade e diffs visuais de histórico (Fase 5)
Robustez multi-agente (expiração de claims, concorrência em
get_next_task) (Fase 6)Exportação para markdown compatível com o spec-kit original, autenticação multi-usuário (futuro)
This server cannot be deployed
Maintenance
Related MCP Connectors
AI-powered spec-to-task decomposition and execution orchestration for coding agents.
Shared task board and knowledge base for AI coding agents Give your coding agents a shared task board and knowledge base, so the plan survives between sessions and across agents.
- projectsOAuthcloud.tri2b
Task tracking built for coding agents. Work is leased, so two agents never take the same SubTask.
One shared project for a team's coding agents: decisions, a task board and handoffs.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides structured spec-driven development workflow tools for AI-assisted software development with sequential spec creation (Requirements → Design → Tasks). Features a real-time web dashboard for monitoring project progress and managing development workflows.5494 npm4,301GPL 3.0
- AlicenseNot gradedqualityCmaintenanceProvides a specification-driven workflow layer for AI-assisted coding, enabling agents to follow an explicit 11-phase feature workflow with checkpoints, artifacts, and quality gates.MIT
- AlicenseAqualityDmaintenanceEnables specification-driven development workflows for AI editors by managing structured project specifications through stages like requirements, design, and tasks.25 npm2MIT
- AlicenseNot gradedqualityBmaintenanceEnables coding agents to pick up, park, and hand off work on a shared task board with a DAG of work.MIT