BookinglyTech News
Inteligencia artificial

Un fallo en Claude Code deja pasar 49.964 tokens de un servidor MCP

La comprobación de caracteres se ejecuta antes que la de tokens, y con texto denso como el CJK la segunda nunca llega a dispararse. 24.000 caracteres son el doble del límite documentado.

3 min de lecturaDev.to0 vistas

Un servidor MCP conectado a Claude Code devolvió un resultado de 49.964 tokens, casi el doble del límite de 25.000 que la herramienta dice aplicar. El fallo está en el orden de sus dos comprobaciones: la de caracteres se ejecuta antes que la de tokens, y solo si la primera se activa entra la segunda.

El experimento se hizo con Claude Code 2.1.273, el modelo claude-opus-5[1m] y el 16 de septiembre de 2026, dentro de un directorio temporal. El servidor MCP era un script Python sin dependencias que habla JSON-RPC por stdio y expone dos herramientas: una devuelve exactamente los caracteres que se le pidan; la otra hace lo mismo pero declara en su _meta un "anthropic/maxResultSizeChars" de 300.000. Todo el resultado lleva un marcador al principio y otro al final, con un hash, para saber si el modelo lo recibió completo.

Dos umbrales, dos mensajes, dos formatos

La documentación de Claude Code habla de un límite de 25.000 tokens por defecto, modificable con la variable MAX_MCP_OUTPUT_TOKENS, y de un aviso a partir de 10.000. Menciona también que un servidor puede subir el umbral de persistencia a disco declarando _meta["anthropic/maxResultSizeChars"] en su entrada de tools/list, hasta un techo de 500.000 caracteres. Son dos unidades distintas en dos párrafos consecutivos, y el número del umbral medido en caracteres no aparece por ningún lado.

Con texto corriente, unas 2,6 letras por token, la escalera queda así:

  • 2.000, 30.000 y 45.000 caracteres: el texto entero llega al modelo, hasta 17.514 tokens en el último caso.
  • 52.000 y 62.000 caracteres: Claude Code lo sustituye por un bloque <persisted-output> con vista previa de 2 KB y la ruta al archivo guardado.
  • 66.000 y 70.000 caracteres: cambia el mensaje a "exceeds maximum allowed tokens" más una ruta.

Ese tercer tramo sí activa la comprobación de tokens, pero solo porque el recuento de caracteres ya la había dejado pasar. La cuenta que importa va detrás de la que no.

El problema aparece cuando el texto es denso. Con ideogramas CJK, unos dos caracteres por token, 24.000 caracteres no llegan al umbral de caracteres pero sí al de tokens: 49.964 en total, íntegros en el contexto, con su marcador final incluido. El doble del límite.

El autor apunta otra cosa: la advertencia de 10.000 tokens que la documentación dice que Claude Code muestra no apareció en ningún sitio en una ejecución headless. Se puede discutir si eso es un fallo de la herramienta o una limitación del modo sin interfaz. Tampoco se probó la interfaz interactiva.

Lo preocupante no es que el tope exista, es dónde está colocado. Mientras el chequeo de tokens dependa de que antes se haya sobrepasado un umbral en caracteres, cualquier carga con una densidad de tokens fuera de lo normal se cuela sin que nada la frene. Un servidor MCP malicioso o simplemente mal escrito puede meter casi 50.000 tokens de golpe en el contexto de un modelo, con el coste en entrada y el efecto sobre la ventana de contexto que eso conlleva. Nadie ha dicho todavía si Anthropic lo va a corregir ni en qué versión.