Pattern Vista
<!-- 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
Scored across 5 tools
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.
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.
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.
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.