Antonio Herrera.
9Fase 9 · Claude desde cero

Extender Claude Code: subagentes, hooks, skills y MCP

Añadir a la app de práctica un hook, un subagente, una skill y un servidor MCP

Por Antonio Herrera Publicada en octubre 2026 5 min de lectura
11/13
Qué vas a conseguir: ampliar Claude Code con las cuatro piezas que lo convierten en tu herramienta: un servidor MCP, un hook, un subagente y una skill.
Tiempo: 40 minutos. Necesitas: Node.js instalado (para el hook de ejemplo). Todos los ficheros están listos para copiar en ejemplos/ del repositorio, y el proyecto completo en soluciones/fase-09/.
Las cuatro piezas, en una línea
MCP
Conecta Claude con herramientas y datos externos. El mismo estándar que los conectores de la fase 4.
Hook
Un comando que se ejecuta siempre en un momento concreto, por ejemplo tras cada edición.
Subagente
Un especialista con sus propias instrucciones y herramientas, que trabaja en un contexto aparte.
Skill
Un procedimiento reutilizable que invocas con /nombre o que Claude usa cuando encaja.
Paso 1 · Añade un servidor MCP

Fuera de Claude Code (o con ! delante), en la carpeta del proyecto:

terminal
claude mcp add --transport http deepwiki --scope project https://mcp.deepwiki.com/mcp
Resultado del comando: Added HTTP MCP server deepwiki with URL https://mcp.deepwiki.com/mcp to project config, File modified: .mcp.json
Con --scope project se guarda en .mcp.json, un fichero que puedes subir al repositorio para que todo el equipo tenga el mismo servidor. Sin esa opción queda solo para ti.

Al abrir Claude Code, te pedirá aprobar el servidor del proyecto. Elige Use this MCP server:

Aviso New MCP server found in this project: deepwiki, con las opciones Use this MCP server, Use this and all future MCP servers y Continue without using this MCP server
Por seguridad, los servidores que vienen en un repositorio necesitan tu aprobación. Revisa siempre de dónde viene un servidor antes de usarlo.
Pantalla /mcp con el servidor deepwiki del proyecto con 3 herramientas y los conectores de claude.ai
/mcp muestra los servidores activos. Fíjate: también aparecen los conectores de tu cuenta de claude.ai, como el DeepWiki que añadimos en la fase 4. Claude Code avisa de que es el mismo servidor y usa uno solo.

Úsalo:

Claude Code
Usa el servidor MCP deepwiki para explicarme en 3 líneas qué es el repositorio Fission-AI/OpenSpec.
Petición de permiso Tool use deepwiki - Ask Wiki Question Tool (MCP) con el repositorio y la pregunta
Cada herramienta MCP pide permiso y muestra exactamente qué va a enviar.
Respuesta Según DeepWiki en tres puntos sobre qué es OpenSpec
La respuesta, según DeepWiki. Y de paso, ya sabemos qué es OpenSpec para la fase 10.
Paso 2 · Añade un hook

Vamos a anotar en un registro cada fichero que Claude edita. Primero, el script (requiere Node.js):

.claude/hooks/registrar-cambio.js
const fs = require('node:fs'); const path = require('node:path'); let datos = ''; process.stdin.on('data', trozo => (datos += trozo)); process.stdin.on('end', () => { const evento = JSON.parse(datos || '{}'); const proyecto = process.env.CLAUDE_PROJECT_DIR || evento.cwd || process.cwd(); const fichero = evento.tool_input?.file_path ?? '(desconocido)'; const linea = `${new Date().toISOString()} ${evento.tool_name} ${path.basename(fichero)}\n`; fs.appendFileSync(path.join(proyecto, '.claude', 'cambios.log'), linea); });

Después, regístralo en .claude/settings.json, junto a los permisos de la fase 8:

.claude/settings.json · bloque hooks
"hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "node", "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/registrar-cambio.js"] } ] } ] }
  • PostToolUse + matcher "Edit|Write": se ejecuta justo después de que Claude edite o cree un fichero.
  • command + args («forma exec»): lanza Node directamente, sin pasar por una terminal, así que funciona igual en Windows, macOS y Linux.
  • ${CLAUDE_PROJECT_DIR}: la carpeta del proyecto. Úsala siempre: en nuestra primera prueba pusimos una ruta relativa y el hook falló cuando Claude trabajó desde otra carpeta.
Pantalla /hooks con 1 hook en PostToolUse: node ${CLAUDE_PROJECT_DIR}/.claude/hooks/registra... para Edit|Write
/hooks lista los hooks activos (es de solo lectura; para cambiarlos se edita el settings.json o se le pide a Claude).

Pide un cambio pequeño y comprueba el registro con el modo shell:

Claude Code
Añade debajo de la lista un pie de página discreto con el texto «Hecho con Claude Code». Es un cambio pequeño: no hace falta plan.
Modo shell con cat .claude/cambios.log mostrando dos líneas con fecha, Edit e index.html
El hook ha anotado cada edición. En Windows con Git para Windows, el modo shell usa Bash: por eso cat y no type. Añade .claude/cambios.log al .gitignore.
Paso 3 · Crea un subagente

Un revisor de accesibilidad que solo lee y nunca modifica:

.claude/agents/revisor-accesibilidad.md
--- name: revisor-accesibilidad description: Revisa la accesibilidad de páginas HTML (contraste, etiquetas, teclado, textos alternativos). Úsalo después de cambiar la interfaz. tools: Read, Grep, Glob model: sonnet --- Eres un experto en accesibilidad web (WCAG 2.2, nivel AA). Cuando te invoquen, revisa los ficheros HTML y CSS del proyecto y devuelve: 1. Un resumen de una línea con el estado general. 2. Como máximo 5 problemas, ordenados por gravedad, con fichero, línea y cómo arreglarlo. 3. Lo que ya está bien hecho, en una línea. Responde siempre en español. No modifiques ficheros: solo revisa.
  • description: cuándo debe usarlo Claude. Es lo más importante.
  • tools: solo lectura. Así no puede cambiar nada aunque quiera.
  • model: puede usar un modelo distinto, más ligero, para ahorrar.
Claude Code
Usa el subagente revisor-accesibilidad para revisar index.html.
Resultado de la revisión de accesibilidad con problemas de contraste, controles difíciles de ver y etiqueta del campo, lo que ya está bien y la propuesta de preparar un plan
Una revisión concreta, con líneas y medidas de contraste. Y como el CLAUDE.md lo pide, Claude propone un plan antes de corregir nada.
Paso 4 · Crea una skill

Una skill para redactar las novedades de la app a partir de los commits:

.claude/skills/novedades/SKILL.md
--- name: novedades description: Redacta la entrada de novedades (changelog) a partir de los últimos commits. Úsala cuando el usuario pida las novedades, el changelog o qué ha cambiado. argument-hint: "[número de commits]" --- ## Últimos commits !`git log --oneline -n 10` ## Instrucciones Con los commits anteriores (o los $ARGUMENTS últimos), redacta una entrada para NOVEDADES.md: - Un título con la fecha de hoy. - Novedades en «Añadido», «Cambiado» y «Corregido» (omite los grupos vacíos). - Frases cortas, en español y pensadas para el usuario de la app. Añade la entrada al principio de NOVEDADES.md (créalo si no existe) y enséñame el resultado.

La línea !`git log …` se ejecuta antes de que Claude lea la skill, así que recibe los commits ya escritos. Para tener commits que resumir, pide antes: «Haz commit de todos los cambios pendientes con un mensaje descriptivo».

Petición de permiso para un comando compuesto de git status, git diff y cat, con el aviso This command requires approval
Un detalle de los permisos: aunque git status está permitido, este comando encadena varios con &&, así que pide aprobación. Las reglas solo cubren lo que dicen exactamente.
Al escribir /novedades aparece la skill en el menú con su descripción
Tu skill aparece en el menú de comandos con su descripción. Pulsa Enter.
Claude crea NOVEDADES.md con la fecha de hoy y la sección Añadido con seis novedades escritas para el usuario
NOVEDADES.md, creado a partir de los commits, en lenguaje de usuario y sin mencionar la configuración interna.
✓ Gate 9 — Extensiones activas
✓
DeepWiki está en .mcp.json y lo he usado
✓
El hook anota cada edición en cambios.log
✓
El subagente ha revisado la accesibilidad
✓
/novedades ha creado NOVEDADES.md
✓
He hecho commit de la carpeta .claude y de .mcp.json

Fuentes oficiales: MCP · Hooks guide · Hooks reference · Subagents · Skills. Revisado el 15 de octubre de 2026 con Claude Code 2.1.300.

Hablemos →