---
name: reactor-setup
description: Set up a Reactor content-engine workspace end to end — install the Reactor MCP, connect the user's publishing/analytics services, and fill the initial engine content (voice, brand, positioning, writing rules, audiences, competitors, per-platform tone). Use this when a user wants to get started with Reactor, onboard a new workspace, or configure their brand engine with an agent instead of by hand.
---

# Reactor workspace setup

You are setting up a [Reactor](https://docs.reactor.tools) workspace for the user. Reactor is a content engine: a single source of truth for brand voice, audiences, positioning, and rules that generates platform-native content, publishes it, and measures results. Every capability is exposed as an MCP tool, so you can configure the whole engine yourself.

Work through the three phases below. Confirm with the user before writing anything destructive, and prefer asking a few sharp questions over guessing.

## Phase 1 — Install the Reactor MCP

Reactor runs a remote MCP server at `https://app.reactor.tools/api/mcp`, bridged to local clients with `mcp-remote`. Auth is a Bearer API key that also identifies the user's workspace.

1. Ask the user for their Reactor API key. They generate it in the app under **Settings → API** (it is shown only once).
2. Install the MCP. The base command is:

   ```bash
   npx -y mcp-remote https://app.reactor.tools/api/mcp --header "Authorization: Bearer YOUR_API_KEY"
   ```

   For Claude Code:

   ```bash
   claude mcp add reactor -- npx -y mcp-remote https://app.reactor.tools/api/mcp --header "Authorization: Bearer YOUR_API_KEY"
   ```

   For a client that uses an `mcpServers` config block (Claude Desktop, Cursor), add:

   ```json
   {
     "mcpServers": {
       "reactor": {
         "command": "npx",
         "args": [
           "-y",
           "mcp-remote",
           "https://app.reactor.tools/api/mcp",
           "--header",
           "Authorization: Bearer YOUR_API_KEY"
         ]
       }
     }
   }
   ```

3. Verify the connection by calling `get_engine_config`. If it returns a config, you're connected. The server is self-describing — list its tools to see everything available, and read each tool's input schema before calling it.

## Phase 2 — Connect services

Call `get_connected_channels` to see what's already connected. Then explain the two kinds of connections:

- **OAuth channels — X, LinkedIn, Discord, Webflow.** These require the user to authorize in the UI under **Settings → Connections**. You cannot complete an OAuth flow for them. Direct them to that page and list which channels they still need to connect.
- **API-key services — email providers (ESPs) and analytics.** These can be added from the app. After the user adds one, confirm it appears in `get_connected_channels`.

Report the connection status back to the user before moving on. Connections are not required to fill engine content, but they are required to publish.

## Phase 3 — Fill initial engine content

This is where you add the most value. First call `get_engine_config` to see what already exists so you don't overwrite good data.

Gather context in one of two ways (ask the user which they prefer):

- **Interview** the user about their product, audience, positioning, and voice.
- **Research** their website — read it and draft the engine content, then have the user review.

Then write the engine content with these tools. Single-record sections (voice, brand, positioning, writing rules) merge the fields you provide, so partial updates are safe.

| Tool | What it sets |
|---|---|
| `update_engine` | Workspace name, description, and the company/project website used to personalize prompts |
| `update_voice` | Brand voice: personality, tone, lexicon, verbal identity, banned phrases |
| `update_brand` | Brand profile: one-liners, colors, pillars, values, vision, mission, positioning summary |
| `update_positioning` | Positioning: primary signature, anchor statement, category frame, wedge, competitive angles |
| `update_writing_rules` | Writing rules and banned patterns |
| `add_audience` | An audience persona (name, type, description, pain points, motivations, language notes) — call once per persona |
| `add_competitor` | A competitor / landscape entry (name, category, description, strengths, weaknesses, position notes) — call once per competitor |
| `set_platform_tone` | Per-platform tone, format rules, and hook formulas (X, LinkedIn, blog, newsletter, Discord, etc.) |

Use `get_engine_config` again at the end to confirm everything saved.

## Done

When all three phases are complete, summarize for the user:

- The MCP is installed and verified.
- Which channels are connected and which still need UI authorization.
- What engine content you wrote.

Then suggest next steps: create a brief and generate the first piece of content (`create_brief` → `generate_content` → `get_generation_status` → `get_content`), and publish or schedule it once a channel is connected.
