← Workflows
Claude Desktop

Relay + Claude Desktop.

Connect Relay via MCP, build a Pulse for each project, and stop re-explaining yourself at the start of every session.

Time to set up: ~5 min · Requires: Relay account + Claude Desktop

Connect Relay to Claude Desktop

Open your Claude Desktop config file. On Mac it's at ~/Library/Application Support/Claude/claude_desktop_config.json. Add the Relay MCP block inside mcpServers:

~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "relay": {
      "command": "npx",
      "args": ["-y", "@relayctx/mcp-server"],
      "env": {
        "RELAY_API_KEY": "your-api-key-here"
      }
    }
  }
}

Replace your-api-key-here with your key from the Relay dashboard. Save the file, then fully quit and relaunch Claude Desktop — it needs to restart to pick up MCP config changes.

Confirming it's connected: In any new Claude Desktop conversation, ask "What Relay tools do you have?" — Claude should list the available tools (relay_pulse_active, relay_session_log, etc.). If it comes up empty, double-check the JSON syntax and restart again.

If you already have other MCP servers configured, add the relay block alongside them — don't replace the whole mcpServers object.

Create a Pulse for each project

A Pulse is persistent context — what's true right now about a given area of work. Unlike a session, it doesn't end when you close Claude. It carries forward and updates as things evolve.

Create one per project, per focus area, or per recurring context you keep re-explaining. In a new Claude Desktop conversation:

Claude conversation
You: Create a Relay Pulse for my auth refactor project.
      We're moving from JWT to session tokens.
      Currently in the middleware layer, targeting
      completion by end of sprint.

Claude: Created Pulse "Auth Refactor" — here's your code:
       pc_3a7f...
       I've logged the JWT → session token migration,
       middleware scope, and sprint target as the
       initial state.

Be as specific or as loose as you want. The Pulse is yours — it accumulates context over time and you can update it whenever the situation changes.

Good Pulse names: specific enough to distinguish ("Auth Refactor", "Q3 Launch Copy", "API Docs v2") rather than broad ("Work", "Code"). You'll load these by name, so clarity helps.
relay_pulse_create relay_pulse_list relay_pulse_update

Start every session loaded

This is the actual pattern change. Instead of starting a new Claude conversation cold — typing out the context all over again — you load your active Pulse and pick up where you left off.

Without Relay
—Open Claude Desktop, start new conversation
—Type out: "I'm working on X, here's the background..."
—Explain decisions made last session
—Re-share relevant context, files, constraints
—Finally get to the actual question
With Relay
✓Open Claude Desktop, start new conversation
✓"Load my active Relay Pulse for the auth refactor"
✓Claude has everything: scope, decisions, current state
✓Ask your actual question

In practice it looks like this:

Claude conversation — any new session on this project
You: Load my active Relay Pulse for auth refactor.

Claude: Loaded "Auth Refactor" (pc_3a7f...).
       Current state:
       - JWT → session tokens migration in progress
       - Middleware layer: 60% complete
       - Decision log: refresh token rotation approved,
         sliding window 7 days
       - Sprint ends Friday
       What do you want to work on today?
Tip: Update your Pulse during the session if something significant changes — a decision gets made, scope shifts, something gets unblocked. That way it's accurate next time you load it.
relay_pulse_active relay_pulse_get relay_pulse_update

Package a session as a Code

At any point — end of a working session, before a context switch, before closing a thread — you can package everything into a transferable Code. That's the unit Relay moves. Short, opaque, yours.

Claude conversation — when you're ready to close out
You: Package this session with Relay. Title it
      "Auth middleware — session 4".

Claude: Packaged. Your Code:

       QNHC2C

       Included: conversation summary, active decisions,
       middleware state, open questions.
       The Code is ready — send it, save it, or load it
       in a new session to continue.

You don't have to do anything with the Code right now. It holds until you need it. Load it later in a fresh session, send it to a teammate, or pass it to an agent — it works the same way from any of those starting points.

What's in a Code: The content you've built in the session — context, decisions, work state. Not the raw conversation transcript. Relay packages the meaning, not the noise.
relay_session_package relay_transfer_create

Handoffs — sending and receiving

The Code you packaged is how context crosses sessions, tools, people, and agents. Send it the same way you'd share anything — Slack, email, dropped in a doc. The other side loads it in their agent.

You
Send the Code to a teammate
Just paste it in Slack, DM, or wherever. They need a Relay account and a connected MCP client. That's it — no link, no attachment, no file transfer.
Them
relay_transfer_receive · Code: QNHC2C
They ask Claude to load the Code. The context arrives — same state, same decisions, picked up exactly where you left off.
You
Receive a Code someone sent you
Same: ask Claude to load it. Works in any new conversation. "Load Relay Code QNHC2C and tell me what's there."
Codes are single-use by default. Once loaded, they're marked received. This keeps the provenance clean — you always know who got what, when. If you need to share the same context with multiple people, package it as a series instead.
relay_transfer_create relay_transfer_receive relay_transfer_forward relay_series_create

Tools at a glance

The Relay tools Claude Desktop exposes via MCP. These are what you ask Claude to call — by name or by natural language ("load my pulse", "package this session").

relay_pulse_create Create a new Pulse for a project or focus area
relay_pulse_active Load your active Pulse at the start of a session
relay_pulse_update Update your Pulse mid-session as things change
relay_session_log Log a specific moment or decision during a session
relay_session_package Package the current session into a transferable Code
relay_transfer_create Create a standalone transfer with a custom context payload
relay_transfer_receive Load a Code and receive the context it carries