sdd-mcp-server
# SDD MCP Server
Servidor MCP em Python para conduzir um fluxo de Spec-Driven Development (SDD) com artefatos versionados, aprovações humanas e implementação orientada por testes.
## Estrutura
```text
sdd-mcp-server/
|-- server.py # transporte e registro das tools MCP
|-- sdd_server/
| |-- workflow.py # regras do pipeline e persistência dos artefatos
| `-- __init__.py
|-- specs/
| |-- checkout-flow.md # formato legado, ainda suportado
| `-- <feature>/
| |-- requirements.md
| |-- design.md
| |-- tasks.md
| `-- status.json
|-- skills/
| |-- skill-*/SKILL.md # Agent Skills por fase
| `-- api-rest.md # skill legada, ainda suportada
|-- test_workflow.py
`-- pyproject.toml
```
Cada feature nova fica em `specs/<feature>/`. O arquivo `status.json` guarda as aprovações das etapas; os Markdown continuam sendo a fonte de verdade revisável no Git. Specs e skills no formato anterior continuam disponíveis pelas tools legadas.
## Instalação
Com `uv`:
```bash
uv sync
uv run sdd-mcp-server
```
Com `pip`:
```bash
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
sdd-mcp-server
```
No Windows, `setup.bat` cria o ambiente virtual, instala o projeto e gera configurações MCP com caminhos absolutos.
## Transportes
O transporte padrão é `stdio`, indicado para iniciar o servidor como processo local de um cliente MCP:
```bash
python server.py
# ou
sdd-mcp-server
```
Para Streamable HTTP, o endpoint padrão é `http://127.0.0.1:8000/mcp`:
```bash
python server.py --transport streamable-http
```
Configure `SDD_MCP_HOST` e `SDD_MCP_PORT` para alterar endereço e porta. Para acesso fora da máquina local, coloque o servidor atrás de um proxy com autenticação e TLS; o servidor não configura autenticação por conta própria.
## Configuração de clientes
VS Code (`.vscode/mcp.json`):
```json
{
"servers": {
"sddServer": {
"type": "stdio",
"command": "C:\\caminho\\para\\sdd-mcp-server\\.venv\\Scripts\\python.exe",
"args": ["C:\\caminho\\para\\sdd-mcp-server\\server.py"]
}
}
}
```
Claude Code/Desktop (configuração MCP do cliente):
```json
{
"mcpServers": {
"sdd-server": {
"command": "python",
"args": ["/caminho/absoluto/para/sdd-mcp-server/server.py"]
}
}
}
```
## Pipeline
1. `steering` lê ou inicializa `.kiro/steering/constitution.md`.
2. `spec-init` cria a pasta da feature e um rascunho de `requirements.md`.
3. `spec-requirements` salva requisitos funcionais, critérios de aceitação e limites de escopo.
4. `spec-approve` registra a aprovação humana de `requirements` antes do design.
5. `spec-design` salva arquitetura, decisões, contratos e estratégia de testes; `validate-design` verifica as seções obrigatórias.
6. `spec-approve` registra a aprovação de `design` antes das tarefas.
7. `spec-tasks` salva tarefas numeradas e testáveis; `spec-approve` libera a implementação após a revisão humana.
8. `spec-impl` prepara o contexto de implementação TDD para todas as tarefas pendentes ou para IDs selecionados.
9. `spec-status`, `spec-feedback` e `validate-gap` acompanham o progresso e apontam lacunas.
Exemplos de invocação:
```text
spec-init {"project_description":"Implementar autenticação JWT com refresh token"}
spec-requirements {"feature_name":"autenticacao-jwt","content":"...markdown dos requisitos..."}
spec-approve {"feature_name":"autenticacao-jwt","stage":"requirements"}
spec-design {"feature_name":"autenticacao-jwt","content":"...markdown do design..."}
validate-design {"feature_name":"autenticacao-jwt"}
spec-approve {"feature_name":"autenticacao-jwt","stage":"design"}
spec-tasks {"feature_name":"autenticacao-jwt","content":"...tarefas em checkboxes numerados..."}
spec-approve {"feature_name":"autenticacao-jwt","stage":"tasks"}
spec-impl {"feature_name":"autenticacao-jwt","tasks":"1,2"}
spec-status {"feature_name":"autenticacao-jwt"}
spec-feedback {"feature_name":"autenticacao-jwt","mode":"report"}
validate-gap {"feature_name":"autenticacao-jwt","implementation_summary":"...resumo com evidências de testes..."}
```
O servidor bloqueia a gravação de design antes da aprovação dos requisitos, tarefas antes da aprovação do design e contexto de implementação antes da aprovação das tarefas. Editar um artefato invalida sua própria aprovação e as aprovações posteriores. A aprovação deve corresponder a uma decisão explícita do usuário; o servidor não consegue autenticar por conta própria quem forneceu o argumento da tool.
`spec-impl` fornece instruções e contexto ao agente MCP, mas não altera código de produção diretamente. A implementação e a execução dos testes são feitas pelo agente no workspace. `validate-gap` verifica o estado do workflow e o resumo informado, mas não inspeciona automaticamente o código-fonte.
As skills por etapa estão em `skills/skill-*/SKILL.md` e são servidas pelas tools `list_skills` e `get_skill`. Comandos slash como `/speckit.specify` dependem de suporte e configuração do cliente; eles não são registrados pelo protocolo MCP.
## Testes
```bash
python -m unittest
```
Para inspecionar o servidor MCP:
```bash
npx @modelcontextprotocol/inspector python server.py
```TDQS
Scored across 16 tools
Most tools target a clearly distinct stage or artifact (spec-init, spec-requirements, spec-design, spec-tasks, spec-approve, spec-impl). The main overlap is spec-status vs spec-feedback, both of which surface progress/status information, and the three validate_* tools differ only by target. Descriptions largely resolve these ambiguities.
The set mixes two conventions: snake_case (list_specs, get_skill, validate_spec, prepare_generation_context) and kebab-case (spec-init, spec-requirements, validate-design, validate-gap), plus a bare noun 'steering'. While the spec-* family is internally consistent, the overall pattern is unpredictable.
16 tools is borderline-heavy for a spec-driven-development server. Many serve a genuine lifecycle stage, but the validate_* trio and the status/feedback pair feel partially redundant, suggesting some tools could be consolidated.
The surface covers the full spec lifecycle: init, requirements, design, tasks, approval, implementation prep, status, feedback, plus skills/steering and validation. Minor gaps around editing/versioning of specs exist, but core CRUD-style workflows are covered without dead ends.