Skip to content

Guide

Claude Desktop and Claude Code connect to Foundry with no agent app in between.

Anthropic builds two MCP clients of its own, Claude Desktop and Claude Code, and both speak straight to your Foundry world with nothing third-party in the path. Familiar holds the other end, running inside the world you GM. The connector rides on an Anthropic Pro, Max or Team plan, and usage comes out of that plan rather than a token balance. Once the link is live, Claude takes the dungeon master's chair for the published adventure you imported. So one decision is left. Desktop or Code.

Claude Desktop or Claude Code?

Both are MCP clients Anthropic builds itself, both run on the same Pro, Max or Team plan, and both drive the same Familiar server in the same world. The choice is mostly ergonomics: where you would rather type, and what you want to see come back.

One thing Desktop does that Code does not is start Familiar's server when the app launches, not when you open a chat. That is no reason to keep one of them closed: Familiar listens on one local port, and a second server started by the other client attaches to the first one and runs through it, so Desktop and Code can sit open side by side against the same world.

For Claude Code the whole setup is the line below, at user scope. Leave the placeholder secret alone: Familiar's wizard mints the real one and hands back the finished command.

Claude Desktop and Claude Code compared on how you add each one, the tool surface it carries, what happens to a picture it fetched, and what each one suits.
What differsClaude DesktopClaude Code
Adding itPaste the config block the wizard writesOne line in the terminal, no follow-up
Tool surfaceA curated set under its 100-tool cap; image, voice and battle-map generation sit outside itThe whole surface, its definitions deferred behind tool search
A picture it fetchedReasoned over, not shown in the window, and only once the image bundle is switched onRendered in the tool-output panel, up to its cap
SuitsSitting open in a window beside FoundryLong chains, and a terminal you already live in

Familiar picks the surface from the name the client reports at the handshake; the one dial you hold is the bundle list further down this page. An image from either client saves into your Foundry world; only whether you also see it in the client differs.

Claude Code
claude mcp add familiar --scope user --env FAMILIAR_WS_SECRET=<your-secret> -- npx -y familiar-vtt

What Claude reaches inside your world

With the connector live, Claude can read and act on what your world already holds. The journals you imported, the character sheets, the statblocks pulled from the module, the scene open on the canvas. Ask who the innkeeper was and it opens the journal entry rather than reaching for a plausible name; ask what the party has walked into and it reads the tokens actually on the map.

That reach is also the boundary. Claude answers from the pages your world already holds, which is what makes a name or a stat block worth trusting. It is also why the campaign has to arrive from somewhere else: a published adventure you imported and prepped. Claude runs those pages without rewriting them.

  • Journals & Notes
  • Characters & Items
  • Scenes & Tokens

Check the link, then ask for something real

Whichever client you picked, the first line to send is the product's own, the one both wizard cards close on. If Claude answers with your world's name, the link is live, and everything under it is safe to try.

Before that line, check that the client is holding the connector. On Desktop, quit the app and open it again once the config is pasted. Under Settings, Developer, familiar then shows as running, and the + button under the chat box lists it under Connectors.

On Code nothing needs reloading, Foundry included. Familiar's MCP / Subs tab turns green on its own once a session has started the server, and /mcp inside that session shows the same status. The first start on either client downloads the server, so give it a minute.

After that, each ask below leans on something this page has already claimed: the sheets and statblocks in your world, the picture row of the table, the scene on the canvas. The portrait line needs an image provider in Familiar's settings, and on Desktop the bundle line further down as well.

  • The verify line
    Use Familiar's get-world-info tool
  • Read a sheet
    Read <character>'s sheet and tell me their AC, their current hit points, and which spells they have prepared.
  • Pull a statblock from the module you imported
    Find <monster>'s statblock in the adventure I imported and tell me what it does on its turn.
  • Fetch a picture
    Generate a portrait for <NPC name> and set it as their sheet image.
  • Move the table to a scene
    Switch the table to <scene name> and tell me which tokens are standing on it.

Where only Claude gets stuck

Desktop's faults come from reading things once, at launch. Code's come from the command line. Nothing on this list shows up on another client; the faults every client shares have one home, the connect guide, linked below.

  • Settings, Developer shows no familiar after the paste

    Closing the window is not quitting. Desktop keeps running in the tray, so the entry you pasted has not been read yet. Right-click the tray icon and choose Quit on Windows, or press Cmd+Q on a Mac, then open it again.

  • On Windows it is still missing after a proper restart

    Some Windows installs open one config file and read another. Look for a second claude_desktop_config.json under %LOCALAPPDATA%\Packages, in the folder there whose name starts with Claude_, at LocalCache\Roaming\Claude, and put the same entry in that one.

  • Ask Desktop for a portrait, a voice or a battle map and nothing happens

    Desktop never looks at its tool list again mid-session, so it cannot pick up a tool it did not start with. The section below carries the one line that switches those three on.

  • claude mcp add refuses the line: Invalid environment variable format: familiar

    The server name went in after the secret. That flag takes a list, so a name placed behind it is read as one more variable and rejected. Put familiar straight after add, the way the command higher up this page has it, or copy the finished line from the wizard card.

  • claude mcp list says Failed to connect right after the add

    Adding the entry saves it and starts nothing. That check is what first runs the server, and while that first download is still going it reads as failed. Run it again a minute later.

If Claude Desktop is missing a tool you want

Desktop caps its tool list at 100, so Familiar hands it a curated set, and three bundles sit outside that set out of the box: image generation, voice generation, and the battle-map generator. The dial sits in the same config the wizard writes, carried the same way as the secret. Add the line below to the env block of the Familiar entry and restart Desktop.

Name fewer bundle ids to add fewer. Put only: in front of the list and it sees the core tools plus exactly those, and nothing else.

Claude Desktop: switch the three bundles on
FAMILIAR_TOOL_BUNDLES=image-generation,voice-generation,scene-generator

Bringing an Anthropic key instead

Some tables would rather not have a client open at all. Familiar takes an Anthropic key directly, and Claude then answers from inside the Foundry tab itself: no config file, no second process to keep alive. That key is metered by Anthropic, per token. Familiar itself is a subscription of its own, billed apart from anything Anthropic sends you.

The key buys one thing the plan route cannot. On a direct Anthropic key, Familiar renders the longest reasoning ladder it has anywhere. Those rungs are not inferred from a model name: Anthropic reports what each model accepts, and the dropdown is that answer. How far down the ladder goes depends on the family, since some Claude models let you switch thinking off entirely and some do not offer that rung at all. Route the same model through an aggregator and that ladder gets shorter.

More in Connect your assistant

New to Familiar? I'm Ryan, the person who built it. The Discord is small and brand new, so if you join now I'll help you get set up myself.