---
title: Migrate to Statsig MCP V3
description: "Find the Statsig MCP V3 replacement for each of the 93 V1 tools, and learn what changes in requests and responses."
product: general
lang: en
token_estimate: 3098
---
# Migrate to Statsig MCP V3

> For AI agents: a documentation index is available at [/llms.txt](/llms.txt). Append `.md` to any page URL for markdown, or send `Accept: text/markdown`.

Statsig MCP V3 replaces the 93 individual tools on the V1 server with 18 default tools and a discovery layer. Statsig recommends V3, but V1 remains supported, so you can migrate when you're ready. Use this page to find the V3 replacement for each V1 tool you use and update your prompts, scripts, and automation.

## Prerequisites

- An existing Statsig MCP connection that uses the V1 server URL (`https://api.statsig.com/v1/mcp`)
- A V3 connection (`https://api.statsig.com/v3/mcp`). Follow the [manual setup](https://docs.statsig.com/integrations/mcp/manual-setup) or your client's setup guide.

## How the mapping works

Each V1 tool maps to one of two V3 calls.

**Direct call**: Call the named V3 tool.

- For grouped read tools such as `gate_read`, set `action` to the listed action and put the V1 argument object under `arguments.params`.
- Create tools take the body in `params["application/json"]`.
- Update tools require `arguments.params` and `confirmation`.
- `get_context`, `search`, `fetch`, and `discover_tools` use their own schemas.

**Discovery call**: Rows that start with "Discovery" take two steps:

1. Call `discover_tools` with `action` set to `get` and the listed operation ID.
2. Call the execution tool the response returns (`api_read`, `api_write`, or `api_destructive`) with its `operationHandle` and arguments that match the returned schema. Include `confirmation` when the schema requires it.

An `operationHandle` expires, so retrieve a new one when you need it instead of hardcoding it. `api_destructive` also covers some updates and review actions, not only deletion. Your project permissions and review policies still apply.

### Example: read a gate

To replace `Get_Gate_Details_by_ID`, call `gate_read`:

```json
{
  "action": "get_gate_details_by_id",
  "arguments": {
    "params": { "path_id": "your_gate_id" }
  }
}
```

## Before you migrate

- Check the server's current tool and discovery schemas for required fields and available operations.
- For Parameter Store lookup, update, and delete, use `params.path_id` instead of `params.path_name`.
- V3 returns `structuredContent` alongside text. Check any response parsing in your automation.
- If you keep both versions connected while you test, disable the version you aren't testing to avoid duplicate tools.

The tool mapping covers the default V3 connection. Clients that use expanded tool exposure might also show typed tools for some discovery operations. Refer to the [Statsig MCP tool reference](https://docs.statsig.com/integrations/mcp/tool-reference).

## Tool mapping

### Context, search, and discovery

| V1 tool | V3 replacement |
| --- | --- |
| `fetch` | `fetch` |
| `Get_Context` | `get_context` |
| `Get_Tool_Schema` | `discover_tools`, action `get`, with the discovered operation ID |
| `Invoke_Tool` | Discovery, then `api_read`, `api_write`, or `api_destructive`, based on the returned lane, handle, and schema |
| `search` | `search` |
| `Search_Tools` | `discover_tools`, action `list` or `resolve` |

### Feature gates

| V1 tool | V3 replacement |
| --- | --- |
| `Approve_Gate_Review` | Discovery: `feature_gates.approve.approve_gate_review` with `api_destructive` |
| `Cancel_Gate_Review` | Discovery: `feature_gates.cancel.cancel_gate_review` with `api_destructive` |
| `Commit_Gate_Review` | Discovery: `feature_gates.commit.commit_gate_review` with `api_destructive` |
| `Create_Gate` | `gate_create`, input `params` |
| `Create_Gate_Review` | Discovery: `feature_gates.create.create_gate_review` with `api_write` |
| `Edit_Gate_Review` | Discovery: `feature_gates.edit.edit_gate_review` with `api_destructive` |
| `Get_Gate_Details_by_ID` | `gate_read`, action `get_gate_details_by_id` |
| `Get_Gate_Eligible_Reviewers` | Discovery: `feature_gates.list.get_gate_eligible_reviewers` with `api_read` |
| `Get_Gate_Results` | `gate_read`, action `get_gate_results` |
| `Get_Gate_Review_by_ID` | Discovery: `feature_gates.get.get_gate_review_by_id` with `api_read` |
| `Get_Gate_Version_History` | `gate_read`, action `get_gate_version_history` |
| `Get_List_of_Gate_Reviews` | Discovery: `feature_gates.list.get_list_of_gate_reviews` with `api_read` |
| `Get_List_of_Gates` | `gate_read`, action `get_list_of_gates` |
| `Reject_Gate_Review` | Discovery: `feature_gates.reject.reject_gate_review` with `api_destructive` |
| `Start_Gate_Code_Cleanup` | Discovery: `feature_gates.start_cleanup.start_gate_code_cleanup` with `api_destructive` |
| `Update_Gate_Entirely` | `gate_update`, input `arguments` and `confirmation` |

### Experiments

| V1 tool | V3 replacement |
| --- | --- |
| `Approve_Experiment_Review` | Discovery: `experiments.approve.approve_experiment_review` with `api_destructive` |
| `Cancel_Experiment_Review` | Discovery: `experiments.cancel.cancel_experiment_review` with `api_destructive` |
| `Commit_Experiment_Review` | Discovery: `experiments.commit.commit_experiment_review` with `api_destructive` |
| `Create_Experiment` | `experiment_create`, input `params` |
| `Create_Experiment_Review` | Discovery: `experiments.create.create_experiment_review` with `api_write` |
| `Delete_Experiment` | Discovery: `experiments.delete.delete_experiment` with `api_destructive` |
| `Edit_Experiment_Review` | Discovery: `experiments.edit.edit_experiment_review` with `api_destructive` |
| `Get_Experiment_Details_by_ID` | `experiment_read`, action `get_experiment_details_by_id` |
| `Get_Experiment_Eligible_Reviewers` | Discovery: `experiments.list.get_experiment_eligible_reviewers` with `api_read` |
| `Get_Experiment_Metric_Dimension_Results` | `experiment_read`, action `get_experiment_metric_dimension_results` |
| `Get_Experiment_Overall_Results` | `experiment_read`, action `get_experiment_overall_results` |
| `Get_Experiment_Review_by_ID` | Discovery: `experiments.get.get_experiment_review_by_id` with `api_read` |
| `Get_Experiment_Version_History` | `experiment_read`, action `get_experiment_version_history` |
| `Get_List_of_Experiment_Reviews` | Discovery: `experiments.list.get_list_of_experiment_reviews` with `api_read` |
| `Get_List_of_Experiments` | `experiment_read`, action `get_list_of_experiments` |
| `GetExperimentSummaryCharts` | `experiment_read`, action `get_experiment_summary_charts` |
| `Reject_Experiment_Review` | Discovery: `experiments.reject.reject_experiment_review` with `api_destructive` |
| `Start_Experiment_Code_Cleanup` | Discovery: `experiments.start_cleanup.start_experiment_code_cleanup` with `api_destructive` |
| `Update_Experiment_Entirely` | `experiment_update`, input `arguments` and `confirmation` |

### Dynamic configs

| V1 tool | V3 replacement |
| --- | --- |
| `Approve_Dynamic_Config_Review` | Discovery: `dynamic_configs.approve.approve_dynamic_config_review` with `api_destructive` |
| `Cancel_Dynamic_Config_Review` | Discovery: `dynamic_configs.cancel.cancel_dynamic_config_review` with `api_destructive` |
| `Commit_Dynamic_Config_Review` | Discovery: `dynamic_configs.commit.commit_dynamic_config_review` with `api_destructive` |
| `Create_Dynamic_Config` | `dynamic_config_create`, input `params` |
| `Create_Dynamic_Config_Review` | Discovery: `dynamic_configs.create.create_dynamic_config_review` with `api_write` |
| `Edit_Dynamic_Config_Review` | Discovery: `dynamic_configs.edit.edit_dynamic_config_review` with `api_destructive` |
| `Get_Dynamic_Config_Details_by_ID` | `dynamic_config_read`, action `get_dynamic_config_details_by_id` |
| `Get_Dynamic_Config_Eligible_Reviewers` | Discovery: `dynamic_configs.list.get_dynamic_config_eligible_reviewers` with `api_read` |
| `Get_Dynamic_Config_Review_by_ID` | Discovery: `dynamic_configs.get.get_dynamic_config_review_by_id` with `api_read` |
| `Get_Dynamic_Config_Version_History` | `dynamic_config_read`, action `get_dynamic_config_version_history` |
| `Get_List_of_Dynamic_Config_Reviews` | Discovery: `dynamic_configs.list.get_list_of_dynamic_config_reviews` with `api_read` |
| `Get_List_of_Dynamic_Configs` | `dynamic_config_read`, action `get_list_of_dynamic_configs` |
| `Reject_Dynamic_Config_Review` | Discovery: `dynamic_configs.reject.reject_dynamic_config_review` with `api_destructive` |
| `Update_Dynamic_Config_Entirely` | `dynamic_config_update`, input `arguments` and `confirmation` |

### Autotunes

| V1 tool | V3 replacement |
| --- | --- |
| `Approve_Autotune_Review` | Discovery: `autotunes.approve.approve_autotune_review` with `api_destructive` |
| `Cancel_Autotune_Review` | Discovery: `autotunes.cancel.cancel_autotune_review` with `api_destructive` |
| `Commit_Autotune_Review` | Discovery: `autotunes.commit.commit_autotune_review` with `api_destructive` |
| `Create_Autotune` | Discovery: `autotunes.create.create_autotune` with `api_destructive` |
| `Create_Autotune_Review` | Discovery: `autotunes.create.create_autotune_review` with `api_write` |
| `Edit_Autotune_Review` | Discovery: `autotunes.edit.edit_autotune_review` with `api_destructive` |
| `Get_Autotune_Eligible_Reviewers` | Discovery: `autotunes.list.get_autotune_eligible_reviewers` with `api_read` |
| `Get_Autotune_Review_by_ID` | Discovery: `autotunes.get.get_autotune_review_by_id` with `api_read` |
| `Get_List_of_Autotune_Reviews` | Discovery: `autotunes.list.get_list_of_autotune_reviews` with `api_read` |
| `Reject_Autotune_Review` | Discovery: `autotunes.reject.reject_autotune_review` with `api_destructive` |

### Layers

| V1 tool | V3 replacement |
| --- | --- |
| `Create_Layer` | Discovery: `layers.create.create_layer` with `api_write` |
| `Get_Layer_Details_by_ID` | Discovery: `layers.get.get_layer_details_by_id` with `api_read` |
| `Get_Layer_Experiments` | Discovery: `layers.list.get_layer_experiments` with `api_read` |
| `Get_Layer_Overrides` | Discovery: `layers.list.get_layer_overrides` with `api_read` |
| `Get_List_of_Layers` | Discovery: `layers.list.get_list_of_layers` with `api_read` |
| `Update_Layer_Entirely` | Discovery: `layers.update.update_layer_entirely` with `api_destructive` |

### Metrics and logs

| V1 tool | V3 replacement |
| --- | --- |
| `Cluster_Log_Patterns` | Discovery: `logs.analyze.cluster_log_patterns` with `api_read` |
| `Get_Audit_Logs` | `log_read`, action `get_audit_logs` |
| `Get_List_of_Metric_Sources` | `metric_read`, action `get_list_of_metric_sources` |
| `Get_List_of_Metrics` | `metric_read`, action `get_list_of_metrics` |
| `Get_Metric_Definition_by_ID` | `metric_read`, action `get_metric_definition_by_id` |
| `Query_Logs_Explorer` | `log_read`, action `query_logs_explorer` |

### Parameter stores

| V1 tool | V3 replacement |
| --- | --- |
| `Create_Param_Store` | Discovery: `param_stores.create.create_param_store` with `api_write` |
| `Delete_Param_Store` | Discovery: `param_stores.delete.delete_param_store` with `api_destructive` |
| `Get_List_of_Param_Stores` | Discovery: `param_stores.list.get_list_of_param_stores` with `api_read` |
| `Get_Param_Store_Details_by_Id` | Discovery: `param_stores.get.get_param_store_details_by_id` with `api_read` |
| `Update_Param_Store` | Discovery: `param_stores.update.update_param_store` with `api_destructive` |

### Prompts

| V1 tool | V3 replacement |
| --- | --- |
| `Create_Prompt` | Discovery: `prompts.create.create_prompt` with `api_write` |
| `Create_Prompt_Version` | Discovery: `prompts.create.create_prompt_version` with `api_write` |
| `Get_List_of_Prompts` | Discovery: `prompts.list.get_list_of_prompts` with `api_read` |
| `Get_Prompt_Details_by_ID` | Discovery: `prompts.get.get_prompt_details_by_id` with `api_read` |
| `Start_Prompt_Version_Evals` | Discovery: `prompts.analyze.start_prompt_version_evals` with `api_write` |
| `Update_Prompt` | Discovery: `prompts.update.update_prompt` with `api_write` |

### Segments and tags

| V1 tool | V3 replacement |
| --- | --- |
| `Create_Segment` | Discovery: `segments.create.create_segment` with `api_write` |
| `Get_List_of_Segments` | Discovery: `segments.list.get_list_of_segments` with `api_read` |
| `Get_List_of_Tags` | Discovery: `tags.list.get_list_of_tags` with `api_read` |
| `Get_Segment_by_ID` | Discovery: `segments.get.get_segment_by_id` with `api_read` |
| `Update_Segment` | Discovery: `segments.update.update_segment` with `api_destructive` |

