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
local-function— calls an in-process function registered by code.argv-template— renders an argv list and executes it without a shell.shell-template— renders a shell string and requires explicit policy approval.
Queue and serverless
- A queue/event consumer maps a topic message to a URI run (MQTT/NATS/Kafka).
- A serverless function is a pure
handler(event)that runs a URI per request, with the registry compiled in memory.
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:
- MCP
tools/list - MCP
tools/call - A2A agent card skills
Execution still goes through the same urirun policy gate.