SSD Nodes Learn Hosting plans →
Guías Matt ConnorPor Matt Connor · Actualizado 2026-08-26

Agente, MCP o reglas: cual elegir para programar

Compara el coste en tokens de habilidades, servidores MCP y archivos de reglas. Aprende a optimizar tu ventana de contexto evitando el consumo innecesario en cada turno.

Habilidades de agente frente a servidores MCP y archivos de reglas: la respuesta corta

Las habilidades de agente, los servidores MCP y los archivos de reglas proporcionan información a un agente de programación. Elija según la función de dicha información. El protocolo MCP (Model Context Protocol) es para datos que pueden cambiar en la siguiente consulta. Una habilidad es para un procedimiento que puede documentar hoy y que seguirá siendo válido dentro de seis semanas. Un archivo de reglas es para los pocos hechos que deben cumplirse en cada sesión.

Esta elección tiene un coste, y ese coste es el contexto. Cada token invertido en una instrucción que el agente no necesitaba es un token que no está disponible para el código que está leyendo. Además, es un token que se paga de nuevo en cada turno, ya que toda la ventana de contexto se reenvía con cada solicitud. Por lo 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 uno antes de su uso

Los tres se cargan en momentos distintos, y esa diferencia temporal es lo que determina todo.

Un archivo de reglas se carga por completo al iniciar, en cada sesión, sea relevante o no. Claude Code lee CLAUDE.md al comienzo de cada conversación y lo carga íntegramente sin importar su longitud. El objetivo documentado es mantener menos de 200 líneas por archivo, ya que un archivo más largo consume más contexto y se sigue con menor fiabilidad. Ambos efectos actúan en la misma dirección, por lo que un archivo de reglas de 900 líneas es peor que inútil.

Una habilidad se carga en dos etapas. Al iniciar, solo la línea description del frontmatter de cada SKILL.md entra en el contexto, de modo que el modelo sabe que la habilidad existe y aproximadamente cuándo debe aplicarse. El cuerpo se carga cuando se invoca la habilidad. Por tanto, un documento de referencia de 400 líneas no le cuesta casi nada hasta el momento en que se necesita.

Un servidor MCP solía ser el más costoso, y aquí es donde la mayoría de las comparaciones que leerá han quedado obsoletas. La búsqueda de herramientas está activada de forma predeterminada en la versión actual de Claude Code. Solo los nombres de las herramientas y el campo de instrucciones del servidor se cargan al inicio de la sesión, y los esquemas JSON (JavaScript object notation) completos se difieren hasta que Claude los busca. Añadir un servidor ya no cuesta miles de tokens por adelantado. Sigue teniendo un coste, y sigue costando todo por adelantado en las configuraciones donde la búsqueda de herramientas está desactivada.

ChartStartup and post-use context cost, estimated tokens
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"
  }
]

Estas son estimaciones, no mediciones de su máquina. Provienen del tamaño del texto que carga cada mecanismo, a razón de aproximadamente cuatro caracteres por token: un archivo de reglas de 200 líneas equivale a unos 10 KB de markdown, la descripción de una habilidad tiene unos 160 caracteres y un servidor que expone doce herramientas conlleva unos 18 KB de esquema más un bloque de instrucciones de 2 KB. Claude Code trunca cada descripción de herramienta y cada campo de instrucciones del servidor a 2 KB, por lo que esa parte tiene un límite máximo. La siguiente sección le muestra cómo leer sus propios números reales.

Lea las dos primeras filas juntas. El archivo de reglas cuesta 2,500 tokens en una sesión donde nadie lo necesitó. La habilidad cuesta 40 tokens en esa misma sesión, y 3,000 en la única sesión de cada diez en la que se ejecuta. Las dos últimas filas corresponden al mismo servidor dos veces, con la búsqueda de herramientas activada y desactivada: 500 tokens frente a 4,500. Esa diferencia es la razón por la que todavía circula el consejo antiguo sobre la saturación de contexto en MCP.

La búsqueda de herramientas requiere un modelo que admita bloques tool_reference, lo que a fecha de agosto de 2026 significa Claude Sonnet 4.5, Haiku 4.5, Opus 4.5 y versiones posteriores. Claude Code la desactiva cuando ANTHROPIC_BASE_URL apunta a un host que no es de primera parte, ya que la mayoría de los proxies no reenvían esos bloques. Configure ENABLE_TOOL_SEARCH para controlarlo: false carga todos los esquemas por adelantado, true los difiere todos y auto los carga por adelantado solo 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 claude

La pregunta decisiva: ¿cambian los datos entre invocaciones?

Haga esta pregunta primero, ya que descarta 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, su propia API (interfaz de programación de aplicaciones) interna. Escribirlo no ayuda, porque lo que escribió queda obsoleto en el momento en que otra persona edita el registro. Su propio código fuente también pertenece a esa lista, ya que su estructura cambia con cada commit, que es la razón detrás de servir al agente un mapa analizado del repositorio mediante MCP en lugar de describir la estructura en un archivo que envejece.

Si la respuesta seguiría siendo correcta dentro de seis semanas sin que nadie la mantenga, necesita una habilidad (skill). Una lista de verificación de lanzamientos. Un procedimiento de migración. El formato de sus respuestas de error. Cómo quiere este repositorio que se escriban las pruebas. Una habilidad es un archivo en git. No tiene puerto, ni proceso, ni modo de fallo más allá de ser incorrecta, lo cual puede detectarse en una revisión de código.

Si es un hecho que debe aplicarse a un trabajo en el que aún no ha pensado, 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 uno. En el momento en que una entrada se convierte en pasos, deja de ser un hecho y se convierte en un procedimiento, y debería trasladarse a una habilidad.

Cuando un archivo de reglas es suficiente

Los archivos de reglas se cargan desde varias ubicaciones, de la más general a la más específica: un archivo de política gestionado, su ~/.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 entre sí, y los archivos más cercanos a su directorio de trabajo se leen al final.

Claude Code lee CLAUDE.md, no AGENTS.md. Si su repositorio ya contiene un AGENTS.md para otras herramientas, no mantenga dos copias que terminarán desincronizadas.

ln -s AGENTS.md CLAUDE.md

El enlace simbólico no muestra nada si tiene éxito. Inicie una sesión, ejecute /context y confirme que CLAUDE.md aparece bajo Memory files. Si no aparece allí, el agente nunca lo ha detectado y ninguna reformulación servirá. Cuando también desee líneas específicas para Claude, utilice la forma de importación y colóquelas 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 inicio junto con el archivo que lo referenció, hasta cuatro niveles de profundidad. Dividir un archivo de reglas de 600 líneas en seis importaciones lo organiza para los humanos y no cambia el costo de tokens en absoluto. Vale la pena leer las convenciones detrás de AGENTS.md y su gemelo orientado a humanos antes de decidirse por una estructura.

Lo que sí reduce el costo es .claude/rules/ con un campo paths. Un archivo de reglas que contiene un frontmatter paths solo se carga cuando el agente interactúa con 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 campo paths se carga al inicio con la misma prioridad que .claude/CLAUDE.md. Por lo tanto, el patrón de trabajo consiste en reglas cortas incondicionales, además de una lista paths para todo lo que solo sea relevante dentro de un directorio específico.

Cuando desea una skill

Una skill es un directorio que contiene un archivo SKILL.md en su interior. Las skills personales residen en ~/.claude/skills/<name>/SKILL.md y se aplican a todos los proyectos de su máquina. Las skills de proyecto residen en .claude/skills/<name>/SKILL.md, viajan con el repositorio y pueden revisarse en un pull request 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.

El description es la única parte de ese archivo que se encuentra en contexto antes de que se ejecute la skill, por lo que cumple dos funciones. Indica qué hace la skill y cuándo debe utilizarse. Una descripción que diga "Ayuda con los despliegues" no le proporciona al modelo nada con lo que comparar una solicitud, por lo que la skill simplemente nunca se activa y usted concluirá que las skills no funcionan.

El nombre del directorio se convierte en el comando, por lo que el ejemplo anterior le proporciona /summarize-changes. En una skill personal o de proyecto, el name del frontmatter solo establece la etiqueta de visualización en los listados.

Una vez invocada una skill, su contenido procesado se incorpora a la conversación como un solo 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 persistentes, no pasos de un solo uso, y mantenga el contenido conciso, porque a partir de ese momento cada línea genera un coste recurrente en cada solicitud. Tras la compactación automática, Claude Code vuelve a adjuntar la invocación más reciente de cada skill y conserva las primeras 5,000 tokens de cada una dentro de un presupuesto combinado de 25,000 tokens. Si invoca varias skills grandes en una sesión, las más antiguas se descartan por completo. Por eso una skill puede parecer menos relevante después de una conversación larga. Invóquela de nuevo para recuperarla. Una skill con muchos procedimientos hace visible ese intercambio: la skill unlazy y su método Depth Tree consume contexto real en controles y en un archivo de plan, a cambio de un agente que deja de declarar que el trabajo ha terminado antes de tiempo. Cuando el mismo procedimiento se aplica a más de una base de código, comparta una skill entre varios repositorios en lugar de copiar el archivo.

Cuándo necesita un servidor MCP

Añadir uno es una operación de 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

El -- es importante. Para un servidor stdio, separa las opciones propias de Claude Code de la línea de comandos que inicia su servidor. Si lo omite, un --port 8080 destinado al servidor se interpreta como una opción para claude mcp add, que lo rechazará.

claude mcp list
claude mcp get notion

claude mcp add confirma con una línea de Added ..., que solo indica que la configuración se escribió en el disco. claude mcp list es el comando que le dice la verdad, ya que imprime un estado de salud junto a cada servidor: ✔ Connected, ! Needs authentication o ✘ Failed to connect. Un estado de fallo significa que Claude Code no pudo contactar con ese servidor, no que el comando de listado haya fallado. Dentro de una sesión, /mcp ofrece la misma vista por servidor además del recuento de herramientas.

Cada llamada a un servidor MCP es independiente y contiene todo lo necesario, lo cual es por qué un servidor MCP no recuerda su petición anterior. Esa es una decisión de diseño con una consecuencia que usted hereda: cualquier estado que merezca ser conservado debe residir detrás del servidor, en una base de datos o un archivo, y eso es algo que ahora usted debe administrar.

Un servidor MCP es un proceso que debe ejecutar

Aquí está 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 tiempo de actividad.

Un servidor stdio es el caso económico. Claude Code lo inicia como un proceso hijo al comenzar la sesión y finaliza cuando esta termina. No hay nada que monitorizar ni que parchear bajo un calendario propio. Un servidor HTTP remoto es un servicio de larga duración y requiere lo que cualquier servicio de este tipo necesita.

[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.target
sudo systemctl daemon-reload
sudo systemctl enable --now notes-mcp
systemctl is-active notes-mcp
journalctl -u notes-mcp -n 50 --no-pager

systemctl is-active debería imprimir active. Si imprime failed, el journal contiene el motivo, y en una primera ejecución casi siempre se debe a una variable de entorno faltante o a un puerto ya ocupado por otro proceso. Restart=on-failure no es opcional aquí, porque un servidor MCP que se bloquea no avisa por sí mismo. Usted se entera cuando el agente le indica que no puede leer su gestor de incidencias.

Vincule el proceso a 127.0.0.1 y coloque un proxy inverso con TLS (seguridad de la capa de transporte) delante. 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 usted ha publicado. Ejecutar un servidor MCP en un VPS cubre correctamente el proxy, el certificado y la configuración del firewall.

Luego, calcule el trabajo recurrente de forma honesta. El servicio recibe actualizaciones de seguridad según su propio calendario, independiente del agente que se comunica con él. Su token OAuth caduca y claude mcp list comienza a imprimir ! Needs authentication en un momento inoportuno. Sus credenciales residen en un archivo de configuración o en una cabecera Authorization, por lo que requieren el mismo cuidado que cualquier otro secreto, lo cual es un tema en sí mismo: mantener los secretos fuera del alcance de un agente de IA. Nada de ese trabajo existe para una skill.

Pondere esto frente a la alternativa antes de construir. Si los datos detrás del servidor propuesto cambian aproximadamente una vez al trimestre, una skill que indique al agente dónde buscar y qué significan los campos es más barata que un servicio que usted debe mantener activo.

Cómo medir su propio coste de contexto

Deje de estimar y ejecute /context dentro de una sesión. Esto imprime el desglose de inicio: el prompt del sistema, los archivos de memoria, las herramientas y los servidores MCP, junto con el peso en tokens de cada uno.

Compruebe dos cosas. En Memory files, confirme que aparece cada archivo de reglas que espera. Un archivo ausente es invisible para el agente, por lo que es lo primero que debe descartar cuando se ignoran las instrucciones. Si el archivo aparece en la lista y la regla sigue sin aplicarse, la causa reside en otro lugar completamente distinto, y vale la pena revisar las razones por las que un agente ignora una instrucción que puede ver antes de volver a escribir la línea. Luego, observe cuánto le cuestan sus servidores. Si un servidor que utiliza dos veces al mes es una de las líneas más grandes de esa lista, desactívelo en /mcp y vuelva a activarlo para las sesiones que lo necesiten. La configuración se conserva en ambos casos.

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 al inicio, y se conectará la primera vez que se invoque una herramienta. Las herramientas están disponibles desde su primer mensaje, por lo que no hay nada que corregir. Establezca MCP_DISCOVERY_CACHE=0 si prefiere que todos los servidores se conecten al inicio. Para una visión más amplia, gestionar la ventana de contexto de Claude Code cubre lo que sobrevive a la compactación, y lo que esos tokens le cuestan realmente convierte los números en dinero.

¿Por qué mi skill nunca se activa?

La causa habitual es el description. Es el único texto en contexto antes de que se ejecute la skill, por lo que si no nombra la situación, nada coincide con ella. Escriba el activador en la frase: "Usar cuando el usuario pregunte qué ha cambiado, quiera un mensaje de commit o pida revisar su diff". Las descripciones vagas fallan silenciosamente, lo que hace que sea difícil de detectar.

La segunda causa es un error tipográfico en el frontmatter, y este es evidente. Una clave desconocida es rechazada directamente:

Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name

La tercera es la ubicación. Las skills de proyecto se cargan desde .claude/skills/ en su directorio de trabajo y en cada directorio padre hasta la raíz del repositorio. Las skills en directorios anidados por debajo de donde comenzó no se cargan al inicio. Aparecen la primera vez que el agente lee o edita un archivo dentro de ese subdirectorio, por lo que hasta entonces no se autocompletan y no pueden ser invocadas por su nombre.

El equivalente en MCP a este fallo silencioso es una entrada .mcp.json con un url y sin type. Claude Code lee cualquier entrada sin un type como un servidor stdio, por lo que omite la entrada e informa:

MCP server "notes" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry

Uso conjunto de los tres mecanismos

Estos mecanismos no compiten por el mismo espacio. Una configuración eficiente utiliza cada uno donde resulta económico. El archivo de reglas contiene un puñado de líneas que son válidas en cualquier contexto. Las habilidades (skills) contienen los procedimientos y solo se cargan cuando son aplicables. Un servidor MCP, o a veces dos, conecta los sistemas cuyo contenido no se puede predecir de antemano. Si aún está construyendo su modelo mental sobre el primero de ellos, qué es realmente una habilidad de agente cubre el formato en detalle.

Una prueba resuelve la mayoría de las dudas sobre dónde debe ubicarse cada elemento. Elimínelo, inicie una sesión nueva y asigne la tarea al agente. Si el agente es simplemente más lento, el elemento pertenecía a una habilidad. Si el agente se equivoca con total seguridad, el elemento pertenecía al archivo de reglas. Si el agente no puede obtener la información en absoluto, necesitaba el servidor y ahora también necesita un plan para mantener ese servidor operativo.

FAQ

¿Debería escribir una skill o levantar un servidor MCP?

Decida según si la información cambia o no entre una invocación y la siguiente. Si el agente debe leer un estado en tiempo real que alguien más puede editar, como un gestor de incidencias, una base de datos o un panel de control, necesita un servidor MCP, ya que cualquier cosa que escriba quedará obsoleta en cuanto el registro cambie. Si puede escribir la respuesta una vez y seguir siendo correcta dentro de seis semanas, escriba una skill. La skill es un archivo en git sin procesos que ejecutar, sin puertos que exponer y sin 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 por defecto en la versión actual de Claude Code, por lo que solo los nombres de las herramientas y el campo de instrucciones del servidor se cargan al iniciar la sesión, y los esquemas completos se obtienen cuando Claude los busca. La carga inicial sigue ocurriendo si la búsqueda de herramientas está desactivada: 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 ver en qué situación se encuentra, ya que las cifras de publicaciones comparativas antiguas asumen una carga inicial completa.

¿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 las instrucciones específicas para Claude debajo. Luego, inicie una sesión y ejecute /context para confirmar que CLAUDE.md aparece bajo los archivos de memoria (Memory files).

¿Por qué mi skill dejó de tener efecto a mitad de una sesión?

La causa 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, manteniendo los primeros 5.000 tokens de cada una, dentro de un presupuesto combinado de 25.000 tokens para todas ellas. Este presupuesto se llena empezando por la skill invocada más recientemente, por lo que si ha invocado varias skills grandes, las más antiguas se descartan por completo. Invoque la skill de nuevo para restaurar su contenido completo.

¿Cómo evito que un archivo de reglas largo se cargue en cada sesión?

Mueva las partes que solo importan en ocasiones a archivos .claude/rules/ con un campo paths en su frontmatter, de modo que cada uno se cargue solo cuando el agente acceda a un archivo coincidente. Dividir el archivo en importaciones @path no ayuda, ya que los archivos importados se expanden y cargan al inicio junto con el archivo que los referencia. Cualquier procedimiento de varios pasos, en lugar de un hecho permanente, debería convertirse en una skill, ya que el cuerpo de una skill no tiene coste hasta que se invoca.