tsconfig-inheritance-flattener-mcp

Resuelve cadenas de herencia de configuración de TypeScript y devuelve las opciones efectivas del compilador.

Documentación

🔍 tsconfig-inheritance-flattener-mcp

npm CI License: MIT

Tu agente de IA lee tsconfig.json. No tiene idea de lo que realmente significa.

Servidor MCP que resuelve la cadena completa de herencia de configuración de TypeScript y devuelve las opciones efectivas del compilador que realmente se aplican, incluyendo todo lo heredado de configuraciones base extendidas, paquetes de monorepo y presets de node_modules.


🤔 El problema

Tu agente lee tsconfig.json y ve:

{ "extends": "@tsconfig/strictest", "compilerOptions": { "paths": { "@/*": ["./src/*"] } } }

No tiene idea de que @tsconfig/strictest establece strict: true, noUncheckedIndexedAccess: true, exactOptionalPropertyTypes: true. No sabe que baseUrl está definido dos niveles arriba en tu configuración base del monorepo. Entonces:

  • Sugiere código que fallaría en noUncheckedIndexedAccess
  • Se confunde sobre a qué resuelve @/
  • No sabe que tu target es ES2022, no ES5
  • Da respuestas incorrectas sobre la resolución de módulos

La API del compilador de TypeScript ya resuelve todo esto. Este MCP simplemente lo expone.


🛠️ Herramientas

get_effective_compiler_options

Resuelve la cadena completa de extends y devuelve las opciones del compilador fusionadas que realmente se aplican a un tsconfig.json dado. Muestra la cadena de herencia, todas las opciones fusionadas (con enums como cadenas legibles, no números mágicos) y los patrones de include/exclude.

Effective TypeScript Configuration
  Config:            /project/apps/web/tsconfig.json
  Inheritance chain: /project/apps/web/tsconfig.json
                     → /project/tsconfig.base.json
                     → node_modules/@tsconfig/strictest/tsconfig.json

Compiler Options (merged):
  target: "ES2022"
  module: "NodeNext"
  moduleResolution: "NodeNext"
  strict: true
  noUncheckedIndexedAccess: true
  exactOptionalPropertyTypes: true
  baseUrl: "/project"
  paths: { "@/*": ["apps/web/src/*"] }

resolve_module_alias

Mapea un alias de ruta de TypeScript (ej. @/hooks/useAuth) a su ubicación física de archivo en disco, usando el paths y baseUrl resueltos del tsconfig. Devuelve todos los candidatos existentes con sondeo de extensiones.

Alias Resolution: @/hooks/useAuth
  Config:   /project/apps/web/tsconfig.json
  Base URL: /project

Resolved physical paths:
  /project/apps/web/src/hooks/useAuth.ts      ✓ exists

analyze_project_references

Inspecciona el array de references en un tsconfig.json raíz y valida que cada paquete referenciado tenga composite: true. Detecta dependencias cruzadas rotas entre paquetes en monorepos de TypeScript antes de que causen fallos de compilación silenciosos.

Project References Analysis
  Config: /project/tsconfig.json
  References found: 2

  [✓] packages/shared → /project/packages/shared/tsconfig.json
  [✗ NOT FOUND] packages/deprecated → /project/packages/deprecated/tsconfig.json

Violations:
  ✗ packages/shared is referenced but does not have composite: true
    Fix: add "composite": true to packages/shared/tsconfig.json

🧪 Cómo se ve en la práctica

El agente está ayudando a depurar un error de TypeScript y pregunta:

"¿Qué opciones del compilador están realmente activas en este proyecto?"

Sin este MCP, el agente adivina basándose en lo que ve en tsconfig.json. Con él:

get_effective_compiler_options("/project/apps/web/tsconfig.json")
→ strict: true, noUncheckedIndexedAccess: true, target: "ES2022", module: "NodeNext"

Ahora el agente sabe exactamente por qué arr[0] tiene el tipo string | undefined y no solo string. No más sugerencias incorrectas.


⚡ Configuración

{
  "mcpServers": {
    "tsconfig-flattener": {
      "command": "npx",
      "args": ["-y", "tsconfig-inheritance-flattener-mcp"]
    }
  }
}

🚀 Uso

"¿Qué opciones del compilador se aplican realmente a /project/apps/web/tsconfig.json? Extiende una base de monorepo y @tsconfig/strictest."

"¿Dónde se resuelve @/components/Button en disco?"

"¿Son válidas las referencias de proyecto en mi tsconfig raíz? ¿Todos los paquetes referenciados tienen composite: true?"

Funciona muy bien junto con:


📦 Enlaces

Licencia

MIT