Delegación a modelos locales (MCP local-delegate)
Tienes un servidor MCP (local-delegate) que expone modelos corriendo en una GPU propia
(vía llama-swap, Ollama, LM Studio o vLLM) como herramientas texto/imagen→texto. Delegar
a ellas conserva cuota de la suscripción: la generación verbosa y los inputs grandes (o
una imagen entera) se quedan fuera de tu contexto.
Regla de oro
¿Puedo describir el paso en UNA frase con un formato de salida explícito?
→ sí → usa una tool local_*.
→ no (necesita razonamiento, arquitectura, criterio, multi-fuente) → hazlo tú.
El mayor ahorro: path en vez de text
Para archivos/documentos grandes, pasa path (no leas el archivo tú primero). Las
tools que aceptan path leen el archivo del lado del servidor, así el contenido
completo nunca entra a tu contexto — solo recibes el resultado corto.
El coste de no delegar
Leer un archivo de 100 KB con Read cuesta ≈ 25 000 tokens de tu contexto. La misma
tarea con local_summarize(path=…) cuesta ≈ 200 tokens (solo el resumen que vuelve).
Esa diferencia es la que se pierde cada vez que se lee un archivo grande a mano en vez
de delegarlo.
Catálogo de tools
| Tool |
Cuándo |
Args clave |
Devuelve |
local_summarize |
Resumir texto o archivo largo |
path o text, max_words |
Resumen (prosa) |
local_classify |
Etiquetar en categorías fijas |
text, labels[] |
Una etiqueta |
local_extract |
Sacar campos estructurados |
fields[], path o text |
JSON |
local_boilerplate |
Generar código repetitivo |
spec, language, target (ruta absoluta), overwrite? |
Recibo: ruta y tamaño (el código va al archivo, no a tu contexto) |
local_delegate |
Escape genérico texto→texto |
task, input, output_format, model?, chunk? |
Texto |
local_lint_summary |
Resumir salida de lint/tests/CI |
path o text, max_words |
Resumen agrupado por archivo |
local_commit_msg |
Mensaje de commit desde un diff |
diff o path, style? |
Mensaje (revísalo siempre) |
local_translate |
Traducir texto o archivo |
target_lang, text o path |
Traducción |
local_explain_code |
Explicar qué hace un código |
code o path, question? |
Explicación (prosa) |
local_describe_image |
Describir una imagen o responder una pregunta sobre ella |
path, question? |
Descripción (prosa) |
local_status |
Diagnóstico de solo lectura |
— |
Backend/catálogo/log/VRAM |
Los ids de modelos del catálogo (mecánico/largo/código/rápido/visión) son configurables por
env y pueden cambiar entre máquinas: consulta local_status para ver el catálogo
activo en vez de asumir nombres fijos. local_describe_image es solo imagen→texto
(describir, leer texto visible, responder una pregunta puntual) — nunca genera ni edita
imágenes.
Documentos largos
local_translate (y local_delegate con entradas largas) parten el texto por límites
naturales —headers Markdown, párrafos— y procesan cada trozo en su propia llamada,
concatenando las salidas en orden. Un documento de 20 000+ caracteres vuelve completo,
sin el aviso [salida truncada]. Esa estrategia sirve para transformar todo el texto
(traducir, reescribir, reformatear); para tareas de reducción sobre el conjunto (contar,
elegir el máximo, un único resumen global) usa local_summarize o chunk='off'.
Cuándo SÍ delegar (ejemplos)
- Resumir un log/archivo grande para saber qué contiene →
local_summarize(path=…).
- Clasificar un issue/mensaje en bug/feature/pregunta →
local_classify.
- Extraer
{nombre, error, endpoint} de un texto → local_extract.
- Generar el esqueleto de un CLI/argparse, un dataclass, un parser →
local_boilerplate(target=…),
que lo deja escrito en el archivo en vez de devolverte el código.
- Resumir la salida de un lint/test/build largo volcada a fichero →
local_lint_summary(path=…).
- Redactar el mensaje de commit a partir de un
git diff → local_commit_msg.
- Traducir un texto o archivo →
local_translate.
- Explicar qué hace un archivo de código antes de tocarlo →
local_explain_code(path=…).
- Describir una captura de pantalla o leer texto de una imagen →
local_describe_image(path=…).
- Verificar que el backend local está vivo antes de delegar en masa, o diagnosticar un
fallo →
local_status.
- Primera pasada mecánica antes de tu revisión fina.
Cuándo NO delegar
- Diseño/arquitectura, decisiones de trade-offs, refactors amplios.
- Research multi-fuente o razonamiento encadenado.
- Cualquier cosa donde la calidad del resultado dependa de criterio, no de formato.
- Código crítico o sutil: úsalo como borrador y revísalo siempre.
Notas
- Las tools devuelven solo texto; el modelo local no usa tool-calling.
- Si una tool devuelve
[local-delegate error] …, es que el backend no respondió;
cae de vuelta a hacerlo tú y avisa. Usa local_status para diagnosticar por qué.
- La primera llamada a un modelo puede tardar unos segundos (cold-load del swap).
- El dashboard (
http://127.0.0.1:9393) muestra el ahorro acumulado, las delegaciones en
curso y si el cómputo corrió en el backend local o en uno remoto.
1---2name: delegacion-local3description: Regla y catálogo para delegar pasos mecánicos (resumir, clasificar, extraer, boilerplate, mensaje de commit desde un diff, traducir texto o archivo, resumir salida de lint/tests/CI, explicar código, describir una imagen, verificar si el backend local está disponible) a modelos locales vía las tools local_* del MCP local-delegate, para conservar cuota de la suscripción. Consúltala cuando vayas a resumir/clasificar/extraer de archivos o texto largos, generar boilerplate de código, describir/leer una imagen, o hacer una primera pasada mecánica — antes de generarlo tú mismo.4---56# Delegación a modelos locales (MCP `local-delegate`)78Tienes un servidor MCP (`local-delegate`) que expone modelos corriendo en una GPU propia9(vía llama-swap, Ollama, LM Studio o vLLM) como herramientas **texto/imagen→texto**. Delegar10a ellas **conserva cuota de la suscripción**: la generación verbosa y los inputs grandes (o11una imagen entera) se quedan fuera de tu contexto.1213## Regla de oro1415> **¿Puedo describir el paso en UNA frase con un formato de salida explícito?**16> → **sí** → usa una tool `local_*`.17> → **no** (necesita razonamiento, arquitectura, criterio, multi-fuente) → **hazlo tú**.1819## El mayor ahorro: `path` en vez de `text`2021Para archivos/documentos grandes, pasa **`path`** (no leas el archivo tú primero). Las22tools que aceptan `path` **leen el archivo del lado del servidor**, así el contenido23completo **nunca entra a tu contexto** — solo recibes el resultado corto.2425## El coste de no delegar2627Leer un archivo de 100 KB con `Read` cuesta ≈ 25 000 tokens de tu contexto. La misma28tarea con `local_summarize(path=…)` cuesta ≈ 200 tokens (solo el resumen que vuelve).29Esa diferencia es la que se pierde cada vez que se lee un archivo grande a mano en vez30de delegarlo.3132## Catálogo de tools3334| Tool | Cuándo | Args clave | Devuelve |35|---|---|---|---|36| `local_summarize` | Resumir texto o archivo largo | `path` **o** `text`, `max_words` | Resumen (prosa) |37| `local_classify` | Etiquetar en categorías fijas | `text`, `labels[]` | Una etiqueta |38| `local_extract` | Sacar campos estructurados | `fields[]`, `path` **o** `text` | JSON |39| `local_boilerplate` | Generar código repetitivo | `spec`, `language`, `target` (ruta absoluta), `overwrite?` | Recibo: ruta y tamaño (el código va al archivo, no a tu contexto) |40| `local_delegate` | Escape genérico texto→texto | `task`, `input`, `output_format`, `model?`, `chunk?` | Texto |41| `local_lint_summary` | Resumir salida de lint/tests/CI | `path` **o** `text`, `max_words` | Resumen agrupado por archivo |42| `local_commit_msg` | Mensaje de commit desde un diff | `diff` **o** `path`, `style?` | Mensaje (revísalo siempre) |43| `local_translate` | Traducir texto o archivo | `target_lang`, `text` **o** `path` | Traducción |44| `local_explain_code` | Explicar qué hace un código | `code` **o** `path`, `question?` | Explicación (prosa) |45| `local_describe_image` | Describir una imagen o responder una pregunta sobre ella | `path`, `question?` | Descripción (prosa) |46| `local_status` | Diagnóstico de solo lectura | — | Backend/catálogo/log/VRAM |4748Los ids de modelos del catálogo (mecánico/largo/código/rápido/visión) son configurables por49env y pueden cambiar entre máquinas: consulta `local_status` para ver el catálogo50activo en vez de asumir nombres fijos. `local_describe_image` es **solo imagen→texto**51(describir, leer texto visible, responder una pregunta puntual) — nunca genera ni edita52imágenes.5354## Documentos largos5556`local_translate` (y `local_delegate` con entradas largas) parten el texto por límites57naturales —headers Markdown, párrafos— y procesan cada trozo en su propia llamada,58concatenando las salidas en orden. Un documento de 20 000+ caracteres vuelve **completo**,59sin el aviso `[salida truncada]`. Esa estrategia sirve para transformar todo el texto60(traducir, reescribir, reformatear); para tareas de reducción sobre el conjunto (contar,61elegir el máximo, un único resumen global) usa `local_summarize` o `chunk='off'`.6263## Cuándo SÍ delegar (ejemplos)64- Resumir un log/archivo grande para saber qué contiene → `local_summarize(path=…)`.65- Clasificar un issue/mensaje en bug/feature/pregunta → `local_classify`.66- Extraer `{nombre, error, endpoint}` de un texto → `local_extract`.67- Generar el esqueleto de un CLI/argparse, un dataclass, un parser → `local_boilerplate(target=…)`,68 que lo deja escrito en el archivo en vez de devolverte el código.69- Resumir la salida de un lint/test/build largo volcada a fichero → `local_lint_summary(path=…)`.70- Redactar el mensaje de commit a partir de un `git diff` → `local_commit_msg`.71- Traducir un texto o archivo → `local_translate`.72- Explicar qué hace un archivo de código antes de tocarlo → `local_explain_code(path=…)`.73- Describir una captura de pantalla o leer texto de una imagen → `local_describe_image(path=…)`.74- Verificar que el backend local está vivo antes de delegar en masa, o diagnosticar un75 fallo → `local_status`.76- Primera pasada mecánica antes de tu revisión fina.7778## Cuándo NO delegar79- Diseño/arquitectura, decisiones de trade-offs, refactors amplios.80- Research multi-fuente o razonamiento encadenado.81- Cualquier cosa donde la calidad del resultado dependa de criterio, no de formato.82- Código crítico o sutil: úsalo como borrador y **revísalo siempre**.8384## Notas85- Las tools devuelven **solo texto**; el modelo local no usa tool-calling.86- Si una tool devuelve `[local-delegate error] …`, es que el backend no respondió;87 cae de vuelta a hacerlo tú y avisa. Usa `local_status` para diagnosticar por qué.88- La primera llamada a un modelo puede tardar unos segundos (cold-load del swap).89- El dashboard (`http://127.0.0.1:9393`) muestra el ahorro acumulado, las delegaciones en90 curso y si el cómputo corrió en el backend local o en uno remoto.