protogrid

Search / io.github.livevariant/livevariant

LiveVariant

R0· no sign-in

Build, inspect and read adaptive A/B tests. Config travels in the URL; no account or API key needed.

v0.1.5 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality84good
Trust94of 100
Uptime, 30 days98%
Latency p50505 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "livevariant": {
      "type": "http",
      "url": "https://livevariant.com/mcp"
    }
  }
}
claude mcp add --transport http livevariant https://livevariant.com/mcp
[mcp_servers.livevariant]
url = "https://livevariant.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "livevariant": {
      "type": "remote",
      "url": "https://livevariant.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "livevariant": {
      "type": "http",
      "url": "https://livevariant.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=livevariant&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbGl2ZXZhcmlhbnQuY29tL21jcCJ9"
}
{
  "servers": {
    "livevariant": {
      "type": "http",
      "url": "https://livevariant.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "livevariant": {
      "httpUrl": "https://livevariant.com/mcp"
    }
  }
}
extensions:
  "livevariant":
    enabled: true
    name: "livevariant"
    type: streamable_http
    uri: "https://livevariant.com/mcp"
    timeout: 300

Quality 84 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene93 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length1 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations9 of 9 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • pass
    tools.token_costabout 4,473 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependencies67 · weight 15
  • pass
    deps.known_vulnsno known advisory in 100 resolved packages
  • fail
    deps.mcp_sdk_version@modelcontextprotocol/sdk 1.30.1 has 1 known advisory (GHSA-6qxp-vccf-f47h); update @modelcontextprotocol/sdk to 1.31.0 or later
  • pass
    deps.resolvable@livevariant/[email protected] resolved: 100 packages

9 tools, about 4,473 tokens to load them all · tool set c7d81af9eff7 · checked 2026-10-19 10:20 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 94 / 100

provenance90
liveness99
freshness85
hygiene100

+repository +namespace-matches-repo +website +reachable +uptime-98% ~updated-53d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@livevariant/[email protected] npm99 dependencies, resolved · MCP SDK @modelcontextprotocol/sdk 1.30.1 · advisories checked 2026-10-19

advisoryseveritypackagefixed in
GHSA-6qxp-vccf-f47hMCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP serverhigh@modelcontextprotocol/[email protected]MCP SDK, directfixed in 1.31.0

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://livevariant.com/mcp streamable-httpnoneyes98%505 ms2025-11-252026-10-19
packageregistryversionruntimesecrets
@livevariant/mcpnpm0.1.5–LIVEVARIANT_API_TOKEN, LIVEVARIANT_ASSET_UPLOAD_TOKEN

Tools (9)

build_testCreates a LiveVariant test and returns every URL needed to run it, plus a freshly generated stats secret. Pass `variants` to test one element, or `slots` to test several at once (hero image AND call-to-action, say). With slots the test optimizes the COMBINATION: one model learns how the elements interact, which two separate tests structurally cannot see. There is no algorithm to pick either way; every test runs the same joint model, sized from its shape. By default, nothing is registered anywhere: the config IS the test, encoded into the URLs, and the test's identity is a hash of it. Pass `publishableKey` on an account-enabled deployment to also register the new test to that key's organization, so it appears under My tests; the config and URLs are still the test, and registration failure is returned as a warning rather than failing the build. Editing a variant later produces a DIFFERENT test with its own empty history, which is usually what you want per campaign but is worth saying out loud to whoever you are building this for. The stats secret is returned once and never again. Only its hash goes into the config, so nobody, including this service, can recover it. Give it to the person who will read the results.
generate_priorsread-onlyTakes YOUR estimate of how each variant will perform and converts it into the prior the model starts from, so a test does not spend its first visitors rediscovering what you already suspect. You supply the guess; this does the arithmetic and the capping. That capping is the point: a prior is expressed as pseudo-observations, and it is deliberately held weak enough that real data overrides it quickly. The response says exactly how many real visitors per variant it takes to wash your guess out, so you can judge whether you have been too confident. Being wrong here costs a little early traffic, not the test. Priors are outside the identity hash, so the test keeps its id, its URLs and any history it already has. Pass `when` to make the belief hold for ONE segment only ("image B is the one for the blue segment"). Without it the belief is about every visitor, which is a different and much stronger claim.
get_statsread-onlyFetches a test's results and works out what they mean. Alongside the raw counts it returns the probability that each combination is genuinely best and the expected cost of stopping now and keeping the leader. Use those rather than comparing conversion rates by eye: a variant ahead 2/10 to 1/10 looks twice as good and is very close to a coin flip, and that mistake is the single most common way an A/B test gets called wrong. Multi-slot tests also report per-slot marginals: how each variant did across every combination it appeared in. Needs the stats secret. If you have the manage URL, its #fragment IS the secret and it will be used automatically.
get_test_statusread-onlyReports what the deployment's registry knows about a test: whether it is claimed into an account (and by which organization), and whether each redirect destination is a verified domain. Unverified destinations work, but visitors see a 'Redirecting you to…' continue screen first. When you see verified: false, tell the user to verify the domain under Settings on the dashboard; the three ways are a DNS TXT record, serving the well-known file, or having the SDK tag with their publishable key live in the site's source. If the test is unclaimed, remind them the manage URL claims it in one click when opened signed in. Requires the test's stats secret, the same as get_stats. A manage URL's #fragment is used automatically.
inspect_testread-onlyDecodes a test and describes it: slots, variants, context, and whether it can be served by redirect. Also lints it for the mistakes that only show up once a campaign is out, such as an email test whose context comes from geo (which a mail proxy answers about itself). Use this before sending anything, and to answer 'what is this link?'.
list_testsread-onlyLists tests registered to the signed-in account, newest first, with cursor pagination and an optional case-insensitive name filter. Only exists on deployments with accounts, and only answers for an identified caller: unlike every other tool, WHOSE tests these are cannot be expressed as an argument. Each entry carries the encoded config, which inspect_test and get_stats accept directly.
register_testRegisters a test you built earlier to the organization a publishable key belongs to, so it shows under My tests and its stats are readable from the dashboard without the secret. Use this only when the user provides both the test's stats secret and a publishable key for an organization they administer. The stats secret must match the hash inside the config, and the publishable key identifies the organization to register into. Prefer passing publishableKey to build_test directly: it registers at creation in one step. Keyless tests cannot be registered this way (nothing to prove with); they register through the tag on a verified domain. The organization can remove a listing from its dashboard (the test itself keeps serving).
upload_imageUploads an image to the deployment's asset store and returns its URL, for use as a variant's `image` (email tests) or `url`. The returned URL is deliberately not fetchable on its own: assets are only served with a short-lived signature that the serve endpoints mint per request, so uploading here does not create free static hosting. Use `previewUrl` (valid for an hour) to check what was stored. Storage is content-addressed: the id is the sha256 of the bytes, so uploading the same image twice is harmless and returns the same URL. Raster images only; SVG is refused because it can carry scripts. Not every deployment enables asset hosting, and this tool says so plainly when yours does not.
variant_briefread-onlyReturns the constraints to write or generate test variants against, for email or web, plus the rules that decide whether a test can be read at all once it runs. The one that matters most: one idea per slot. To vary two elements, give the test two slots and let it learn the combination, rather than bundling both changes into one variant and never learning which half worked. Ask for this before drafting variants, then produce them yourself against what it returns.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.livevariant/livevariant",
  "title": "LiveVariant",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://livevariant.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.1.5",
  "packages": [
    {
      "version": "0.1.5",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@livevariant/mcp",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "LIVEVARIANT_SERVER_URL",
          "description": "Base URL of a self-hosted LiveVariant deployment. Omit to use the hosted service at https://livevariant.com."
        },
        {
          "name": "LIVEVARIANT_API_TOKEN",
          "isSecret": true,
          "description": "API token for a self-hosted deployment that sets LV_API_TOKEN. Not needed for the hosted service."
        },
        {
          "name": "LIVEVARIANT_ASSET_UPLOAD_TOKEN",
          "isSecret": true,
          "description": "Asset upload token for a deployment with hosted images enabled. Optional."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/livevariant/livevariant",
    "source": "github",
    "subfolder": "packages/mcp"
  },
  "websiteUrl": "https://livevariant.com",
  "description": "Build, inspect and read adaptive A/B tests. Config travels in the URL; no account or API key needed."
}