Examples

A URI is a stable address for an action. One flow can touch a local urirun registry, MCP, an agent, an LLM and another IFURI app on the LAN — without changing addresses.

Flow: review and share

flow:
  id: local-review-and-share
  group: dev-ops

do:
  - urirun://local/registry/query/health
  - mcp://filesystem/list:
      path: ./project
  - llm://local/qwen/analyze:
      input: file://project-summary
  - tool://local/report/command/render:
      format: html
  - ifuri://lenovo-node.lan/services/browser/open:
      url: https://ifuri.com

From shell urisys to a urirun binding

Instead of a hand-written shell command in a flow step (the old urisys):

ffmpeg -i a.mp4 -vf scale=1280:720 b.mp4

describe it once as a urirun binding with payload validation and call it as a stable URI:

{
  "bindings": {
    "media://local/video/transcode":
      "ffmpeg -i {input} -vf scale={width}:{height} {output}"
  }
}
urirun run 'media://local/video/transcode' \
  --registry registry.json \
  --payload '{"input":"a.mp4","width":1280,"height":720,"output":"b.mp4"}' --execute

Run it from IFURI

ifuri-app urirun-scan ./project --registry-out generated/registry.json
ifuri-app urirun-call 'media://local/video/transcode' \
  --registry generated/registry.json \
  --payload '{"input":"a.mp4","width":1280,"height":720,"output":"b.mp4"}'

More examples (Docker, transports, multi-transport, MCP/A2A) in the tellmesh/urirun repository.