v0 · experimental · Apache 2.0

The binary protocol for AI agents.

Mycelio is a signature-rooted, agent-native protocol for discovering and invoking SaaS services. 50–200× smaller on the wire than HTTP+JSON. Vendors don't implement anything — their existing APIs stay untouched.

daemon live · myc://mycelio.prowl.world:4242 63 tests 10 verbs · ROUTE working

01Why it exists

An AI agent today pays for every byte its LLM reads or writes. Just finding a payments API and making one call burns ~5,000 tokens on JSON envelopes, OpenAPI specs, and TLS handshakes — before the reasoning even starts.

HTTP + JSON
~20 KB
4 connections · ~5,000 tokens
Mycelio
~80 bytes
1 connection · ~20 tokens

Discover + inspect + invoke, end to end. Same outcome, same vendor, same Stripe charge. Three orders of magnitude less plumbing for the LLM to chew through.

02How it works

Think of it as food delivery for API calls. The agent is the customer. The vendor's backend (Stripe, Plaid, Resend, your-API-here) is the restaurant — keeps cooking HTTP+JSON exactly as today.

Between them sits mycd, the courier daemon. It speaks binary Mycelio frames to the agent and outbound HTTP to the vendor. The agent never sees HTTP; the vendor never sees Mycelio.

Vendors publish a ~400-byte signed manifest describing their endpoints. The directory co-signs it. That's all — no SDK to install, no servers to run, no code to write. The protocol's translation layer meets the API where it lives.

03How it compares

Mycelio overlaps with three other emerging agent protocols. The decisive difference is the second row of this table: every other protocol asks the vendor to ship code — run a server, expose an endpoint, maintain another integration. Mycelio asks the vendor to sign a 400-byte file describing the API they already have.

MCP A2A OpenAI Functions Mycelio
Wire format JSON-RPC HTTP + JSON JSON tool schema Binary frames
Vendor must Run an MCP server Run an A2A endpoint Publish JSON schema Sign a 400-byte file
Trust model TLS + URL TLS + URL TLS + URL Ed25519 dual-signed
Connection model Per server Per call Per call One TCP, many services
Discovery Out of band Out of band Out of band Built-in (DISCOVER)
Wire size / call ~1–2 KB ~2–5 KB ~1–3 KB ~80 bytes
Why this matters at scale. A directory can onboard thousands of APIs by generating + co-signing manifests from each vendor's existing OpenAPI — the vendor doesn't have to know Mycelio exists. No adoption tax means no chicken-and-egg problem.

What Mycelio is not trying to be: a replacement for MCP inside an agent's tool-use loop (MCP is good at that), a peer-to-peer agent network like A2A, or a function-calling syntax like OpenAI's. It's the agent-to-service layer — discover, verify, invoke — for any backend that already speaks HTTP.

04Try it

The reference daemon is running on the public internet right now.

pip install 'mycelio[server]'
import asyncio
from mycelio.client import MycelioClient

async def main():
    async with MycelioClient("mycelio.prowl.world", 4242) as c:
        services = await c.discover(category="payments")
        for s in services:
            print(s.name, s.hash.hex()[:16])

asyncio.run(main())

See examples/ for full DISCOVER and ROUTE demos with signature verification.

05The 10 verbs

Full wire spec: protocol-v0.md · Manifest format: manifest-v0.md

06Status

PHASE 0 ✓
Wire spec v0, frame codec, 10 verbs defined, daemon skeleton. 34 tests.
PHASE 0.5 ✓
TLS support, async daemon, signature-verifying SDK, Dockerized, deployed. 49 tests.
PHASE 1 ✓
Vendor manifests with dual signing, INSPECT, ROUTE tunneling to real HTTP backends. 63 tests.
PHASE 2
Prowl Design — auto-generate signed manifests from OpenAPI via the prowl-bench design manifest subcommand.

Streaming through ROUTE, peer-to-peer shard relay, and the BENCH / CLAIM / PAY / INDEX verbs are reserved in the spec but not on the active roadmap — the protocol's job is done once Phase 2 ships.

07Open spec, open implementation

Mycelio is a protocol, not a product. The spec is authoritative; this Python reference is one implementation. Ports in Go, Rust, JS, and others are welcome.

The canonical directory implementation is Prowl. Other directories can exist and federate via signed manifests — the spec doesn't assume one operator.