Skip to main content
Glama
vom-core

storelift-mcp

README.md
# storelift-mcp

App Store & Google Play ranking data as an MCP server. Ask your assistant which
keywords you dropped on, who outranks you, and whether AI assistants mention
your app at all — without opening a dashboard.

Backed by [Storelift](https://storelift.net), which measures keyword
ranks, rivals and AI visibility nightly. **No store credentials required** —
ranks are read from the public storefront.

## Requirements

- A **Pro** or **Studio** plan (the Public API is enabled on both)
- An API key: Storelift → Settings → API keys → **Generate key**

## Install

Claude Code:

```bash
claude mcp add storelift -e STORELIFT_API_KEY=sl_live_... -- npx -y storelift-mcp
```

Claude Desktop (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "storelift": {
      "command": "npx",
      "args": ["-y", "storelift-mcp"],
      "env": { "STORELIFT_API_KEY": "sl_live_..." }
    }
  }
}
```

Hosted, with nothing to install — `https://storelift.net/mcp` over Streamable
HTTP. Clients that support MCP authorization (Claude.ai custom connectors,
Claude Code's `/mcp`) sign you in to Storelift with OAuth and ask you to approve
access; no key to paste:

```bash
claude mcp add --transport http storelift https://storelift.net/mcp
```

Clients without OAuth can send the API key as a header instead:

```bash
claude mcp add --transport http storelift https://storelift.net/mcp --header "Authorization: Bearer sl_live_..."
```

## Tools

| Tool | Returns |
|---|---|
| `list_apps` | tracked apps (id, name, countries, keywords) |
| `get_keywords` | keyword ranks for one app in one country |
| `get_rivals` | apps ranking **above** you, with their rank and yours |
| `get_ai_visibility` | whether assistants name your app, per engine (Claude / ChatGPT / Gemini) |
| `get_history` | rank history, `[day, rank]` points |
| `get_store_page` | your own listing signals + the Google Play page, with a dated change timeline |
| `get_reviews` | recent App Store and Google Play reviews, and how many are new since last measurement |
| `get_charts` | App Store chart position per list, with history |

## Prompts

Five ready-made questions, served through `prompts/list`:

- `keywords_lost_ground` — which US keywords lost ground this week, and who is above you now
- `leader_listing` — title, subtitle and keyword field of the app ranking first on your main keyword
- `crash_reviews` — recent reviews that mention a crash or a bug
- `category_chart` — where your app sits in its category chart in Turkey
- `ai_visibility` — whether assistants name your app for its category (data on the Studio plan)

## Reading the data

Keyword results carry **three distinct states**, and they are not the same thing:

- `measured: false` — the query **could not be measured**
- `rank: null` (with `measured: true`) — measured, but **absent** from the top results
- `rank: <number>` — the rank

Counting an unmeasured day as zero produces a false chart. The tool descriptions
repeat this so the model does not flatten the three into one.

A rank move usually has its explanation somewhere other than the rank: a version
that shipped that day, a wave of one-star reviews, a chart drop. `get_store_page`,
`get_reviews` and `get_charts` exist so the model can look there instead of
explaining everything with the one number it can see.

Google Play is absent from `get_charts` on purpose: Google publishes no chart
list, so there is nothing to read and a number here would be invented.

AI visibility is an **observation, not a ranking**: a model's knowledge is frozen
at a date and the answer is not identical every time. Read the trend, not a
single measurement.

## Configuration

| Variable | Default | Purpose |
|---|---|---|
| `STORELIFT_API_KEY` | — | required for tool calls; without it the server still starts and lists its tools, and every call returns an error saying how to get a key |
| `STORELIFT_API` | `https://storelift.net` | override the API base |

No dependencies — a single file speaking JSON-RPC over stdio. Runs with
`node index.mjs` just as well as through `npx`.

## Registry

Published to the official MCP Registry as `net.storelift/storelift`.
The manifest is [`server.json`](./server.json) in this repo.

## Source

[github.com/vom-core/storelift-mcp](https://github.com/vom-core/storelift-mcp) —
one file, no dependencies. Read it before you run it.

## License

MIT

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct data resource: apps, AI visibility, keyword ranks, rivals, rank history, store listing, reviews, and charts. Even the two ranking-related tools are clearly separated as current vs historical, and get_rivals vs get_charts have unique purposes.

Naming Consistency5/5

Seven tools use get_<resource> and one uses list_apps, a natural exception for enumerating all apps. All names are snake_case verb_noun pairs that are consistent and predictable.

Tool Count5/5

8 tools is well-scoped for an app store analytics server; each tool covers a distinct measurable signal and none feels redundant. The set is neither too thin nor overloaded.

Completeness5/5

The surface covers the core Storelift workflow: enumerate apps, then inspect keyword ranks, history, rivals, store page, reviews, charts, and AI visibility. As a read-only analytics server, the lack of create/update/delete operations is not a gap.

Maintenance

ActivityMaintained
ResponsivenessNo issues