Tested statistics of 179 chart and candlestick patterns on six markets, against random bars.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Put 2 to 10 patterns side by side on the same market, timeframe and breakout side.
Pattern ids, slugs or names.
Breakout side. Patterns recorded on both sides have up and down rows and no all row; every other pattern has only all. Default: all.
Market. all pools the markets that have this timeframe. Default: all.
Bar timeframe. Default: 1d. Stocks, ETFs, indices and commodities have 1d and 1w only.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http pattern-stats https://patternswizard.com/mcp/
Put 2 to 10 patterns side by side on the same market, timeframe and breakout side.
| Argument | Type | Description |
|---|---|---|
| side | string | Breakout side. Patterns recorded on both sides have up and down rows and no all row; every other pattern has only all. Default: all. |
| market | string | Market. all pools the markets that have this timeframe. Default: all. |
| patterns* | array | Pattern ids, slugs or names. |
| timeframe | string | Bar timeframe. Default: 1d. Stocks, ETFs, indices and commodities have 1d and 1w only. |
{
"type": "object",
"required": [
"patterns"
],
"properties": {
"side": {
"enum": [
"all",
"up",
"down"
],
"type": "string",
"description": "Breakout side. Patterns recorded on both sides have up and down rows and no all row; every other pattern has only all. Default: all."
},
"market": {
"enum": [
"all",
"crypto",
"forex",
"stocks",
"etf",
"indices",
"commodities"
],
"type": "string",
"description": "Market. all pools the markets that have this timeframe. Default: all."
},
"patterns": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 2,
"description": "Pattern ids, slugs or names."
},
"timeframe": {
"enum": [
"1h",
"4h",
"1d",
"1w"
],
"type": "string",
"description": "Bar timeframe. Default: 1d. Stocks, ETFs, indices and commodities have 1d and 1w only."
}
},
"additionalProperties": false
}How the statistics are computed: principles, the meaning of every field and verdict, and data coverage (assets and date range per market and timeframe).
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Full tested results of one pattern: detection rule, trade rules and every market, timeframe and breakout side measured, with confidence intervals, q-values, verdicts, timing quartiles and the page URL to cite.
| Argument | Type | Description |
|---|---|---|
| side | string | Keep only this breakout side. Default: every side. |
| market | string | Keep only this market. Default: every market. |
| pattern* | string | Pattern id (e.g. engulfing_bullish), page URL or slug, or name (e.g. "bullish engulfing"). |
| timeframe | string | Keep only this timeframe. Default: every timeframe. |
{
"type": "object",
"required": [
"pattern"
],
"properties": {
"side": {
"enum": [
"all",
"up",
"down"
],
"type": "string",
"description": "Keep only this breakout side. Default: every side."
},
"market": {
"enum": [
"all",
"crypto",
"forex",
"stocks",
"etf",
"indices",
"commodities"
],
"type": "string",
"description": "Keep only this market. Default: every market."
},
"pattern": {
"type": "string",
"description": "Pattern id (e.g. engulfing_bullish), page URL or slug, or name (e.g. \"bullish engulfing\")."
},
"timeframe": {
"enum": [
"1h",
"4h",
"1d",
"1w"
],
"type": "string",
"description": "Keep only this timeframe. Default: every timeframe."
}
},
"additionalProperties": false
}List tested patterns with their headline result on one market and timeframe. Filter by name, family, direction or verdict, for example: which chart patterns beat chance on forex 4h. Patterns recorded on both breakout sides have no all row and are not listed: read them with get_pattern_stats.
| Argument | Type | Description |
|---|---|---|
| sort | string | occurrences (default), excess (excess return, best first), trade (expectancy minus its random baseline, best first) or name. |
| limit | integer | Maximum number of patterns returned. Default: 50. |
| query | string | Words of the pattern name, e.g. "engulfing", "head and shoulders". |
| family | string | Pattern family (harmonic patterns are in chart). |
| market | string | Market. all pools the markets that have this timeframe. Default: all. |
| measure | string | move: excess 10-bar return over the rest of the market (verdict). trade: 2:1 trade versus the same trade on random dates (verdictTrade). Default: move. |
| verdict | string | Keep only this verdict (on the measure chosen with measure). |
| direction |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 7, 2026.
| string |
| Expected direction. |
| timeframe | string | Bar timeframe. Default: 1d. Stocks, ETFs, indices and commodities have 1d and 1w only. |
| min_occurrences | integer | Keep only results with at least this many occurrences. |
{
"type": "object",
"properties": {
"sort": {
"enum": [
"occurrences",
"excess",
"trade",
"name"
],
"type": "string",
"description": "occurrences (default), excess (excess return, best first), trade (expectancy minus its random baseline, best first) or name."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Maximum number of patterns returned. Default: 50."
},
"query": {
"type": "string",
"description": "Words of the pattern name, e.g. \"engulfing\", \"head and shoulders\"."
},
"family": {
"enum": [
"candlestick",
"chart"
],
"type": "string",
"description": "Pattern family (harmonic patterns are in chart)."
},
"market": {
"enum": [
"all",
"crypto",
"forex",
"stocks",
"etf",
"indices",
"commodities"
],
"type": "string",
"description": "Market. all pools the markets that have this timeframe. Default: all."
},
"measure": {
"enum": [
"move",
"trade"
],
"type": "string",
"description": "move: excess 10-bar return over the rest of the market (verdict). trade: 2:1 trade versus the same trade on random dates (verdictTrade). Default: move."
},
"verdict": {
"enum": [
"edge_confirmed",
"edge_negative",
"weak_evidence",
"no_edge",
"insufficient_data",
"no_test"
],
"type": "string",
"description": "Keep only this verdict (on the measure chosen with measure)."
},
"direction": {
"enum": [
"bullish",
"bearish",
"neutral"
],
"type": "string",
"description": "Expected direction."
},
"timeframe": {
"enum": [
"1h",
"4h",
"1d",
"1w"
],
"type": "string",
"description": "Bar timeframe. Default: 1d. Stocks, ETFs, indices and commodities have 1d and 1w only."
},
"min_occurrences": {
"type": "integer",
"minimum": 0,
"description": "Keep only results with at least this many occurrences."
}
},
"additionalProperties": false
}