v0 · experimental · Apache 2.0 · o protocolo binário que o Prowl usa

Leia qualquer URL. Invoque qualquer API. Um único protocolo binário.

Mycelio é a camada binária que os agentes usam no lugar de HTTP+JSON. Uma conexão persistente dá ao agente duas coisas: FETCH qualquer URL pública como Markdown limpo (~30× menos tokens que HTML bruto), e ROUTE chamadas para manifestos assinados de fornecedores sem precisar ler a documentação deles. Toda resposta é assinada com Ed25519 pelo diretório.

daemon no ar · myc://mycelio.prowl.world:4242 100 testes · Apache 2.0 v0 — nenhum grande runtime de agentes fala este protocolo ainda

01Leia qualquer URL

Aponte o Mycelio para qualquer URL pública. O daemon busca a página, extrai o conteúdo principal como Markdown localmente com trafilatura, recorre ao Jina Reader para SPAs e PDFs quando necessário e devolve tudo dentro de um envelope binário assinado. Sem chave de API. Sem SDK do lado do fornecedor. Cache de 24 horas.

Ou pelo 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())

A resposta traz Markdown limpo e uma lista de affordances tipadas (links, formulários) sobre as quais o agente pode agir — URLs relativas já vêm resolvidas em relação à página. SPAs e PDFs que o trafilatura não consegue processar passam para o Jina Reader de forma transparente.

HTTP + HTML bruto
~80 KB
~20.000 tokens para o LLM · por busca · sem cache
Mycelio FETCH
~4 KB
~700 tokens · cache de 24h · 50 affordances tipadas

Medido contra news.ycombinator.com em 23/05/2026. Os números variam por página — sites de documentação com muito conteúdo comprimem mais; landing pages estáticas comprimem menos. O padrão se mantém: Markdown limpo é drasticamente menor que o HTML de origem.

02Invoque qualquer API

Todo o caminho de invocação gira em torno de um único artefato: um pequeno arquivo assinado que aponta para a API HTTP que o fornecedor já oferece. Aqui está um manifesto Mycelio representativo, decodificado em formato legível:

# 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 em frames binários, ele tem 412 bytes. Você o assina com sua chave Ed25519. O diretório o coassina com a chave raiz. Seu backend HTTP continua intacto — o Mycelio apenas descreve como acessá-lo. Sem SDK, sem servidor para rodar, sem integração para manter.

03Onde estamos, com honestidade

Isto é a v0. O daemon de referência roda em myc://mycelio.prowl.world:4242. O SDK Python é instalado a partir do GitHub (lançamento no PyPI pendente). 100 testes passam de ponta a ponta. O formato de transmissão é estável o suficiente para construir em cima.

Entregue: spec v0, codec de frames binários, suporte a TLS, daemon assíncrono, manifestos de fornecedores com dupla assinatura Ed25519, INSPECT, ROUTEe FETCH verbos funcionando de ponta a ponta (FETCH com extração de affordances + fallback para Jina). Próximo: Prowl Design — gere automaticamente manifestos assinados a partir do seu OpenAPI existente.

Mas, sendo franco, o que isto não é ainda:

O lado FETCH escapa do problema do ovo e da galinha — funciona com qualquer URL da web pública desde o primeiro dia, sem exigir adoção por fornecedores. Por isso o lançamos primeiro.

Nossa aposta: à medida que os agentes passam de "tool-loop dentro de uma IDE" para "autônomos, chamando milhares de APIs por sessão", o problema do ovo e da galinha se inverte. O único protocolo capaz de escalar para "todo SaaS da internet" é aquele em que o fornecedor não implementa nada — porque a cauda longa de fornecedores não vai implantar servidores sob medida para cada runtime de agentes. Se essa tese estiver certa, esta se torna a camada para isso.

Se a tese estiver errada: a API HTTP do diretório continua funcionando, seu OpenAPI existente continua funcionando e você pode ignorar o Mycelio. Apostar no protocolo custa um arquivo de manifesto que você assina em cinco minutos e revoga quando quiser.

04Como se compara ao MCP

MCP e Mycelio operam em camadas diferentes e achamos que são complementares, não concorrentes. O MCP brilha quando o operador do agente já escolheu sua ferramenta — o usuário instalou seu servidor MCP, o agente está em um tool-loop, os parâmetros são conhecidos. O Mycelio é para a camada anterior a isso: descoberta pública e invocação de serviços que o agente não conhecia ao iniciar.

Dito isso, os trade-offs técnicos diferem em pontos que importam:

HTTP+JSON puro MCP Mycelio
O fornecedor precisa Rodar sua API (já roda) Rodar um servidor MCP Assinar um arquivo de 400 bytes
Modelo de confiança TLS + DNS TLS + instalação pelo operador Dupla assinatura Ed25519
Modelo de conexão Por chamada Por servidor Um TCP, muitos serviços
Descoberta Fora de banda Fora de banda Nativa (DISCOVER)
Formato de transmissão JSON em texto JSON-RPC Frames binários
A linha que mais importa: "O fornecedor precisa…" Um protocolo em que a participação do fornecedor exige implantar código não escala para a cauda longa de APIs SaaS — a maioria dos fornecedores não vai fazer esse trabalho. A razão de ser do Mycelio é ser uma camada em que a adoção pelo fornecedor depende de assinar um arquivo, não de rodar nova infraestrutura.

Não estamos tentando substituir o MCP para uso de ferramentas dentro de runtimes de agentes, o A2A para mensagens entre agentes, nem o function-calling da OpenAI para sintaxe proprietária de ferramentas. O Mycelio fica uma camada antes: descoberta pública e invocação ancorada em assinaturas para backends que já falam HTTP.

05Para quem constrói agentes

A composição completa — descobrir serviços, buscar uma página, invocar uma operação — acontece em uma conexão TCP. Sem handshakes TLS extras entre verbos, uma cadeia de assinaturas, um contexto de autenticação:

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 em uma sessão. Verificação de assinatura de ponta a ponta. Demos completas em examples/. Spec de transmissão: protocol-v0.md.

06Os verbos

Sete verbos estão implementados de ponta a ponta hoje; quatro estão reservados na spec para uso futuro. Reservado não significa "em breve" — significa "o byte está alocado para que uma implementação possa adotá-lo depois sem quebrar a compatibilidade."

Formato do manifesto: manifest-v0.md

07Spec aberta, operada pelo Prowl

O Mycelio é Apache 2.0. A spec de transmissão, o codec de frames, o SDK Python e o daemon de referência estão todos no repositório público no GitHub. Implementações em Go, Rust e JS são bem-vindas.

A parte honesta: hoje existe apenas um diretório rodando Mycelio em produção, e é o Prowl. O daemon em myc://mycelio.prowl.world:4242 é do Prowl. A chave raiz Ed25519 que coassina todos os manifestos é do Prowl. A spec não pressupõe um único operador, mas até que alguém suba outro, "Mycelio" e "o protocolo binário do Prowl" significam a mesma coisa na prática. Preferimos dizer isso abertamente a fingir o contrário.

Preocupado com lock-in? Seu manifesto pode ser servido por qualquer diretório futuro, sua API HTTP existente é a fonte da verdade que sobrevive a tudo isso, e você pode revogar a qualquer momento.

08O que precisamos de você