Angular 22 MCP + Skills: Guía de integración para desarrollo agnóstico
La mayoría de los flujos de trabajo agnósticos tienen el mismo fallo: el agente escribe código, dice que funciona, y lo descubres tú cuando abres el navegador. La pila MCP + Skills de Angular 22 resuelve esto dando a los agentes la capacidad de verificar su propio trabajo — compilación, captura de pantalla, iteración.
Esta guía cubre el setup completo: configurar tu entorno, instalar las skills correctas y escribir componentes que los agentes puedan modificar sin introducir fallos silenciosos.
Parte 1: Configuración de entorno
Requisitos previos
Asegúrate de tener:
- Node.js v20+ (
node --version) - Angular CLI v22+ (
npm install -g @angular/cli@latest) - Un entorno de agente de codificación (Gemini CLI, Cursor, Claude Code, GitHub Copilot, JetBrains AI, o Windsurf)
Paso 1: Configurar servidor Angular MCP
La CLI de Angular incluye el servidor MCP integrado — sin paquetes extra. Configúralo en la configuración de tu agente:
Para Gemini CLI / Cursor / Claude Code (.gemini/settings.json o equivalente):
{
"mcpServers": {
"angular-cli": {
"command": "npx",
"args": [
"-y",
"@angular/cli",
"mcp"
]
},
"chrome-devtools": {
"command": "npx",
"args": [
"chrome-devtools-mcp@latest"
]
}
}
}Para IDEs JetBrains (Settings → Tools → MCP):
- Añade nuevo servidor: nombre
angular-cli, comando:npx -y @angular/cli mcp - Añade segundo servidor: nombre
chrome-devtools, comando:npx chrome-devtools-mcp@latest
Prueba la conexión:
npx @angular/cli mcp --health-checkDeberías ver una lista de herramientas disponibles. Las que más importan para flujos agnósticos:
ng_lint— ejecuta el linter en tu proyectoget_examples— busca ejemplos de código de mejor prácticaget_best_practices— recupera la Guía de Mejores Prácticas de Angularsearch_documentation— consulta angular.devdev_server.wait_for_build— se bloquea hasta que la compilación tenga éxito o falle (la crítica)dev_server.start— inicia el dev serverdev_server.stop— detiene el dev server
Paso 2: Instalar Angular Skills
Las skills se instalan separadamente de las herramientas MCP. Aumentan el conocimiento del agente sin añadir overhead de tokens a cada solicitud. Piénsalo así: MCP es lo que el agente puede hacer — y las Skills son lo que el agente sabe. Necesitas los dos.
Instala las skills oficiales de Angular:
# Usando el paquete npx skills
npx @anthropic-ai/skills add \
https://github.com/angular/skills/blob/main/angular-developer/SKILL.md \
--name angular-developer
npx @anthropic-ai/skills add \
https://github.com/angular/skills/blob/main/angular-new-app/SKILL.md \
--name angular-new-appO, si tu agente soporta skills basadas en URL:
/skills install https://github.com/angular/skills/blob/main/angular-developer/SKILL.md
/skills install https://github.com/angular/skills/blob/main/angular-new-app/SKILL.mdVerifica la instalación:
/skills listDeberías ver angular-developer y angular-new-app listadas.
Paso 3: Configurar Chrome DevTools para Agentes
Esto da a los agentes visibilidad en tu aplicación en ejecución — lo que cierra el bucle de alucinación.
npx chrome-devtools-mcp@latest --installPruébalo:
npx chrome-devtools-mcp@latest --health-checkUna vez configurado, los agentes pueden tomar capturas de pantalla, interactuar con elementos y verificar que lo que escribieron se renderiza correctamente. Sin más “asumiré que funcionó.”
Parte 2: Escribiendo componentes agnóstico-safe
Con MCP + Skills configurado, tu agente tiene verificación de compilación y visibilidad en el navegador. Ahora escribe código que los agentes puedan modificar sin introducir fallos silenciosos.
Patrón 1: @switch exhaustivo con type safety
Siempre usa bloques @switch exhaustivos. Esto previene que los agentes introduzcan casos sin manejo que fallan silenciosamente en producción.
// ✓ Bueno: type-safe, exhaustive union
export type VehicleStatus = 'idle' | 'transit' | 'maintenance' | 'critical';
export class FleetDetailComponent {
status = signal<VehicleStatus>('idle');
private assertNever(value: never): never {
throw new Error(`Estado no manejado: ${value}`);
}
}<!-- Plantilla con verificación exhaustiva -->
<div class="status-card">
@switch (status()) {
@case ('idle') {
<span class="badge badge-green">Disponible</span>
}
@case ('transit') {
<span class="badge badge-blue">En tránsito</span>
}
@case ('maintenance') {
<span class="badge badge-yellow">Mantenimiento</span>
}
@case ('critical') {
<span class="badge badge-red">Crítico</span>
}
@default {
<!-- Si un agente añade un nuevo estado sin actualizar la plantilla, esto falla en compilación -->
{{ assertNever(status() as never) }}
}
}
</div>Por qué importa: Si un equipo backend añade 'error' a la unión sin notificar al frontend, la compilación de TypeScript falla inmediatamente — los agentes no pueden enviar código roto.
Patrón 2: Signal Forms con validadores inline
Signal Forms proporciona manejo de formularios type-safe e impulsado por signals. Los agentes son mucho menos propensos a introducir errores de validación porque TypeScript los atrapa antes de que se complete la compilación.
export class ServiceTicketComponent {
form = new FormGroup({
description: new FormControl('', Validators.required),
priority: new FormControl<'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL'>('MEDIUM'),
assignedTo: new FormControl(''),
});
priority$ = this.form.get('priority')!.valueAsSignal;
priorityClass = computed(() => {
const level = this.priority$();
return level === 'CRITICAL' ? 'text-red-600' : level === 'HIGH' ? 'text-orange-600' : 'text-gray-600';
});
submitTicket() {
if (this.form.valid) {
this.fleetService.createTicket(this.form.value);
}
}
}Plantilla:
<form [formGroup]="form" (submit)="submitTicket()">
<textarea
formControlName="description"
[class]="priorityClass()"
placeholder="Describe el problema..."
></textarea>
<select formControlName="priority">
<option value="LOW">Bajo</option>
<option value="MEDIUM">Medio</option>
<option value="HIGH">Alto</option>
<option value="CRITICAL">Crítico</option>
</select>
<button type="submit" [disabled]="form.invalid()">Enviar</button>
</form>Patrón 3: @boundary para integraciones riesgosas
Cuando integres código de terceros o características experimentales de IA, envuelve con @boundary. Cuando un agente escribe código de integración complejo, un único bug no crasheará toda tu app.
<div class="dashboard">
<!-- La lista de flota core siempre se renderiza -->
<fleet-list [units]="units()" />
<!-- Los diagnósticos de IA pueden fallar sin crashear toda la página -->
@boundary {
<ai-predictive-diagnostics [selectedUnit]="selectedUnit()" />
} @catch (error) {
<div class="error-fallback">
<h3>Diagnósticos no disponibles</h3>
<p>{{ error.message }}</p>
<button (click)="retryDiagnostics()">Reintentar</button>
</div>
}
</div>Patrón 4: funciones de plantilla inline para lógica transitoria
Mantén la superficie de API del componente mínima. Deja que los agentes escriban manejadores inline que se queden cerca de su uso — en lugar de exponer cada acción transitoria como método de clase.
<!-- ✓ Manejador inline — intención clara, superficie de API mínima -->
<button
(click)="vehicles.update(v => v.filter(item => item.id !== vehicleId))"
class="btn-danger"
>
Eliminar de flota
</button>Parte 3: Flujos de trabajo de agentes
Estos son los tres flujos principales donde el setup MCP + Skills realmente rinde.
Flujo de trabajo 1: Scaffolding de componente (con verificación MCP)
Di a tu agente: “Crea un componente ServiceTicketForm usando las skills de Angular. Usa Signal Forms, incluye un @boundary para el analizador de prioridad de IA, y ejecuta la compilación para verificar.”
El agente:
- Llama
get_best_practicespara buscar patrones de Signal Forms - Hace scaffolding con
ng generate component - Implementa validadores inline usando la orientación de la skill
- Llama
dev_server.wait_for_buildpara verificar compilación - Lee y arregla cualquier error de compilación antes de responder
Monitoreas todo en el chat de tu agente. Sin errores sorpresa, sin “creo que debería funcionar.”
Flujo de trabajo 2: Chat de flota con IA (con verificación de navegador)
Del codelab logistics-manager-app: “Implementa una característica de consulta de chat de flota. Usa la API de Gemini para analizar datos de flota y devolver resultados filtrados. Inicia el dev server con Chrome DevTools, navega al componente de chat, y toma una captura de pantalla para verificar que la característica funciona.”
El agente:
- Crea un
FleetChatServiceque acepta una consulta en lenguaje natural - Envía el estado actual
units()signal a la API de Gemini - Analiza la respuesta de Gemini y filtra la flota
- Actualiza la UI de chat con resultados
- Llama
dev_server.start, Chrome DevTools navega al componente - Toma una captura de pantalla, la lee, y confirma que la característica funciona
Ese es el bucle de alucinación cerrado — el agente tiene ojos en la aplicación en ejecución.
Flujo de trabajo 3: Diagnósticos predictivos con @boundary
“Añade un botón ‘Ejecutar diagnóstico de IA’ a FleetDetailModal. El botón debe llamar a una API de Gemini con la telemetría del unit (velocidad, batería, estado). Envuelve el componente de diagnósticos con @boundary así si la llamada a IA falla, no crashea el modal.”
El agente:
- Crea un
DiagnosticsComponentque llama al servicio de IA - Lo envuelve con
@boundaryen la plantilla modal - Implementa una UI de fallback en el bloque
@catchcon lógica de reintento - Inicia el dev server, navega a un modal de detalle de vehículo
- Hace click en el botón de diagnóstico, verifica el resultado en el navegador
- Si la prueba falla, lee el error e itera
Completamente determinista. La compilación atrapa errores de compilación. Chrome DevTools atrapa problemas en tiempo de ejecución. El agente envía código que funciona o sigue intentando.
Parte 4: Mejores prácticas de configuración de skills
Un servidor por dominio
No cargues el servidor MCP de Angular junto a tu servidor de deployment y herramientas de comunicación. Crea perfiles de IDE separados:
{
"profiles": {
"angular-dev": {
"mcpServers": {
"angular-cli": { "command": "npx", "args": ["-y", "@angular/cli", "mcp"] },
"chrome-devtools": { "command": "npx", "args": ["chrome-devtools-mcp@latest"] }
}
},
"deployment": {
"mcpServers": {
"deploy-cli": { "command": "npx", "args": ["my-deploy-cli", "mcp"] }
}
}
}
}Activa solo el perfil que necesites para la tarea. Eso son muchos tokens ahorrados desde el inicio.
Versionea tus skills
Pon skills en tu repo y versiónalas como código:
/my-project
/skills
/angular-v22-dev-guidelines.md
/our-design-system.md
/api-integration-patterns.md
/src
angular.jsonReferéncialas:
npx @anthropic-ai/skills add ./skills/angular-v22-dev-guidelines.mdUna skill para patrones de Angular 19 te lastimará en Angular 22. Actualiza skills cuando actualices versiones de Angular.
Mide presupuesto de contexto
Antes de ejecutar un agente en una tarea real, pídele que estime el uso de tokens:
¿Cuál es el conteo de tokens total de todas mis herramientas MCP instaladas y skills?Si más del 30% de tu ventana de contexto está en definiciones de herramientas, simplifica. Los agentes necesitan espacio para pensar, no solo para enumerar capacidades.
Escribe guardrails de MCP en skills
En lugar de confiar en que el agente “tenga cuidado,” escríbelo en la skill:
# Angular Update Guardrail Skill
Antes de ejecutar `ng update`, SIEMPRE:
1. Crea una rama de git: `git checkout -b ng-update-v22`
2. Ejecuta pruebas: `npm test`
3. Commitea el estado actual: `git commit -m "checkpoint antes de ng update"`
4. Entonces y solo entonces ejecuta: `ng update @angular/core @angular/cli`El agente sigue las instrucciones de la skill. Guardrails en el código, no en la confianza.
Parte 5: Resolución de problemas
“Servidor MCP no encontrado”
- Verifica que
npx @angular/cli mcp --health-checkdevuelva una lista de herramientas - Reinicia tu IDE de agente
- Verifica que Angular CLI v22+ esté instalado:
ng version
“Skills no reconocidas”
- Ejecuta
npx @anthropic-ai/skills listpara confirmar que están instaladas - Reinicia tu agente
- Verifica que la URL de la skill sea correcta
“Chrome DevTools no toma capturas de pantalla”
- Asegúrate de que Chrome está instalado y en PATH
- Ejecuta
npx chrome-devtools-mcp@latest --health-check - Verifica que hayas iniciado el dev server con
dev_server.startantes de pedir al agente que navegue
“Verificación de compilación agotó timeout”
dev_server.wait_for_buildtiene un timeout predeterminado (usualmente 30 segundos)- Si tus compilaciones son más lentas, pide al agente que incremente el timeout en la llamada MCP
- Verifica que el dev server está ejecutándose:
ng serve
Resumen
Con la pila MCP + Skills de Angular 22:
- Los agentes escriben código type-safe que compila o falla, nunca silenciosamente.
- Exhaustive type checking previene que nuevos estados se cuelen.
- @boundary contiene fallos en lugar de crashear la aplicación.
- Plantillas inline mantienen los componentes limpios.
- Signal Forms fuerza validación a nivel de tipo.
- Integración con Chrome DevTools da a agentes visibilidad en código en ejecución.
- Las skills enseñan patrones modernos alineados a tu versión y convenciones.
El bucle de alucinación está cerrado. La generación de código se vuelve verificable. El desarrollo agnóstico cambia de riesgoso a confiable.
Próximos pasos:
- Configura Angular MCP en tu IDE/agente (5 minutos)
- Instala Angular Skills (2 minutos)
- Configura Chrome DevTools (2 minutos)
- Escribe un componente de prueba usando los patrones de arriba
- Pide a tu agente que haga scaffolding de una característica y verifícala con herramientas MCP
Recursos:
- Angular Skills Repository: https://github.com/angular/skills
- Chrome DevTools para Agentes: https://developer.chrome.com/docs/devtools/agents
- Logistics Manager Codelab: https://github.com/angular/examples/blob/main/logistics-manager-app/codelab.md
Si quieres entender la diferencia entre Skills y herramientas MCP antes de empezar, revisa MCP Skills vs MCP Tools: La forma correcta de configurar MCP Server.