ablative docs
↑↓ move↵ openesc close
Stack Notebook ablative.com.au

The first ticket

Give Claude Code a seat on the network and call a service from it.

Open .md

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

  1. 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
  2. Register the ticket with the host. Claude Code reads an .mcp.json in the project.

    {
      "mcpServers": {
        "liminal": {
          "command": "liminal",
          "args": ["mcp", "--config", "/path/to/seat.toml"]
        }
      }
    }
  3. 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.

  4. 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"}}
  5. 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.