Before you begin
The seat is an agent in Lys with its own key. Lys must grant it what it is about to do: call on the subjects it will call, subscribe on a service’s tap subjects if it will listen. A seat without the grant is refused by name, never half-admitted.
Complete the task
-
Write the seat configuration: the server address, the seat’s Lys agent and key, and the limits.
server = "127.0.0.1:7600" channel = "console.topology" [lys] issuer = "https://lys.example" agent = "agent-3f2a9c41d0b8e7a6c5f4e3d2b1a09876" key_file = "/absolute/path/to/agent.key" [limits] frame_bytes = 65536 record_bytes = 1048576 reply_timeout_ms = 10000 flow_steps = 8 request_bytes = 65536 -
Register the ticket with the host. Claude Code reads an
.mcp.jsonin the project.{ "mcpServers": { "liminal": { "command": "liminal", "args": ["mcp", "--config", "/path/to/seat.toml"] } } } -
From the host, list the stations, then describe the subject you mean to call. The description carries the exact input and output schemas the worker registered.
-
Call it. The reply, or the server’s refusal in its own words, comes back as the tool’s result.
{"subject": "jobs.studio", "input": {"act": "list"}} -
Confirm on the console or the health page: the call is one record on the subject’s line with its outcome.
If something goes wrong
A refusal names the missing grant or the wrong pass; fix it in Lys and call again. A call with no reply by the deadline is unanswered; the worker’s log says why.
Next step
Read what a station, a line and a tap are: Concepts.