v0 · experimental · Apache 2.0 · el protocolo binario que usa Prowl

Lee cualquier URL. Invoca cualquier API. Un solo protocolo binario.

Mycelio es la capa binaria que usan los agentes en lugar de HTTP+JSON. Una sola conexión persistente le da a un agente dos cosas: FETCH cualquier URL pública como Markdown limpio (~30× menos tokens que el HTML crudo), y ROUTE llamadas a manifiestos firmados de proveedores sin tocar su documentación. Cada respuesta está firmada con Ed25519 por el directorio.

daemon en vivo · myc://mycelio.prowl.world:4242 100 tests · Apache 2.0 v0 — ningún runtime de agentes importante lo habla todavía

01Lee cualquier URL

Apunta Mycelio a cualquier URL pública. El daemon la descarga, extrae el contenido principal como Markdown localmente con trafilatura, recurre a Jina Reader para SPAs y PDFs cuando hace falta, y lo devuelve dentro de un sobre binario firmado. Sin API key. Sin SDK del lado del proveedor. En caché por 24 horas.

O desde tu terminal: curl https://mycelio.prowl.world/r/<any-url>
# pip install "mycelio @ git+https://github.com/opcastil11/mycelio.git"
import asyncio
from mycelio import MycelioClient

ROOT_PUBKEY = bytes.fromhex(
    "23f6ebbc8faddb7ee8c9dedf2ef8e81057fb7d0bbace6ba26523452ef739c20c"
)

async def main():
    async with MycelioClient.connect(
        "mycelio.prowl.world", 4242, root_pubkey=ROOT_PUBKEY,
    ) as cli:
        page = await cli.fetch("https://news.ycombinator.com")
        print(page.content[:400])
        print(f"\n→ {len(page.affordances)} affordances extracted")

asyncio.run(main())

La respuesta trae Markdown limpio y una lista de affordances tipadas (enlaces, formularios) sobre las que el agente puede actuar — las URLs relativas ya vienen resueltas contra la página. Las SPAs y los PDFs que trafilatura no puede procesar pasan a Jina Reader de forma transparente.

HTTP + HTML crudo
~80 KB
~20.000 tokens al LLM · por solicitud · sin caché
Mycelio FETCH
~4 KB
~700 tokens · caché 24 h · 50 affordances tipadas

Medido contra news.ycombinator.com el 2026-05-23. Las cifras varían según la página — los sitios de documentación con mucho contenido se comprimen más; las landing pages estáticas, menos. La tendencia se mantiene: el Markdown limpio es muchísimo más pequeño que el HTML del que proviene.

02Invoca cualquier API

Todo el camino de invocación gira en torno a un solo artefacto: un pequeño archivo firmado que apunta a la API HTTP que el proveedor ya sirve. Este es un manifiesto de Mycelio representativo, decodificado a una forma legible:

# stripe-payments.myc · 412 bytes signed

service:    stripe.com
title:      Stripe Payments API
backend:    https://api.stripe.com/v1
auth:       bearer-token (Authorization header)
endpoints:
  - op:     charge
    method: POST  /charges
    in:     { amount: int, currency: str, source: str }
    out:    { id: str, status: str }
  - op:     refund
    method: POST  /refunds
    in:     { charge_id: str, amount: int }
    out:    { id: str, status: str }
signatures:
  vendor:    ed25519:9f8a3d...
  directory: ed25519:1b4c7e...

Codificado en frames binarios pesa 412 bytes. Lo firmas con tu clave Ed25519. El directorio lo cofirma con la clave raíz. Tu backend HTTP queda intacto — Mycelio solo describe cómo llegar a él. Sin SDK, sin servidor que operar, sin integración que mantener.

03Dónde estamos, con honestidad

Esto es v0. El daemon de referencia corre en myc://mycelio.prowl.world:4242. El SDK de Python se instala desde GitHub (publicación en PyPI pendiente). 100 tests pasan de punta a punta. El formato de transmisión es lo bastante estable para construir sobre él.

Ya disponible: spec v0, códec de frames binarios, soporte TLS, daemon asíncrono, manifiestos de proveedor con doble firma Ed25519, INSPECT, ROUTEy FETCH verbos funcionando de punta a punta (FETCH con extracción de affordances + respaldo de Jina). Siguiente: Prowl Design — genera automáticamente manifiestos firmados a partir de tu OpenAPI existente.

Pero, para ser francos, lo que esto no es todavía:

El lado FETCH esquiva el problema del huevo y la gallina — funciona con cualquier URL de la web pública desde el primer día, sin que el proveedor tenga que adoptar nada. Por eso lo lanzamos primero.

Nuestra apuesta: a medida que los agentes pasan de "tool-loop dentro de un IDE" a "autónomos, llamando a miles de APIs por sesión", el problema del huevo y la gallina se invierte. El único protocolo que puede escalar a "todos los SaaS de internet" es uno donde el proveedor no implementa nada — porque la larga cola de proveedores no va a desplegar servidores a medida para cada runtime de agentes. Si esa tesis es correcta, esta se convierte en la capa para ello.

Si la tesis es incorrecta: la API HTTP del directorio sigue funcionando, tu OpenAPI existente sigue funcionando y puedes ignorar Mycelio. Apostar por el protocolo te cuesta un archivo de manifiesto que firmas en cinco minutos y puedes revocar cuando quieras.

04Cómo se compara con MCP

MCP y Mycelio operan en capas distintas y creemos que son complementarios, no competidores. MCP brilla cuando el operador del agente ya eligió tu herramienta — el usuario instaló tu servidor MCP, el agente está en un tool-loop y los parámetros son conocidos. Mycelio es para la capa anterior: descubrimiento público e invocación de servicios que el agente no conocía al arrancar.

Dicho esto, las concesiones técnicas difieren en puntos que importan:

HTTP+JSON simple MCP Mycelio
El proveedor debe Operar su API (ya lo hace) Operar un servidor MCP Firmar un archivo de 400 bytes
Modelo de confianza TLS + DNS TLS + instalación del operador Doble firma Ed25519
Modelo de conexión Por llamada Por servidor Una conexión TCP, muchos servicios
Descubrimiento Fuera de banda Fuera de banda Integrado (DISCOVER)
Formato de transmisión JSON en texto JSON-RPC Frames binarios
La fila que más importa: "El proveedor debe…" Un protocolo en el que la participación del proveedor exige desplegar código no puede escalar a la larga cola de APIs SaaS — la mayoría de los proveedores no va a hacer ese trabajo. La razón de ser de Mycelio es ser una capa donde la adopción del proveedor depende de firmar un archivo, no de operar infraestructura nueva.

No buscamos reemplazar a MCP para el uso de herramientas dentro de runtimes de agentes, a A2A para la mensajería entre agentes ni al function-calling de OpenAI para sintaxis de herramientas propietarias. Mycelio se ubica una capa antes: descubrimiento público e invocación anclada en firmas para backends que ya hablan HTTP.

05Para quienes construyen agentes

La composición completa — descubrir servicios, obtener una página, invocar una operación — ocurre en una sola conexión TCP. Sin handshakes TLS adicionales entre verbos, una sola cadena de firmas, un solo contexto de autenticación:

async with MycelioClient.connect(
    "mycelio.prowl.world", 4242, root_pubkey=ROOT_PUBKEY,
) as cli:
    # 1. find payment APIs
    matches = await cli.discover(query="payment", min_score=80)

    # 2. read a candidate's site to evaluate it
    page = await cli.fetch(f"https://{matches.results[0].name}")
    if "x402" in page.content.lower():
        # 3. pull the manifest and invoke it
        m = await cli.inspect(matches.results[0].service_id)
        resp = await cli.route(m, "charge", {"amount": 500, "currency": "usd"})
        print(resp.json())

DISCOVER + FETCH + INSPECT + ROUTE en una sola sesión. Verificación de firmas de punta a punta. Demos completas en examples/. Spec de transmisión: protocol-v0.md.

06Los verbos

Hoy hay siete verbos implementados de punta a punta; cuatro están reservados en la spec para uso futuro. Reservado no significa "próximamente" — significa "el byte está asignado para que una implementación pueda crecer hacia él más adelante sin romper la compatibilidad."

Formato del manifiesto: manifest-v0.md

07Spec abierta, operada por Prowl

Mycelio es Apache 2.0. La spec de transmisión, el códec de frames, el SDK de Python y el daemon de referencia viven en el repositorio público de GitHub. Son bienvenidas las implementaciones en Go, Rust y JS.

La parte honesta: ahora mismo hay un solo directorio corriendo Mycelio en producción, y es Prowl. El daemon en myc://mycelio.prowl.world:4242 es de Prowl. La clave raíz Ed25519 que cofirma cada manifiesto es de Prowl. La spec no asume un único operador, pero hasta que alguien más levante uno, "Mycelio" y "el protocolo binario de Prowl" significan lo mismo en la práctica. Preferimos decirlo en voz alta antes que fingir lo contrario.

¿Te preocupa el lock-in? Tu manifiesto puede servirlo cualquier directorio futuro, tu API HTTP existente es la fuente de verdad que sobrevive a todo esto, y puedes revocarlo en cualquier momento.

08Qué necesitamos de ti