Mais do que apenas
Documentação Swagger.

nestjs-docfy separa a documentação Swagger/OpenAPI da lógica dos controllers usando um arquivo companheiro por convenção de nome, do mesmo jeito que o Nest já faz com *.controller.spec.ts.

Installation
npm install nestjs-docfy
# peer deps
npm install @nestjs/common @nestjs/swagger reflect-metadata
Última versão v0.18.0Licença MIT
Companion file por convenção
users.controller.ts → users.controller.docs.ts. O mesmo padrão que o Nest já usa para *.controller.spec.ts.
CLI com CI gates
check, coverage --min, lint e patch-spec. Falhe o build quando faltar documentação.
Inferência automática de tipos
Interfaces, class-validator e @HttpCode() viram schema OpenAPI sem decorators extras.
Docfy UI AI-first
UI de referência com botão Copy for AI em cada endpoint, ideal para colar em LLMs.

docfy-ui: um viewer de referência AI-first

A spec OpenAPI que o nestjs-docfy monta é a mesma que o docfy-ui renderiza, sem config separada e com a mesma fonte de verdade.

  • Copy for AI: um resumo determinístico do endpoint pronto para LLM, não um dump de JSON com $ref
  • Busca com ⌘K entre todos os endpoints, instantânea
  • Detalhe completo de request/response por endpoint, gerado direto da spec
docfy-ui overview
docfy-ui busca com ⌘K
docfy-ui detalhe de endpoint com Copy for AI

Feito para agentes de IA, não só para humanos

O docfy-mcp expõe seu OpenAPI spec como tools MCP, então Claude, Cursor ou qualquer agente compatível com MCP consulta sua API diretamente — sem colar JSON num prompt.

  • list_endpoints / get_endpoint: navega e inspeciona qualquer operação, na mesma forma normalizada que o docfy-ui renderiza
  • lint_spec: sinaliza summaries, descriptions, tags e respostas de erro faltando antes de irem pra produção
  • diff_specs: compara dois documentos OpenAPI e sinaliza mudanças breaking vs. informativas
  • contract_test: valida uma resposta real contra o schema declarado, direto das tool calls do próprio agente
  • Zero-config contra um servidor NestJS rodando, ou aponte pra um arquivo de spec estático
claude_desktop_config.json
{
  "mcpServers": {
    "docfy": {
      "command": "npx",
      "args": ["-y", "docfy-mcp", "--url", "http://localhost:3000/docs-json"]
    }
  }
}

Como fica na prática

Antes: um controller enterrado em decorators. Depois: apenas rotas, com a documentação vivendo ao lado, em um arquivo companheiro.

users.controller.ts
@WithDocs()
@Controller('users')
export class UsersController {
  constructor(private readonly users: UsersService) {}

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.users.findOne(id);
  }
}
users.controller.docs.ts
import { docs } from 'nestjs-docfy';
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
import { UsersController } from './users.controller';

docs(UsersController, {
  classDecorators: [ApiTags('users')],
  methods: {
    findOne: [
      ApiOperation({ summary: 'Get user by id' }),
      ApiResponse({ status: 200, description: 'OK', type: UserDto }),
      ApiResponse({ status: 404, description: 'User not found' }),
    ],
  },
});
Só em boot-time, zero overhead por requestMesmo output OpenAPI que decorators inlineConvenção de companion file, como *.spec.ts

Sem monkey-patching, sem proxies em runtime

Só o timing certo e Reflect metadata.

01

Escreva o companion file

users.controller.docs.ts chama docs(UsersController, { ... }), decorators Swagger normais, só que em outro arquivo.

02

Descoberto no boot

DocfyModule.forRoot() encontra por convenção de nome e escreve Reflect metadata nos métodos do controller, antes do SwaggerModule.createDocument() rodar.

03

Output OpenAPI idêntico

O SwaggerModule vê exatamente a mesma metadata que veria se os decorators estivessem inline no controller.

Não é um plugin de Swagger. É o toolchain inteiro.

A maioria das ferramentas para nos decorators. O nestjs-docfy entrega a CLI, o viewer e a integração com IA que seu time realmente precisa pra manter a documentação honesta.

Uma CLI que trava seu CI

generate, check, coverage --min, lint e patch-spec falham o build no exato momento em que a documentação diverge do código — não meses depois.

Custo zero em runtime, se você quiser

O plugin webpack da CLI calcula tudo em build time; nada roda por requisição em produção.

docfy-ui incluído, não vendido separado

Um viewer de referência AI-first completo já vem com a lib — sem conta extra, sem plano à parte.

Agentes como cidadãos de primeira classe

O docfy-mcp expõe a mesma spec pro Claude, Cursor e qualquer client MCP — sua API vira consultável, não só legível.

Funciona com o layout de NestJS que você já tem

Projetos simples, workspaces Nx e monorepos Nest CLI são todos auto-detectados — nenhum arquivo de config pra escrever à mão.

Um comando do zero ao setup completo

O nestjs-docfy init conecta o módulo, decora todo controller e gera os docs — numa tacada só.