Skip to content

Connectors · Marketing & media

Optimizely Web Experimentation MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Optimizely Web Experimentation and the rest of your systems. It gives your agent 101 Optimizely Web Experimentation actions (53 reads, 34 writes and 14 that wait for a confirmation) and holds the Optimizely Web Experimentation credential itself, so the agent never does. It paces Optimizely Web Experimentation's limits and records every call.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "optimizely_web_experimentation.projects.list_projects",  intent: "check which Optimizely Web Experimentation account is connected"}# List Projects · read · 1 upstream call
  • 101actionsin one signed file
  • 53readlook, never change
  • 34writecreate and update
  • 14wait for a yesdestructive, confirmed first

Set up

Connect Optimizely Web Experimentation in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect Optimizely Web Experimentation.

    Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.

    • access_tokenOptimizely personal access token (Profile > API Access > Generate New Token in app.optimizely.com), or an OAuth 2.0…
    account { op: "connections.requirements", service: "optimizely_web_experimentation" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "optimizely_web_experimentation.projects.list_projects" }# list projects · read · 1 upstream callcheck { action: "optimizely_web_experimentation.projects.create_project", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Optimizely Web Experimentation at a glance

Sign-in
Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.
You provide
access_token
Limits we pace to
100 calls a minute, per connection
API covered
Optimizely REST API v2 (OpenAPI 3, Optimizely API 2.0)api.optimizely.com
Built from
Optimizely Web Experimentation's documentation, read 23 October 2026archbee-doc-uploads.s3.amazonaws.comdocs.developers.optimizely.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
51 of 53 reads, for up to 5 minutes; a write clears what it affects
Shared entities
2, so ask can line Optimizely Web Experimentation up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Optimizely Web Experimentation.

101 actions in 27 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 53readlook, never change
  • 34writecreate and update
  • 14destructivewait for a confirmation
  1. Events

    8

    2 read · 4 write · 2 destructive

    Create a Custom Event · List all Events · Get Event by ID · Archive a Custom Event

  2. Experiments

    8

    5 read · 2 write · 1 destructive

    Create an Experiment · List Experiments · Read an Experiment · Update an Experiment

  3. Campaigns

    7

    4 read · 2 write · 1 destructive

    Create a Campaign · List Campaigns · Read a Campaign · Get Campaign results

  4. Environments

    6

    3 read · 2 write · 1 destructive

    Get Environments by Project · Create an Environment · Read an Environment · Update an Environment

  5. Attributes

    5

    2 read · 2 write · 1 destructive

    Create an Attribute · List Attributes · Read an Attribute · Archive an Attribute

  6. Extensions

    5

    2 read · 2 write · 1 destructive

    Create an Extension · List Extensions · Get an Extension · Archive an Extension

  7. Features

    5

    2 read · 2 write · 1 destructive

    Create a Feature · Get Features by Project · Read a Feature · Archive a Feature

  8. Groups

    5

    2 read · 2 write · 1 destructive

    Create an Exclusion Group · List Exclusion Groups · Get an Exclusion Group · Archive an Exclusion Group

19 more areas · 52 actions
  • List attributes 5
  • Pages 5
  • Scheduled jobs 5
  • Sections 5
  • Webhooks 5
  • Audiences 4
  • Projects 4
  • Collaborators 3
  • Subject access requests 3
  • Change history 2
  • Export credentials 2
  • Impressions usage 2
  • Attribution 1
  • Custom fields 1
  • Experiment summary 1
  • Plan 1
  • Reports 1
  • Search 1
  • User 1

Top actions

The Optimizely Web Experimentation API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 28 of Optimizely Web Experimentation's 28 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
optimizely_web_experimentation.projects.list_projectsList ProjectsList Projects.readwork.project.list109 connectors
optimizely_web_experimentation.collaborators.list_collaboratorsList CollaboratorsList Collaborators.readidentity.user.list474 connectors
optimizely_web_experimentation.projects.create_projectCreate a ProjectCreate a Project.writework.project.create102 connectors
optimizely_web_experimentation.audiences.list_audiencesList AudiencesList Audiences.readanalytics.segment.list17 connectors
optimizely_web_experimentation.events.create_custom_eventCreate a Custom EventCreate a Custom Event.writeanalytics.tracked_event.create12 connectors
optimizely_web_experimentation.experiments.list_experimentsList ExperimentsList Experiments.readanalytics.experiment.list12 connectors
optimizely_web_experimentation.experiments.create_experimentCreate an ExperimentCreate an Experiment.writeanalytics.experiment.create12 connectors
optimizely_web_experimentation.events.list_eventsList all EventsList all Events.readanalytics.tracked_event.list10 connectors
optimizely_web_experimentation.audiences.create_audienceCreate an AudienceCreate an Audience.writeanalytics.segment.create10 connectors
optimizely_web_experimentation.experiments.delete_experimentArchive an ExperimentArchive an Experiment.destructiveanalytics.experiment.delete10 connectors
optimizely_web_experimentation.webhooks.create_webhookCreate a WebhookCreate a Webhook.writeautomation.webhook.create209 connectors
optimizely_web_experimentation.webhooks.list_webhooksGet Webhooks by ProjectGet Webhooks by Project.readautomation.webhook.list202 connectors

Try it

Prompts to paste into Claude.

Each one names the Optimizely Web Experimentation actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    Give me a one-line status for every active Optimizely Web Experimentation project.

    callsoptimizely_web_experimentation.projects.list_projects

  2. Writewrite

    Create a Project in Optimizely Web Experimentation. Show me exactly what you will send before you save it.

    callsoptimizely_web_experimentation.projects.create_project

Governance for Optimizely Web Experimentation

Destructive actions wait for a yes.

14 Optimizely Web Experimentation actions are destructive. These are all of them:

  • Archive an Experimentoptimizely_web_experimentation.experiments.delete_experiment
  • Archive a Custom Eventoptimizely_web_experimentation.events.delete_custom_event
  • Delete a Webhookoptimizely_web_experimentation.webhooks.delete_webhook
  • Archived a Pageoptimizely_web_experimentation.pages.delete_page
  • Archive a Section by IDoptimizely_web_experimentation.sections.delete_section
  • Archive a Campaignoptimizely_web_experimentation.campaigns.delete_campaign
  • Archive an Attributeoptimizely_web_experimentation.attributes.delete_attribute
  • Archive an In-Page Eventoptimizely_web_experimentation.events.delete_in_page_event
  • Archive an Extensionoptimizely_web_experimentation.extensions.delete_extension
  • Archive an Exclusion Groupoptimizely_web_experimentation.groups.delete_group
  • Archive a Featureoptimizely_web_experimentation.features.delete_feature
  • Archive an Environmentoptimizely_web_experimentation.environments.delete_environment
  • Archive a Scheduled Joboptimizely_web_experimentation.scheduled_jobs.delete_scheduled_job
  • Archive a List Attributeoptimizely_web_experimentation.list_attributes.archive_list_attribute

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

dooptimizely_web_experimentation.experiments.delete_experimentconfirm_policy: human

Archive an Experiment?

intent: the user asked me to archive an Experiment

run suspended · waiting for a named person · key optimizely-web-experimentation-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "optimizely-web-experimentation-agent",  allowed_actions: ["optimizely_web_experimentation.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "optimizely_web_experimentation.experiments.delete_experiment", approver: "[email protected]" },    { match: "optimizely_web_experimentation.events.delete_custom_event", approver: "[email protected]" },    { match: "optimizely_web_experimentation.webhooks.delete_webhook", approver: "[email protected]" }  ]}
Illustrative. Scoped to Optimizely Web Experimentation only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What Optimizely Web Experimentation costs on actionlake.

Every Optimizely Web Experimentation action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Optimizely Web Experimentation refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 101 Optimizely Web Experimentation actions
  • 101actions pageeach page of a long list is one call
  • 51reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Optimizely Web Experimentation action.

101 actions by area: the id your agent calls, what it does, and its effect.

Events8
  • optimizely_web_experimentation.events.create_custom_eventCreate a Custom Eventwrite
  • optimizely_web_experimentation.events.create_in_page_eventCreate an In-Page Eventwrite
  • optimizely_web_experimentation.events.delete_custom_eventArchive a Custom Eventdestructive
  • optimizely_web_experimentation.events.delete_in_page_eventArchive an In-Page Eventdestructive
  • optimizely_web_experimentation.events.get_eventGet Event by IDread
  • optimizely_web_experimentation.events.list_eventsList all Eventsread
  • optimizely_web_experimentation.events.update_custom_eventUpdate a Custom Eventwrite
  • optimizely_web_experimentation.events.update_in_page_eventUpdate an In-Page Eventwrite
Experiments8
  • optimizely_web_experimentation.experiments.create_experimentCreate an Experimentwrite
  • optimizely_web_experimentation.experiments.delete_experimentArchive an Experimentdestructive
  • optimizely_web_experimentation.experiments.get_experimentRead an Experimentread
  • optimizely_web_experimentation.experiments.get_experiment_resultsGet Experiment resultsread
  • optimizely_web_experimentation.experiments.get_experiment_results_share_linkGet a sharable link for the experiment's results pageread
  • optimizely_web_experimentation.experiments.get_experiment_timeseriesGet Experiment results time seriesread
  • optimizely_web_experimentation.experiments.list_experimentsList Experimentsread
  • optimizely_web_experimentation.experiments.update_experimentUpdate an Experimentwrite
Campaigns7
  • optimizely_web_experimentation.campaigns.create_campaignCreate a Campaignwrite
  • optimizely_web_experimentation.campaigns.delete_campaignArchive a Campaigndestructive
  • optimizely_web_experimentation.campaigns.get_campaignRead a Campaignread
  • optimizely_web_experimentation.campaigns.get_campaign_resultsGet Campaign resultsread
  • optimizely_web_experimentation.campaigns.get_campaign_results_share_linkGet a sharable link for the campaign's results pageread
  • optimizely_web_experimentation.campaigns.list_campaignsList Campaignsread
  • optimizely_web_experimentation.campaigns.update_campaignUpdate a Campaignwrite
Environments6
  • optimizely_web_experimentation.environments.create_environmentCreate an Environmentwrite
  • optimizely_web_experimentation.environments.delete_environmentArchive an Environmentdestructive
  • optimizely_web_experimentation.environments.get_datafileRead the datafile of an Environmentread
  • optimizely_web_experimentation.environments.get_environmentRead an Environmentread
  • optimizely_web_experimentation.environments.list_environmentsGet Environments by Projectread
  • optimizely_web_experimentation.environments.update_environmentUpdate an Environmentwrite
Attributes5
  • optimizely_web_experimentation.attributes.create_attributeCreate an Attributewrite
  • optimizely_web_experimentation.attributes.delete_attributeArchive an Attributedestructive
  • optimizely_web_experimentation.attributes.get_attributeRead an Attributeread
  • optimizely_web_experimentation.attributes.list_attributesList Attributesread
  • optimizely_web_experimentation.attributes.update_attributeUpdate an Attributewrite
Extensions5
  • optimizely_web_experimentation.extensions.create_extensionCreate an Extensionwrite
  • optimizely_web_experimentation.extensions.delete_extensionArchive an Extensiondestructive
  • optimizely_web_experimentation.extensions.get_extensionGet an Extensionread
  • optimizely_web_experimentation.extensions.list_extensionsList Extensionsread
  • optimizely_web_experimentation.extensions.update_extensionUpdate an Extensionwrite
Features5
  • optimizely_web_experimentation.features.create_featureCreate a Featurewrite
  • optimizely_web_experimentation.features.delete_featureArchive a Featuredestructive
  • optimizely_web_experimentation.features.get_featureRead a Featureread
  • optimizely_web_experimentation.features.list_featuresGet Features by Projectread
  • optimizely_web_experimentation.features.update_featureUpdate a Featurewrite
Groups5
  • optimizely_web_experimentation.groups.create_groupCreate an Exclusion Groupwrite
  • optimizely_web_experimentation.groups.delete_groupArchive an Exclusion Groupdestructive
  • optimizely_web_experimentation.groups.get_groupGet an Exclusion Groupread
  • optimizely_web_experimentation.groups.list_groupsList Exclusion Groupsread
  • optimizely_web_experimentation.groups.update_groupUpdate an Exclusion Groupwrite
List attributes5
  • optimizely_web_experimentation.list_attributes.archive_list_attributeArchive a List Attributedestructive
  • optimizely_web_experimentation.list_attributes.create_list_attributeCreate a List Attributewrite
  • optimizely_web_experimentation.list_attributes.get_list_attributeRead a List Attributeread
  • optimizely_web_experimentation.list_attributes.list_list_attributesGet list attributes by projectread
  • optimizely_web_experimentation.list_attributes.update_list_attributeUpdate a List Attributewrite
Pages5
  • optimizely_web_experimentation.pages.create_pageCreate a Pagewrite
  • optimizely_web_experimentation.pages.delete_pageArchived a Pagedestructive
  • optimizely_web_experimentation.pages.get_pageRead a pageread
  • optimizely_web_experimentation.pages.list_pagesList Pagesread
  • optimizely_web_experimentation.pages.update_pageUpdate a Pagewrite
Scheduled jobs5
  • optimizely_web_experimentation.scheduled_jobs.create_scheduled_jobCreate a Scheduled Jobwrite
  • optimizely_web_experimentation.scheduled_jobs.delete_scheduled_jobArchive a Scheduled Jobdestructive
  • optimizely_web_experimentation.scheduled_jobs.get_scheduled_jobGet a Scheduled Jobread
  • optimizely_web_experimentation.scheduled_jobs.list_scheduled_jobsGet a list of Scheduled Jobsread
  • optimizely_web_experimentation.scheduled_jobs.update_scheduled_jobUpdate a Scheduled Jobwrite
Sections5
  • optimizely_web_experimentation.sections.create_sectionCreate a new Section in a Multivariate Testwrite
  • optimizely_web_experimentation.sections.delete_sectionArchive a Section by IDdestructive
  • optimizely_web_experimentation.sections.get_experiment_sectionsRead all the Sections in a Multivariate Testread
  • optimizely_web_experimentation.sections.get_sectionRead a Section of a Multivariate Testread
  • optimizely_web_experimentation.sections.update_sectionUpdate a Section by IDwrite
Webhooks5
  • optimizely_web_experimentation.webhooks.create_webhookCreate a Webhookwrite
  • optimizely_web_experimentation.webhooks.delete_webhookDelete a Webhookdestructive
  • optimizely_web_experimentation.webhooks.get_webhookRead a Webhookread
  • optimizely_web_experimentation.webhooks.list_webhooksGet Webhooks by Projectread
  • optimizely_web_experimentation.webhooks.update_webhookUpdate a Webhookwrite
Audiences4
  • optimizely_web_experimentation.audiences.create_audienceCreate an Audiencewrite
  • optimizely_web_experimentation.audiences.get_audienceRead an Audienceread
  • optimizely_web_experimentation.audiences.list_audiencesList Audiencesread
  • optimizely_web_experimentation.audiences.update_audienceUpdate an Audiencewrite
Projects4
  • optimizely_web_experimentation.projects.create_projectCreate a Projectwrite
  • optimizely_web_experimentation.projects.get_projectRead a Projectread
  • optimizely_web_experimentation.projects.list_projectsList Projectsread
  • optimizely_web_experimentation.projects.update_projectUpdate a Projectwrite
Collaborators3
  • optimizely_web_experimentation.collaborators.create_collaboratorsInvite Collaboratorswrite
  • optimizely_web_experimentation.collaborators.list_collaboratorsList Collaboratorsread
  • optimizely_web_experimentation.collaborators.list_invitationsList Collaborators who have not yet accepted the invitationsread
Subject access requests3
  • optimizely_web_experimentation.subject_access_requests.create_sar_requestCreate a Subject Access Requestwrite
  • optimizely_web_experimentation.subject_access_requests.get_sar_requestGet Subject Access Requestread
  • optimizely_web_experimentation.subject_access_requests.list_sar_requests_by_accountList Subject Access Requestsread
Change history2
  • optimizely_web_experimentation.change_history.compare_revisionsCompare two revisionsread
  • optimizely_web_experimentation.change_history.list_change_historyRetrieve changes for a projectread
Export credentials2
  • optimizely_web_experimentation.export_credentials.get_enriched_events_export_credentialsGet AWS credentials to access experimentation events export dataread
  • optimizely_web_experimentation.export_credentials.get_gcp_e3_credentialsGet GCP credentials to access experimentation events export dataread
Impressions usage2
  • optimizely_web_experimentation.impressions_usage.get_impressions_usage_requestGet Impressions Usageread
  • optimizely_web_experimentation.impressions_usage.get_impressions_usage_summary_requestGet Impressions Usage Summaryread
Attribution1
  • optimizely_web_experimentation.attribution.get_bucketing_historyGet bucketing information for a visitorread
Custom fields1
  • optimizely_web_experimentation.custom_fields.get_custom_fieldRead a Custom Fieldread
Experiment summary1
  • optimizely_web_experimentation.experiment_summary.get_experiment_summariesSummaries of Experiments and Campaignsread
Plan1
  • optimizely_web_experimentation.plan.get_planGet Plan & Usage information for all productsread
Reports1
  • optimizely_web_experimentation.reports.get_experiment_reportGet Experiment Result's Reportread
Search1
  • optimizely_web_experimentation.search.get_search_resultsSearchread
User1
  • optimizely_web_experimentation.user.get_meGet current User informationread

Questions

The Optimizely Web Experimentation MCP server, answered.

Is there an Optimizely Web Experimentation MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 101 Optimizely Web Experimentation actions across events, experiments, campaigns and environments, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Optimizely Web Experimentation.

What do I need to connect Optimizely Web Experimentation?

Optimizely personal access token (Profile > API Access > Generate New Token in app.optimizely.com), or an OAuth 2.0…. The free call account { op: "connections.requirements", service: "optimizely_web_experimentation" } lists exactly what to paste.

Can an AI agent delete or change things in Optimizely Web Experimentation?

Only if its key allows it, and only with an explicit confirmation. 14 Optimizely Web Experimentation actions are destructive, including archive an Experiment, archive a Custom Event and delete a Webhook. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my Optimizely Web Experimentation API limit?

actionlake paces every call to the limits in the Optimizely Web Experimentation service file: 100 calls a minute per connection. Repeated reads are answered from cache (51 Optimizely Web Experimentation actions can be), which never reaches Optimizely Web Experimentation.

What does an Optimizely Web Experimentation action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (101 Optimizely Web Experimentation actions page). Cache hits, searches, dry runs and calls Optimizely Web Experimentation refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which Optimizely Web Experimentation API does it cover?

The Optimizely REST API v2 (OpenAPI 3, Optimizely API 2.0) at api.optimizely.com. It is built from Optimizely Web Experimentation's documentation as read on 23 October 2026. 101 actions in 27 areas, each one in the signed service file (version 1.0.0).

Does actionlake keep my Optimizely Web Experimentation data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Optimizely Web Experimentation credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent Optimizely Web Experimentation today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.