Skip to main content
Glama
alialtunar

pricing-time-machine-mcp

by alialtunar
README.md
# pricing-time-machine-mcp

<!-- mcp-name: io.github.alialtunar/pricing-time-machine-mcp -->

**See how any SaaS pricing page changed over the years.** An MCP server that reads archived copies of pricing pages from the [Wayback Machine](https://web.archive.org/) and pulls out the plans and prices, so Claude (or any MCP client) can tell you when a competitor raised prices, renamed plans or dropped a free tier.

No API keys. No scraping of live sites. One line to install.

```
You:    How did Notion's pricing change since 2022?
Claude: [compare_pricing → notion.so/pricing, 2022-03 vs latest]
        • Personal Pro ($4/mo billed yearly) is gone; the cheapest paid plan is now
          Plus at $10 per member/month.
        • Team ($8/user/mo) became Business at $20 per member/month: 2.5×.
        • Free is still $0.
```
<sub>Summarized from real tool output: archived copies of 31 Mar 2022 and 7 Sep 2026.</sub>

![Notion pricing in 2022 vs 2026, compared by pricing-time-machine](docs/demo.gif)

## Why

| You want to know | Without it | With pricing-time-machine |
|---|---|---|
| When a competitor raised prices | Click through dozens of Wayback snapshots by hand | `pricing_timeline` lists price periods and every change |
| What their plans looked like in 2021 | Find a snapshot, read the page | `pricing_at` returns prices with plan names and billing hints |
| How a whole market moved | Days of spreadsheet work | `compare_competitors` puts 2-8 pricing pages side by side at any date |

## How it works

```mermaid
flowchart LR
    C[Claude / MCP client] -->|tool call| S[pricing-time-machine-mcp]
    S --> I[Wayback CDX index: which months were archived]
    S --> W[Archived page closest to a date]
    W --> X[Extract prices: amount, currency, /mo /yr, per user, plan guess, context]
    X -->|compact table + page text around prices| C
```

The server does the deterministic part (finding snapshots, extracting prices, grouping periods). The model does the interpretation: which price belongs to which plan and what a change means. Archived pages never change, so they are cached on disk (`~/.cache/pricing-time-machine`).

## Install

Requires [uv](https://docs.astral.sh/uv/).

**Claude Code**
```bash
claude mcp add pricing-time-machine -- uvx pricing-time-machine-mcp
```

**Claude Desktop / Cursor** (`claude_desktop_config.json` / `.cursor/mcp.json`)
```json
{
  "mcpServers": {
    "pricing-time-machine": {
      "command": "uvx",
      "args": ["pricing-time-machine-mcp"]
    }
  }
}
```

## Tools

| Tool | What it does |
|---|---|
| `pricing_timeline` | Reads N archived copies across the years, groups identical prices into periods, lists what was added/removed |
| `pricing_at` | Prices on the page closest to a date, with plan guess, billing hints, context and the page text around them |
| `compare_pricing` | One page at two dates: both price tables plus added/removed prices |
| `compare_competitors` | 2–8 pricing pages side by side at the same date |
| `pricing_snapshots` | Which months/years have an archived copy |

**Prompts:** `pricing_history_report` (one company, the full story with dates), `competitor_pricing` (a market then vs now).

Dates can be `2021`, `2021-06`, `2021-06-15` or `latest`; the closest archived copy is used and its date is always shown.

## Try these

- "How did Slack's pricing change since 2016? Show every price increase in %."
- "Compare the pricing of Notion, Coda and ClickUp today and in 2021."
- "What did Figma charge for Professional in 2019?"
- "Run pricing_history_report for linear.app/pricing."

## Limits (set by the source)

- Only pages the Wayback Machine archived. Most popular pricing pages have monthly copies going back years.
- Pages that draw prices with JavaScript are empty in the archive; the server says so and you can try a nearby date.
- Plan names are guesses from nearby headings; the context column and page text let the model check them.
- archive.org is slow (10–30 s per page) and sometimes briefly offline; the server retries with backoff and caches everything it reads.

## Part of the keyless MCP series

Open-source MCP servers that answer one market question each, with public data and no API keys.

| Server | Question it answers |
|---|---|
| [review-miner-mcp](https://github.com/alialtunar/review-miner-mcp) | What do users hate about competitor apps and games? (App Store + Steam reviews) |
| **pricing-time-machine-mcp** (this one) | How did a SaaS pricing page change over the years? (Wayback Machine) |
| [hn-hiring-trends-mcp](https://github.com/alialtunar/hn-hiring-trends-mcp) | Which skills are tech companies hiring for, and which are rising? (HN Who is hiring) |
| [model-price-radar-mcp](https://github.com/alialtunar/model-price-radar-mcp) | What does each LLM cost, and did it get cheaper? (OpenRouter + price history) |
| [launch-detector-mcp](https://github.com/alialtunar/launch-detector-mcp) | What is a company about to launch? (certificate transparency logs) |

## Development

```bash
uv sync --extra dev
uv run pytest                          # offline tests with a mocked Wayback Machine
uv run python scripts/smoke_live.py    # live check against archive.org (1-3 min)
uv run --with rich python scripts/demo.py notion.so/pricing 2022-03   # terminal demo (vhs docs/demo.tape records the GIF)
npx @modelcontextprotocol/inspector uv run pricing-time-machine-mcp   # click-through UI
```

MIT © Ali Altunar

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation4/5

Each tool has a distinct query shape: listing archive dates, prices at one date, history over a range, two-date comparison, and multi-competitor comparison. There is mild overlap since pricing_at, pricing_timeline, and compare_pricing all return pricing data, but the descriptions make the boundaries (single vs. range vs. two-date vs. multi-page) clear enough to pick correctly.

Naming Consistency4/5

Names split into a coherent pricing_* family (snapshots, at, timeline) for single-page temporal queries and a compare_* family for comparisons, which is readable and predictable. It is not a strict single verb_noun convention (pricing_at is noun_preposition), so it's slightly short of perfect.

Tool Count5/5

Five tools is well-scoped for a niche Wayback pricing-history server, with each tool earning its place by covering a distinct query pattern. No redundant or filler tools.

Completeness5/5

The surface covers the full read-only lifecycle: discovering available dates, reading prices at a point, tracking a single page's history, comparing two dates of the same page, and comparing competitors at a common date. There are no obvious dead ends for the stated purpose.

Maintenance

ActivityNo data
ResponsivenessNo issues