Habilidades de agentes, MCP o archivos de reglas
Compara habilidades, servidores MCP y archivos de reglas: cuándo usar cada uno, qué contexto consumen y cómo reducir tokens y mantenimiento en cada sesión.
Habilidades de agentes frente a servidores MCP y archivos de reglas: respuesta breve
Las habilidades de agentes, los servidores MCP y los archivos de reglas ponen conocimientos a disposición de un agente de programación. Elija según la función de esos conocimientos. MCP (model context protocol) sirve para datos que pueden ser diferentes la próxima vez que los consulte. Una habilidad sirve para un procedimiento que podría documentar hoy y que seguiría siendo válido dentro de seis semanas. Un archivo de reglas sirve para los pocos datos que deben cumplirse en todas las sesiones.
Esta elección tiene un coste: el contexto. Cada token dedicado a una instrucción que el agente no necesitaba es un token que no puede usar para el código que está leyendo. Además, paga ese token otra vez en cada turno, porque toda la ventana de contexto se vuelve a enviar con cada solicitud. Por tanto, la pregunta útil no es qué mecanismo puede realizar el trabajo. La mayoría de los días, los tres pueden hacerlo. La pregunta es cuál cuesta menos mientras permanece inactivo.
El coste de cada opción antes de usarla
Las tres se cargan en momentos distintos, y esa diferencia temporal lo cambia todo.
Un archivo de reglas se carga completo al iniciar, en todas las sesiones, sea pertinente o no. Claude Code lee CLAUDE.md al principio de cada conversación y lo carga completo, independientemente de su longitud. El objetivo documentado es mantener menos de 200 líneas por archivo, porque un archivo más largo consume más contexto y se sigue de forma menos fiable. Ambos efectos apuntan en la misma dirección. Por eso, un archivo de reglas de 900 líneas es peor que inútil.
Una skill se carga en dos etapas. Durante el inicio, sólo entra en el contexto la línea description del frontmatter SKILL.md de cada skill. Así, el modelo sabe que la skill existe y cuándo se aplica aproximadamente. El cuerpo se carga cuando se invoca la skill. Por tanto, un documento de referencia de 400 líneas apenas tiene coste hasta que se necesita.
Antes, un servidor MCP era la opción más costosa. Esta es la parte en la que la mayoría de las comparaciones que encontrará están desactualizadas. Tool search está activado de forma predeterminada en las versiones actuales de Claude Code. Al iniciar la sesión sólo se cargan los nombres de las herramientas y el campo de instrucciones del servidor. Los esquemas JSON (JavaScript object notation) completos se aplazan hasta que Claude los busca. Añadir un servidor ya no cuesta miles de tokens al principio. Aun así, tiene un coste, y en las configuraciones donde tool search está desactivado, todo ese coste se produce al principio.
The data behind this chart
[
{
"label": "Rules file, 200 lines",
"at_startup": "2,500",
"after_use": "2,500"
},
{
"label": "Skill, 12 KB body",
"at_startup": 40,
"after_use": "3,000"
},
{
"label": "MCP server, tool search on",
"at_startup": 500,
"after_use": "3,200"
},
{
"label": "MCP server, tool search off",
"at_startup": "4,500",
"after_use": "4,500"
}
]Son estimaciones, no mediciones realizadas en su máquina. Se basan en el tamaño del texto que carga cada mecanismo, con una equivalencia aproximada de cuatro caracteres por token: un archivo de reglas de 200 líneas ocupa unos 10 KB de Markdown, la descripción de una skill unos 160 caracteres y un servidor que expone doce herramientas incluye unos 18 KB de esquemas y un bloque de instrucciones de 2 KB. Claude Code trunca a 2 KB la descripción de cada herramienta y el campo de instrucciones de cada servidor, por lo que esa parte tiene un límite máximo. En la siguiente sección verá cómo leer sus propios valores reales.
Lea juntas las dos primeras filas. El archivo de reglas cuesta 2,500 tokens en una sesión en la que nadie lo necesitó. La skill cuesta 40 tokens en esa misma sesión y 3,000 en una de cada diez sesiones, cuando se activa. Las dos últimas filas corresponden al mismo servidor, primero con tool search activado y después desactivado: 500 tokens frente a 4,500. Esa diferencia explica por qué sigue circulando el antiguo consejo sobre el exceso de contexto de MCP.
Tool search requiere un modelo compatible con bloques tool_reference. A fecha de agosto de 2026, esto significa Claude Sonnet 4.5, Haiku 4.5, Opus 4.5 y versiones posteriores. Claude Code lo desactiva cuando ANTHROPIC_BASE_URL apunta a un host que no es first party, porque la mayoría de los proxies no reenvían esos bloques. Establezca ENABLE_TOOL_SEARCH para controlarlo: false carga todos los esquemas al principio, true aplaza todos los esquemas y auto los carga al principio sólo cuando caben dentro del 10% de la ventana de contexto.
# Load schemas up front only if they fit in 5% of the window
ENABLE_TOOL_SEARCH=auto:5 claudeLa pregunta decisiva es: ¿cambian los datos entre invocaciones?
Hágala primero, porque elimina una opción de inmediato. Si el agente necesita leer o escribir algo que puede ser diferente la próxima vez que lo consulte, necesita un servidor. Un gestor de incidencias, una base de datos, un panel de monitorización o su propia API (interfaz de programación de aplicaciones) interna. Escribirlo no sirve de nada, porque lo que escribió queda obsoleto en cuanto otra persona edita el registro.
Si la respuesta siguiera siendo correcta dentro de seis semanas sin que nadie la mantuviera, necesita una skill. Una lista de comprobación para releases. Un procedimiento de migración. La estructura de sus respuestas de error. La forma en que este repositorio espera que se escriban las pruebas. Una skill es un archivo en git. No tiene ningún puerto ni proceso, y su único modo de fallo es estar equivocada, algo que una revisión de código puede detectar.
Si se trata de un hecho que debe aplicarse a trabajo que todavía no ha previsto, colóquelo en el archivo de reglas. Run make lint before committing. Never push to main. Handlers live in src/api/handlers/. Una línea por cada hecho. En cuanto una entrada crece hasta convertirse en una serie de pasos, deja de ser un hecho y se convierte en un procedimiento, por lo que debe trasladarse a una skill.
Cuando basta un archivo de reglas
Los archivos de reglas se cargan desde varios lugares, del más general al más específico: un archivo de políticas administrado, tu ~/.claude/CLAUDE.md personal, el ./CLAUDE.md o ./.claude/CLAUDE.md del proyecto y un ./CLAUDE.local.md ignorado por git. Todos los archivos encontrados se concatenan en lugar de sobrescribirse, y los archivos más cercanos a tu directorio de trabajo se leen en último lugar.
Claude Code lee CLAUDE.md, no AGENTS.md. Si tu repositorio ya incluye un AGENTS.md para otras herramientas, no mantengas dos copias que puedan quedar desactualizadas entre sí.
ln -s AGENTS.md CLAUDE.mdEl enlace simbólico no muestra nada si la operación se completa correctamente. Inicia una sesión, ejecuta /context y confirma que CLAUDE.md aparezca en Archivos de memoria. Si no aparece en la lista, el agente nunca lo ha visto y reformularlo no servirá de nada. Si también quieres incluir líneas específicas de Claude, usa en su lugar el formulario de importación y colócalas debajo de la importación.
@AGENTS.md
## Claude Code
Use plan mode for changes under `src/billing/`.Aquí hay una trampa. Las importaciones de @path no guardan contexto. El archivo importado se expande y se carga al iniciar, junto con el archivo que lo referencia, hasta una profundidad de cuatro saltos. Dividir un archivo de reglas de 600 líneas en seis importaciones lo organiza para las personas y no cambia en absoluto el coste de tokens. Vale la pena leer las convenciones de AGENTS.md y su equivalente orientado a las personas antes de decidir una estructura.
Lo que sí reduce el coste es .claude/rules/ con un campo paths. Un archivo de reglas que contiene metadatos iniciales paths sólo se carga cuando el agente accede a un archivo que coincide con uno de los patrones.
---
paths:
- "src/api/**/*.ts"
---
# API rules
- Every endpoint validates its input.
- Use the standard error response shape.Una regla sin el campo paths se carga al iniciar con la misma prioridad que .claude/CLAUDE.md. Por tanto, el patrón de uso consiste en reglas incondicionales breves y una lista paths en todo lo que sólo sea relevante dentro de un directorio.
Cuando necesite una habilidad
Una habilidad es un directorio que contiene un archivo SKILL.md. Las habilidades personales se encuentran en ~/.claude/skills/<name>/SKILL.md y se aplican a todos los proyectos del equipo. Las habilidades del proyecto se encuentran en .claude/skills/<name>/SKILL.md, se mantienen junto con el repositorio y se pueden revisar en una solicitud de incorporación de cambios como cualquier otro archivo.
mkdir -p ~/.claude/skills/summarize-changes---
name: summarize-changes
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---
Run `git status` and `git diff` against the merge base.
Group the changes by intent, not by file.
Call out anything touching auth, migrations or deletions.description es la única parte de ese archivo que se carga en el contexto antes de que se ejecute la habilidad, por lo que cumple dos funciones. Indica qué hace la habilidad y cuándo se debe utilizar. Una descripción como "Ayuda con los despliegues" no proporciona al modelo ningún elemento que pueda asociar con una solicitud. Por eso, la habilidad nunca se activa y se puede concluir que las habilidades no funcionan.
El nombre del directorio se convierte en el comando, por lo que el ejemplo anterior proporciona /summarize-changes. En una habilidad personal o de proyecto, el campo name del frontmatter sólo establece la etiqueta que se muestra en los listados.
Cuando se invoca una habilidad, su contenido renderizado entra en la conversación como un único mensaje y permanece allí durante el resto de la sesión. Claude Code no vuelve a leer el archivo en los turnos posteriores. Escriba instrucciones permanentes en lugar de pasos para una sola ejecución y mantenga el cuerpo conciso, porque desde ese momento cada línea supone un coste recurrente en cada solicitud. Después de la compactación automática, Claude Code vuelve a adjuntar la invocación más reciente de cada habilidad y conserva los primeros 5,000 tokens de cada una dentro de un presupuesto combinado de 25,000 tokens. Si invoca varias habilidades grandes en una misma sesión, las más antiguas se descartan por completo. Por eso, una habilidad puede parecer que deja de tener efecto después de una conversación larga. Vuelva a invocarla para recuperarla. Cuando el mismo procedimiento se aplica a más de un código base, comparta una habilidad entre varios repositorios en lugar de copiar el archivo.
Cuando necesitas un servidor MCP
Añadir uno requiere un solo comando, y el transporte determina su forma.
# Remote HTTP server
claude mcp add --transport http notion https://mcp.notion.com/mcp
# Remote HTTP server behind a bearer token
claude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer your-token"
# Local stdio server: everything after -- is passed through untouched
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
-- npx -y airtable-mcp-server-- es importante. En un servidor stdio, separa las opciones propias de Claude Code de la línea de comandos que inicia el servidor. Si se omite, un --port 8080 destinado al servidor se interpreta como una opción de claude mcp add, que lo rechaza.
claude mcp list
claude mcp get notionclaude mcp add confirma la operación con una línea Added ..., que sólo indica que la configuración se escribió en el disco. claude mcp list es el comando que muestra la situación real, porque imprime el estado de salud junto a cada servidor: ✔ Connected, ! Needs authentication o ✘ Failed to connect. Un estado de error significa que Claude Code no pudo conectarse a ese servidor, no que haya fallado el comando de listado. Dentro de una sesión, /mcp muestra la misma información por servidor y también el número de herramientas.
Cada llamada a un servidor MCP es independiente e incluye todo lo que necesita. Por eso un servidor MCP no recuerda la solicitud anterior. Es una decisión de diseño con una consecuencia que debe asumir: cualquier estado que deba conservarse tiene que residir detrás del servidor, en una base de datos o en un archivo, y ahora usted debe operar ese componente.
Un servidor MCP es un proceso que debe ejecutar
Este es el coste que las comparativas de proveedores omiten. Una skill es un archivo. Un servidor MCP es software que se ejecuta en algún lugar y, cuando ese lugar es su VPS (servidor privado virtual), usted es responsable de su disponibilidad.
Un servidor stdio es el caso más sencillo. Claude Code lo inicia como proceso hijo cuando comienza la sesión y termina cuando finaliza la sesión. No hay nada que monitorizar ni que actualizar según un calendario propio. Un servidor HTTP remoto es un servicio de ejecución prolongada y necesita lo mismo que cualquier otro servicio de este tipo.
[Unit]
Description=Notes MCP server
After=network-online.target
Wants=network-online.target
[Service]
User=mcp
WorkingDirectory=/srv/notes-mcp
ExecStart=/usr/bin/node /srv/notes-mcp/dist/server.js
Environment=PORT=8931
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now notes-mcp
systemctl is-active notes-mcp
journalctl -u notes-mcp -n 50 --no-pagersystemctl is-active debería mostrar active. Si muestra failed, el journal contiene el motivo y, en la primera ejecución, casi siempre se debe a una variable de entorno ausente o a que otro proceso ya está usando el puerto. Restart=on-failure no es opcional en este caso, porque un servidor MCP detenido por un fallo no lo comunica por sí mismo. Se entera cuando el agente le informa de que no puede leer su sistema de seguimiento de incidencias.
Enlace el proceso a 127.0.0.1 y coloque delante un reverse proxy con TLS (seguridad de la capa de transporte). Un servidor MCP que accede a su base de datos y responde en un puerto público sin autenticación es una base de datos que ha publicado. Ejecutar un servidor MCP en un VPS explica correctamente la configuración del proxy, el certificado y el firewall.
Después, contabilice honestamente el trabajo recurrente. El servicio recibe actualizaciones de seguridad según su propio calendario, sin relación con el agente que se comunica con él. Su token OAuth caduca y claude mcp list empieza a mostrar ! Needs authentication en un momento inoportuno. Sus credenciales se almacenan en un archivo de configuración o en una cabecera Authorization, por lo que necesitan el mismo cuidado que cualquier otro secreto. Este es un tema amplio por sí mismo: mantener los secretos fuera del alcance de un agente de IA. Nada de esto existe en el caso de una skill.
Compare esta opción con la alternativa antes de implementarla. Si los datos del servidor propuesto cambian aproximadamente una vez por trimestre, una skill que indique al agente dónde buscar y qué significan los campos resulta más barata que un servicio que debe mantener activo.
Cómo medir el coste de tu propio contexto
Deja de hacer estimaciones y ejecuta /context dentro de una sesión. Muestra el desglose del arranque: el prompt del sistema, los archivos de memoria, las herramientas y los servidores MCP, junto con el peso en tokens de cada elemento.
Comprueba dos aspectos. En Archivos de memoria, confirma que aparezca cada archivo de reglas que esperas. Si falta un archivo, el agente no puede verlo. Por tanto, es lo primero que debes descartar cuando se ignoran las instrucciones. Después, revisa el coste de tus servidores. Si un servidor que usas dos veces al mes es una de las líneas con mayor coste de la lista, desactívalo en /mcp y vuelve a activarlo en las sesiones que lo necesiten. La configuración se conserva en cualquier caso.
Un servidor remoto también puede informar de un estado como cached 2h ago · connects on first use · 5 tools. Esto significa que Claude Code leyó la lista de herramientas de una sesión anterior en lugar de conectarse durante el arranque. Se conectará la primera vez que se llame a una herramienta. Las herramientas están disponibles desde tu primer mensaje, por lo que no hay nada que corregir. Define MCP_DISCOVERY_CACHE=0 si prefieres que todos los servidores se conecten durante el arranque. Para una visión más amplia, administrar la ventana de contexto de Claude Code explica qué se conserva tras la compactación, y qué coste real tienen esos tokens convierte las cifras en dinero.
¿Por qué nunca se activa mi skill?
La causa habitual es description. Es el único texto disponible en el contexto antes de que se ejecute el skill, por lo que, si no describe la situación, no se produce ninguna coincidencia. Escriba el activador dentro de la frase: «Use cuando el usuario pregunte qué ha cambiado, quiera un mensaje de commit o pida revisar su diff». Las descripciones vagas fallan silenciosamente, por lo que es difícil detectarlo.
La segunda causa es un error tipográfico en frontmatter, y este produce un error visible. Una clave desconocida se rechaza directamente:
Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, nameLa tercera causa es la ubicación. Los skills del proyecto se cargan desde .claude/skills/ en el directorio de trabajo y en todos sus directorios padre hasta la raíz del repositorio. Los skills de directorios anidados por debajo del directorio desde el que inició la sesión no se cargan al iniciar. Aparecen la primera vez que el agente lee o edita un archivo dentro de ese subdirectorio. Hasta entonces, no se completan automáticamente ni se pueden invocar por nombre.
El equivalente de este fallo silencioso en MCP es una entrada .mcp.json con url y sin type. Claude Code interpreta cualquier entrada sin type como un servidor stdio, por lo que omite la entrada e informa de lo siguiente:
MCP server "notes" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entryUsar los tres juntos
Estos mecanismos no compiten por el mismo espacio. Una configuración eficaz usa cada uno donde resulta más económico. El archivo de reglas contiene unas pocas líneas que son válidas en todas partes. Las skills contienen los procedimientos y sólo se cargan cuando corresponden. Un servidor MCP, o dos en algunos casos, conecta los sistemas cuyo contenido no se puede predecir de antemano. Si todavía está formando su modelo mental del primero de estos mecanismos, qué es realmente una skill de agente explica el formato en detalle.
Una prueba resuelve la mayoría de las dudas sobre dónde debe ir algo. Elimínelo, inicie una sesión nueva y asigne la tarea al agente. Si el agente sólo es más lento, debía estar en una skill. Si el agente se equivoca con seguridad, debía estar en el archivo de reglas. Si el agente no puede obtener la información, necesitaba el servidor, y ahora también necesita un plan para mantenerlo activo.
FAQ
¿Debo escribir un skill o configurar un servidor MCP?
Decídalo según si la información cambia entre una invocación y la siguiente. Si el agente debe leer el estado actual que otra persona puede modificar, como un gestor de incidencias, una base de datos o un panel, necesita un servidor MCP, porque cualquier información que escriba queda obsoleta en cuanto cambia el registro. Si pudiera escribir la respuesta una sola vez y siguiera siendo correcta dentro de seis semanas, escriba un skill. El skill es un archivo en git que no requiere ningún proceso en ejecución, ningún puerto que exponer ni un calendario de parches, por lo que es la opción más económica siempre que sea posible.
¿Los servidores MCP siguen llenando mi ventana de contexto?
Mucho menos que antes. La búsqueda de herramientas está habilitada de forma predeterminada en las versiones actuales de Claude Code, por lo que al inicio de la sesión sólo se cargan los nombres de las herramientas y el campo de instrucciones del servidor. Los esquemas completos se obtienen cuando Claude los busca. La carga inicial sigue produciéndose cuando la búsqueda de herramientas está deshabilitada: con ENABLE_TOOL_SEARCH=false, con ANTHROPIC_BASE_URL apuntando a un proxy que no es de primera parte o en un modelo anterior a la generación Claude 4.5. Ejecute /context para comprobar en cuál de estas situaciones se encuentra, porque las cifras de las comparativas antiguas presuponen una carga inicial.
¿Claude Code lee AGENTS.md?
No. Claude Code lee CLAUDE.md. Si su repositorio ya tiene un AGENTS.md para otros agentes, haga que uno apunte al otro en lugar de mantener dos copias. Ejecute ln -s AGENTS.md CLAUDE.md para crear un enlace simbólico simple, o coloque @AGENTS.md en la primera línea de un CLAUDE.md y añada debajo las instrucciones específicas de Claude. Después, inicie una sesión y ejecute /context para confirmar que CLAUDE.md aparece en Archivos de memoria.
¿Por qué mi skill dejó de tener efecto a mitad de una sesión?
La razón habitual es la compactación automática. Cuando se resume la conversación, Claude Code vuelve a adjuntar la invocación más reciente de cada skill y conserva los primeros 5,000 tokens de cada uno, dentro de un presupuesto combinado de 25,000 tokens entre todos. El presupuesto se completa empezando por el skill invocado más recientemente. Por eso, si ha invocado varios skills grandes, los más antiguos se descartan por completo. Vuelva a invocar el skill para restaurar todo su contenido.
¿Cómo evito que un archivo de reglas largo se cargue en todas las sesiones?
Mueva las partes que sólo son necesarias en ocasiones a archivos .claude/rules/ con un campo paths en su frontmatter, de modo que cada archivo se cargue sólo cuando el agente acceda a un archivo coincidente. Dividir el archivo en importaciones @path no ayuda, porque los archivos importados se expanden y se cargan al iniciar, junto con el archivo que los referencia. Cualquier procedimiento de varios pasos, en lugar de un dato permanente, debería convertirse en un skill, porque el contenido de un skill no tiene ningún coste hasta que se invoca.