npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

hexagon-architecture-generator

v2.0.2

Published

MCP server for generating hexagonal architecture with NestJS following Clean Architecture principles

Downloads

11

Readme

Hexagon Architecture Generator - MCP Server

Um servidor MCP (Model Context Protocol) para gerar automaticamente estruturas seguindo a Arquitetura Hexagonal (Ports and Adapters) com NestJS e princípios de Clean Architecture.

📋 Características

  • 🏗️ Arquitetura Hexagonal completa com inversão de dependências
  • 🔄 3 Padrões de Use Cases:
    • Use Cases Internos (Banco de Dados)
    • Use Cases Externos via Duck Typing
    • Use Cases Externos via Adapter Pattern
  • 🎯 NestJS Integration com Dependency Injection
  • 📝 TypeScript com tipagem forte
  • 🧪 Testes pré-configurados
  • 📚 Documentação automática
  • 🤖 MCP Server para integração com assistentes de IA

🚀 Instalação

npm install -g hexagon-architecture-generator

📖 Uso como Servidor MCP

Este projeto agora funciona como um servidor MCP (Model Context Protocol), permitindo que assistentes de IA utilizem as ferramentas de geração de código.

Configuração do MCP

  1. Instalação:
npm install hexagon-architecture-generator
  1. Configuração no cliente MCP:
{
  "mcpServers": {
    "hexagon-generator": {
      "command": "hexagon-mcp",
      "args": []
    }
  }
}

Ferramentas Disponíveis

generate_module

Gera um módulo completo seguindo arquitetura hexagonal.

Parâmetros:

  • name (obrigatório): Nome do módulo
  • type: Tipo de use case (internal, duck-typing, adapter)
  • externalLib: Nome da biblioteca externa (para duck-typing e adapter)
  • database: Tipo de banco (mysql, postgres) via Prisma
  • output: Diretório de saída (padrão: ./src/modules)
  • skipTests: Pular geração de testes (padrão: false)

generate_use_case

Gera um use case específico.

Parâmetros:

  • name (obrigatório): Nome do use case
  • type: Tipo de use case
  • module: Nome do módulo (padrão: common)
  • output: Diretório de saída
  • skipTests: Pular geração de testes

generate_repository

Gera um repository com interface.

Parâmetros:

  • name (obrigatório): Nome do repository
  • database: Tipo de banco (Prisma)
  • module: Nome do módulo
  • output: Diretório de saída
  • skipTests: Pular geração de testes

generate_adapter

Gera um adapter para biblioteca externa.

Parâmetros:

  • name (obrigatório): Nome do adapter
  • externalLib: Nome da biblioteca externa
  • module: Nome do módulo
  • output: Diretório de saída
  • skipTests: Pular geração de testes

🏗️ Estrutura Gerada

src/
├── modules/
│   └── partners/
│       ├── interfaces/
│       │   ├── controllers/
│       │   │   └── partners.controller.interface.ts
│       │   ├── services/
│       │   │   └── partners.service.interface.ts
│       │   └── repositories/
│       │       └── partner.repository.interface.ts
│       ├── controllers/
│       │   └── partners.controller.ts
│       ├── services/
│       │   └── partners.service.ts
│       ├── use-cases/
│       │   ├── create-partner/
│       │   │   └── create-partner.use-case.ts
│       │   └── find-partner/
│       │       └── find-partner.use-case.ts
│       ├── repositories/
│       │   └── partner.repository.ts
│       ├── entities/
│       │   └── partner.entity.ts
│       ├── dtos/
│       │   ├── create-partner.dto.ts
│       │   └── partner.response.dto.ts
│       └── partners.module.ts

�️ Banco de Dados com Prisma

Os repositórios gerados usam Prisma Client. Após gerar um módulo, configure o Prisma no seu projeto:

  1. Instalar deps (no seu app):
npm install prisma @prisma/client
  1. Criar schema.prisma e modelos (o gerador inclui um exemplo no módulo):
  • Ajuste o provider (mysql ou postgresql) e a variável DATABASE_URL
  1. Rodar migrações e gerar client:
npx prisma migrate dev --name init
npx prisma generate
  1. Use o PrismaService gerado no módulo para acessar o banco.

�🔧 Exemplos de Uso via MCP

Gerar módulo completo

Tool: generate_module
Arguments: {
  "name": "partners",
  "type": "internal",
  "database": "postgres",
  "output": "./src/modules"
}

Gerar módulo com integração externa

Tool: generate_module
Arguments: {
  "name": "quotation",
  "type": "adapter",
  "externalLib": "stilman-integration",
  "output": "./src/modules"
}

Gerar apenas um use case

Tool: generate_use_case
Arguments: {
  "name": "send-notification",
  "type": "duck-typing",
  "module": "notifications"
}

🏭 Desenvolvimento

📚 Exemplos de Código Gerado

Controller Interface

export interface IPartnersController {
  create(dto: CreatePartnerDto): Promise<PartnerResponseDto>;
  findById(id: string): Promise<PartnerResponseDto>;
  findAll(): Promise<PartnerResponseDto[]>;
  update(id: string, dto: UpdatePartnerDto): Promise<PartnerResponseDto>;
  delete(id: string): Promise<void>;
}

Use Case

@Injectable()
export class CreatePartnerUseCase {
  constructor(
    @Inject("IPartnerRepository")
    private readonly repository: IPartnerRepository
  ) {}

  async execute(data: CreatePartnerData): Promise<Partner> {
    const partner = Partner.create(data);
    return await this.repository.save(partner);
  }
}

NestJS Module

@Module({
  imports: [],
  controllers: [PartnersController],
  providers: [
    PartnersService,
    CreatePartnerUseCase,
    FindPartnerUseCase,
    {
      provide: "IPartnersService",
      useClass: PartnersService,
    },
    {
      provide: "IPartnerRepository",
      useClass: PartnerRepository,
    },
  ],
  exports: ["IPartnersService"],
})
export class PartnersModule {}

🎯 Padrões Suportados

1. Use Cases Internos (Banco de Dados)

Controller → Service → UseCase → Repository → Database

2. Duck Typing (Bibliotecas Compatíveis)

Controller → Service → UseCase → ExternalClient (direto)

3. Adapter Pattern (Bibliotecas Incompatíveis)

Controller → Service → UseCase → Adapter → ExternalClient

🧪 Testes

Os testes são gerados automaticamente seguindo as melhores práticas:

describe("CreatePartnerUseCase", () => {
  let useCase: CreatePartnerUseCase;
  let repository: jest.Mocked<IPartnerRepository>;

  beforeEach(() => {
    const mockRepository = {
      save: jest.fn(),
      findById: jest.fn(),
    };

    useCase = new CreatePartnerUseCase(mockRepository);
    repository = mockRepository;
  });

  it("should create a partner successfully", async () => {
    // Test implementation
  });
});

🏭 Desenvolvimento

Para contribuir com o projeto:

# Clonar o repositório
git clone <repository-url>
cd hexagon-mcp

# Instalar dependências
npm install

# Desenvolver
npm run dev

# Build
npm run build

# Testar como servidor MCP
npm start

Estrutura do Projeto

src/
├── index.ts              # Servidor MCP principal
├── types.ts              # Interfaces compartilhadas
├── generators/           # Geradores de código
│   ├── base.generator.ts
│   ├── module.generator.ts
│   ├── use-case.generator.ts
│   ├── repository.generator.ts
│   └── adapter.generator.ts
└── templates/           # Templates Handlebars
    ├── controllers/
    ├── services/
    ├── use-cases/
    ├── repositories/
    ├── entities/
    ├── dtos/
    ├── interfaces/
    └── modules/
  • SOLID Principles
  • Clean Architecture
  • Domain-Driven Design
  • Dependency Inversion
  • Interface Segregation
  • Repository Pattern
  • Adapter Pattern

🔧 Integração com Assistentes de IA

Este servidor MCP pode ser integrado com assistentes de IA como:

  • Claude Desktop
  • Cursor IDE
  • Outros clientes MCP

Para configurar, adicione a configuração do servidor MCP no seu cliente preferido:

{
  "mcpServers": {
    "hexagon-generator": {
      "command": "hexagon-mcp",
      "args": []
    }
  }
}

🤝 Contribuindo

Contribuições são bem-vindas! Por favor, leia o CONTRIBUTING.md para detalhes.

📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.