Transports

urirun keeps the URI contract separate from the transport. The same URI can be called locally, through a service endpoint, or by a flow orchestrator. The registry, JSON Schema and policy gate are the contract; a transport only moves {uri, payload} to where the runtime executes it.

Local and shell

Queue and serverless

Docker

Docker examples use URI targets as service names:

python://python-worker/text/normalize
node://node-worker/text/slugify
shell://shell-worker/report/write

HTTP and browser

A backend loads a binding document, renders URI forms and runs them via POST /api/run. Logs, recent calls, MCP tools and A2A cards can be projected from the same registry — so frontend actions use the same URI names as the backend. This is the same contract IFURI uses in its flows.

gRPC

urirun.v2_grpc provides a small RPC surface: route listing, unary calls and stream calls.

pip install "urirun[grpc] @ git+https://github.com/tellmesh/urirun.git@main#subdirectory=adapters/python"

MCP and A2A

Because bindings include JSON Schema, the registry can be projected into:

Execution still goes through the same urirun policy gate.