> From the [Strife developer docs](https://strife.app/docs/tools/mcp-server). Every page is listed in [llms.txt](https://strife.app/docs/llms.txt).

# MCP server

Connect Claude, Cursor, VS Code and other AI assistants to your Strife content with the hosted MCP server: find and read pages, write drafts, translate, manage labels, share drafts for review and publish once you approve.

Strife's MCP server lets an AI assistant work with your content. Connect it, and you can ask the assistant to find a page and summarize it, write a new draft, add a translation, fill in missing alt text or share a draft for review. The assistant signs in with your Strife account, and what it writes goes into drafts, which reach your site when they are published. The one exception is making a page the home page, which changes the page itself, as it does in Studio.

The server is hosted at `https://mcp.strife.app/mcp`. There is nothing to install and no key to copy: the first time your assistant connects, it opens a Strife sign-in page in your browser.

> [!NOTE]
> This server works with your content. To let an assistant search and read these docs, connect the [docs MCP server](https://strife.app/docs/how-to-guides/use-the-docs-from-ai-tools.md), on its own or as well.

## Connect your assistant

**Claude Code**

```sh
claude mcp add --transport http strife https://mcp.strife.app/mcp
```

Then run `/mcp` in Claude Code and follow the steps in your browser to sign in. Add `--scope user` to the command to have the server in every project, not only the current one.

**Claude**

In Claude on the web or in the desktop app, open **Customize → Connectors**, choose **+ Add → Add custom connector**, give it a name such as Strife and enter `https://mcp.strife.app/mcp` as the URL. Keep the default sign-in settings and sign in to Strife when Claude asks.

On Team and Enterprise plans, an owner adds the connector first, under **Organization settings → Connectors**. Each member then finds it under **Customize → Connectors** and chooses **Connect**.

**Cursor**

Add the server to `~/.cursor/mcp.json` for every project, or to `.cursor/mcp.json` in one project:

```json
{
  "mcpServers": {
    "strife": {
      "url": "https://mcp.strife.app/mcp"
    }
  }
}
```

Cursor then shows that the server needs you to sign in. Follow its prompt to open the Strife sign-in page.

**VS Code**

Add the server to `.vscode/mcp.json` in your project, or run **MCP: Open User Configuration** from the Command Palette to have it in every workspace:

```json
{
  "servers": {
    "strife": {
      "type": "http",
      "url": "https://mcp.strife.app/mcp"
    }
  }
}
```

When the server starts, VS Code asks to sign in. Allow it, and sign in to Strife in your browser.

Other MCP clients connect the same way: a remote server over Streamable HTTP at `https://mcp.strife.app/mcp`. The client needs to support OAuth sign-in for remote servers. Strife registers the client automatically, so there is no client ID or secret to enter.

Building in [Lovable](https://strife.app/docs/tools/connect-strife-to-lovable.md)? That page has the connector dialog, what to ask for, and what a chat connector can't do.

## Sign in and choose a workspace

The first time the assistant connects, your browser opens a Strife page that asks you to approve it:

1. Sign in to Strife, if you aren't already.
2. Choose the workspace to connect.
3. Check the assistant's name under **Details** and choose **Approve**.

The assistant can then work in the teams of that workspace, with your account's permissions. Each connection covers one workspace. To work in two, add the server twice under different names, such as `strife-acme` and `strife-other`, and choose a different workspace for each.

The assistant stays signed in until you sign it out. In Studio, **Settings → Account → Connected Agents** lists the assistants you have approved. **Revoke** stops one from renewing its access, and a token it already holds runs out within 30 minutes. To use it again, approve it again. The settings pages are only open to workspace admins today.

## What the assistant can do

You don't call the server's tools yourself: the assistant picks the ones it needs from what you ask. Apart from `list_teams`, every tool takes the team to work in, by its key or id.

**Teams and templates**

| Tool | What it does |
| --- | --- |
| `list_teams` | Lists the teams in your workspace, with the keys the other tools take. |
| `get_templates` | Lists a team's templates: the kinds of pages and blocks it can create. |
| `get_template` | Returns one template's fields, with an example value for each. |

**Find and read content**

| Tool | What it does |
| --- | --- |
| `find_content` | Searches by name or address, with filters on template, fields and dates. |
| `list_recent_content` | Lists the most recently changed content in a team. |
| `get_content` | Reads a page's fields in one language, published or draft. |
| `list_drafts` | Lists the pages that have changes waiting to be published. |
| `get_linkable_fields` | Lists the fields of other pages that a page can show by reference, so a page can reuse their content. |

**Write drafts**

| Tool | What it does |
| --- | --- |
| `create_draft` | Creates a page or block from a template, as an unpublished draft. |
| `edit_content` | Changes a page's fields. The change goes into the page's draft. |
| `edit_many` | Changes up to 100 pages in one call, each with its own values. |
| `add_locale` | Adds a language to a page. The assistant then writes the translation with `edit_content`. |
| `discard_draft` | Throws away a page's unpublished changes, in every language. |

Without an `origin`, `create_draft` puts a new page under the team's home page, the page whose slug is `/`. In a team without a home page, the page goes at the top level, and `origin_note` in the response says why. `create_draft` never makes the home page itself; `set_home_page` does. A template with `from` places its pages by its own rule first, and they never become the home page (see [Schemas](https://strife.app/docs/reference/cli/schemas.md#placing-pages-under-a-parent-type)). A document without a URL of its own always goes at the top level.

**The home page**

| Tool | What it does |
| --- | --- |
| `set_home_page` | Makes a top-level page the team's home page, the page whose slug is `/`. |

`set_home_page` follows the rules of **Set home page** in Studio, and leaves published pages to Studio:

* The team doesn't have a home page yet. If it has one, the tool refuses.
* The page is at the top level, has a URL, and its template has no `from`.
* The page isn't archived and has no scheduled update.
* The page isn't published. A published page's address is live, so you make it the home page in Studio.

The page's slug becomes `/` in every language it has. In a new team, the assistant creates the home page first and makes it the home page before it creates the other pages, so they go under it.

**Publish**

| Tool | What it does |
| --- | --- |
| `publish_content` | Publishes up to 25 pages. It shows a preview first, and publishes only once you confirm. |

**Share drafts for review**

| Tool | What it does |
| --- | --- |
| `create_snapshot` | Takes a snapshot of a page's draft and returns a link that anyone can read without signing in. |
| `list_snapshots` | Lists a page's active snapshot links. |
| `revoke_snapshot` | Stops a snapshot link at once. |

[Snapshots](https://strife.app/docs/reference/snapshots.md#from-an-mcp-client) describes the three snapshot tools in detail.

**Media and alt text**

| Tool | What it does |
| --- | --- |
| `find_assets` | Searches the team's media library: images, videos, audio and files. |
| `get_asset` | Returns a file's details, so the assistant can put it in an image or assets field. |
| `find_missing_alt_text` | Finds images without alt text, in image fields and in rich text, so the assistant can add it. |

**Labels**

| Tool | What it does |
| --- | --- |
| `list_labels` | Lists the team's labels and label groups, with the ids the other tools take. |
| `create_label` | Creates a label, optionally in a group, with a color and the areas it is offered in: content, media or both. |
| `edit_label` | Changes a label's name, color, areas or group. Pages that use the label keep it. |
| `delete_label` | Deletes a label that nothing uses. If pages or media files still carry it, nothing is deleted and the assistant lists them. |
| `create_label_group` | Creates a label group. |
| `edit_label_group` | Renames a label group. |
| `set_label_group` | Moves up to 100 labels into a group, or out of their group. |
| `delete_label_group` | Deletes an empty label group. If it still has labels, or a page has it selected in a label group field, nothing is deleted and the assistant lists them. |

Label names are unique in a team, so the assistant reuses a label that already exists instead of creating a second one with the same name. A label's color is one of `red`, `orange`, `yellow`, `green`, `teal`, `blue`, `violet` and `pink`, which adapt to light and dark mode, or a hex color such as `#eb5757`. Renaming a group doesn't change its normalized name, so queries on your site that use it keep working.

To delete a label that pages use, the assistant first removes it from those pages, and a published page has to be published again. Labels on media files can only be removed in Studio's media library.

The server works with content. It doesn't upload media, which you do in Studio, and it doesn't change templates, which you define in code and deploy with the [CLI](https://strife.app/docs/reference/cli.md).

## How changes reach your site

Everything the assistant writes goes into drafts. `create_draft`, `edit_content`, `edit_many` and `add_locale` never touch the published page, so your site keeps showing it while you review the changes in Studio or in the live preview.

The exception is `set_home_page`. Like **Set home page** in Studio, it changes the page itself, not a draft. It refuses a published page, so the page is at `/` once it is published. Pages under it that are already published lose its old slug from their addresses at once.

Publishing takes two steps. `publish_content` first answers with a preview: the pages that would be published, and any languages that would stay unpublished. The assistant shows you the preview and publishes only after you say yes. Publishing through the server works like publishing in Studio.

The assistant acts with your account. Some tools also need you to be a member of the team:

* `publish_content`, `discard_draft`, `edit_many` and the snapshot tools need team membership.
* `create_snapshot` and `revoke_snapshot` also need edit rights, so a Viewer can list snapshot links but not create or revoke them.
* The label tools that make changes need team membership and edit rights. `list_labels` doesn't.
* `set_home_page` needs team membership and edit rights.

`discard_draft`, `revoke_snapshot`, `delete_label` and `delete_label_group` can't be undone. A snapshot link works for anyone who has it, until it expires after 7 days or is revoked.

## Example prompts

Ask the way you would ask a colleague. Name the team if your workspace has more than one.

* *Which pages in the Marketing team changed this week?*
* *Find our pricing page and summarize what it says about the free plan.*
* *Create a draft FAQ item in Marketing that explains how refunds work.*
* *Find the blog posts with images that have no alt text, and suggest alt text for each. Write it once I have checked.*
* *Add Swedish to the About page and translate it. Don't publish.*
* *Share the draft of the launch page with our legal team for review.*
* *Publish the three pages we just edited.*
* *Create a label group called Colors and move the labels Red, Green and Blue into it.*

## Troubleshooting

**"You are not a member of that workspace."** Choose a workspace you belong to on the sign-in page.

**"This consent link is no longer valid."** The sign-in page can no longer be used. Start the connection again from your assistant.

**The assistant can't find a team.** It may be connected to another workspace. Ask it to list the teams. If the team isn't there, sign the assistant out (in Claude Code, **Clear authentication** in the `/mcp` menu), connect again and choose the right workspace.

**Publishing, discarding, snapshots, label changes or setting the home page are refused.** Those tools need you to be a member of the team, and snapshots, label changes and setting the home page also need edit rights. Ask an admin to add you to the team.

**A label or label group can't be deleted.** Something still uses it, and the assistant lists what. Remove the label from those pages and media files, or move the labels out of the group, and ask again.
