# Building Skirnir exhibits with an assistant

An assistant can build an exhibit for you: the places in a 3D capture, what a visitor reads when they walk into each one, the story behind it and the sound around it. It works through a key you make, and everything it changes is a draft until a person publishes it.

## 1. Make a key

In the Exhibitions workspace, open Keys and make a key with Read and Write. Leave Publish off unless you want the assistant to publish without a person checking first. The key is shown once; keep it where you keep other secrets.

## 2. Connect the assistant

The MCP server is `https://heimdall3d.com/api/v1/mcp`, over Streamable HTTP, with the key as a bearer token.

Claude Code:

```
claude mcp add --transport http skirnir https://heimdall3d.com/api/v1/mcp --header "Authorization: Bearer h3d_..."
```

Any other MCP client takes the same address and header. A program without MCP uses the HTTP API, described at `https://heimdall3d.com/api/v1/openapi.json`.

## 3. Ask for what you want

The assistant can list your captures, read an exhibit, read the exhibit format, turn a latitude and longitude into a point in a capture that is placed on the map, add or replace zones and sound layers, and make a preview link for a person to check the draft.

Worked prompts:

- "In the capture called Trogir, add a zone at the Cathedral of St Lawrence with a card on Master Radovan's west portal of 1240. Keep it to three sentences and name your source."
- "Read the exhibit of Muggia and write a story for every zone that has none: a title, two short sections and the sources you used."
- "Add an ambience layer of harbour sound heard only in the zones by the water, at half volume."
- "Make a preview link for the director, for a week."

## What happens underneath

A zone is placed in the capture's own frame. For a capture placed on the map, `place_from_latlon` answers the point for a latitude and longitude by the same arithmetic the viewer's map uses. The height it gives is that of the nearest zone already placed, so a new zone stands on the same ground.

Every exhibit is checked against the format, `https://heimdall3d.com/api/v1/schema/exhibit.json`, before it is kept. When something does not match, the answer names the field, for example `zones[3].story.people[0].name: may not be empty`, and the assistant can put it right.

A person sees the draft in the workspace or through the preview link, and publishes it there. A webhook can tell your own systems when an exhibit is published.

## Limits

A key may make 120 requests a minute. An exhibit may hold 256 zones. The server stores and serves; a capture is converted in the uploader's own browser, never on the server.
