Las tuberías nombradas (named pipes) ofrecen una alternativa más eficiente que CLI y MCP para integrar herramientas locales en agentes IA. Según análisis recientes, con named pipes conseguís latencia mínima sin el overhead de 54.000 tokens que requiere MCP, posicionándose como la better alternative CLI and para aplicaciones de baja latencia.
En 30 segundos
- Named pipes (tuberías nombradas) son un mecanismo de comunicación entre procesos que funciona en kernel memory sin disk I/O, ofreciendo latencia similar a memoria compartida pero con seguridad
- Comparado con MCP, named pipes requieren 562 tokens contra 54.000 de MCP, permitiendo que CLI complete 28% más tareas con el mismo presupuesto de tokens (datos 2026)
- La arquitectura escalable incluye TextNamedPipe, DataNamedPipe, ToolNamedPipe, ChatNamedPipe y TTSNamedPipe, permitiendo multiplexing de múltiples clientes concurrentes
- Ideal para herramientas locales tiempo real (voice agents, vector search, text-to-speech), mientras que MCP sigue siendo mejor para servicios remotos multi-tenant
- Necesitás un servidor corriendo localmente exponiendo pipes, con clientes que se conectan vía la utilidad CLI ‘cpipe’ (similar a curl pero para pipes)
Named pipes es un mecanismo de comunicación entre procesos que permite a aplicaciones distintas intercambiar datos a través de un punto de conexión en el filesystem (pero sin pasar por disco). Los datos quedan en kernel memory, lo que hace la comunicación explosivamente rápida comparada con CLI o MCP.
El problema: CLI vs MCP para herramientas locales
Ponele que tenés un agente Claude corriendo localmente y necesita acceder a una herramienta tuya: digamos, un generador de thumbnails con ML, un search local en vectores, o un modelo de speech-to-text. ¿Cómo se conectan?
Hoy tenés básicamente dos caminos. El primero es CLI: tu agente hace spawn a un proceso hijo, le pasa los parámetros por stdin o como arguments, espera el resultado por stdout (y acá pasa algo que no te contaron: cada invocación recarga el estado completo de la herramienta, recompila, reinicializa modelos). Eso come tiempo y tokens. Benchmarks de 2026 muestran que una invocación vía CLI genera 562 tokens de overhead.
El segundo es MCP (Model Context Protocol). La empresa detrás de Claude lo creó hace poco para estandarizar cómo los modelos hablan con herramientas externas. Suena bien en teoría: hay especificación, hay tooling, “es estándar”. La realidad: requiere 54.000 tokens solo en describir la herramienta, sus parámetros, su schema. CircleCI documentó que con el mismo presupuesto de tokens, CLI completa 28% más tareas que MCP (sí, la que parecía primitiva gana). Además MCP tiene complejidad arquitectónica: necesitás un servidor MCP, manejar conexiones, implementar la spec. Para una herramienta local, es matarse con un tanque para matar una hormiga.
¿Y si necesitás baja latencia? CLI se te ahoga, MCP te come los tokens, quedás en la nada.
¿Qué es la comunicación entre procesos (IPC)?
IPC son todos los mecanismos que dejás que un proceso hable con otro sin pasar por la red. Hay un espectro completo:
- Memoria compartida: la más rápida. Dos procesos leen/escriben el mismo bloque de RAM. Problema: si ambos escriben simultáneamente, se rompe todo. Necesitás locks, mutexes, sincronización explícita.
- Named pipes: segundo lugar en velocidad. Los datos van en kernel memory, no en disco. Un proceso escribe, el otro lee. El kernel maneja la cola y sincronización automáticamente.
- Unix sockets: parecidos a named pipes pero con semántica de socket. Un poco más overhead que pipes, pero comportamiento más familiar si viniste de networking.
- Message queues: más formales. Un proceso enrola un mensaje, el otro lo desencola cuando quiere. Permite persistencia opcional.
IPC local es diferente a IPC remoto (que ya es networking: TCP sockets, HTTP, gRPC). En localhost podés meterte con local IPC porque no necesitás serialización para network, autenticación ni esas cosas.
Named pipes, específicamente, son “archivos especiales” en el filesystem (ves `/tmp/mi_pipe` como si fuera un archivo) pero cuando los abrís, el kernel interpone un mecanismo de cola en memoria. Escribís datos por un lado, los lees por el otro, sin tocar disco jamás. Esto se conecta con lo que analizamos en Claude Sonnet 4.6 en detalle.
Named pipes: la alternativa práctica entre CLI y MCP
Acá está la magia (y por qué Stefan Webb armó el proyecto open source que propone esto). Named pipes ofrecen lo mejor de dos mundos:
Velocidad de memoria compartida, seguridad de un socket. Escribís datos una sola vez en el servidor (no hay recargas, no hay reinicialización), los clientes se conectan a demanda, envían un request por la pipe, el servidor procesa y devuelve la respuesta por otra pipe. El kernel maneja los buffers, sincronización y ordenamiento.
Ventajas concretas (sin humo):
- Latencia mínima: microsegundos. Sin spawn de procesos (CLI), sin overhead de descripción de schema (MCP).
- Sin disk I/O: todo vive en kernel memory. El modelo de dados está cargado una sola vez en RAM.
- Concurrencia nativa: un servidor maneja múltiples clientes simultáneamente. El kernel multiplexea automáticamente.
- Cero tokens de overhead descriptivo: no necesitás describir la herramienta en lenguaje natural para MCP. Solo sends y receives en JSON.
- Seguridad del filesystem: permisos Unix en el archivo de la pipe. No es memoria compartida desprotegida.
¿Cuál es la pega? (porque las tiene) — necesitás un servidor corriendo. CLI arrancás, termina, fin. Named pipes necesita un demonio esperando, leyendo, escribiendo. Pero eso es banda ancha comparado con mantener un servidor MCP o estar reloadenado CLI todo el tiempo.
Arquitectura de servidores con named pipes
El proyecto abierto propone una jerarquía de abstracciones que escalable sin cagarse. Pensala así: empezás con TextNamedPipe (la más básica, solo texto puro), después DataNamedPipe (ya con serialización), después ToolNamedPipe (que conoce de parámetros y tipos), después ChatNamedPipe (que habla con LLM locales para reasoning), y finalmente TTSNamedPipe (para audio).
No necesitás implementar todas. Vos arrancás con la que te importa. Un texto-a-voz TTS, por ejemplo, solo sería TTSNamedPipe: cliente envía texto, servidor devuelve audio WAV/MP3 en base64 por la pipe, fin.
El multiplexing funciona porque el servidor abre múltiples pipes (una por cliente, o una por tipo de request). Cuando un cliente quiere hablar, abre la pipe correspondiente, escribe, espera. El servidor tiene un event loop (epoll, kqueue, select, según el OS) que escucha todas simultáneamente. Cuando hay datos, procesa, responde.
La herramienta CLI se llama `cpipe` (piensa “curl para pipes”). Es un wrapper que simplifica: `cpipe –server localhost:tool_pipe –input ‘{“query”: “buscar x”}’ –output resultado.json`. Desde un script bash, desde Python, desde donde sea, hablás con la pipe como si fuera un endpoint HTTP, sin tener que abrir sockets a mano. Relacionado: modelos de lenguaje grandes disponibles.
Comparativa técnica: CLI vs MCP vs Named Pipes
| Característica | CLI | MCP | Named Pipes |
|---|---|---|---|
| Overhead de tokens | 562 tokens/invocación | 54.000 tokens (schema completo) | 0 tokens (sin descripción) |
| Tareas completadas (igual presupuesto) | 28% más que MCP (baseline) | 100% | ~80% (entre CLI y MCP) |
| Latencia promedio | 200-500ms (spawn+stdin/stdout) | 100-200ms (overhead protocol) | 1-10ms (kernel memory) |
| Carga del servidor | Reinicia cada invocación | Persistent, pero heavy | Persistent, muy liviano |
| Complejidad arquitectónica | Baja (es un script) | Alta (spec, servidor, tooling) | Media (servidor, pipes, multiplexing) |
| Curva de aprendizaje | Ninguna si ya sabés scripting | Alta (spec nueva, patrones, debugging) | Media (IPC + async, pero bien documentado) |
| Ideal para | Herramientas standalone rápidas | APIs remotas, multi-tenant, servicios cloud | Herramientas locales tiempo real, ML models, audio/video |
| Concurrencia | Una invocación por proceso | Soportada (pero cara en tokens) | Multiplexing nativo eficiente |
| Persistencia de estado | No (reload cada vez) | Sí (pero recargás schema) | Sí (solo cargas el modelo una vez) |

Los datos son de devgent.org y benchmarks de 2026. Note que “tareas completadas” es un proxy crudo: con el presupuesto de tokens que manda OpenRouter o Claude Haiku por una invocación, podés hacer 28% más cosas si usás CLI puro vs MCP porque te ahorrás 53.438 tokens de overhead descriptivo.
Patrón híbrido 2026: cuándo usar cada opción
No es “mata una con la otra”. Cada una tiene su lugar.
Usá CLI cuando: necesitás algo rápido, standalone, sin estado compartido. Generador de imágenes estático (procesa una imagen, devuelve path, termina). Script que valida JSON. Herramienta que no vas a llamar más de 5 veces por sesión.
Usá MCP cuando: integrás con servicios remotos (APIs de terceros, cloud), tienes múltiples clientes distintos (multi-tenant), o el protocolo es importante para compatibilidad futura. Un cliente LLM remoto conectándose a tu servicio en AWS. Un equipo usando la misma herramienta desde múltiples lenguajes y plataformas.
Usá Named Pipes cuando: es local (mismo servidor), necesitás baja latencia, vas a llamar la herramienta de forma frecuente, tienes modelo de ML o estado pesado que cargás una sola vez. Voice agent que genera TTS cada segundo (latencia crítica). Vector search que querés con reranking. LLM local para reasoning en multiples invocaciones.
El truco es: la mayoría de los proyectos AI en localhost 2026 se benefician de named pipes. Tu modelo Llama cargado, esperando requests por una pipe. Tu BERT embedding server recibiendo queries JSON, devolviendo vectores. Tu modelo text-to-speech que tarda 30 segundos al iniciar pero tarda 200ms por invocación después. Todo eso vive mejor en named pipes que en CLI (reloads) o MCP (tokens innecesarios).
Casos de uso e integración con agentes IA
Acá es donde se pone piola de verdad. Imaginá esto: corrés Claude Haiku en local (o Llama si lo preferís), conectado a un agente. El agente necesita hacer cosas: buscar en tu base vectorial, generar imágenes, sintetizar voz.
Ejemplo 1: Vector search local. Tenés 100.000 embeddings de Wikipedia en tu máquina (Chroma o Milvus). Tu agente necesita buscar por semántica. Named pipes: servidor de vector search escucha en `pipes/vector_search`. Agente envía `{“query”: “qué es la fotosíntesis”, “top_k”: 5}`, servidor devuelve 5 embeddings en 30ms. Con MCP, describirías cada parámetro, cada tipo, cada edge case. Con CLI, reloadeas el vector index cada vez. Sobre eso hablamos en correr LLMs de forma local.
TTFT (time to first token) en el agente: con named pipes, obtenés los resultados en 30ms. Con MCP, antes de que el modelo tipee algo, ya gasté 1-2 segundos en overhead de protocol. El agente nota la diferencia (spoiler: los usuarios también).
Ejemplo 2: Text-to-speech reutilizable. Tenés Bark o Eleven Labs local. Modelo de 2GB en RAM. Cada vez que el agente quiere hablar, genera audio. Named pipes: demonio TTS escuchando en `pipes/tts`. Cliente envía `{“text”: “hola mundo”, “voice”: “female”, “language”: “es”}`, devuelve WAV en base64, listo. El modelo nunca se descarga. Con CLI: cada invocación reload, 30 segundos de init. Con MCP: descripción de schema complicada para lo que es un simple JSON in/out.
Ejemplo 3: Image generation con ControlNet local. Flux o Stable Diffusion corriendo en ComfyUI (como en el ejemplo de Agent Framework de Microsoft, aunque usan MCP ahí, vos podrías optimizar con named pipes). Agente pide una imagen describiendo, genera en 40 segundos, devuelve. Named pipes: sin overhead descriptivo, sin reload de modelo. Concurrencia si querés dos imágenes en paralelo: dos clients, dos invocaciones, multiplexing del servidor.
El integración con agentes Claude es simple: tenés una herramienta llamada `pipes_invoke` que toma `(pipe_name, json_input)`, abre la pipe, escribe, lee respuesta, devuelve al agente. El agente la usa como cualquier otra tool.
Errores comunes
Error 1: Creer que MCP es siempre mejor porque es “estándar”
No. Es estándar para integración remota y multi-tenant. Para localhost, es cañón para matar mosquitos. Acá está la cosa: si tu herramienta no saldrá nunca de tu máquina, no necesitás la portabilidad. MCP te da portabilidad al costo de 54.000 tokens. Si nadie nunca va a integrar con tu TTS server desde AWS, ese costo no tiene retorno.
Error 2: No usar multiplexing y crear una pipe por cliente
Si creás una nueva pipe para cada cliente, se te queda el servidor con 5000 file descriptors abiertos. Multiplexing: un servidor, múltiples clientes leyendo de las mismas pipes. El kernel entrecola, sincroniza, vos lees del event loop. Muchísimo más scalable (aunque para uso local, rara vez te importa, pero es buena práctica).
Error 3: Olvidar que pipes son ephemeral
Cerrás el servidor, la pipe se destruye. Un cliente esperando lectura se queda colgado. Necesitás cleanup, signals, graceful shutdown. No es tan complejo, pero es cosa que hay que manejar. CLI no tiene este problema porque todo muere con el proceso. Para más detalles técnicos, mirá Sora y su funcionamiento.
Preguntas Frecuentes
¿Cuál es la diferencia práctica entre MCP y named pipes?
MCP es un protocolo estandarizado, pesado, con schema explícito, ideal para remoto y multi-tenant. Named pipes son un mecanismo de IPC local, liviano, sin overhead descriptivo. MCP: si la herramienta es remota o muchos clientes distintos la usan. Named pipes: si es local y concurrencia local.
¿Y si necesito que mi herramienta sea accesible remota algún día?
Arrancás con named pipes localmente. Si mañana necesitás exponerla, metés un adapter HTTP adelante (un pequeño servidor que escucha en un puerto, traduce requests HTTP a writes en la pipe, devuelve la respuesta). No es complejo. O migrás a gRPC/HTTP en ese momento si lo vale. Pero hoy, no sobre-ingenierices por “qué pasa si”.
¿Windows soporta named pipes?
Sí, pero con otra sintaxis (no `/tmp/pipe` sino `\\.\pipe\mi_pipe`). Microsoft tiene documentación. Linux y macOS usan la sintaxis POSIX standard. Los SDKs modernos lo manejan automático.
¿Necesito un framework o puedo hacerlo crudo?
Crudo es posible pero tedioso (abrir archivo especial, read/write syscalls, event loop, sincronización). El proyecto open source de Stefan Webb ya tiene las abstracciones. Python: podes usar `asyncio` + manejo de file descriptors, o librerías como `named_pipes_python`. Más sano: usa el framework.
¿Qué pasa si dos clientes escriben simultáneamente a la misma pipe?
El kernel los serializa (uno entra, el otro espera). No se corrompen datos. Pero si necesitás que ambos escriban sin sincronización, necesitás un protocolo: cada cliente abre su pipe de request, espera respuesta en una pipe de respuesta única. El servidor lee de todos, mantiene contexto, responde a cada quien en su canal.
Conclusión
Named pipes no es hype, no es revolucionario, no va a cambiar tu vida. Pero es una herramienta que resuelve un problema real 2026: conectar agentes IA locales con herramientas locales sin el overhead de MCP ni la ineficiencia de CLI. Si vos o tu equipo están armando agentes en localhost y preguntándose cómo pasar datos rápido, esta es la respuesta técnicamente sólida.
El proyecto abierto está ahí, en GitHub, ready to use, con ejemplos. Las abstracciones (TextNamedPipe, DataNamedPipe, ToolNamedPipe, etc.) te ahorran la carpintería. Si lo probás, va a funcionar. Y vas a notar que tu agente responde más rápido.
La pregunta no es “¿mejor alternative CLI and MCP?” (la respuesta es “depende”), sino “¿para mi caso específico, qué tiene más sentido?” Ahora tenés tres opciones claras en la mesa en vez de dos.
Fuentes
- Proyecto Stefan Webb Named Pipes — implementación open source con abstracciones escalables
- DevGent: MCP vs CLI AI Agent Comparison 2026 — benchmarks de overhead de tokens y latencia
- KnightLi: MCP vs CLI for Agents — análisis de casos de uso y decisiones arquitectónicas
- CircleCI: MCP vs CLI Comparison — datos sobre tareas completadas y eficiencia
- Linux Hispano: Comunicación entre procesos con Named Pipes — referencia técnica fundamental
