From 46a6014e77ec9d922e5ae159916981ae605a642c Mon Sep 17 00:00:00 2001 From: Donald Ng Date: Thu, 27 Aug 2026 17:25:51 +0800 Subject: [PATCH 1/5] Add Mida plugin Mida is an A/B testing and personalization platform. Vendors the hosted Mida MCP server (mcp.mida.so, OAuth) with two skills covering project selection, result interpretation, and the experiment workflow. Co-Authored-By: Claude Opus 5 --- .cursor-plugin/marketplace.json | 5 + README.md | 1 + third_party/mida/.cursor-plugin/plugin.json | 30 +++++ third_party/mida/CHANGELOG.md | 6 + third_party/mida/LICENSE | 21 +++ third_party/mida/README.md | 65 ++++++++++ third_party/mida/assets/logo.svg | 12 ++ third_party/mida/mcp.json | 8 ++ .../mida/skills/mida-experiments/SKILL.md | 98 ++++++++++++++ third_party/mida/skills/mida/SKILL.md | 122 ++++++++++++++++++ 10 files changed, 368 insertions(+) create mode 100644 third_party/mida/.cursor-plugin/plugin.json create mode 100644 third_party/mida/CHANGELOG.md create mode 100644 third_party/mida/LICENSE create mode 100644 third_party/mida/README.md create mode 100644 third_party/mida/assets/logo.svg create mode 100644 third_party/mida/mcp.json create mode 100644 third_party/mida/skills/mida-experiments/SKILL.md create mode 100644 third_party/mida/skills/mida/SKILL.md diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 9d0b8381..2159e5c3 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -307,6 +307,11 @@ "name": "xero", "source": "third_party/xero", "description": "Read and write invoices, contacts, reports, and payroll." + }, + { + "name": "mida", + "source": "third_party/mida", + "description": "Create A/B tests, check results, and roll out winners on your site." } ] } diff --git a/README.md b/README.md index bbe4867f..401d2844 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `readwise` | [Readwise](third_party/readwise/) | Cursor | Integrations | Search highlights and Reader documents, save articles. | | `similarweb` | [Similarweb](third_party/similarweb/) | Cursor | Integrations | Analyze website traffic, audiences, and competitors. | | `xero` | [Xero](third_party/xero/) | Cursor | Integrations | Read and write invoices, contacts, reports, and payroll. | +| `mida` | [Mida](third_party/mida/) | Mida | Integrations | Create A/B tests, check results, and roll out winners on your site. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/third_party/mida/.cursor-plugin/plugin.json b/third_party/mida/.cursor-plugin/plugin.json new file mode 100644 index 00000000..2c3e5a2b --- /dev/null +++ b/third_party/mida/.cursor-plugin/plugin.json @@ -0,0 +1,30 @@ +{ + "name": "mida", + "displayName": "Mida", + "version": "1.0.0", + "description": "Create A/B tests, check results, and roll out winners on your site.", + "author": { + "name": "Mida" + }, + "homepage": "https://www.mida.so", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.svg", + "keywords": [ + "mida", + "ab-testing", + "experimentation", + "personalization", + "cro", + "mcp" + ], + "category": "integrations", + "tags": [ + "mida", + "ab-testing", + "experimentation", + "analytics" + ], + "skills": "./skills/", + "mcpServers": "./mcp.json" +} diff --git a/third_party/mida/CHANGELOG.md b/third_party/mida/CHANGELOG.md new file mode 100644 index 00000000..e4338e68 --- /dev/null +++ b/third_party/mida/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog + +## 1.0.0 + +- Initial release: Mida MCP server (hosted, OAuth) plus the `mida` and + `mida-experiments` skills. diff --git a/third_party/mida/LICENSE b/third_party/mida/LICENSE new file mode 100644 index 00000000..2a0d3252 --- /dev/null +++ b/third_party/mida/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Mida + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/mida/README.md b/third_party/mida/README.md new file mode 100644 index 00000000..c6c8f7a0 --- /dev/null +++ b/third_party/mida/README.md @@ -0,0 +1,65 @@ +# Mida + +Run A/B tests and personalizations on your own website, from Cursor. + +[Mida](https://www.mida.so) is an A/B testing and experimentation platform. A +JavaScript tag on your site assigns visitors to variants and reports +conversions. This plugin connects Cursor to your Mida account so you can build a +test, launch it, read the result, conclude it, and roll the winner out — while +you're in the code that the test is changing. + +``` +"What's running on the pricing page right now?" +"Create a test for a shorter signup form and preview variant B" +"Has the homepage hero test reached significance yet?" +"Conclude experiment #208 — variant B won, we're shipping it" +``` + +## Setup + +On first use, Cursor opens a browser to sign in to Mida with OAuth. There is no +API key to paste and nothing is written to your machine. + +You need a Mida account and the Mida tag installed on the site you want to test. +Sign up at [mida.so](https://www.mida.so); ask for the install snippet once +you're connected. + +## What's included + +**MCP server** — the hosted Mida MCP server, covering experiments (create, +launch, update, conclude, reopen), results and statistics, goals and custom +events, hypotheses, exclusion groups, personalization campaigns, project +configuration, and team access. + +**Skills** + +| Skill | Covers | +|---|---| +| `mida` | Entry point: project selection, reading Bayesian vs. frequentist results, the order of operations for concluding a test and serving a winner | +| `mida-experiments` | The workflow: hypothesis → variants → goal → preview → launch → call it | + +The skills exist because several Mida behaviours are easy to get wrong from the +tool schemas alone — an experiment's display number is not its API id, a +concluded test stops serving even while its status reads active, and setting a +test's status clears a conclusion written before it. Each is documented with the +correct sequence. + +## Network and credentials + +| | | +|---|---| +| **Endpoints called** | `https://mcp.mida.so/mcp` — the hosted Mida MCP server, and the only host this plugin contacts. It talks to Mida's API server-side. | +| **Credentials** | OAuth to your Mida account, handled by the MCP client. No API keys, no environment variables, no local credential files. | +| **Scope** | Your own Mida organizations and projects. The plugin reads and writes experiment configuration and reads result data for those projects. | +| **Local execution** | None. No hooks, no commands, no scripts — one remote MCP server plus Markdown skills. | + +## Links + +- Product: [mida.so](https://www.mida.so) +- Dashboard: [app.mida.so](https://app.mida.so) +- API docs: [github.com/mida-so/api-docs](https://github.com/mida-so/api-docs) +- Plugin source: [github.com/mida-so/mida-grok-plugin](https://github.com/mida-so/mida-grok-plugin) + +## License + +MIT — see [LICENSE](LICENSE). diff --git a/third_party/mida/assets/logo.svg b/third_party/mida/assets/logo.svg new file mode 100644 index 00000000..c211ea2a --- /dev/null +++ b/third_party/mida/assets/logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/third_party/mida/mcp.json b/third_party/mida/mcp.json new file mode 100644 index 00000000..090ff199 --- /dev/null +++ b/third_party/mida/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "mida": { + "type": "http", + "url": "https://mcp.mida.so/mcp" + } + } +} diff --git a/third_party/mida/skills/mida-experiments/SKILL.md b/third_party/mida/skills/mida-experiments/SKILL.md new file mode 100644 index 00000000..f4325dcc --- /dev/null +++ b/third_party/mida/skills/mida-experiments/SKILL.md @@ -0,0 +1,98 @@ +--- +name: mida-experiments +description: >- + Build and launch a Mida A/B test end to end — writing the hypothesis, creating + the experiment and its variants, attaching a goal, previewing the variant + before it goes live, launching, and deciding when there is enough data to + call it. Use when the user asks to test, try, or experiment with a change to + their site ("test a new headline", "try a different CTA", "does the shorter + form convert better"), or to review a test someone has already set up. +--- + +# Running an experiment in Mida + +Read the `mida` skill first for project selection and result-reading rules. This +skill is the workflow. + +## 1. Start from a hypothesis, not a change + +A test is only worth running if you can say in advance what you expect and how +you would know. Push for the shape: + +> Changing **X** for **audience Y** will improve **metric Z**, because **reason**. + +`create_hypothesis` stores it, and `link_hypothesis_to_experiment` ties it to the +test so the conclusion can be read against what was actually predicted. Before +writing a new one, `find_similar_tests` and `get_my_testing_history` will show +whether this account has already run something close — a repeat of a test that +already lost is the most common waste. + +## 2. Change one thing + +If a variant changes the headline, the button colour, and the form length at +once, a win tells you nothing about which of the three did it, and a loss tells +you nothing about which to keep. When a user describes a bundle of changes, say +so and offer to split it — unless they are deliberately testing a whole new +page, which is a legitimate and different kind of test. + +Keep the control as-is. Never "improve" the control while building the variant. + +## 3. Create the experiment + +`create_experiment` takes the target URL rule, the variants, and the traffic +split. Two things to get right at creation time: + +- **The URL rule is a pattern.** A test meant for every product page needs a + rule that matches them all; a rule pasted from one specific URL will match + that page only. Confirm which the user means. +- **Query strings are matched literally.** An entry URL written with `?param=x` + will only match visitors whose URL carries that exact query string — which + usually is not what someone wants. + +`get_experiment_distribution` after launch confirms traffic is actually splitting +the way you configured it. + +## 4. Attach the goal before launching + +An experiment with no goal collects visitors and measures nothing. Check +`list_goals` for an existing goal that already tracks the action, and reuse it +rather than creating a near-duplicate — duplicates split the same conversions +across two metrics. + +Pick a primary goal that the change could plausibly move. A headline test +measured only on checkout completion will almost never reach significance; +measure the click the headline is trying to earn, and keep the downstream metric +as a secondary via `update_experiment`. + +## 5. Preview before you launch + +`generate_preview_url` returns a link that forces a given variant, so the user +can see the change on their real site before a single visitor does. Always offer +it. Broken variant markup that ships to 50% of traffic is the expensive failure +mode here, and it is entirely avoidable. + +## 6. Launch and leave it alone + +`update_experiment_status` starts delivery. Then: + +- **Do not read the result on day one.** Early numbers swing hard and reading + them invites stopping on noise. +- **Run at least one full business cycle** — usually a week, so every weekday is + represented in both arms. A test stopped on Wednesday inherits Wednesday's + traffic mix. +- **Do not edit a running test.** Changing the variant, the goal, or the + targeting mid-flight mixes two different experiments into one dataset. If the + change is necessary, stop the test and start a fresh one. + +## 7. Call it + +Use `get_experiment_result` with `compute_experiment_statistics`, and check +`get_experiment_timeseries` to see whether the result has settled or is still +moving. Then `conclude_experiment` with a written conclusion — what changed, +what happened, and what to do next. That write-up is what makes the account's +history worth anything later; a concluded test with an empty conclusion is a +test nobody can learn from. + +If the winner should keep serving while the change gets built for real, use +`serve_experiment_winner` — and see the ordering rules in the `mida` skill +before deploying that variant to source. diff --git a/third_party/mida/skills/mida/SKILL.md b/third_party/mida/skills/mida/SKILL.md new file mode 100644 index 00000000..08864a6a --- /dev/null +++ b/third_party/mida/skills/mida/SKILL.md @@ -0,0 +1,122 @@ +--- +name: mida +description: >- + Working with Mida — A/B testing, split tests, and personalization on a live + website. Use whenever "Mida" is mentioned, and as the entry point for any + request to create, launch, check, pause, conclude, or roll out an experiment + on a site that runs the Mida tag. Also covers reading Mida results correctly + (Bayesian "chance to beat original" vs. p-value), goals and events, and the + order of operations that keeps a test's data clean. +--- + +# Mida + +Mida is an A/B testing and personalization platform. A JavaScript tag on the +customer's site assigns visitors to variants and reports conversions; the Mida +MCP server exposes that account so you can run the whole loop — build a test, +launch it, read the result, conclude it, and serve the winner — without leaving +the conversation. + +This plugin bundles the hosted Mida MCP server (`https://mcp.mida.so/mcp`, +OAuth). On first use Cursor will open a browser to sign in to Mida. Nothing is +stored locally and no API key is needed. + +## Always select a project first + +A Mida login can own several organizations and projects. The MCP session opens +on a **default project**, which is very often not the one the user means. + +Calls scoped to another project return `Mida API error 404: Experiment not +found` — which reads like a deleted test, not a scoping miss. Do not report a +404 as "that experiment doesn't exist" until you have selected the right +project. + +Start every Mida session with: + +1. `list_organizations` → `select_organization` (only if the user has more than one) +2. `list_projects` → `select_project` + +Then work. If a lookup 404s mid-session, re-check the selected project before +anything else. + +## "Experiment #208" is not `test_id` 208 + +Each account numbers its own experiments, and that number lives at the **start +of the experiment's name** — e.g. `#208 | Pricing page | Annual toggle default`. +It is not the global id the API uses. + +When a user says "experiment #208", call `list_experiments` and match the name +prefix. Passing `208` to `get_experiment` will either 404 or silently return an +unrelated test. + +## Reading results + +`get_experiment_result` reports against whichever statistics mode the project is +set to, and the two modes are read in opposite directions: + +| Mode | Column | How to read it | +|---|---|---| +| Bayesian (default) | Chance to Beat Original / Chance to be Best | **Higher is better.** 95% means a 95% probability the variant beats control. | +| Frequentist | P-value | **Lower is better.** 0.05 is the conventional bar. | + +Two things to hold onto before you call a result: + +- **Chance-to-beat is one-directional.** It answers "is the variant better?" A + low value means "not shown to be better", *not* "shown to be worse", and it + cannot rank how bad a loser is. To speak about a loss, use the observed lift + and the sample size — not the inverse of the probability. +- **Check power before calling anything.** A test with a few hundred visitors + per arm will swing wildly day to day. `compute_experiment_statistics` and + `get_experiment_timeseries` are there to show whether the number has settled; + use them rather than reporting the headline figure alone. + +Related tools: `get_experiment_metrics` (per-goal breakdown), +`get_experiment_distribution` (traffic split sanity check), +`get_testing_benchmarks` (how this result compares to typical outcomes). + +## Order of operations + +These sequences matter — getting them backwards silently corrupts a test. + +**Concluding a test.** `update_experiment_status` resets the completed flag. So +if you are both stopping and concluding a test, set the status **first** and +call `conclude_experiment` **last**, or the write-up is dropped. + +**Serving a winner.** `conclude_experiment` ends delivery on its own — a +concluded test stops serving even while its status still reads active. The one +exception is a test with a served winner: `serve_experiment_winner` keeps that +variant serving to everyone after the test is concluded, which is usually what +the user wants while they ship the change for real. + +**Hardcoding a winner into the site.** Stop the test *before* deploying the +winning copy to source. Deploy first and the control arm starts serving the new +copy too — both arms become identical and the remaining data is noise. + +## Goals and events + +A test measures nothing until a goal is attached. `list_goals` /`create_goal` +manage them; `list_events` / `create_event` handle custom events the tag fires. +`update_experiment` can attach secondary metrics to a test that is already live. + +When creating a click goal, the element selector is matched as a **pattern**, +not an exact string — check `list_goals` for an existing goal that already +covers the element before adding a near-duplicate. + +## Before anything runs: the tag + +Nothing works until Mida's tag is on the site. `get_install_snippet` returns the +snippet for the selected project. If a live test reports no visitors at all, the +tag is the first thing to check, not the targeting. + +## Tool map + +- **Setup** — `get_mida_api_context`, `get_install_snippet`, `get_my_access`, `get_project_configuration` +- **Build & launch** — `create_experiment`, `update_experiment`, `generate_preview_url`, `update_experiment_status` +- **Measure** — `get_experiment_result`, `get_experiment_metrics`, `get_experiment_timeseries`, `compute_experiment_statistics` +- **Finish** — `conclude_experiment`, `serve_experiment_winner`, `update_serving_rollout`, `stop_experiment_serving`, `reopen_experiment` +- **Plan** — `list_hypotheses`, `create_hypothesis`, `link_hypothesis_to_experiment`, `find_similar_tests`, `get_my_testing_history` +- **Personalization** — `suggest_pages_to_personalize`, `create_persona_campaign`, `create_target_account_campaign` + +## Docs + +https://www.mida.so — product and pricing. The dashboard is https://app.mida.so. From 67956a233e5a5cebbf9d0df68629887ce6e1b20e Mon Sep 17 00:00:00 2001 From: Donald Ng Date: Thu, 27 Aug 2026 17:39:31 +0800 Subject: [PATCH 2/5] Polish Mida copy and branding Tagline and logo-consistent wording in the README, backlinks to mida.so, app.mida.so and the API docs, and a link to the plugin source repo. Removed em-dashes throughout, per Mida copy style. Co-Authored-By: Claude Opus 5 --- third_party/mida/README.md | 56 ++++++++++--------- .../mida/skills/mida-experiments/SKILL.md | 16 +++--- third_party/mida/skills/mida/SKILL.md | 37 ++++++------ 3 files changed, 57 insertions(+), 52 deletions(-) diff --git a/third_party/mida/README.md b/third_party/mida/README.md index c6c8f7a0..6f8da0fb 100644 --- a/third_party/mida/README.md +++ b/third_party/mida/README.md @@ -1,18 +1,20 @@ # Mida +**Test everything. Personalize everyone.** + Run A/B tests and personalizations on your own website, from Cursor. -[Mida](https://www.mida.so) is an A/B testing and experimentation platform. A -JavaScript tag on your site assigns visitors to variants and reports -conversions. This plugin connects Cursor to your Mida account so you can build a -test, launch it, read the result, conclude it, and roll the winner out — while -you're in the code that the test is changing. +[Mida](https://www.mida.so) is an A/B testing and personalization platform. A +small JavaScript tag on your site puts visitors into variants and reports +conversions. This plugin connects Cursor to your Mida account, so you can build +a test, launch it, read the result, conclude it, and roll the winner out while +you're still in the code the test is changing. ``` "What's running on the pricing page right now?" "Create a test for a shorter signup form and preview variant B" "Has the homepage hero test reached significance yet?" -"Conclude experiment #208 — variant B won, we're shipping it" +"Conclude experiment #208, variant B won, we're shipping it" ``` ## Setup @@ -20,13 +22,12 @@ you're in the code that the test is changing. On first use, Cursor opens a browser to sign in to Mida with OAuth. There is no API key to paste and nothing is written to your machine. -You need a Mida account and the Mida tag installed on the site you want to test. -Sign up at [mida.so](https://www.mida.so); ask for the install snippet once -you're connected. +You need a [Mida account](https://www.mida.so) and the Mida tag installed on the +site you want to test. Ask for the install snippet once you're connected. ## What's included -**MCP server** — the hosted Mida MCP server, covering experiments (create, +**MCP server.** The hosted Mida MCP server, covering experiments (create, launch, update, conclude, reopen), results and statistics, goals and custom events, hypotheses, exclusion groups, personalization campaigns, project configuration, and team access. @@ -35,31 +36,36 @@ configuration, and team access. | Skill | Covers | |---|---| -| `mida` | Entry point: project selection, reading Bayesian vs. frequentist results, the order of operations for concluding a test and serving a winner | -| `mida-experiments` | The workflow: hypothesis → variants → goal → preview → launch → call it | +| `mida` | Entry point: picking the right project, reading Bayesian vs. frequentist results, and the order of operations for concluding a test and serving a winner | +| `mida-experiments` | The workflow: hypothesis, variants, goal, preview, launch, then calling the result | -The skills exist because several Mida behaviours are easy to get wrong from the -tool schemas alone — an experiment's display number is not its API id, a -concluded test stops serving even while its status reads active, and setting a -test's status clears a conclusion written before it. Each is documented with the -correct sequence. +The skills are here because a few Mida behaviours are easy to get wrong from the +tool schemas alone. An experiment's display number is not its API id. A +concluded test stops serving even while its status still reads active. Setting a +test's status clears a conclusion written before it. Each one is documented with +the correct sequence. ## Network and credentials | | | |---|---| -| **Endpoints called** | `https://mcp.mida.so/mcp` — the hosted Mida MCP server, and the only host this plugin contacts. It talks to Mida's API server-side. | +| **Endpoints called** | `https://mcp.mida.so/mcp`, the hosted Mida MCP server, and the only host this plugin contacts. It reaches Mida's API server-side. | | **Credentials** | OAuth to your Mida account, handled by the MCP client. No API keys, no environment variables, no local credential files. | | **Scope** | Your own Mida organizations and projects. The plugin reads and writes experiment configuration and reads result data for those projects. | -| **Local execution** | None. No hooks, no commands, no scripts — one remote MCP server plus Markdown skills. | +| **Local execution** | None. No hooks, no commands, no scripts. One remote MCP server plus Markdown skills. | + +## About Mida -## Links +[Mida](https://www.mida.so) is A/B testing and personalization in one engine. +Testing answers which version works. Personalization answers who it works for. +Both run as real variants in a real test, so personalization is something you +can actually prove rather than take on faith. -- Product: [mida.so](https://www.mida.so) -- Dashboard: [app.mida.so](https://app.mida.so) -- API docs: [github.com/mida-so/api-docs](https://github.com/mida-so/api-docs) -- Plugin source: [github.com/mida-so/mida-grok-plugin](https://github.com/mida-so/mida-grok-plugin) +- [Mida](https://www.mida.so), A/B testing on any site, with a tag that loads in about 20ms +- [Mida dashboard](https://app.mida.so) for results, goals, and rollouts +- [Public API docs](https://github.com/mida-so/api-docs) +- [Plugin source](https://github.com/mida-so/mida-plugin) ## License -MIT — see [LICENSE](LICENSE). +MIT, see [LICENSE](LICENSE). diff --git a/third_party/mida/skills/mida-experiments/SKILL.md b/third_party/mida/skills/mida-experiments/SKILL.md index f4325dcc..6b1142ea 100644 --- a/third_party/mida/skills/mida-experiments/SKILL.md +++ b/third_party/mida/skills/mida-experiments/SKILL.md @@ -1,7 +1,7 @@ --- name: mida-experiments description: >- - Build and launch a Mida A/B test end to end — writing the hypothesis, creating + Build and launch a Mida A/B test end to end: writing the hypothesis, creating the experiment and its variants, attaching a goal, previewing the variant before it goes live, launching, and deciding when there is enough data to call it. Use when the user asks to test, try, or experiment with a change to @@ -24,7 +24,7 @@ you would know. Push for the shape: `create_hypothesis` stores it, and `link_hypothesis_to_experiment` ties it to the test so the conclusion can be read against what was actually predicted. Before writing a new one, `find_similar_tests` and `get_my_testing_history` will show -whether this account has already run something close — a repeat of a test that +whether this account has already run something close. A repeat of a test that already lost is the most common waste. ## 2. Change one thing @@ -32,7 +32,7 @@ already lost is the most common waste. If a variant changes the headline, the button colour, and the form length at once, a win tells you nothing about which of the three did it, and a loss tells you nothing about which to keep. When a user describes a bundle of changes, say -so and offer to split it — unless they are deliberately testing a whole new +so and offer to split it, unless they are deliberately testing a whole new page, which is a legitimate and different kind of test. Keep the control as-is. Never "improve" the control while building the variant. @@ -46,7 +46,7 @@ split. Two things to get right at creation time: rule that matches them all; a rule pasted from one specific URL will match that page only. Confirm which the user means. - **Query strings are matched literally.** An entry URL written with `?param=x` - will only match visitors whose URL carries that exact query string — which + will only match visitors whose URL carries that exact query string, which usually is not what someone wants. `get_experiment_distribution` after launch confirms traffic is actually splitting @@ -56,7 +56,7 @@ the way you configured it. An experiment with no goal collects visitors and measures nothing. Check `list_goals` for an existing goal that already tracks the action, and reuse it -rather than creating a near-duplicate — duplicates split the same conversions +rather than creating a near-duplicate. Duplicates split the same conversions across two metrics. Pick a primary goal that the change could plausibly move. A headline test @@ -77,7 +77,7 @@ mode here, and it is entirely avoidable. - **Do not read the result on day one.** Early numbers swing hard and reading them invites stopping on noise. -- **Run at least one full business cycle** — usually a week, so every weekday is +- **Run at least one full business cycle**, usually a week, so every weekday is represented in both arms. A test stopped on Wednesday inherits Wednesday's traffic mix. - **Do not edit a running test.** Changing the variant, the goal, or the @@ -88,11 +88,11 @@ mode here, and it is entirely avoidable. Use `get_experiment_result` with `compute_experiment_statistics`, and check `get_experiment_timeseries` to see whether the result has settled or is still -moving. Then `conclude_experiment` with a written conclusion — what changed, +moving. Then `conclude_experiment` with a written conclusion: what changed, what happened, and what to do next. That write-up is what makes the account's history worth anything later; a concluded test with an empty conclusion is a test nobody can learn from. If the winner should keep serving while the change gets built for real, use -`serve_experiment_winner` — and see the ordering rules in the `mida` skill +`serve_experiment_winner`, and see the ordering rules in the `mida` skill before deploying that variant to source. diff --git a/third_party/mida/skills/mida/SKILL.md b/third_party/mida/skills/mida/SKILL.md index 08864a6a..32eba3fb 100644 --- a/third_party/mida/skills/mida/SKILL.md +++ b/third_party/mida/skills/mida/SKILL.md @@ -1,7 +1,7 @@ --- name: mida description: >- - Working with Mida — A/B testing, split tests, and personalization on a live + Working with Mida: A/B testing, split tests, and personalization on a live website. Use whenever "Mida" is mentioned, and as the entry point for any request to create, launch, check, pause, conclude, or roll out an experiment on a site that runs the Mida tag. Also covers reading Mida results correctly @@ -13,12 +13,11 @@ description: >- Mida is an A/B testing and personalization platform. A JavaScript tag on the customer's site assigns visitors to variants and reports conversions; the Mida -MCP server exposes that account so you can run the whole loop — build a test, -launch it, read the result, conclude it, and serve the winner — without leaving -the conversation. +MCP server exposes that account so you can run the whole loop, from building a +test to serving the winner, without leaving the conversation. This plugin bundles the hosted Mida MCP server (`https://mcp.mida.so/mcp`, -OAuth). On first use Cursor will open a browser to sign in to Mida. Nothing is +OAuth). On first use Cursor opens a browser to sign in to Mida. Nothing is stored locally and no API key is needed. ## Always select a project first @@ -27,7 +26,7 @@ A Mida login can own several organizations and projects. The MCP session opens on a **default project**, which is very often not the one the user means. Calls scoped to another project return `Mida API error 404: Experiment not -found` — which reads like a deleted test, not a scoping miss. Do not report a +found`, which reads like a deleted test, not a scoping miss. Do not report a 404 as "that experiment doesn't exist" until you have selected the right project. @@ -42,7 +41,7 @@ anything else. ## "Experiment #208" is not `test_id` 208 Each account numbers its own experiments, and that number lives at the **start -of the experiment's name** — e.g. `#208 | Pricing page | Annual toggle default`. +of the experiment's name**, e.g. `#208 | Pricing page | Annual toggle default`. It is not the global id the API uses. When a user says "experiment #208", call `list_experiments` and match the name @@ -64,7 +63,7 @@ Two things to hold onto before you call a result: - **Chance-to-beat is one-directional.** It answers "is the variant better?" A low value means "not shown to be better", *not* "shown to be worse", and it cannot rank how bad a loser is. To speak about a loss, use the observed lift - and the sample size — not the inverse of the probability. + and the sample size, not the inverse of the probability. - **Check power before calling anything.** A test with a few hundred visitors per arm will swing wildly day to day. `compute_experiment_statistics` and `get_experiment_timeseries` are there to show whether the number has settled; @@ -76,13 +75,13 @@ Related tools: `get_experiment_metrics` (per-goal breakdown), ## Order of operations -These sequences matter — getting them backwards silently corrupts a test. +These sequences matter: getting them backwards silently corrupts a test. **Concluding a test.** `update_experiment_status` resets the completed flag. So if you are both stopping and concluding a test, set the status **first** and call `conclude_experiment` **last**, or the write-up is dropped. -**Serving a winner.** `conclude_experiment` ends delivery on its own — a +**Serving a winner.** `conclude_experiment` ends delivery on its own. A concluded test stops serving even while its status still reads active. The one exception is a test with a served winner: `serve_experiment_winner` keeps that variant serving to everyone after the test is concluded, which is usually what @@ -90,7 +89,7 @@ the user wants while they ship the change for real. **Hardcoding a winner into the site.** Stop the test *before* deploying the winning copy to source. Deploy first and the control arm starts serving the new -copy too — both arms become identical and the remaining data is noise. +copy too. Both arms become identical and the rest of the data is noise. ## Goals and events @@ -99,7 +98,7 @@ manage them; `list_events` / `create_event` handle custom events the tag fires. `update_experiment` can attach secondary metrics to a test that is already live. When creating a click goal, the element selector is matched as a **pattern**, -not an exact string — check `list_goals` for an existing goal that already +not an exact string. Check `list_goals` for an existing goal that already covers the element before adding a near-duplicate. ## Before anything runs: the tag @@ -110,13 +109,13 @@ tag is the first thing to check, not the targeting. ## Tool map -- **Setup** — `get_mida_api_context`, `get_install_snippet`, `get_my_access`, `get_project_configuration` -- **Build & launch** — `create_experiment`, `update_experiment`, `generate_preview_url`, `update_experiment_status` -- **Measure** — `get_experiment_result`, `get_experiment_metrics`, `get_experiment_timeseries`, `compute_experiment_statistics` -- **Finish** — `conclude_experiment`, `serve_experiment_winner`, `update_serving_rollout`, `stop_experiment_serving`, `reopen_experiment` -- **Plan** — `list_hypotheses`, `create_hypothesis`, `link_hypothesis_to_experiment`, `find_similar_tests`, `get_my_testing_history` -- **Personalization** — `suggest_pages_to_personalize`, `create_persona_campaign`, `create_target_account_campaign` +- **Setup:** `get_mida_api_context`, `get_install_snippet`, `get_my_access`, `get_project_configuration` +- **Build & launch:** `create_experiment`, `update_experiment`, `generate_preview_url`, `update_experiment_status` +- **Measure:** `get_experiment_result`, `get_experiment_metrics`, `get_experiment_timeseries`, `compute_experiment_statistics` +- **Finish:** `conclude_experiment`, `serve_experiment_winner`, `update_serving_rollout`, `stop_experiment_serving`, `reopen_experiment` +- **Plan:** `list_hypotheses`, `create_hypothesis`, `link_hypothesis_to_experiment`, `find_similar_tests`, `get_my_testing_history` +- **Personalization:** `suggest_pages_to_personalize`, `create_persona_campaign`, `create_target_account_campaign` ## Docs -https://www.mida.so — product and pricing. The dashboard is https://app.mida.so. +https://www.mida.so for product and pricing. The dashboard is https://app.mida.so. From 19ca1638f2157010f08d9d2031b32046c19a496b Mon Sep 17 00:00:00 2001 From: Donald Ng Date: Thu, 27 Aug 2026 17:55:13 +0800 Subject: [PATCH 3/5] Point Mida homepage at its MCP setup page mida.so/mcp now carries the server URL, per-client setup, and the OAuth flow, so it is a better landing spot than the marketing homepage. Co-Authored-By: Claude Opus 5 --- third_party/mida/.cursor-plugin/plugin.json | 2 +- third_party/mida/README.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/third_party/mida/.cursor-plugin/plugin.json b/third_party/mida/.cursor-plugin/plugin.json index 2c3e5a2b..a189b48a 100644 --- a/third_party/mida/.cursor-plugin/plugin.json +++ b/third_party/mida/.cursor-plugin/plugin.json @@ -6,7 +6,7 @@ "author": { "name": "Mida" }, - "homepage": "https://www.mida.so", + "homepage": "https://www.mida.so/mcp", "repository": "https://github.com/cursor/plugins", "license": "MIT", "logo": "assets/logo.svg", diff --git a/third_party/mida/README.md b/third_party/mida/README.md index 6f8da0fb..7b3c04d3 100644 --- a/third_party/mida/README.md +++ b/third_party/mida/README.md @@ -64,6 +64,7 @@ can actually prove rather than take on faith. - [Mida](https://www.mida.so), A/B testing on any site, with a tag that loads in about 20ms - [Mida dashboard](https://app.mida.so) for results, goals, and rollouts - [Public API docs](https://github.com/mida-so/api-docs) +- [MCP setup guide](https://www.mida.so/mcp) for every client - [Plugin source](https://github.com/mida-so/mida-plugin) ## License From 42259ded9005f979dc9bac3be78999d901787438 Mon Sep 17 00:00:00 2001 From: Donald Ng Date: Thu, 27 Aug 2026 18:22:27 +0800 Subject: [PATCH 4/5] Rename mida to mida-abtesting "mida" collides with several unrelated projects across these catalogs (geekmidas, midasflow, vornicx-midas, codespar-midaz). mida-abtesting is unambiguous and says what the plugin does. Display name stays "Mida". Co-Authored-By: Claude Opus 5 --- .cursor-plugin/marketplace.json | 4 ++-- README.md | 2 +- .../.cursor-plugin/plugin.json | 4 ++-- third_party/mida-abtesting/CHANGELOG.md | 11 +++++++++++ third_party/{mida => mida-abtesting}/LICENSE | 0 third_party/{mida => mida-abtesting}/README.md | 0 third_party/{mida => mida-abtesting}/assets/logo.svg | 0 third_party/{mida => mida-abtesting}/mcp.json | 0 .../skills/mida-experiments/SKILL.md | 0 .../{mida => mida-abtesting}/skills/mida/SKILL.md | 0 third_party/mida/CHANGELOG.md | 6 ------ 11 files changed, 16 insertions(+), 11 deletions(-) rename third_party/{mida => mida-abtesting}/.cursor-plugin/plugin.json (92%) create mode 100644 third_party/mida-abtesting/CHANGELOG.md rename third_party/{mida => mida-abtesting}/LICENSE (100%) rename third_party/{mida => mida-abtesting}/README.md (100%) rename third_party/{mida => mida-abtesting}/assets/logo.svg (100%) rename third_party/{mida => mida-abtesting}/mcp.json (100%) rename third_party/{mida => mida-abtesting}/skills/mida-experiments/SKILL.md (100%) rename third_party/{mida => mida-abtesting}/skills/mida/SKILL.md (100%) delete mode 100644 third_party/mida/CHANGELOG.md diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 2159e5c3..ea6aac6b 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -309,8 +309,8 @@ "description": "Read and write invoices, contacts, reports, and payroll." }, { - "name": "mida", - "source": "third_party/mida", + "name": "mida-abtesting", + "source": "third_party/mida-abtesting", "description": "Create A/B tests, check results, and roll out winners on your site." } ] diff --git a/README.md b/README.md index 401d2844..e3691e50 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `readwise` | [Readwise](third_party/readwise/) | Cursor | Integrations | Search highlights and Reader documents, save articles. | | `similarweb` | [Similarweb](third_party/similarweb/) | Cursor | Integrations | Analyze website traffic, audiences, and competitors. | | `xero` | [Xero](third_party/xero/) | Cursor | Integrations | Read and write invoices, contacts, reports, and payroll. | -| `mida` | [Mida](third_party/mida/) | Mida | Integrations | Create A/B tests, check results, and roll out winners on your site. | +| `mida-abtesting` | [Mida](third_party/mida-abtesting/) | Mida | Integrations | Create A/B tests, check results, and roll out winners on your site. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/third_party/mida/.cursor-plugin/plugin.json b/third_party/mida-abtesting/.cursor-plugin/plugin.json similarity index 92% rename from third_party/mida/.cursor-plugin/plugin.json rename to third_party/mida-abtesting/.cursor-plugin/plugin.json index a189b48a..b04626eb 100644 --- a/third_party/mida/.cursor-plugin/plugin.json +++ b/third_party/mida-abtesting/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { - "name": "mida", + "name": "mida-abtesting", "displayName": "Mida", - "version": "1.0.0", + "version": "1.0.1", "description": "Create A/B tests, check results, and roll out winners on your site.", "author": { "name": "Mida" diff --git a/third_party/mida-abtesting/CHANGELOG.md b/third_party/mida-abtesting/CHANGELOG.md new file mode 100644 index 00000000..cc54d046 --- /dev/null +++ b/third_party/mida-abtesting/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog + +## 1.0.1 + +- Renamed the plugin from `mida` to `mida-abtesting` so it is not confused + with unrelated projects that share the `mida` prefix. + +## 1.0.0 + +- Initial release: Mida MCP server (hosted, OAuth) plus the `mida` and + `mida-experiments` skills. diff --git a/third_party/mida/LICENSE b/third_party/mida-abtesting/LICENSE similarity index 100% rename from third_party/mida/LICENSE rename to third_party/mida-abtesting/LICENSE diff --git a/third_party/mida/README.md b/third_party/mida-abtesting/README.md similarity index 100% rename from third_party/mida/README.md rename to third_party/mida-abtesting/README.md diff --git a/third_party/mida/assets/logo.svg b/third_party/mida-abtesting/assets/logo.svg similarity index 100% rename from third_party/mida/assets/logo.svg rename to third_party/mida-abtesting/assets/logo.svg diff --git a/third_party/mida/mcp.json b/third_party/mida-abtesting/mcp.json similarity index 100% rename from third_party/mida/mcp.json rename to third_party/mida-abtesting/mcp.json diff --git a/third_party/mida/skills/mida-experiments/SKILL.md b/third_party/mida-abtesting/skills/mida-experiments/SKILL.md similarity index 100% rename from third_party/mida/skills/mida-experiments/SKILL.md rename to third_party/mida-abtesting/skills/mida-experiments/SKILL.md diff --git a/third_party/mida/skills/mida/SKILL.md b/third_party/mida-abtesting/skills/mida/SKILL.md similarity index 100% rename from third_party/mida/skills/mida/SKILL.md rename to third_party/mida-abtesting/skills/mida/SKILL.md diff --git a/third_party/mida/CHANGELOG.md b/third_party/mida/CHANGELOG.md deleted file mode 100644 index e4338e68..00000000 --- a/third_party/mida/CHANGELOG.md +++ /dev/null @@ -1,6 +0,0 @@ -# Changelog - -## 1.0.0 - -- Initial release: Mida MCP server (hosted, OAuth) plus the `mida` and - `mida-experiments` skills. From 77012a89f894e3e68ba299433f58e208d93f6448 Mon Sep 17 00:00:00 2001 From: Donald Ng Date: Thu, 27 Aug 2026 18:27:41 +0800 Subject: [PATCH 5/5] Rename to mida-so Matches the GitHub org and repo prefix. Display name stays "Mida". Co-Authored-By: Claude Opus 5 --- .cursor-plugin/marketplace.json | 4 ++-- README.md | 2 +- third_party/mida-abtesting/CHANGELOG.md | 11 ----------- .../.cursor-plugin/plugin.json | 4 ++-- third_party/mida-so/CHANGELOG.md | 10 ++++++++++ third_party/{mida-abtesting => mida-so}/LICENSE | 0 third_party/{mida-abtesting => mida-so}/README.md | 0 .../{mida-abtesting => mida-so}/assets/logo.svg | 0 third_party/{mida-abtesting => mida-so}/mcp.json | 0 .../skills/mida-experiments/SKILL.md | 0 .../{mida-abtesting => mida-so}/skills/mida/SKILL.md | 0 11 files changed, 15 insertions(+), 16 deletions(-) delete mode 100644 third_party/mida-abtesting/CHANGELOG.md rename third_party/{mida-abtesting => mida-so}/.cursor-plugin/plugin.json (92%) create mode 100644 third_party/mida-so/CHANGELOG.md rename third_party/{mida-abtesting => mida-so}/LICENSE (100%) rename third_party/{mida-abtesting => mida-so}/README.md (100%) rename third_party/{mida-abtesting => mida-so}/assets/logo.svg (100%) rename third_party/{mida-abtesting => mida-so}/mcp.json (100%) rename third_party/{mida-abtesting => mida-so}/skills/mida-experiments/SKILL.md (100%) rename third_party/{mida-abtesting => mida-so}/skills/mida/SKILL.md (100%) diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index ea6aac6b..7ba0480f 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -309,8 +309,8 @@ "description": "Read and write invoices, contacts, reports, and payroll." }, { - "name": "mida-abtesting", - "source": "third_party/mida-abtesting", + "name": "mida-so", + "source": "third_party/mida-so", "description": "Create A/B tests, check results, and roll out winners on your site." } ] diff --git a/README.md b/README.md index e3691e50..3afe2379 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `readwise` | [Readwise](third_party/readwise/) | Cursor | Integrations | Search highlights and Reader documents, save articles. | | `similarweb` | [Similarweb](third_party/similarweb/) | Cursor | Integrations | Analyze website traffic, audiences, and competitors. | | `xero` | [Xero](third_party/xero/) | Cursor | Integrations | Read and write invoices, contacts, reports, and payroll. | -| `mida-abtesting` | [Mida](third_party/mida-abtesting/) | Mida | Integrations | Create A/B tests, check results, and roll out winners on your site. | +| `mida-so` | [Mida](third_party/mida-so/) | Mida | Integrations | Create A/B tests, check results, and roll out winners on your site. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/third_party/mida-abtesting/CHANGELOG.md b/third_party/mida-abtesting/CHANGELOG.md deleted file mode 100644 index cc54d046..00000000 --- a/third_party/mida-abtesting/CHANGELOG.md +++ /dev/null @@ -1,11 +0,0 @@ -# Changelog - -## 1.0.1 - -- Renamed the plugin from `mida` to `mida-abtesting` so it is not confused - with unrelated projects that share the `mida` prefix. - -## 1.0.0 - -- Initial release: Mida MCP server (hosted, OAuth) plus the `mida` and - `mida-experiments` skills. diff --git a/third_party/mida-abtesting/.cursor-plugin/plugin.json b/third_party/mida-so/.cursor-plugin/plugin.json similarity index 92% rename from third_party/mida-abtesting/.cursor-plugin/plugin.json rename to third_party/mida-so/.cursor-plugin/plugin.json index b04626eb..0b373895 100644 --- a/third_party/mida-abtesting/.cursor-plugin/plugin.json +++ b/third_party/mida-so/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { - "name": "mida-abtesting", + "name": "mida-so", "displayName": "Mida", - "version": "1.0.1", + "version": "1.0.2", "description": "Create A/B tests, check results, and roll out winners on your site.", "author": { "name": "Mida" diff --git a/third_party/mida-so/CHANGELOG.md b/third_party/mida-so/CHANGELOG.md new file mode 100644 index 00000000..3764b91c --- /dev/null +++ b/third_party/mida-so/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +## 1.0.2 + +- Renamed the plugin to `mida-so`, matching the GitHub org and repo prefix. + +## 1.0.0 + +- Initial release: Mida MCP server (hosted, OAuth) plus the `mida` and + `mida-experiments` skills. diff --git a/third_party/mida-abtesting/LICENSE b/third_party/mida-so/LICENSE similarity index 100% rename from third_party/mida-abtesting/LICENSE rename to third_party/mida-so/LICENSE diff --git a/third_party/mida-abtesting/README.md b/third_party/mida-so/README.md similarity index 100% rename from third_party/mida-abtesting/README.md rename to third_party/mida-so/README.md diff --git a/third_party/mida-abtesting/assets/logo.svg b/third_party/mida-so/assets/logo.svg similarity index 100% rename from third_party/mida-abtesting/assets/logo.svg rename to third_party/mida-so/assets/logo.svg diff --git a/third_party/mida-abtesting/mcp.json b/third_party/mida-so/mcp.json similarity index 100% rename from third_party/mida-abtesting/mcp.json rename to third_party/mida-so/mcp.json diff --git a/third_party/mida-abtesting/skills/mida-experiments/SKILL.md b/third_party/mida-so/skills/mida-experiments/SKILL.md similarity index 100% rename from third_party/mida-abtesting/skills/mida-experiments/SKILL.md rename to third_party/mida-so/skills/mida-experiments/SKILL.md diff --git a/third_party/mida-abtesting/skills/mida/SKILL.md b/third_party/mida-so/skills/mida/SKILL.md similarity index 100% rename from third_party/mida-abtesting/skills/mida/SKILL.md rename to third_party/mida-so/skills/mida/SKILL.md