import { Module } from '@nestjs/common'; import { TRADE_RETRIEVAL, TRADE_EMBEDDINGS } from '@domain/ports/out/trade-assistant.port'; import { OpenAiEmbeddingAdapter } from '@infrastructure/ai/openai-embedding.adapter'; import { WikiRetriever } from '@infrastructure/ai/wiki-retriever'; import { CsvRateModule } from '@infrastructure/carriers/csv-loader/csv-rate.module'; import { AuditModule } from '../audit/audit.module'; import { CsvBookingsModule } from '../csv-bookings/csv-bookings.module'; import { OrganizationsModule } from '../organizations/organizations.module'; import { SubscriptionsModule } from '../subscriptions/subscriptions.module'; import { UsersModule } from '../users/users.module'; import { CapabilityRegistry } from './capability.registry'; import { McpController } from './mcp.controller'; /** * Serveur MCP et registre de capacites. * * Le module n'apporte aucune logique metier : il assemble des services deja * exposes ailleurs. C'est le point de la conception — les agents passent par * les memes chemins que l'interface. */ @Module({ imports: [ CsvRateModule, CsvBookingsModule, SubscriptionsModule, UsersModule, OrganizationsModule, AuditModule, ], controllers: [McpController], providers: [ CapabilityRegistry, { provide: TRADE_EMBEDDINGS, useClass: OpenAiEmbeddingAdapter }, { provide: TRADE_RETRIEVAL, useClass: WikiRetriever }, ], exports: [CapabilityRegistry], }) export class McpModule {}