# The first ticket

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

You will write a seat configuration, point Claude Code at the ticket, list the stations, describe one and call it. Every call is judged by the seat's own Lys pass.

## 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.

**seat.toml**

```toml
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.

**.mcp.json**

```json
{
  "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.

**A call, as the ticket sends it**

```json
{"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.


> Told, not polled
> `subscribe` on a service turns each record on its subjects into one notification line in the host. Nothing is polled; a gap in the ring is reported as a count.


## 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](/liminal/concepts/).
