Skip to main content
Glama
xsf0221

Pattern Vista

README.md
<!-- mcp-name: io.github.xsf0221/pattern-vista -->

# Pattern Vista CLI

Command-line access to [Pattern Vista](https://www.pattern-vista.com) — K-line
pattern historical win-rates and MA200 deviation rankings — built to be called
by **AI agents** as easily as by humans.

Output is **JSON by default** (so an agent can parse it directly); add `--table`
for a human-readable view.

## Install

```bash
pip install pattern-vista     # or: uvx pattern-vista whoami
```

## Authenticate

Generate a key at <https://www.pattern-vista.com> (Account → API keys), then:

```bash
pv config set-key pv_live_xxxxxxxx
# or, for ephemeral/agent use:
export PATTERN_VISTA_API_KEY=pv_live_xxxxxxxx
```

Resolution order: `--api-key` flag → `PATTERN_VISTA_API_KEY` → stored config.

## Commands

```bash
pv whoami                       # validate key, show account + tier
pv deviation --over --limit 20  # stocks furthest ABOVE their 200-day average
pv deviation --under            # stocks furthest BELOW (mean-reversion longs)
pv patterns --limit 20          # latest recommended patterns + 20-day win-rate
pv ticker AAPL                  # one symbol: current deviation + recent patterns
pv stretch --days 120           # market breadth: % of the universe above its MA200

# add --table to any command for human output:
pv deviation --under --table
```

### Example (agent-friendly JSON)

```bash
$ pv deviation --under --limit 3
{
  "is_billed": true,
  "rows": [
    {"ticker": "XYZ", "snapshot_date": "2026-05-27", "close": 41.2, "ma200": 58.9, "deviation": -0.3005},
    ...
  ]
}
```

## Free vs. paid

A free account sees the **top 2** rows of each list and patterns without the
historical win-rate. A paid subscription unlocks the full lists (up to 100) and
`hist_win_w20`. The tier is enforced server-side from the key — see
`is_billed` in every response.

## For agents / programmatic use

```python
from pattern_vista import PatternVistaClient

pv = PatternVistaClient(api_key="pv_live_xxxx")
under = pv.deviation("under", limit=20)   # dict: {"is_billed": ..., "rows": [...]}
aapl = pv.ticker("AAPL")
```

The `PatternVistaClient` core has no CLI dependency — it is what backs the MCP
server below, so the two can never return different things.

## Use as an MCP server

The same data as tools your agent can call directly. No install needed if you
have `uv`:

```jsonc
{
  "mcpServers": {
    "pattern-vista": {
      "command": "uvx",
      "args": ["--from", "pattern-vista[mcp]", "pattern-vista-mcp"],
      "env": { "PATTERN_VISTA_API_KEY": "pv_live_xxxxxxxx" }
    }
  }
}
```

Drop that into your MCP client's config (Claude Desktop, Claude Code, Cursor,
or anything else that speaks MCP over stdio). If you would rather install it:

```bash
pip install 'pattern-vista[mcp]'   # then use "command": "pattern-vista-mcp"
```

Or run it in a container. `-i` is required — the transport is stdio, so without
an attached stdin the server has nothing to read and exits straight away:

```bash
docker build -t pattern-vista-mcp .
docker run -i --rm -e PATTERN_VISTA_API_KEY=pv_live_xxxxxxxx pattern-vista-mcp
```

### Tools

| Tool | Answers |
|---|---|
| `market_stretch` | Is the market broadly extended or depressed right now, and how does that rank against its own history? |
| `deviation_ranking` | Which symbols are furthest below (or above) their own 200-day average? |
| `recommended_patterns` | What did last night's scan flag, and has that pattern bucket historically beaten SPY? |
| `ticker_report` | Everything held on one symbol. |
| `account_status` | Which account is this key, and is it on a paid tier? |

Auth resolves exactly as the CLI's does: `PATTERN_VISTA_API_KEY`, else the key
saved by `pv config set-key`. Tiering stays server-side — a free key gets 2 rows
and a null `hist_win_w20`, so check `is_billed` in the response before treating
a short list as a quiet market.

Works with both generations of the MCP Python SDK (`mcp` 1.x's `FastMCP` and
2.x's `MCPServer`).

## Data notes

- **Deviation** = `(close − MA200) / MA200`, refreshed nightly over an S&P 500 +
  Nasdaq 100 + major-ETF universe. Split-distorted and implausible values are
  filtered out before ranking.
- **Market breadth** (`pv stretch`, `market_stretch`) is the share of that same
  universe closing above its own MA200, one reading per trading day, with the
  history behind it. Free for every tier — it is the same number the public
  page at <https://www.pattern-vista.com/market/stretch> publishes.
- **Win-rate** (`hist_win_w20`) is the historical 20-trading-day hit rate of a
  pattern type since 2025-01-01. See the methodology post at
  <https://www.pattern-vista.com/posts/pattern-alpha-backtest>.
- Past performance does not guarantee future results. Not investment advice.

## License

MIT

TDQS

A4.7/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a clearly distinct concern: market-wide breadth, ranked deviation screeners, flagged chart patterns, single-symbol detail, and account status. Even where two tools touch deviation or patterns, one is a ranking and the other is a per-symbol report, so misselection is unlikely.

Naming Consistency5/5

All five tool names follow the same noun-based or noun_phrase convention (market_stretch, deviation_ranking, recommended_patterns, ticker_report, account_status) with no mixing of styles. The pattern is predictable and readable.

Tool Count5/5

Five tools form a compact, well-scoped set for a market breadth and pattern-analysis server. Each tool earns its place without redundancy or bloat.

Completeness4/5

The surface covers market-wide breadth, two ranked screeners, a single-symbol report, and API-key introspection — coherent coverage for the stated domain. Minor gaps exist, such as no direct historical lookup for a specific symbol's deviation or pattern history beyond the latest snapshot, but agents can work around this.

Maintenance

ActivityMaintained
ResponsivenessNo issues