Write a Pulsar Function in Java, Python, or Go that implements the Function interface (or uses the language-specific SDK), accepting an input message and optionally returning an output to be published to an output topic
Package the function as a JAR (Java), a Python file or zip, or a Go binary, then deploy it with `pulsar-admin functions create --jar/--py/--go <path> --classname <class> --inputs <input-topic> --output <output-topic> --tenant <tenant> --namespace <namespace> --name <fn-name>`
Check deployment status with `pulsar-admin functions status --tenant <tenant> --namespace <namespace> --name <fn-name>` and verify the numRunning field equals the configured parallelism
Inspect function logs via `pulsar-admin functions get-stats` or by accessing the function worker logs on the broker nodes
Update a running function in-place using `pulsar-admin functions update` with the same name and the updated JAR or script; the function workers rolling-restart instances
Known gotchas
Pulsar Functions run on function worker nodes which may be co-located with brokers or run as a separate cluster; if function workers are not deployed, the create command will return a 503 error
The --inputs flag accepts a single topic or a comma-separated list; do not use spaces around the commas or the CLI parser will misinterpret the topic list
State management in Pulsar Functions (using the context.putState/getState API) requires BookKeeper table service to be enabled; stateless functions do not have this dependency
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp