{"name":"com.benawf/mcp","slug":"benawf-mcp","title":"BenAwf","description":"BenAwf remote MCP for Strategy Lab. Streamable HTTP. Paper GA; live venue beta.","url":"https://mcp.market/server/benawf-mcp","rating":null,"grade":"C","score":56,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":1,"ok":1,"last_checked_at":"2026-09-21T13:00:33.751Z","last_ok_at":"2026-09-21T13:00:33.751Z","latency_ms":101},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://benawf.com","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://api.benawf.com/mcp"}],"packages":[],"tools":[{"name":"add_entry_gate","description":"Add one AND entry gate. Args: side + condition JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"side":{"type":"string","enum":["long","short"],"description":"entry.long or entry.short."},"condition":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","const":"comparison"},"left":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","const":"price"},"field":{"type":"string","enum":["open","high","low","close"],"description":"Bar field: open, high, low, or close (default close). Ignored at `lookback: 0` (live ticker). At `lookback >= 1` returns this OHLC field of bar N back — enables wick/rejection patterns (e.g. high pierced a level then close reclaimed)."},"timeframeMinutes":{"type":"integer","description":"Chart timeframe (5, 15, 60, 240, or 1440 minutes) the lookback resolves against. `lookback: 0` returns the live ticker price (timeframe-independent); `lookback >= 1` returns the chosen `field` of bar N back on this timeframe."},"lookback":{"type":"integer","minimum":0,"maximum":20,"description":"How many bars back to look. 0 = latest bar, 1 = one bar ago, etc. Max 20."}},"required":["kind","field","timeframeMinutes","lookback"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"constant"},"value":{"type":"number"}},"required":["kind","value"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"indicator"},"name":{"type":"string","description":"Indicator name. One of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE."},"field":{"type":"string","enum":["value","signal","histogram","upper","middle","lower","poc","vah","val","equilibrium","premium_pct"],"description":"Sub-field for composite indicators: MACD uses signal/histogram, BBANDS uses upper/middle/lower, VOLUME_PROFILE uses poc/vah/val, DEALING_RANGE uses equilibrium/premium_pct. Use value for scalar indicators."},"timeframeMinutes":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."},"lookback":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback"},"params":{"type":"object","properties":{"wing":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}],"description":"Pivot wing for SWING_HIGH/SWING_LOW/BOS/CHOCH/DEALING_RANGE: bars required on each side to confirm a pivot. Default 3. Smaller (1–2) = short-term structure, larger (4–10) = major swings only."},"atrMult":{"anyOf":[{"type":"number","minimum":0.5,"maximum":5},{"type":"null"}],"description":"ATR(14) multiplier for DISPLACEMENT: bar range must exceed atrMult × ATR to count as displacement. Default 1.5."},"lookbackBars":{"anyOf":[{"type":"integer","minimum":10,"maximum":100},{"type":"null"}],"description":"Rolling window length for VOLUME_PROFILE (bars ending at the current closed bar). Default 48. Must fit the entry-rules indicator window (≤100)."}},"required":["wing","atrMult","lookbackBars"],"additionalProperties":false,"description":"Optional indicator parameters (e.g. swing pivot wing, VOLUME_PROFILE lookbackBars). Empty object = defaults."}},"required":["kind","name","field","timeframeMinutes","lookback","params"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"zone"},"zoneType":{"type":"string","enum":["fvg_bull","fvg_bear","ob_bull","ob_bear"],"description":"fvg_bull/fvg_bear = 3-candle fair value gap (imbalance). ob_bull/ob_bear = last opposite-close candle before a displacement bar (order block)."},"state":{"type":"string","enum":["open","tapped","mitigated"],"description":"Which zones to consider: open = untouched, tapped = wick entered but no close through, mitigated = closed beyond the far edge. Default open."},"field":{"type":"string","enum":["top","bottom","mid"],"description":"Zone price level: top or bottom edge, or mid (midpoint — the FVG 'consequent encroachment'). Default mid."},"timeframeMinutes":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe the zone detection runs on: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."},"lookback":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback"}},"required":["kind","zoneType","state","field","timeframeMinutes","lookback"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"derived"},"fn":{"type":"string","enum":["spread","ratio","abs_distance_pct"],"description":"spread = a - b (same units as inputs). ratio = a / b (fails when b is 0). abs_distance_pct = |a - b| / |b| * 100 (percent points — same scale as ATR_PCT and SL/TP)."},"a":{"anyOf":[{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0"},{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/1"},{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/2"},{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/3"}],"description":"First input — a primitive operand (price, indicator, or constant). No nesting."},"b":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/4/properties/a","description":"Second input — a primitive operand (price, indicator, or constant). No nesting."}},"required":["kind","fn","a","b"],"additionalProperties":false}]},"op":{"type":"string","enum":["gt","lt","gte","lte","crosses_above","crosses_below"],"description":"Comparison operator. crosses_above/crosses_below require previous bar context."},"right":{"$ref":"#/properties/condition/anyOf/0/properties/left"}},"required":["kind","left","op","right"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"time_window"},"startUtc":{"type":"string","description":"Window start, inclusive (e.g. \"09:30\" for the New York killzone open)."},"endUtc":{"$ref":"#/properties/condition/anyOf/1/properties/startUtc","description":"Window end, exclusive. Earlier than startUtc = overnight window (e.g. \"02:00\" with start \"22:00\"). Equal to startUtc = always in window."},"timeframeMinutes":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for killzone precision."}},"required":["kind","startUtc","endUtc","timeframeMinutes"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"day_of_week"},"days":{"type":"array","items":{"type":"string","enum":["sun","mon","tue","wed","thu","fri","sat"]},"minItems":1,"maxItems":7,"description":"Allowed UTC weekdays (e.g. omit \"fri\" to skip Friday)."},"timeframeMinutes":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for precision."}},"required":["kind","days","timeframeMinutes"],"additionalProperties":false}],"description":"Translator-shaped entry gate condition."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["side","condition"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"delete_entry_gate","description":"Remove one entry gate by id (from get_experiment). Args: id only. Refuses when it would leave both long and short with zero gates.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":32,"description":"Gate id from get_experiment.rules.entry."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"diff_dsl","description":"Structured rules diff between two @R# iterations (entry gates per side, position, exit, cooldown). Use before adopting an older iteration's levers onto a newer one.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ref_a":{"type":"string","minLength":1,"maxLength":32,"description":"First @R# to compare (older / baseline)."},"ref_b":{"type":"string","minLength":1,"maxLength":32,"description":"Second @R# to compare (newer)."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["ref_a","ref_b"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_backtest","description":"Cache-or-run one sim for an @R# + window, then return Score, trade count, PnL, drawdown, and bounded stats for one run. Numbers only — no BenAwf assessment LLM; you analyze. Same @R# + window → cached @B# (identical stats; follow the comment). After any mutate pass that result's dsl_ref. If you changed rules behind the same R#/draft, or suspect a stale cached @B#, pass force:true to force a fresh sim — never extrapolate from a cached B# of a different rules state.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ref":{"type":"string","minLength":1,"maxLength":32,"description":"@R# to sim. After mutate use that result's dsl_ref, not the Live-rules header."},"force":{"type":"boolean","description":"Skip the cache and force a fresh sim for this @R# + window. Use after any rule change on the same R#/draft, or whenever a cached B# is suspect."},"config":{"type":"object","properties":{"asset":{"type":"string","enum":["BTC","ETH","SOL","XRP","BNB","LTC","LINK","DOGE","PEPE","SHIB","SPY","QQQ","IWM","DIA","VOO","XLF","XLE","XLK","XLV","XLP","XLY","XLU","XLI","XLB","XLRE","XLC","SMH","ARKK","GLD","SLV","TLT","HYG","EEM","AAPL","MSFT","GOOGL","AMZN","NVDA","META","TSLA","AVGO","ORCL","ADBE","CRM","AMD","QCOM","TXN","INTC","INTU","IBM","NOW","AMAT","MU","ARM","MRVL","PANW","CRWD","DDOG","NET","SNOW","PLTR","SMCI","DELL","APP","SHOP","UBER","ABNB","NFLX","COIN","HOOD","PYPL","JPM","BAC","WFC","C","GS","MS","V","MA","AXP","SCHW","BLK","SPGI","CME","COF","UNH","JNJ","LLY","PFE","MRK","ABBV","TMO","ABT","AMGN","ISRG","MDT","BMY","GILD","CVS","WMT","COST","HD","MCD","NKE","SBUX","TGT","LOW","PG","KO","PEP","PM","MO","CL","EL","DIS","BKNG","MAR","CAT","DE","BA","GE","HON","UPS","RTX","LMT","XOM","CVX","COP","SLB","NEE","DUK","SO","F","T","VZ","CMCSA","TMUS","XAUUSD","XAGUSD"],"description":"Single symbol to sim (e.g. BTC)."},"start_date":{"type":"string","format":"date-time"},"end_date":{"type":"string","format":"date-time"},"initial_balance":{"type":"number","exclusiveMinimum":0},"max_drawdown":{"type":"number","minimum":0.01,"maximum":100}},"required":["asset","start_date","end_date","initial_balance","max_drawdown"],"additionalProperties":false,"description":"Window + capital. Omit to reuse the previous run. Do not send empty strings or zeros."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["ref"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_experiment","description":"Prose summary plus rules JSON (entry gates with ids, position, exit, cooldownMinutes) and that iteration's @B# refs. Read before inventing translator-shaped mutate args.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ref":{"type":"string","minLength":1,"maxLength":32,"description":"DSL iteration ref @R# (e.g. R2 or @R2)."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["ref"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_lineage","description":"Champion @R#, per-iteration verdicts, levers tried/untried/failed on champion, converged flag, and user canvas view vs recommended working @R#.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_market_context_by_date","description":"OHLCV and cited indicators around that date (engine lookback each side).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"symbol":{"type":"string","enum":["BTC","ETH","SOL","XRP","BNB","LTC","LINK","DOGE","PEPE","SHIB","SPY","QQQ","IWM","DIA","VOO","XLF","XLE","XLK","XLV","XLP","XLY","XLU","XLI","XLB","XLRE","XLC","SMH","ARKK","GLD","SLV","TLT","HYG","EEM","AAPL","MSFT","GOOGL","AMZN","NVDA","META","TSLA","AVGO","ORCL","ADBE","CRM","AMD","QCOM","TXN","INTC","INTU","IBM","NOW","AMAT","MU","ARM","MRVL","PANW","CRWD","DDOG","NET","SNOW","PLTR","SMCI","DELL","APP","SHOP","UBER","ABNB","NFLX","COIN","HOOD","PYPL","JPM","BAC","WFC","C","GS","MS","V","MA","AXP","SCHW","BLK","SPGI","CME","COF","UNH","JNJ","LLY","PFE","MRK","ABBV","TMO","ABT","AMGN","ISRG","MDT","BMY","GILD","CVS","WMT","COST","HD","MCD","NKE","SBUX","TGT","LOW","PG","KO","PEP","PM","MO","CL","EL","DIS","BKNG","MAR","CAT","DE","BA","GE","HON","UPS","RTX","LMT","XOM","CVX","COP","SLB","NEE","DUK","SO","F","T","VZ","CMCSA","TMUS","XAUUSD","XAGUSD"]},"date":{"type":"string","format":"date-time"},"time_frame":{"type":"number","enum":[1,5,15,30,60,240,1440],"description":"OHLCV timeframe in minutes: 1, 5, 15, 30, 60, 240, 1440."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["symbol","date","time_frame"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_backtests","description":"Open Lab @B# rows with window, assets, trade count, PnL, win rate, drawdown, and tape_stripped.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"iteration_ref":{"type":"string","minLength":1,"maxLength":32,"description":"Optional @R#. Omit to retrieve backtests across all iterations."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"additionalProperties":false,"description":"@B# rows with window, PnL, trades, DD, tape_stripped.","$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_iterations","description":"Open Lab @R# rows as the same dump as Live rules (parent, headline @B#, Long/Position/Exit).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_strategies","description":"Ids, @R# refs, and backtest headlines for strategies not currently open.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","exclusiveMinimum":0},"offset":{"type":"integer","minimum":0},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_trades","description":"One page of fills (20 per page): trade_id, side, prices, PnL.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ref":{"type":"string","minLength":1,"maxLength":128,"description":"Backtest @B# ref (e.g. B3 or @B3)."},"page":{"type":"integer","minimum":1},"sort":{"type":"string","enum":["open_date","pnl"]},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["ref","page","sort"],"additionalProperties":false,"description":"One page of tape fills (20/page).","$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"patch_cooldown","description":"Set root cooldownMinutes. Args: cooldownMinutes number|null. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"cooldownMinutes":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Root cooldownMinutes, or null to clear."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["cooldownMinutes"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"patch_entry_gate","description":"Replace one entry gate by id. Args: id + condition JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":32,"description":"Gate id from get_experiment.rules.entry."},"condition":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","const":"comparison"},"left":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","const":"price"},"field":{"type":"string","enum":["open","high","low","close"],"description":"Bar field: open, high, low, or close (default close). Ignored at `lookback: 0` (live ticker). At `lookback >= 1` returns this OHLC field of bar N back — enables wick/rejection patterns (e.g. high pierced a level then close reclaimed)."},"timeframeMinutes":{"type":"integer","description":"Chart timeframe (5, 15, 60, 240, or 1440 minutes) the lookback resolves against. `lookback: 0` returns the live ticker price (timeframe-independent); `lookback >= 1` returns the chosen `field` of bar N back on this timeframe."},"lookback":{"type":"integer","minimum":0,"maximum":20,"description":"How many bars back to look. 0 = latest bar, 1 = one bar ago, etc. Max 20."}},"required":["kind","field","timeframeMinutes","lookback"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"constant"},"value":{"type":"number"}},"required":["kind","value"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"indicator"},"name":{"type":"string","description":"Indicator name. One of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE."},"field":{"type":"string","enum":["value","signal","histogram","upper","middle","lower","poc","vah","val","equilibrium","premium_pct"],"description":"Sub-field for composite indicators: MACD uses signal/histogram, BBANDS uses upper/middle/lower, VOLUME_PROFILE uses poc/vah/val, DEALING_RANGE uses equilibrium/premium_pct. Use value for scalar indicators."},"timeframeMinutes":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."},"lookback":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback"},"params":{"type":"object","properties":{"wing":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}],"description":"Pivot wing for SWING_HIGH/SWING_LOW/BOS/CHOCH/DEALING_RANGE: bars required on each side to confirm a pivot. Default 3. Smaller (1–2) = short-term structure, larger (4–10) = major swings only."},"atrMult":{"anyOf":[{"type":"number","minimum":0.5,"maximum":5},{"type":"null"}],"description":"ATR(14) multiplier for DISPLACEMENT: bar range must exceed atrMult × ATR to count as displacement. Default 1.5."},"lookbackBars":{"anyOf":[{"type":"integer","minimum":10,"maximum":100},{"type":"null"}],"description":"Rolling window length for VOLUME_PROFILE (bars ending at the current closed bar). Default 48. Must fit the entry-rules indicator window (≤100)."}},"required":["wing","atrMult","lookbackBars"],"additionalProperties":false,"description":"Optional indicator parameters (e.g. swing pivot wing, VOLUME_PROFILE lookbackBars). Empty object = defaults."}},"required":["kind","name","field","timeframeMinutes","lookback","params"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"zone"},"zoneType":{"type":"string","enum":["fvg_bull","fvg_bear","ob_bull","ob_bear"],"description":"fvg_bull/fvg_bear = 3-candle fair value gap (imbalance). ob_bull/ob_bear = last opposite-close candle before a displacement bar (order block)."},"state":{"type":"string","enum":["open","tapped","mitigated"],"description":"Which zones to consider: open = untouched, tapped = wick entered but no close through, mitigated = closed beyond the far edge. Default open."},"field":{"type":"string","enum":["top","bottom","mid"],"description":"Zone price level: top or bottom edge, or mid (midpoint — the FVG 'consequent encroachment'). Default mid."},"timeframeMinutes":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe the zone detection runs on: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."},"lookback":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback"}},"required":["kind","zoneType","state","field","timeframeMinutes","lookback"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"derived"},"fn":{"type":"string","enum":["spread","ratio","abs_distance_pct"],"description":"spread = a - b (same units as inputs). ratio = a / b (fails when b is 0). abs_distance_pct = |a - b| / |b| * 100 (percent points — same scale as ATR_PCT and SL/TP)."},"a":{"anyOf":[{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0"},{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/1"},{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/2"},{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/3"}],"description":"First input — a primitive operand (price, indicator, or constant). No nesting."},"b":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/4/properties/a","description":"Second input — a primitive operand (price, indicator, or constant). No nesting."}},"required":["kind","fn","a","b"],"additionalProperties":false}]},"op":{"type":"string","enum":["gt","lt","gte","lte","crosses_above","crosses_below"],"description":"Comparison operator. crosses_above/crosses_below require previous bar context."},"right":{"$ref":"#/properties/condition/anyOf/0/properties/left"}},"required":["kind","left","op","right"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"time_window"},"startUtc":{"type":"string","description":"Window start, inclusive (e.g. \"09:30\" for the New York killzone open)."},"endUtc":{"$ref":"#/properties/condition/anyOf/1/properties/startUtc","description":"Window end, exclusive. Earlier than startUtc = overnight window (e.g. \"02:00\" with start \"22:00\"). Equal to startUtc = always in window."},"timeframeMinutes":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for killzone precision."}},"required":["kind","startUtc","endUtc","timeframeMinutes"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"day_of_week"},"days":{"type":"array","items":{"type":"string","enum":["sun","mon","tue","wed","thu","fri","sat"]},"minItems":1,"maxItems":7,"description":"Allowed UTC weekdays (e.g. omit \"fri\" to skip Friday)."},"timeframeMinutes":{"$ref":"#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for precision."}},"required":["kind","days","timeframeMinutes"],"additionalProperties":false}],"description":"Translator-shaped replacement condition."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["id","condition"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"patch_exit","description":"Full replace of rules.exit. Args: exit JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"exit":{"type":"object","properties":{"stopLossPercentage":{"anyOf":[{"type":"number","minimum":0,"maximum":100,"description":"Fixed stop/TP distance on the 0–100 scale (original shape)."},{"type":"object","properties":{"source":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","const":"price"},"field":{"type":"string","enum":["open","high","low","close"],"description":"Bar field: open, high, low, or close (default close). Ignored at `lookback: 0` (live ticker). At `lookback >= 1` returns this OHLC field of bar N back — enables wick/rejection patterns (e.g. high pierced a level then close reclaimed)."},"timeframeMinutes":{"type":"integer","description":"Chart timeframe (5, 15, 60, 240, or 1440 minutes) the lookback resolves against. `lookback: 0` returns the live ticker price (timeframe-independent); `lookback >= 1` returns the chosen `field` of bar N back on this timeframe."},"lookback":{"type":"integer","minimum":0,"maximum":20,"description":"How many bars back to look. 0 = latest bar, 1 = one bar ago, etc. Max 20."}},"required":["kind","field","timeframeMinutes","lookback"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"constant"},"value":{"type":"number"}},"required":["kind","value"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"indicator"},"name":{"type":"string","description":"Indicator name. One of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE."},"field":{"type":"string","enum":["value","signal","histogram","upper","middle","lower","poc","vah","val","equilibrium","premium_pct"],"description":"Sub-field for composite indicators: MACD uses signal/histogram, BBANDS uses upper/middle/lower, VOLUME_PROFILE uses poc/vah/val, DEALING_RANGE uses equilibrium/premium_pct. Use value for scalar indicators."},"timeframeMinutes":{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."},"lookback":{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/lookback"},"params":{"type":"object","properties":{"wing":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}],"description":"Pivot wing for SWING_HIGH/SWING_LOW/BOS/CHOCH/DEALING_RANGE: bars required on each side to confirm a pivot. Default 3. Smaller (1–2) = short-term structure, larger (4–10) = major swings only."},"atrMult":{"anyOf":[{"type":"number","minimum":0.5,"maximum":5},{"type":"null"}],"description":"ATR(14) multiplier for DISPLACEMENT: bar range must exceed atrMult × ATR to count as displacement. Default 1.5."},"lookbackBars":{"anyOf":[{"type":"integer","minimum":10,"maximum":100},{"type":"null"}],"description":"Rolling window length for VOLUME_PROFILE (bars ending at the current closed bar). Default 48. Must fit the entry-rules indicator window (≤100)."}},"required":["wing","atrMult","lookbackBars"],"additionalProperties":false,"description":"Optional indicator parameters (e.g. swing pivot wing, VOLUME_PROFILE lookbackBars). Empty object = defaults."}},"required":["kind","name","field","timeframeMinutes","lookback","params"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"zone"},"zoneType":{"type":"string","enum":["fvg_bull","fvg_bear","ob_bull","ob_bear"],"description":"fvg_bull/fvg_bear = 3-candle fair value gap (imbalance). ob_bull/ob_bear = last opposite-close candle before a displacement bar (order block)."},"state":{"type":"string","enum":["open","tapped","mitigated"],"description":"Which zones to consider: open = untouched, tapped = wick entered but no close through, mitigated = closed beyond the far edge. Default open."},"field":{"type":"string","enum":["top","bottom","mid"],"description":"Zone price level: top or bottom edge, or mid (midpoint — the FVG 'consequent encroachment'). Default mid."},"timeframeMinutes":{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe the zone detection runs on: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."},"lookback":{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/lookback"}},"required":["kind","zoneType","state","field","timeframeMinutes","lookback"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"derived"},"fn":{"type":"string","enum":["spread","ratio","abs_distance_pct"],"description":"spread = a - b (same units as inputs). ratio = a / b (fails when b is 0). abs_distance_pct = |a - b| / |b| * 100 (percent points — same scale as ATR_PCT and SL/TP)."},"a":{"anyOf":[{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0"},{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/1"},{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/2"},{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/3"}],"description":"First input — a primitive operand (price, indicator, or constant). No nesting."},"b":{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/4/properties/a","description":"Second input — a primitive operand (price, indicator, or constant). No nesting."}},"required":["kind","fn","a","b"],"additionalProperties":false}],"description":"Operand resolved at rule-fire time (latest fully closed bar). Any indicator, price field, or derived expression."},"op":{"type":"string","enum":["multiply","add"],"description":"multiply = resolved(source) × value; add = resolved(source) + value."},"value":{"type":"number","description":"Multiplier or addend applied after resolving source."},"minPercentage":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"Floor on the resolved 0–100 distance after op. Null disables."},"maxPercentage":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"Ceiling on the resolved 0–100 distance after op. Null disables."},"fallbackPercentage":{"type":"number","minimum":0,"maximum":100,"description":"Fixed 0–100 distance used when source resolves null (indicator warmup)."}},"required":["source","op","value","minPercentage","maxPercentage","fallbackPercentage"],"additionalProperties":false}],"description":"Stop-loss distance from entry on the 0–100 scale, or a dynamic expression resolved at fire time. 0 disables SL."},"takeProfitPercentage":{"anyOf":[{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/0"},{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1"}],"description":"Take-profit distance from entry on the 0–100 scale, or a dynamic expression resolved at fire time."},"partialExitsAt":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"pricePercentage":{"type":"number","exclusiveMinimum":-1,"exclusiveMaximum":1,"description":"Signed decimal move from entry (-1 to 1). Percent as fraction: -0.005 = -0.5%, 0.03 = +3%. Not the 0–100 scale used by stopLossPercentage."},"exitAmountFraction":{"type":"number","exclusiveMinimum":0,"exclusiveMaximum":1,"description":"Fraction of the remaining position to liquidate when this level is hit"}},"required":["pricePercentage","exitAmountFraction"],"additionalProperties":false}},{"type":"null"}],"description":"Ladder of partial exits. Null means no partial exits."},"trail":{"anyOf":[{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},{"type":"null"}],"description":"Trail config: [fire, extend]. Null disables. extend > 0 chains (re-arm after each bump); extend = 0 locks SL at the fire price once then clears. fire = fraction of current TP distance (0–1 exclusive); extend = TP multiplier add-on (0 = fire-price lock one-shot)."},"breakevenAfterMinutes":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Soft TTL: minutes after open at which the engine intervenes. If the trade is in profit, it closes at market to lock in the gain. If underwater, SL moves to break-even. Null disables."},"maxHoldMinutes":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Hard TTL: force close at market after this many minutes regardless of PnL. Null disables."},"signalExit":{"anyOf":[{"type":"object","properties":{"long":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","const":"comparison"},"left":{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source"},"op":{"type":"string","enum":["gt","lt","gte","lte","crosses_above","crosses_below"],"description":"Comparison operator. crosses_above/crosses_below require previous bar context."},"right":{"$ref":"#/properties/exit/properties/signalExit/anyOf/0/properties/long/items/anyOf/0/properties/left"}},"required":["kind","left","op","right"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"time_window"},"startUtc":{"type":"string","description":"Window start, inclusive (e.g. \"09:30\" for the New York killzone open)."},"endUtc":{"$ref":"#/properties/exit/properties/signalExit/anyOf/0/properties/long/items/anyOf/1/properties/startUtc","description":"Window end, exclusive. Earlier than startUtc = overnight window (e.g. \"02:00\" with start \"22:00\"). Equal to startUtc = always in window."},"timeframeMinutes":{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for killzone precision."}},"required":["kind","startUtc","endUtc","timeframeMinutes"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"day_of_week"},"days":{"type":"array","items":{"type":"string","enum":["sun","mon","tue","wed","thu","fri","sat"]},"minItems":1,"maxItems":7,"description":"Allowed UTC weekdays (e.g. omit \"fri\" to skip Friday)."},"timeframeMinutes":{"$ref":"#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes","description":"Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for precision."}},"required":["kind","days","timeframeMinutes"],"additionalProperties":false}]}},"short":{"type":"array","items":{"$ref":"#/properties/exit/properties/signalExit/anyOf/0/properties/long/items"}}},"required":["long","short"],"additionalProperties":false},{"type":"null"}],"description":"Optional indicator-based exit: closes the position at market when these conditions fire (evaluated on the same cadence as entries). Same condition shape as entry blocks. Use for mean-reversion targets (e.g. close crosses VWAP) or thesis-invalidation exits instead of relying only on fixed TP. Null disables."}},"required":["stopLossPercentage","takeProfitPercentage","partialExitsAt","trail","breakevenAfterMinutes","maxHoldMinutes","signalExit"],"additionalProperties":false,"description":"Full replace of rules.exit (not a merge). Every key required — null disables: stopLossPercentage + takeProfitPercentage = 0–100 number OR {source,op,value,fallbackPercentage,minPercentage,maxPercentage}; partialExitsAt = [{pricePercentage, exitAmountFraction}] | null (pricePercentage is a decimal fraction: 0.03 = +3%, NOT the 0–100 SL/TP scale); trail = [fire, extend] | null (fire in (0,1), extend >= 0; NOT {fire,extend}); breakevenAfterMinutes + maxHoldMinutes = number | null; signalExit = {long, short} condition arrays | null. Cooldown lives on the rules root (op=patch_cooldown), not here."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["exit"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"patch_position","description":"Full replace of rules.position. Args: position JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"position":{"type":"object","properties":{"usdAmount":{"type":"number","minimum":0,"description":"Fixed USD notional when the rule fires. Use 0 when sizing via balancePercent."},"balancePercent":{"type":"number","minimum":0,"maximum":100,"description":"Percent of available balance to deploy (0–100 scale) when the rule fires. Use 0 when sizing via usdAmount."},"orderType":{"type":"string","enum":["market","limit"]},"limitPrice":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Limit price when orderType is limit; null for market orders."},"expiresInMinutes":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Limit order TTL in minutes; null when not used."},"usedTechnicalAnalysisIndicators":{"type":"array","items":{"type":"string"},"description":"Indicators that justify this entry (one of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE) — use [] when none. Never list zone types (fvg_bull, fvg_bear, ob_bull, ob_bear); those belong on zone operands."}},"required":["usdAmount","balancePercent","orderType","limitPrice","expiresInMinutes","usedTechnicalAnalysisIndicators"],"additionalProperties":false,"description":"Full replace of rules.position (not a merge). Every key required. usdAmount XOR balancePercent (unused = 0). orderType = market|limit. limitPrice + expiresInMinutes = number | null (null unless limit). usedTechnicalAnalysisIndicators = string[] ([] if none; never zone types)."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["position"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"select_iteration","description":"Load an @R# onto the live canvas so mutate tools edit that iteration.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ref":{"type":"string","minLength":1,"maxLength":32,"description":"@R# to load onto the canvas (usually champion)."},"strategy_id":{"type":"string","minLength":1,"description":"Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."}},"required":["ref"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":56,"grade":"C","scanned_at":"2026-09-21T13:02:00.657Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-21T13:02:00.643Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 2191ms"]},"poisoning":{"score":15,"max":15,"notes":["16 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 5 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://api.benawf.com/mcp","reachable":true,"authRequired":false,"latencyMs":2191,"serverInfo":{"name":"benawf","version":"1.0.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://benawf.com/og-image.png","source":"registry","width":1200,"height":630},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}