Overview
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
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.
https://shift-mcp.bytebrew.io/mcp
Authorization header.
Authentication
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
To create a Shift API Key, navigate to the API Key tab in the Shift Settings and hit the create button.
Delete API Key
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
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.
Bearer prefix inside the AUTH_TOKEN value so the full header reads Authorization: Bearer YOUR_SHIFT_API_KEY. The mcp-remote package requires Node.js to be installed.Claude Code
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
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
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
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)
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
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
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
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
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.
startDate is omitted it defaults to 7 days ago. All data operates on the UTC timezone. Start your session by asking the assistant to list your apps so it can resolve a gameId.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 Data | New user cohort data. |
| Sessions | Session counts. |
| Session Length | Session length data. |
| Playtime | Playtime data. |
| DAU | Daily active users (DAU). |
| Retention | Cohort retention curve (Day N / Week N / Month N). |
| LTV | Cohort Lifetime Value (LTV) from IAP, ad-watched, and custom revenue events. |
| Monetization Overview | High-level monetization overview (ARPDAU, revenue, ad revenue, IAP revenue, ARPU). |
| Revenue Analysis Breakdown | IAP and Ad revenue metrics together or separately, with dimension breakdowns. |
| Custom Mechanics | The Mechanics data playground: custom event and segment analysis with formulas. |
| Event Breakdown Data | Granular custom event breakdowns with aggregators and sub-parameter filters. |
| Target Events Retained | Custom event activity by retained day. |
| User Journey | Most common user paths between a start and/or end event. |
| Funnels | Step-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 Retained | Retained average ads watched. |
| Session Length Retained | Retained session length. |
| Playtime Retained | Retained playtime. |
| Cumulative Playtime Retained | Retained cumulative playtime. |
| Purchase Retained | Retention sliced by purchase amount. |
| Session Amount Retained | Retention sliced by session count. |
Web Query Tools
| Tool | Description |
|---|---|
| New User Data | New user cohort data. |
| Sessions | Session counts. |
| Session Length | Session length data. |
| Playtime | Playtime data. |
| DAU | Daily active users (DAU). |
| Retention | Cohort retention curve (Day N / Week N / Month N). |
| Custom Mechanics | The Mechanics data playground for web apps. |
| Event Breakdown Data | Granular custom event breakdowns. |
| User Journey | Most common user paths between a start and/or end event. |
| Funnels | Step-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 List | Read | Lists a game's live remote config values plus its saved conditions (user segments) and their conditionIDs. |
| Create Remote Config | Write | Creates a new remote config value: single, conditional (per-segment overrides), or group (values rotating on an interval). |
| Update Remote Config | Write | Updates an existing config by config_key: its value, its active dates, and for conditional configs, adding or removing conditions. |
| AB Tests List (Full) | Read | Lists 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 Test | Write | Creates 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 Status | Write | Stops, archives, or resumes a test. |
| Rollout AB Test | Write | Promotes a winning group's values into the game's live remote config, then archives the test. |
Filters & Parameters
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 |
|---|---|
| gameId | Required. The single Game ID to query. Use the App List tool to resolve it. |
| startDate | Start date, format "YYYY-MM-DD" (e.g. "2021-03-01"). Defaults to 7 days ago if omitted. |
| endDate | End date (exclusive), format "YYYY-MM-DD". |
| country | Country code(s), comma-separated (e.g. "US,GB,DE"). Omit to include all countries. |
| abtests | AB test filter key(s) in test-id:group format, comma-separated. Resolve them with the AB Tests tool. |
| breakdown | Dimensions to group by, comma-separated. Options: Game, Date, BuildVersion, OSVersion, Country, Device, Platform. |
Mobile Filter Dimensions
| Parameter | Description |
|---|---|
| build | Build version(s), comma-separated. |
| osversion | OS version(s), comma-separated. |
| device | Device model(s), comma-separated. |
| attribution | Encoded JSON object mapping a network to its sources, e.g. {"network": "XX", "sources": ["XX ID: (1234)"]}. |
| acquisition | One of 'organic' or 'non-organic'. |
Web Filter Dimensions
| Parameter | Description |
|---|---|
| build | Build version(s), comma-separated. |
| osversion | OS version(s), comma-separated. |
| device | Device model(s), comma-separated. |
| browser | Browser name(s), comma-separated (e.g. Edge, Chrome). |
| browserversion | Browser version(s), comma-separated. |
| devicetype | Device type(s), comma-separated (e.g. Tablet, Desktop). |
| osname | OS name(s), comma-separated (e.g. Windows, Macos). |
Retention Scale (retention & retained tools)
| Parameter | Description |
|---|---|
| scaleType | Retention scale (Days, Weeks, or Months). Defaults to Days. |
| scaledAmount | Number of retention periods, based on the chosen scaleType:
|
| groupBy | Optional 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_events | Required. 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. |
| breakdown | Optional. 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 |
|---|---|
| event | The step label, in the form Step N: "eventName". |
| row | The 1-based step index. |
| amountEvents | Total times the step's event occurred. |
| numUsers | Users who reached this step, having completed every prior step first. |
| percentUsers | Percentage of users remaining relative to the largest step. This is the drop-off read. |
| timeStep | Average seconds from the previous step. |
| medianTime | Median seconds from the previous step. |
Live Ops Management
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 |
|---|---|
| configs | Every 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). |
| conditions | The 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 |
|---|---|
| gameId | Required. The single Game ID. |
| config_key | Required. The unique key the SDK reads. Letters, numbers, hyphens, and underscores only. |
| config_value | Required. The config value, max 1024 characters. For group configs, an encoded JSON array of up to 50 string values. |
| config_name | Optional. Display name, max 64 characters. Defaults to config_key. |
| config_type | Optional. 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_date | Optional. Date the config becomes active (YYYY-MM-DD). Defaults to today. |
| end_date | Optional. Date the config stops (YYYY-MM-DD), or never (default). |
| conditional_values | Required 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. |
| interval | Required 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"
}
config_value can hold a stringified JSON object of up to 1024 characters. Shift will prettify a JSON value when it reads one back to you. See Using JSON for the format.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 |
|---|---|
| gameId | Required. The single Game ID. |
| config_key | Required. The key of the existing config to update. |
| config_value | Optional. The new value, max 1024 characters. For group configs, an encoded JSON array of up to 50 string values. |
| start_date | Optional. New start date (YYYY-MM-DD). |
| end_date | Optional. New end date (YYYY-MM-DD), or never. |
| add_conditional_values | Optional, 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_ids | Optional, 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_key | The test's display name and its unique key, used by every other A/B test tool. |
| status | ACTIVE (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_date | The test's scheduled window. |
| ab_goal / extra_goal_presets | The primary KPI goal and any additional KPI presets tracked alongside it. |
| ab_percentage | Share of users enrolled into the test. |
| ab_device / ab_os / ab_geo / ab_locale / ab_build | The test's targeting filters. |
| staged_group | Present when a gradual rollout is staged. |
| groups | Each variant's config key → value map. |
| filterKeys | ab_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 |
|---|---|
| gameId | Required. The single Game ID. |
| ab_name | Required. Display name of the test. |
| ab_key | Required. Unique test key for the game. Letters, numbers, hyphens, and underscores only. |
| groups | Required. 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_date | Required. Start date (YYYY-MM-DD). |
| ab_goal | Required. The primary KPI goal preset (see the goal presets below). |
| ab_percentage | Required. Percentage of users (1–100) enrolled into the test. |
| end_date | Optional. End date (YYYY-MM-DD). |
| extra_goal_presets | Optional. Additional KPI presets, as an encoded JSON array (e.g. ["retention:7","sessions"]) or comma-separated. |
| event_data | Required 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_device | Optional targeting. Device model(s), comma-separated. |
| ab_os | Optional targeting. OS version(s), comma-separated. |
| ab_geo | Optional targeting. Country code(s), comma-separated. |
| ab_locale | Optional targeting. Locale(s) / language(s), comma-separated. |
| ab_build | Optional 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"
}
ab_key must be unique for the game. Creation is rejected if either check fails.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 |
|---|---|
| STOPPED | Ends a running test. Users stop being enrolled, and the test can be resumed later. |
| ARCHIVED | Archives 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. |
| RESUME | Reactivates 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.
filterKeys to the abtests parameter) or by the test's goal KPI, and confirm the group before rolling out.Full Live Ops Loop
The tools are designed to chain. A typical session runs:
filterKeys to the abtests parameter of any query tool.Using the Assistant
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:
Live Ops prompts work the same way:
gameId: "DemoApp" to any query tool to run against a shared demo app. The demo app is read-only, so the Live Ops write tools are not available on it.Token Usage
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
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
To control overage spend, you can select the "Set Overage Budget" button to input a max overage spend per API Key.
Manage Usage
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
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
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.