Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,11 @@
"name": "xero",
"source": "third_party/xero",
"description": "Read and write invoices, contacts, reports, and payroll."
},
{
"name": "mida-so",
"source": "third_party/mida-so",
"description": "Create A/B tests, check results, and roll out winners on your site."
}
]
}
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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-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
Expand Down
30 changes: 30 additions & 0 deletions third_party/mida-so/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "mida-so",
"displayName": "Mida",
"version": "1.0.2",
"description": "Create A/B tests, check results, and roll out winners on your site.",
"author": {
"name": "Mida"
},
"homepage": "https://www.mida.so/mcp",
"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"
}
10 changes: 10 additions & 0 deletions third_party/mida-so/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
21 changes: 21 additions & 0 deletions third_party/mida-so/LICENSE
Original file line number Diff line number Diff line change
@@ -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.
72 changes: 72 additions & 0 deletions third_party/mida-so/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# 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 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"
```

## 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](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,
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: 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 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 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. |

## About Mida

[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.

- [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

MIT, see [LICENSE](LICENSE).
12 changes: 12 additions & 0 deletions third_party/mida-so/assets/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions third_party/mida-so/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"mida": {
"type": "http",
"url": "https://mcp.mida.so/mcp"
}
}
}
98 changes: 98 additions & 0 deletions third_party/mida-so/skills/mida-experiments/SKILL.md
Original file line number Diff line number Diff line change
@@ -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.
Loading