Shift MCP Query API

ByteBrew Shift MCP is a remote Model Context Protocol (MCP) server that's directly connected to every analytics tool in ByteBrew. Contained within Shift MCP is a domain-grounded contextual engine, trained on proprietary multi-model product embeddings that enriches every interaction with the server. Connect Shift directly within your AI workflow to ask questions in natural language for Shift to query data from your app and web game portfolio.

Shift also operates your Live Ops. Beyond reading analytics, Shift can list, create, and update your Remote Configs, and create, monitor, stop, archive, and roll out your A/B Tests, so your assistant can go from finding an insight to shipping the change in the same conversation.

Overview

tag

The Shift MCP server connects to the ByteBrew suite to enable your AI assistant to retrieve analytics for the apps in your studio, and to operate your Remote Configs and A/B Tests. Authenticate once with a Shift API Key to answer questions like "what is the D30 LTV of my apps in US, CA, and UK?", "show me the journey of users completing my tutorial for the last 2 app versions." or "which step of my onboarding funnel drops the most players?" and the assistant will call the correct Shift tool, resolve your filters, and return the data. You can then act on it in the same session with prompts such as "lower the starting lives remote config to 3" or "roll out Group B of my difficulty test."

Server Details

tag

The Shift MCP is a remote MCP server over Streamable HTTP. There is nothing to install or run locally. Point your tool at the server URL below and attach your Shift API Key.

fiber_manual_record
Server URL: https://shift-mcp.bytebrew.io/mcp
fiber_manual_record
Transport: Streamable HTTP (remote)
fiber_manual_record
Authentication: Required. Send your Shift API Key as a Bearer token in the Authorization header.

Authentication

tag

The Shift MCP authenticates every request with a Shift API Key. Generate a key from your Studio Settings, then attach it to your MCP client as a Bearer token. There is no separate token-generation call. The key itself is the credential, and it is scoped to the apps owned by your studio account.

Every request to the server must include an Authorization header. See the expected header format below:

                                


                                Authorization: Bearer YOUR_SHIFT_API_KEY


                                
                            

Create API Key

tag

To create a Shift API Key, navigate to the API Key tab in the Shift Settings and hit the create button.

Delete API Key

tag

To delete a Shift API Key, navigate to the API Key tab in the Shift Settings and hit the delete button next to the key you want to delete.

Claude Desktop

tag

Add the server by editing the claude_desktop_config.json file (Settings → Developer → Edit Config). Claude Desktop connects to remote servers through the mcp-remote bridge, and your Shift API Key is passed via the Authorization header. Place your key in the AUTH_TOKEN environment variable so it is not inlined into the arguments:

{
  "mcpServers": {
    "bytebrew-shift-mcp-query-api": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://shift-mcp.bytebrew.io/mcp",
        "--transport",
        "http-only",
        "--header",
        "Authorization:${AUTH_TOKEN}"
      ],
      "env": {
        "AUTH_TOKEN": "Bearer YOUR_SHIFT_API_KEY"
      }
    }
  }
}

Fully quit and restart Claude Desktop, then check Settings → Developer to confirm the bytebrew-shift-mcp-query-api server is connected and its tools are listed.

Claude Code

tag

Add the server with the claude mcp add command using the HTTP transport, passing your key with --header:

claude mcp add --transport http bytebrew-shift-mcp-query-api https://shift-mcp.bytebrew.io/mcp --header "Authorization: Bearer YOUR_SHIFT_API_KEY"

Or add it to a project's .mcp.json file to share it with your team (keep real keys out of shared files, use an environment variable):

{
  "mcpServers": {
    "bytebrew-shift-mcp-query-api": {
      "type": "http",
      "url": "https://shift-mcp.bytebrew.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_SHIFT_API_KEY"
      }
    }
  }
}

Run /mcp inside Claude Code to confirm the bytebrew-shift-mcp-query-api server is connected.

Cursor

tag

Add the server to ~/.cursor/mcp.json (global) or .cursor/mcp.json in your project root. Cursor uses the url field for remote Streamable HTTP servers and a headers object for authentication:

{
  "mcpServers": {
    "bytebrew-shift-mcp-query-api": {
      "url": "https://shift-mcp.bytebrew.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_SHIFT_API_KEY"
      }
    }
  }
}

Then open Settings → MCP & Integrations and verify bytebrew-shift-mcp-query-api shows a green status with its tools listed.

OpenAI Codex

tag

Add the remote server to ~/.codex/config.toml. Codex connects to Streamable HTTP servers with a url and passes the Shift API Key through http_headers:

[mcp_servers.bytebrew-shift-mcp-query-api]
url = "https://shift-mcp.bytebrew.io/mcp"
http_headers = { "Authorization" = "Bearer YOUR_SHIFT_API_KEY" }

Start a Codex session and run /mcp to confirm the server is connected and its tools are listed.

Google Antigravity

tag

In Antigravity, open Settings → Customizations and click Open MCP Config to edit mcp_config.json. Antigravity uses the serverUrl field for remote servers and a headers object for the Bearer token:

{
  "mcpServers": {
    "bytebrew-shift-mcp-query-api": {
      "serverUrl": "https://shift-mcp.bytebrew.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_SHIFT_API_KEY"
      }
    }
  }
}

Save the file, then open the MCP Servers panel and refresh to load the bytebrew-shift-mcp-query-api tools.

Cursor Agent (CLI)

tag

The cursor-agent CLI automatically discovers the same mcp.json configuration used by the Cursor editor. Add the server to ~/.cursor/mcp.json or your project's .cursor/mcp.json with your key in the headers object:

{
  "mcpServers": {
    "bytebrew-shift-mcp-query-api": {
      "url": "https://shift-mcp.bytebrew.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_SHIFT_API_KEY"
      }
    }
  }
}

In an interactive cursor-agent session, enable the server with the slash command:

/mcp enable bytebrew-shift-mcp-query-api

Gemini CLI

tag

Add the server to your Gemini CLI settings.json (global at ~/.gemini/settings.json or project-scoped at .gemini/settings.json). Gemini CLI uses the httpUrl field for Streamable HTTP servers and a headers object for authentication:

{
  "mcpServers": {
    "bytebrew-shift-mcp-query-api": {
      "httpUrl": "https://shift-mcp.bytebrew.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_SHIFT_API_KEY"
      }
    }
  }
}

Launch gemini and run the /mcp command to list the discovered server and its tools.

JetBrains AI Assistant

tag

In your JetBrains IDE, go to Settings → Tools → AI Assistant → Model Context Protocol (MCP) and click Add. Choose As JSON and paste the following. AI Assistant connects to remote servers over Streamable HTTP using the url field, with a headers object for the Bearer token:

{
  "mcpServers": {
    "bytebrew-shift-mcp-query-api": {
      "url": "https://shift-mcp.bytebrew.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_SHIFT_API_KEY"
      }
    }
  }
}

Apply the settings. The server's tools appear in the MCP section once the connection succeeds.

Visual Studio Code

tag

Create a .vscode/mcp.json file in your workspace. VS Code uses the servers root key, requires "type": "http" for remote servers, and accepts a headers object for authentication:

{
  "servers": {
    "bytebrew-shift-mcp-query-api": {
      "type": "http",
      "url": "https://shift-mcp.bytebrew.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_SHIFT_API_KEY"
      }
    }
  }
}

Available Tools

tag

Once connected, the Shift MCP exposes the tools below. Your assistant selects the right tool automatically based on your prompt. Tools are split into discovery tools (which resolve app IDs, filter values, custom events, and AB tests), query tools for mobile and web apps, and Live Ops management tools that read and write your Remote Configs and A/B Tests.

Discovery Tools

Tool Description
App List Lists the apps/games available to your account with their platform, app name, and bundle-id / package name. Takes no parameters.
Filter Values Returns the set of valid filter values for an app, grouped by filter type (country, os version, build, device, and, for web, browser / browser version / device type / os name, plus mobile attribution sources). Call this to resolve an exact value before passing it to a query filter. Requires gameId.
Custom Events Returns the custom event names and their sub-parameters for an app. Requires gameId.
AB Tests Returns the AB tests for an app. Each test includes filterKeys in test-id:group format for use in the abtests parameter of any query tool. Requires gameId. For full test details and lifecycle status, use AB Tests List (Full) instead.

Mobile Query Tools

Tool Description
New User DataNew user cohort data.
SessionsSession counts.
Session LengthSession length data.
PlaytimePlaytime data.
DAUDaily active users (DAU).
RetentionCohort retention curve (Day N / Week N / Month N).
LTVCohort Lifetime Value (LTV) from IAP, ad-watched, and custom revenue events.
Monetization OverviewHigh-level monetization overview (ARPDAU, revenue, ad revenue, IAP revenue, ARPU).
Revenue Analysis BreakdownIAP and Ad revenue metrics together or separately, with dimension breakdowns.
Custom MechanicsThe Mechanics data playground: custom event and segment analysis with formulas.
Event Breakdown DataGranular custom event breakdowns with aggregators and sub-parameter filters.
Target Events RetainedCustom event activity by retained day.
User JourneyMost common user paths between a start and/or end event.
FunnelsStep-by-step conversion through an ordered sequence of 2–20 events, in strict order. Returns users reaching each step, the percentage remaining, and the average and median time between steps. Use it to locate the exact drop-off step in FTUE/onboarding, level progression, or purchase flows.
Ads RetainedRetained average ads watched.
Session Length RetainedRetained session length.
Playtime RetainedRetained playtime.
Cumulative Playtime RetainedRetained cumulative playtime.
Purchase RetainedRetention sliced by purchase amount.
Session Amount RetainedRetention sliced by session count.

Web Query Tools

Tool Description
New User DataNew user cohort data.
SessionsSession counts.
Session LengthSession length data.
PlaytimePlaytime data.
DAUDaily active users (DAU).
RetentionCohort retention curve (Day N / Week N / Month N).
Custom MechanicsThe Mechanics data playground for web apps.
Event Breakdown DataGranular custom event breakdowns.
User JourneyMost common user paths between a start and/or end event.
FunnelsStep-by-step conversion through an ordered sequence of 2–20 events, in strict order, with per-step users, percentage remaining, and time between steps.

Live Ops Management Tools

These tools operate on your live game configuration and work for both mobile and web apps. See Live Ops Management for their full parameters and examples, and the Remote Configs and A/B Tests dashboard docs for managing the same objects in ByteBrew.

Tool Access Description
Remote Configs ListReadLists a game's live remote config values plus its saved conditions (user segments) and their conditionIDs.
Create Remote ConfigWriteCreates a new remote config value: single, conditional (per-segment overrides), or group (values rotating on an interval).
Update Remote ConfigWriteUpdates an existing config by config_key: its value, its active dates, and for conditional configs, adding or removing conditions.
AB Tests List (Full)ReadLists a game's A/B tests with full details: lifecycle status, dates, goals, enrolled percentage, targeting, each variant's config values, and filterKeys.
Create AB TestWriteCreates a new A/B test with its variant groups, KPI goal, enrolled percentage, and optional targeting. The SDK begins enrolling players from start_date.
Update AB Test StatusWriteStops, archives, or resumes a test.
Rollout AB TestWritePromotes a winning group's values into the game's live remote config, then archives the test.

Filters & Parameters

tag

Every query tool takes a date range, and most take the shared filter dimensions below. Filter values that accept lists are passed as comma-separated strings.

Common Parameters

Parameter Description
gameIdRequired. The single Game ID to query. Use the App List tool to resolve it.
startDateStart date, format "YYYY-MM-DD" (e.g. "2021-03-01"). Defaults to 7 days ago if omitted.
endDateEnd date (exclusive), format "YYYY-MM-DD".
countryCountry code(s), comma-separated (e.g. "US,GB,DE"). Omit to include all countries.
abtestsAB test filter key(s) in test-id:group format, comma-separated. Resolve them with the AB Tests tool.
breakdownDimensions to group by, comma-separated. Options: Game, Date, BuildVersion, OSVersion, Country, Device, Platform.

Mobile Filter Dimensions

Parameter Description
buildBuild version(s), comma-separated.
osversionOS version(s), comma-separated.
deviceDevice model(s), comma-separated.
attributionEncoded JSON object mapping a network to its sources, e.g. {"network": "XX", "sources": ["XX ID: (1234)"]}.
acquisitionOne of 'organic' or 'non-organic'.

Web Filter Dimensions

Parameter Description
buildBuild version(s), comma-separated.
osversionOS version(s), comma-separated.
deviceDevice model(s), comma-separated.
browserBrowser name(s), comma-separated (e.g. Edge, Chrome).
browserversionBrowser version(s), comma-separated.
devicetypeDevice type(s), comma-separated (e.g. Tablet, Desktop).
osnameOS name(s), comma-separated (e.g. Windows, Macos).

Retention Scale (retention & retained tools)

Parameter Description
scaleTypeRetention scale (Days, Weeks, or Months). Defaults to Days.
scaledAmountNumber of retention periods, based on the chosen scaleType:
  • Day: 7, 14, 28, 30, 60, 90, 180, 365
  • Week: 4, 8, 16, 24, 32, 46, 52
  • Month: 2, 4, 6, 8, 12, 18
groupByOptional breakdown dimension (e.g. BuildVersion).

Funnel Parameters

The funnel tools measure how many users progress through an ordered sequence of events, in strict order. They accept the common parameters and the platform filter dimensions above, plus the following.

Parameter Description
funnel_eventsRequired. Encoded JSON array of 2–20 ordered steps. Each step is an object whose event key names the event; every other key is a sub-parameter name mapped to the value the event must match. The first step may also use the presets "User Install" (new user event) or "User App Open" (game open event); all later steps must be custom events.
breakdownOptional. A single dimension to break each step down by. One of: date, value, build, os, geo, device, or a custom event sub-parameter name. The sub-parameter option is only valid if all events in funnel_events share that sub-parameter name.

A funnel request looks like this:

{
  "gameId": "YOUR_GAME_ID",
  "startDate": "2026-08-01",
  "endDate": "2026-09-01",
  "funnel_events": "[{\"event\": \"User Install\"}, {\"event\": \"tutorial_complete\"}, {\"event\": \"level_complete\", \"level\": \"1\"}, {\"event\": \"level_complete\", \"level\": \"5\"}]",
  "breakdown": "geo",
  "country": "US,GB"
}

Each returned row is one funnel step:

Field Description
eventThe step label, in the form Step N: "eventName".
rowThe 1-based step index.
amountEventsTotal times the step's event occurred.
numUsersUsers who reached this step, having completed every prior step first.
percentUsersPercentage of users remaining relative to the largest step. This is the drop-off read.
timeStepAverage seconds from the previous step.
medianTimeMedian seconds from the previous step.

Live Ops Management

tag

Shift's Live Ops tools let your assistant read and operate the Remote Configs and A/B Tests of any app in your studio, for both mobile and web platforms. This closes the loop on analysis: query the data, pick the change, then ship it without leaving your AI workflow.

Shift operates on the same Live Ops objects you manage on the ByteBrew dashboard. See the Remote Configs and A/B Tests dashboard docs for the full feature reference.

Remote Configs List

Returns a game's live remote config values and its saved conditions. Requires gameId. The response has two parts:

Field Description
configsEvery remote config entry: config_key, config_name, config_type (single, conditional, or group), config_value, start_date, end_date (never means no end), conditional_values ([{conditionID, value}], for conditional configs), and interval (the value rotation, e.g. 24H / 7D, for group configs).
conditionsThe game's saved conditions (user segments) with their conditionID. You need these IDs to build conditional_values when creating or updating a conditional config. Conditions themselves are created and managed on the dashboard. See Conditions.

Create Remote Config

Creates a new remote config value for a game. Fails if the config_key already exists; update it instead.

Parameter Description
gameIdRequired. The single Game ID.
config_keyRequired. The unique key the SDK reads. Letters, numbers, hyphens, and underscores only.
config_valueRequired. The config value, max 1024 characters. For group configs, an encoded JSON array of up to 50 string values.
config_nameOptional. Display name, max 64 characters. Defaults to config_key.
config_typeOptional. One of single (default, one value for everyone), conditional (a default value plus per-segment overrides), or group (rotates through an array of values on an interval).
start_dateOptional. Date the config becomes active (YYYY-MM-DD). Defaults to today.
end_dateOptional. Date the config stops (YYYY-MM-DD), or never (default).
conditional_valuesRequired for conditional configs. Encoded JSON array of 1–10 items: {"conditionID": "<id>", "value": "<value>"}. Resolve the IDs with Remote Configs List. Create the conditions first on the dashboard. See Creating Conditions.
intervalRequired for group configs. Rotation interval: a number followed by H (hours) or D (days), e.g. 24H, 7D.

A conditional config with two segment overrides:

{
  "gameId": "YOUR_GAME_ID",
  "config_key": "starting_lives",
  "config_name": "Starting Lives",
  "config_type": "conditional",
  "config_value": "5",
  "conditional_values": "[{\"conditionID\": \"cond_us_whales\", \"value\": \"3\"}, {\"conditionID\": \"cond_new_installs\", \"value\": \"7\"}]",
  "end_date": "never"
}

Update Remote Config

Updates an existing remote config, matched by config_key. Only the fields you provide change; everything else keeps its stored value. Fails if no config with that key exists.

Parameter Description
gameIdRequired. The single Game ID.
config_keyRequired. The key of the existing config to update.
config_valueOptional. The new value, max 1024 characters. For group configs, an encoded JSON array of up to 50 string values.
start_dateOptional. New start date (YYYY-MM-DD).
end_dateOptional. New end date (YYYY-MM-DD), or never.
add_conditional_valuesOptional, conditional configs only. Conditions to add: encoded JSON array of {"conditionID": "<id>", "value": "<value>"}. Fails if a conditionID is already attached; remove it first to change its value.
remove_condition_idsOptional, conditional configs only. Conditions to remove: comma-separated conditionIDs, or an encoded JSON array. Removals are applied before additions. This detaches a condition from the config, it does not delete the condition itself. See Conditions.

AB Tests List

Lists a game's A/B tests with full details and lifecycle status. Requires gameId. Use this to review tests before ending, archiving, or rolling one out; use the AB Tests discovery tool when you only need filter keys for an analytics query.

Field Description
ab_name / ab_keyThe test's display name and its unique key, used by every other A/B test tool.
statusACTIVE (running), STOPPED (ended, can be resumed), or ARCHIVED (final). See A/B Test Statuses for how each status appears on the dashboard.
start_date / end_dateThe test's scheduled window.
ab_goal / extra_goal_presetsThe primary KPI goal and any additional KPI presets tracked alongside it.
ab_percentageShare of users enrolled into the test.
ab_device / ab_os / ab_geo / ab_locale / ab_buildThe test's targeting filters.
staged_groupPresent when a gradual rollout is staged.
groupsEach variant's config key → value map.
filterKeysab_key:group tokens you can pass to the abtests parameter of any query tool to compare variant performance.

Create AB Test

Creates a new A/B test on a game. The SDK starts enrolling players from start_date. The parameters below map to the dashboard's test setup panels. See Create A/B Tests for the details, filters, groups, and goals in full.

Parameter Description
gameIdRequired. The single Game ID.
ab_nameRequired. Display name of the test.
ab_keyRequired. Unique test key for the game. Letters, numbers, hyphens, and underscores only.
groupsRequired. Encoded JSON object mapping variant names to config key → value maps. Variant names must be drawn from Control Group, Group A, Group B, Group C, Group D, Group E. Control Group (typically {}) and Group A (at least one config) are required. Max 25 config keys per group, each value max 1024 characters.
start_dateRequired. Start date (YYYY-MM-DD).
ab_goalRequired. The primary KPI goal preset (see the goal presets below).
ab_percentageRequired. Percentage of users (1–100) enrolled into the test.
end_dateOptional. End date (YYYY-MM-DD).
extra_goal_presetsOptional. Additional KPI presets, as an encoded JSON array (e.g. ["retention:7","sessions"]) or comma-separated.
event_dataRequired when a goal is eventsTracked. Encoded JSON mapping the goal to a custom event: {"goal": {"event": "<name>", "<subParam>": "<value>"}, "extra": {"event": "<name>"}}. goal pairs with ab_goal, extra with extra_goal_presets.
ab_deviceOptional targeting. Device model(s), comma-separated.
ab_osOptional targeting. OS version(s), comma-separated.
ab_geoOptional targeting. Country code(s), comma-separated.
ab_localeOptional targeting. Locale(s) / language(s), comma-separated.
ab_buildOptional targeting. Build version(s), comma-separated.

Goal presets. Mobile apps support retention:1, retention:3, retention:7, retention:14, retention:30, playtime, sessions, sessionlength, arpdau, arppu, ads, purchases, and eventsTracked. Web apps support only retention:*, playtime, sessions, sessionlength, and eventsTracked.

{
  "gameId": "YOUR_GAME_ID",
  "ab_name": "Starting Lives Test",
  "ab_key": "starting_lives_test",
  "groups": "{\"Control Group\": {}, \"Group A\": {\"starting_lives\": \"5\"}, \"Group B\": {\"starting_lives\": \"10\"}}",
  "start_date": "2026-09-05",
  "ab_goal": "retention:7",
  "extra_goal_presets": "[\"arpdau\", \"sessions\"]",
  "ab_percentage": "50",
  "ab_geo": "US,GB"
}

Update AB Test Status

Changes the lifecycle status of a test. Requires gameId, the ab_key from AB Tests List, and a status. To edit a running test's details or configs instead of its status, use the dashboard. See Manage A/B Tests:

status Effect
STOPPEDEnds a running test. Users stop being enrolled, and the test can be resumed later.
ARCHIVEDArchives the test. Archived tests are final; they cannot be resumed, edited, or rolled out afterwards. To archive and promote a winning group's values in one step, use Rollout AB Test instead.
RESUMEReactivates a STOPPED test, clearing its status and end date. Rejected if any of the test's group config keys now conflict with an existing remote config.

Rollout AB Test

Promotes the winning group of a test into the game's live remote config, then archives the test. Requires gameId, ab_key, and group, the winning group name (e.g. Group A), which must be one of the test's groups.

For every config key in the chosen group: if no remote config with that key exists it is created (as a single config with end_date of never); if one already exists its config_value is updated to the group's value. The response lists exactly which configs were created and which were updated.

This is the same operation as a Full Rollout on the dashboard. See Manage A/B Tests for Full Rollouts and for Staged Rollouts, which promote a single winning group to run against the control group and are only available from the dashboard. The promoted values then appear on your Remote Configs dashboard.

Full Live Ops Loop

The tools are designed to chain. A typical session runs:

fiber_manual_record
Find the problem with a query tool, for example a funnel showing where onboarding drops off.
fiber_manual_record
Create an A/B test with Create AB Test to trial the fix on a share of users.
fiber_manual_record
Compare the variants by passing the test's filterKeys to the abtests parameter of any query tool.
fiber_manual_record
Ship the winner with Rollout AB Test, which promotes its values to remote config and archives the test.

Using the Assistant

tag

After connecting the server, prompt your AI assistant with data questions in natural language. The assistant resolves your app and filters using the discovery tools, then calls the right query tool. Use prompts such as:

fiber_manual_record
"Compare D30 LTV for my paid-acquired users against my organic users this quarter, and tell me which build version is monetizing new installs the best."
fiber_manual_record
"Trace the most common paths players take from install to their first in-app purchase, and flag the biggest drop-off step in the tutorial funnel."
fiber_manual_record
"Build a funnel from install through tutorial complete to level 5 complete, broken down by country, and tell me where US players fall out."
fiber_manual_record
"Show new users, retention rate, revenue, ARPDAU, and LTV across my portfolio this month and tell me which titles are outperforming."

Live Ops prompts work the same way:

fiber_manual_record
"List my live remote configs and show me which ones end this month."
fiber_manual_record
"Set the daily reward multiplier config to 2 for my US whales segment, and leave everyone else on 1."
fiber_manual_record
"Create an A/B test on 50% of users trialing 5 versus 10 starting lives, with D7 retention as the goal."
fiber_manual_record
"Compare D7 retention and ARPDAU across the groups of my starting lives test, then roll out whichever group won."

Token Usage

tag

Usage of Shift is calculated by tokens. Each request you make using Shift utilizes tokens. The number of tokens consumed by the request varies based on the time the query takes to execute. The more complex the query, the more time/tokens it takes to complete.

Each pricing tier contains a set of tokens included in the monthly subscription. If you surpass the allotted tokens in your plan, you will be charged overage per token over your subscription's plan. For overage pricing, see your relevant plan on the Shift Settings page.

Turn Off Overage

tag

To stop overage token spend, toggle off the Overage Billing setting in your Shift Settings. Enabling this setting will stop your AI assistant from querying Shift after you've reached the monthly token threshold in your plan.

Set Overage Budgets

tag

To control overage spend, you can select the "Set Overage Budget" button to input a max overage spend per API Key.

Manage Usage

tag

You can view and manage your token usage on the ByteBrew by navigating to the Shift page in your Studio Settings. Under the dashboard you can see how many tokens have been used, and manage Shift API Keys.

Manage Subscription

tag

Manage your Shift plan from your Shift Settings. You can upgrade, downgrade, or cancel your subscription at any time.

Upgrade Plan

To upgrade your plan, go to the Shift Settings and hit "Upgrade".

Downgrade Plan

To downgrade your plan, go to the Shift Settings and hit "Downgrade" to your preferred plan.

Cancel Plan

To cancel your plan, go to your Shift Settings and hit "Cancel".


FAQs

tag

Yes. The Shift MCP requires a Shift API Key generated from your Studio Settings (Admin role required). Pass it as a Bearer token in the Authorization header of your MCP client configuration. Requests without a valid, non-revoked key are rejected.

Every request is scoped to the apps owned by the studio account that the Shift API Key belongs to. The query tools read aggregated analytics only. The Live Ops tools additionally read and write that app's Remote Configs and A/B Tests. Shift cannot modify your analytics data, your dashboard layout, or your account settings.

Yes. Shift's Live Ops tools can create and update Remote Configs, and create, stop, archive, resume, and roll out A/B Tests. These writes take effect on the configuration the ByteBrew SDK serves to your players, so Shift only calls them when you explicitly ask for the change. Archiving a test and rolling out a winner are final and cannot be undone from Shift. Write tools also require an app owned by your studio account, so the shared DemoApp stays read-only. Some actions remain dashboard-only, including creating conditions, removing remote configs, and staged rollouts.

Yes. Creation is limited to 250 new remote configs and 250 new A/B tests per app, and a rollout counts against the remote config creation limit. A config value is capped at 1024 characters, a group config holds up to 50 values, and an A/B test group holds up to 25 config keys. Creating a test is also rejected if its ab_key is already used by the app or if its group config keys collide with another non-archived test.

Use a funnel when you already know the sequence and want to measure it: it takes an ordered list of 2 to 20 events and reports, for each step, how many users reached it, the percentage remaining, and the average and median time from the previous step. Use a user journey when you don't know the sequence and want to discover the paths users actually take between a start and/or end event.

Confirm the server URL is exactly https://shift-mcp.bytebrew.io/mcp, that you used the correct field for your tool (url, httpUrl, serverUrl, or servers), and that your Authorization header reads Bearer YOUR_SHIFT_API_KEY with the Bearer prefix intact. Restart your tool or refresh its MCP server list to reload the connection.

Any MCP-compatible client that supports a remote Streamable HTTP server with custom headers works. This page provides setup steps for Claude Desktop, Claude Code, Cursor, OpenAI Codex, Google Antigravity, Cursor Agent, Gemini CLI, JetBrains AI Assistant, and Visual Studio Code.

Usage of Shift is calculated by tokens. Every request consumes tokens, and more complex queries take more time and therefore more tokens to complete. Each pricing tier includes a set number of tokens in the monthly subscription. If you surpass your plan's allotted tokens, you are charged overage per token over the plan. For overage pricing, see your relevant plan on the Shift Settings page.

Navigate to the API Key tab in the Shift Settings and hit the create button. You need an Admin role account to generate a key. Name the API Key based on its utilization to help with organization.

Navigate to the API Key tab in the Shift Settings and hit the delete button next to the key you want to delete. Requests using a deleted key are rejected immediately.

Toggle off the Overage Billing setting in your Shift Settings. With overage stopped, your AI assistant will not query Shift once you reach the monthly token threshold in your plan, so you are never charged beyond your subscription.

Yes. Select the "Set Overage Budget" button in your Shift Settings to input a maximum overage spend per API Key, giving you fine-grained control over how much each key can spend beyond your plan.

Overage tokens will be billed at the end of the month. Any tokens used beyond your plan's monthly allotment are totaled and charged at your plan's overage rate when the billing period closes.

All plan changes are made from your Shift Settings. Hit "Upgrade" to move to a higher plan, "Downgrade" to select a lower plan, or "Cancel" to end your subscription. Note that if you have more active API Keys than the maximum allowed in your selected downgrade plan, you will need to downsize your API Key count before you can downgrade.

If you are not being able to connect using the npx tool for your connector settings, make sure Node is installed on your computer.