---
title: "Bring your assistant to the desk — Storywright"
description: "Connect Claude or any Model Context Protocol assistant to your Storywright worlds: setup steps per client, every prompt the connector ships, and exactly what a connection can and cannot do."
doc_version: "1.52"
last_updated: 2026-08-28
---

# Bring your assistant to the desk

Plain-text Markdown mirror of [storywright.io/connect/assistant](https://storywright.io/connect/assistant).

Connect Claude — or any assistant that speaks the Model Context Protocol — to your Storywright worlds.

## Connect in three steps

How you connect depends on whether your assistant adds servers from its settings or from a terminal.

<!-- BEGIN GENERATED: connect steps (frontend/src/lib/connectSteps.ts via scripts/gen-connect-mirror.mjs — do not hand-edit between these markers) -->

### In its settings

#### Claude

1. **Copy the server address.** One address, every client. It's public — not a secret key.

   ```
   https://mcp.storywright.io/mcp
   ```

2. **Add it as a custom connector.** In Claude: **Settings → Connectors → Add custom connector**. Paste the address. ([Open Claude connectors](https://claude.ai/settings/connectors))

3. **Sign in and approve.** Claude sends you to Storywright's own login. Review what the connection may do, approve once, and it's live.

#### ChatGPT

1. **Copy the server address.** One address, every client. It's public — not a secret key.

   ```
   https://mcp.storywright.io/mcp
   ```

2. **Add a custom connector.** Under **Settings → Connectors**, where your plan makes them available.

3. **Sign in and approve.** You're sent to Storywright to sign in. Approve once and it's live.

#### Any MCP client

1. **Copy the server address.** Any client that supports remote MCP servers with OAuth sign-in works.

   ```
   https://mcp.storywright.io/mcp
   ```

2. **Give it the address.** Transport is **HTTP**. Authentication is OAuth — your client registers itself; there is no key to paste.

3. **Sign in and approve.** You approve at Storywright, not in the client. It receives a scoped token, never your password.

### As a config file

#### VS Code

*(Steps sourced from [vendor documentation](https://code.visualstudio.com/docs/agents/reference/mcp-configuration), 2026-08-26 — not hand-tested against this server.)*

*(Unconfirmed risk: The app is installed locally (1.135.0) but its `code` CLI is not on PATH here, and driving the interactive "MCP: Add Server" Command Palette flow needs a full GUI session — not attempted. Per Microsoft’s own docs, "When oauth is configured, VS Code handles the OAuth flow automatically," but the current docs require a manually-configured `clientId` rather than promising URL-only setup, and DCR support is not stated (it reportedly works in practice, with open regressions: microsoft/vscode#279955, #263336). Whether VS Code’s OAuth redirect is a local loopback (which would hit the same scheme restriction confirmed against Codex CLI) or a hosted proxy redirect could not be established.)*

1. **Add the server.** Command Palette → **MCP: Add Server** → HTTP, then Workspace or Global. Paste the address:

   ```
   https://mcp.storywright.io/mcp
   ```

2. **Check the config file.** VS Code writes `.vscode/mcp.json` with a `"servers"` entry of type `"http"`.

3. **Sign in and approve.** VS Code opens a browser to sign in on first connection. Review what the connection may do, approve once, and it’s live.

#### Cursor

*(Steps sourced from [vendor documentation](https://cursor.com/docs/context/mcp), 2026-08-28 — not hand-tested against this server.)*

*(Unconfirmed risk: Not installed. Cursor’s docs cover the marketplace "Add to Cursor" button and hand-editing mcp.json for a server; no vendor-quoted Settings-UI click-path exists for a server outside Cursor’s marketplace, so the config-file route below is the honest documented instruction. Cursor pins two fixed OAuth redirect URIs: a hosted `https://www.cursor.com/agents/mcp/oauth/callback` (CONFIRMED accepted by Storywright’s registration endpoint, verified 2026-08-28) and a desktop-app loopback `http://localhost:8787/callback` (CONFIRMED rejected — same http-scheme restriction reproduced against Codex CLI; not a redirect-host-allowlist issue, which ships open). Which leg an actual Cursor connection uses was not tested end-to-end. There are also current user forum reports of remote-MCP OAuth failing to initiate in Cursor — support is documented, reliability is contested.)*

1. **Add the server.** Add to `mcp.json` (Cursor Settings → Customize → MCP, or hand-edit), under `"mcpServers"`:

   ```
   {
     "mcpServers": {
       "storywright": { "url": "https://mcp.storywright.io/mcp" }
     }
   }
   ```

2. **Sign in and approve.** Cursor opens a browser to sign in on first connection. Review what the connection may do, approve once, and it’s live.

3. **Toggle it on.** Manage or disable the connection any time from **Customize** in the sidebar, without removing it.

### From a terminal

#### Claude Code

*(Unconfirmed risk: The server-side block is fixed but not yet proven live. CJA-2403 (#1458, merged 2026-08-29) admits RFC 8252 loopback redirect_uris, which is what Claude Code's callback uses (http://localhost:${port}/callback, confirmed from the shipped binary v2.1.241). Sign-in has not yet been re-run end to end against a deployment carrying the fix — #1458 left that criterion open — so these steps are expected-to-work rather than hand-tested. If registration still fails with 400 invalid_redirect_uri, the fix has not reached this environment yet.)*

1. **Add the server.** Over HTTP transport, from your project or anywhere.

   ```
   claude mcp add --transport http storywright https://mcp.storywright.io/mcp
   ```

2. **Authenticate.** Run `/mcp` and pick Storywright. It opens your browser to sign in.

3. **Approve once.** Review what the connection may do and approve. The tools are available in every session after that.

#### Codex CLI

*(Unconfirmed risk: The server-side block is fixed but not yet proven live. Codex CLI's local OAuth callback uses a bare http:// loopback redirect, which CJA-2403 (#1458, merged 2026-08-29) now admits at both enforcement points. The original refusal was reproduced twice and confirmed to be a scheme restriction rather than a redirect-host-allowlist issue; the carve-out targets exactly that. Not yet re-run end to end against a deployment carrying the fix.)*

1. **Add the server.** Over HTTP transport, from your project or anywhere.

   ```
   codex mcp add storywright --url https://mcp.storywright.io/mcp
   ```

2. **Log in.** Run `codex mcp login storywright`. It opens your browser to sign in.

3. **Approve once.** Review what the connection may do and approve. The tools are available in every session after that.

#### Hermes Agent

*(Steps sourced from [vendor documentation](https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp/), 2026-08-28 — not hand-tested against this server.)*

*(Unconfirmed risk: Not installed, so this is sourced from Nous Research's docs rather than a live test. Hermes tries a Client ID Metadata Document first and falls back to Dynamic Client Registration (Storywright's server supports only DCR, not CIMD) — its own docs already warn that "some servers reject the dynamic client registration step... that bare auth: oauth relies on." If Hermes's OAuth callback is a local http:// loopback, the same server-side scheme restriction confirmed against Codex CLI would apply; unconfirmed either way for this specific client.)*

1. **Add the server.** Add to `~/.hermes/config.yaml`, under `mcp_servers`:

   ```
   mcp_servers:
     storywright:
       url: "https://mcp.storywright.io/mcp"
       auth: oauth
   ```

2. **Log in.** Run `hermes mcp login storywright`. It opens your browser to sign in.

3. **Approve once.** Review what the connection may do and approve. The tools are available in every session after that.

#### OpenClaw

*(Steps sourced from [vendor documentation](https://docs.openclaw.ai/cli/mcp), 2026-08-28 — not hand-tested against this server.)*

*(Unconfirmed risk: Not installed, so this is sourced from the OpenClaw docs (docs.openclaw.ai only — open-claw.bot, safeclaw.io, and blink.new are third-party mirrors, never cite them) rather than a live test. Those docs say OpenClaw itself "starts the registered loopback callback" for OAuth — its own wording implies a local http:// redirect, the same class of URI Codex CLI’s confirmed-blocked callback uses. DCR support status is not stated either way in the docs. Unconfirmed against the live server.)*

1. **Add the server.** Transport is streamable HTTP, over OAuth.

   ```
   openclaw mcp set storywright '{"url":"https://mcp.storywright.io/mcp","transport":"streamable-http","auth":"oauth"}'
   ```

2. **Log in.** Run `openclaw mcp login storywright`. It prints an authorization URL — open it and sign in.

3. **Approve once.** Review what the connection may do and approve. The tools are available in every session after that.

<!-- END GENERATED: connect steps -->

You sign in through Storywright's own login and consent screen — your assistant never sees your password. It receives a scoped access token instead, limited to reading your worlds and, if you grant it, writing journal entries, quests, and lore.

## What this is

Storywright keeps the record of your world: sessions, recaps, player journals, quests, and the lore in your Drafting Table. If you already work with an AI assistant, you can seat it at that desk. Storywright runs a server for the [Model Context Protocol](https://modelcontextprotocol.io) (MCP) — the open standard Claude, ChatGPT, and a growing number of tools use to reach outside services.

Once connected, your assistant can look things up mid-conversation — "what happened in our last session?", "which quests are still open?", "what do we know about the harbormaster?" — and, when you ask it to, write back: draft a journal entry, log a quest, file a Drafting Table entry, or sketch a session recap for you to review.

## Good first moves

The connector ships ready-made prompts — in Claude they appear as commands you can pick straight from the prompt menu:

- **`/start-new-campaign`** — No world yet? Pick a genre template — high fantasy, sci-fi space opera, modern mystery, or a guided blank slate — and it builds the world and reports back what got seeded.
- **`/prep-my-next-session`** — A GM prep packet: where the story left off, open threads, and who's likely to show up.
- **`/what-happened-last-session`** — A chronicle-keeper's recap of the latest session, drawn from its notes, recap, and player journals.
- **`/find-loose-threads`** — Dangling quests, unkept promises, and forgotten corners of the world — each with a suggested re-hook.
- **`/catch-me-up`** — For players: everything you missed, your character's situation, and what the party is chasing now.
- **`/import-campaign-module`** — Hand it a prepared campaign — a published module, a Notion export, your own notes — and it fills the world: locations, NPCs, story arcs, and the beats between them. It reads the document on your side and shows you a plan before it writes anything.

## Check that it worked

"Connected" in your assistant's settings means the sign-in succeeded — not that it can read your campaign. Four questions settle it:

1. **"What Storywright worlds can you see?"** It should name your worlds back to you. If it says it has no access, the connector was added but never authorized — remove it and add it again.
2. **"What happened in our last session?"** Check a detail you remember — it should get it right. Confident prose about a session that never happened means it is answering from imagination, not from the record.
3. **Try a ready-made prompt** — in Claude, type `/find-loose-threads`. If the commands don't appear in the menu, the client connected but hasn't loaded the prompt list; reconnect it.
4. **Ask it to write something small** — a one-line journal entry. Then look for it in Storywright. If it reports success and nothing appears, it was granted read access only; reconnect and approve writing.

If a step fails and reconnecting doesn't fix it, write to hello@storywright.io and say which of the four it was — that alone usually names the problem.

## What it can and can't do

A connected assistant acts as you, with exactly your permissions — every request runs through the same checks as the app itself, enforced on the server.

- A player's assistant sees what that player sees. GM notes, hidden lore, and unrevealed entries stay hidden — connecting an assistant never widens anyone's view of the world.
- GM-only actions — publishing a session briefing, touching GM notes — are refused when a player's assistant attempts them, just as they would be in the app.
- Anything it writes lands as ordinary entries under your name, which you can edit or delete like anything you typed yourself. Nothing skips the reviews and approvals your table already relies on.

See [storywright.io/trust](https://storywright.io/trust) for the full permission matrix and data-flow reference.

## Disconnecting

Remove the connector in your assistant's settings whenever you like. Storywright supports standard OAuth token revocation, so a client can surrender its token the moment you remove it — and the tokens are short-lived besides: access tokens expire after about an hour and are renewed only while the connection is in use, and a connection left idle lapses on its own within thirty days. If you ever want a connection cut off immediately and removing the connector isn't enough, write to hello@storywright.io and we'll revoke it from our side.
