Skip to content

MCP server

rollout has an MCP server, so AI assistants can work with your announcements: look them up, file backlog snippets for the changes you shipped, draft announcements and, if you allow it, publish them.

The server is at https://api.rollout.so/mcp. It speaks MCP’s Streamable HTTP transport with the 2026-07-28 protocol, which Claude Code, Codex and Claude.ai support. Clients that only know the older 2025 protocol get an error naming the version they need.

There are two ways in:

  • An API key, for Claude Code, Codex and scripts. A key works in one project.
  • Signing in, for connectors such as Claude.ai. You sign in with your rollout account, pick the workspace, and the assistant can do what your role allows, in every project.
  1. In the dashboard, open the project’s Settings → API access and create a key. Choose what it may do (read only; read and draft; or read, draft and publish) and when it expires (30 days, 90 days, 1 year or never). Only admins can create keys.

  2. Add the server to your assistant, with the key as a Bearer token:

    claude mcp add --transport http rollout https://api.rollout.so/mcp \
    --header "Authorization: Bearer YOUR_API_KEY"
  3. Ask for something, for example “Add backlog snippets for the pull requests I merged this week” or “Draft the October update from the backlog”.

Anything from another project answers “not found”. Revoking a key cuts off access within a minute; an expired key stops working on its expiry date.

In Claude.ai, open Settings → Connectors → Add custom connector and enter

https://api.rollout.so/mcp. Claude opens rollout’s sign-in: sign in, pick the workspace, and allow access. Viewers get the read tools; editors and admins can also draft and publish.

With an API key, tools work in the key’s project. Signed in, list_projects shows the projects and the project tools take a projectId.

Tool Needs What it does
get_project / list_projects Read The key’s project, or the workspace’s projects, with backlog size and announcement counts.
list_announcements Read Search and filter announcements (q, status, channel, audience, sort, order, limit).
get_announcement Read One announcement as Markdown: title, summary, intro, snippets with ids, channels, audience, status.
list_backlog Read Snippets waiting in the backlog, optionally by tag.
preview_announcement Read The rendered draft as Markdown and plain text, and the email subject and preview text.
create_snippet Draft Adds a snippet to the backlog, or to an announcement.
update_snippet Draft Changes a snippet’s title, tag or Markdown body.
create_announcement Draft Starts a draft with title, summary and intro.
set_announcement_snippets Draft Chooses and orders an announcement’s snippets; left-out ones return to the backlog.
update_announcement Draft Title, summary, intro, channels, email subject, preview text and list, audience rules.
publish_announcement Publish Publishes now, or schedules with publishAt.
unpublish_announcement Publish Takes an announcement out of the feed and changelog.
sync_email Publish Writes the announcement into its Loops draft now. Nothing is sent.
send_test_email Publish Sends a test of the Loops draft to up to 5 addresses.

create_snippet and create_announcement take an optional idempotencyKey: a retried call with the same key (for 7 days) returns the first result instead of creating a duplicate. Use a pull request or commit id.

Assistants can only publish in projects where an admin has turned on Let assistants publish (Settings → API access), and only with a key that has publish access or as an editor or admin.

Publishing always takes two calls. Without confirm, publish_announcement and unpublish_announcement change nothing and describe what would happen: the channels, the audience, the email. The assistant shows that to you and calls again with confirm: true once you agree. Email is never sent by rollout: it updates the campaign draft in Loops, and a person sends it there.

  • Resources: rollout://announcements/{id} and rollout://snippets/{id} as Markdown, for assistants that attach documents as context.
  • Prompt release-notes-from-changes: give it a list of merged pull requests or commits; it files one snippet per user-facing change, skips internal ones, and uses each change’s id as the idempotency key.
  • Prompt polish-announcement: proposes clearer wording for an announcement and applies it once you agree.

Example: a snippet for every merged pull request

Section titled “Example: a snippet for every merged pull request”

This GitHub Actions workflow runs Claude Code when a pull request is merged and files a backlog snippet if the change is user-facing. Add a Read and draft key as the ROLLOUT_API_KEY secret, and your ANTHROPIC_API_KEY.

name: Release notes
on:
pull_request:
types: [closed]
jobs:
snippet:
if: github.event.pull_request.merged
runs-on: ubuntu-latest
steps:
- name: Configure rollout MCP
run: |
cat > /tmp/rollout-mcp.json << EOF
{"mcpServers": {"rollout": {"type": "http", "url": "https://api.rollout.so/mcp",
"headers": {"Authorization": "Bearer ${{ secrets.ROLLOUT_API_KEY }}"}}}}
EOF
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
claude_args: |
--mcp-config /tmp/rollout-mcp.json
--allowedTools mcp__rollout__list_backlog,mcp__rollout__create_snippet
prompt: |
Pull request #${{ github.event.pull_request.number }} was merged:
"${{ github.event.pull_request.title }}"
${{ github.event.pull_request.body }}
If customers would notice this change, file one rollout backlog snippet for it with
create_snippet: a short plain-language title, tag new, improved or fixed, a 1–3
sentence Markdown body, and idempotencyKey "pr-${{ github.event.pull_request.number }}".
Check list_backlog first. If it is an internal change, do nothing.

Requests share the public API’s rate limit (300 a minute per key or person). Everything an assistant changes is recorded in the workspace’s audit log under its key or the signed-in person.