Server definition
- Hash
- sha256:f72c26300c7caf56dd68c77bf55b85c4bc3930ac3144f8739cc086b48fc2055b
- What it is
- What a remote MCP server returned when asked what it offers: 6 tools
The blob, as servednamed by its sha256
{
"instructions": "Dantes Exchange — routing guide.\n\nSix tools. Five are free: search_capabilities (find by outcome language, not by our names), get_capability (contract, price, access), get_capability_evidence (how measured it is — call this before relying on a result; it can answer NOT_MEASURED), list_datasets (hosted universes, and their ticker lists), report_gap (when you conclude Dantes cannot do part of what your user asked, name the missing piece in buildable terms — it reaches the operators who add capabilities; never a promise to your user). invoke_capability runs one; a priced one answers an unpaid call with an x402 challenge naming the exact amount, asset, network and recipient, and executes nothing until payment verifies.\n\nPaths are never invented: the only paths you pass are the ones list_datasets publishes (a bars_dir, a screen_path, a calendar_path) and the ones a previous result handed back (symbols_path, anchor_dates_path). Everything else is a hosted universe name or your own symbols.\n\nWhich capability for which question:\n- fresh-coil-scanner: they want US stocks in a tight base, VCP, squeeze, or bullish ascending / right-angled triangle after a real run-up, into horizontal resistance. Confirmed breakout required.\n- long-term-support-scanner: which stocks have given back a large advance and are sitting on long-term support right now — buying the dip, quality on sale, a deep pullback, oversold, 200-week / 200wma / SMA-1000 mean reversion — and specifically a FIRST return to that average after years away from it.\n- zigzag-pullback-screener: which stocks have pulled back off their ALL-TIME high in an A-B-C zigzag whose current pullback sits inside the projected 100%-200% extension box of wave A.\n- trendline-pullback-locator: which names across a universe have pulled back to touch a rising trendline drawn through the last two valid pivot lows and are holding above it, or are within 1% of that line and approaching it.\n- coil-detector: there is ONE named stock and a daily history for it, and the question is whether it forms a valid tight-base (coil) setup right now, or what every such setup in its history was.\n- atr-regime-classifier: how volatile a stock is and what that implies for position sizing, stop distance or risk per trade — or to drop the too-quiet and the too-wild from a candidate list before scanning it.\n- ta-primitives: a specific indicator VALUE or STATE, or a ranking or breadth number over a universe: the core set (SMA/EMA, RSI, ATR, MACD, Bollinger, Donchian, PSAR, CMF, AO, divergence, Fibonacci, 52-week highs and lows), the standard catalog by name (Keltner, Supertrend, Ichimoku, GMMA, Stochastic, StochRSI, Williams %R, CCI, MFI, ADX, Aroon, PPO, Ultimate, Vortex, TRIX, OBV, anchored VWAP, regression channel, Heikin-Ashi, RSI failure swing, candle patterns, Bollinger %B), the PINNED RECIPES (Fisher, RVI, Klinger, Ehlers CG, ALMA, Hull, KAMA, DEMA, TEMA, Elder Force, Mass Index, Chaikin Volatility, VW-MACD, KST, Coppock, TSI, Choppiness, DPO, CMO), and `series` — per-bar algebra for an indicator that has no name here; and the MARKET ATOMS (0.7.0): beta and vs_index against a NAMED index series (index_bars_path from market-series-v1 — GSPC, SPY, NDX, IWM), horizontal_support (a multi-touch flat shelf from confirmed swing lows, retesting_and_holding flag) and falling_trendline_break (a descending resistance line through confirmed swing highs, broke_above flag). One scan takes symbols or a symbols_path from a previous result, ranks and filters on any value or flag, and returns each row with its chart geometry.\n- long-term-support-pullback: there is ONE named stock and a daily history for it, and the question is whether it is at 200-week (SMA-1000) long-term support right now, or every time it has been.\n- contraction-base-detector: there is ONE named stock and ONE date, and the question is whether that structure qualifies as the Dantes contraction base and where it sits in its life cycle — forming, triggered, or not valid.\n- darvas-box-detector: the question names DARVAS BOXES specifically, on one daily series, under a pinned and fully declared convention (252-bar new-high qualification, three-day top and bottom confirmation, close-based breakout).\n- ta-event-study: what happened HISTORICALLY after a defined event — a close-to-close move past a threshold, an opening gap past a threshold, or entry into a calendar month — as measured base rates with their biases named.\n- market-statistics: a name’s historical DOWNSIDE from supplied daily bars — realized volatility, maximum drawdown, every drawdown episode and how long recovery took, large single-day gap-downs, and behaviour inside named stress windows.\n- fundamentals-screen: the screen is by declared NUMERIC FUNDAMENTALS over the hosted universe — EPS and revenue growth, market cap, P/E, PEG, ROE, price to book and tangible book, debt/equity, dividend yield and payout, margins and their trend, and the 26-column ratio catalog (OCF/EV, EV/Sales, cash conversion, net cash, share-count change, gross-margin expansion streak, debt/FCF, Beneish M-Score, working capital, interest coverage, accrual ratio, inventory turns, Piotroski today), and the V5 columns: consecutive quarters of YoY EPS growth, of revenue growth, of ACCELERATING revenue growth, sequential (QoQ) revenue growth, total debt YoY % change, Graham NCAV per share and price/NCAV, the newest EPS and revenue surprise vs the estimate on record (surprise %, above-estimate flag, consecutive quarters above), the provider’s published beta, and short interest as % of float with days to cover dated by FINRA settlement, and ANALYST PRICE TARGETS: upside to the consensus target (each firm’s latest within 365 days), to the recent round (90 days) or to the newest target, vs the latest close, with the firm count (pt_upside_consensus_min, pt_upside_recent_min, pt_upside_latest_min, pt_consensus_firms_min) — plus `derive`, any formula over a row’s columns, and `symbols` / symbols_only:true, which returns EVERY survivor as a symbols_path for the next scan.\n- csp-contract-finder: the question needs REAL option contracts for NAMED US stocks (up to 40): OTM puts for cash-secured puts (side put, buffer and yield knobs), OTM calls for covered calls (side call, min_otm_pct / max_otm_pct — a few percent above spot for a covered call), or a put-financed call (side risk_reversal); expirations 25–52 days out by default (dte_min / dte_max). Each row carries strike, expiration, bid/ask and NBBO-mid premium, open interest, day volume, IV and delta.\n- iv-surface: about a NAMED stock’s implied volatility today: IV rank and percentile, the term structure across expirations, or the expected move to an expiration.\n- option-history-snapshot: what a NAMED stock’s option chain looked like on a PAST date — the strikes and marks as they stood then, for a study or a what-if.\n- options-csp-underwriter: there is ONE proposed cash-secured put with its terms — strike, expiry or DTE, premium — and the question is whether you would be willing to own the underlying at that basis.\n\nThe tape around a name, all free and none of them a setup screen: news-headlines, sec-filings, insider-transactions, earnings-calendar, earnings-results, dividends-calendar, splits-calendar, economic-calendar, market-series, sector-performance, fundamentals-snapshot, analyst-actions, sentiment-layers. analyst-actions is a third party’s firm-attributed opinion and is never a Dantes rating — report it as theirs or not at all. ANALYST PRICE TARGETS are held (since 2026-09-22): analyst-actions returns each firm’s dated targets and a consensus / recent-round / newest summary for named symbols, and \"stocks trading X% below their targets\" is fundamentals-screen pt_upside_consensus_min (or pt_upside_recent_min for the latest round) — say how many firms, which window and the close date, and never present a target as Dantes’ view.\n\nCOMPOSING A STRATEGY — the rules Dantes’ own Ask seat follows, and the same skills follow here:\n1. Search before you refuse. ta-primitives holds the standard catalog by NAME (Keltner, Supertrend, Ichimoku, GMMA, Stochastic, StochRSI, Williams %R, CCI, MFI, ADX, Aroon, PPO, Ultimate, Vortex, TRIX, OBV, anchored VWAP, regression channel, Heikin-Ashi, RSI failure swing, candles, Bollinger %B) and the PINNED RECIPES (Fisher, RVI, Klinger, Ehlers CG, ALMA, Hull, KAMA, DEMA, TEMA, Elder Force, Mass Index, Chaikin Volatility, VW-MACD, KST, Coppock, TSI, Choppiness, DPO, CMO); fundamentals-screen filters by name on 26 ratio columns. A name you have not looked for in get_capability is not missing.\n2. A held name runs BY NAME with the caller’s parameters — never rewrite its formula. A recipe rebuilt from memory came out at half of Ehlers’ Fisher once; the pinned one is verified against a second implementation.\n3. A name that is NOT held is built one level lower: ta-primitives `series` is per-bar algebra over open/high/low/close/volume/hl2/hlc3 with sma ema wma highest lowest stdev shift change cumsum atr tr rsi and arithmetic (a Keltner upper band is \"ema(close,20) + 2*atr(10)\"; Elder Force is \"ema(change(close,1)*volume,13)\"); fundamentals-screen `derive` is any formula over a row’s columns. What you build there is YOUR construction: report it as your formula, never as the inventor’s definition or \"the standard build\". Refuse only when the atoms themselves are absent (a data column the book does not hold, a history it does not keep) and say which atom.\n4. A fundamental leg plus a technical trigger is THREE calls, and lists travel by reference: (a) fundamentals-screen with the filters and symbols_only:true returns EVERY survivor as symbols_path; (b) if the trigger needs a per-name date, ONE earnings-calendar call with that symbols_path returns anchor_dates_path; (c) ONE ta-primitives scan with symbols_path, the named indicator (avwap with anchor_dates_path, or any catalog name) and rank.filters on its flag, e.g. {metric:\"avwap_by_symbol.tested_and_held\", op:\"eq\", value:1} — the qualifying names come back with values and chart geometry in one result. Never retype hundreds of tickers, never chunk a list across calls, never a per-name loop, never test \"the 20 largest\" and call it the answer.\n5. The technical leg runs over the fundamental survivors LAST, on the FULL bar corpus (us-equity-bars-full-v1 bars_dir), so no survivor is dropped for thinness; the liquid universe is the default only for a market-wide sweep with no list.\n7. Against the market means against an INDEX SERIES: beta and 6-month relative strength vs the S&P are ta-primitives beta / vs_index with index_bars_path = the market-series-v1 bars file list_datasets names (GSPC for the S&P 500); relative_strength without an index is universe-relative and is a different number. Short interest is fundamentals-screen short_interest_pct_float_min/max, dated by its settlement — roughly two weeks old by construction, say so. Premarket and intraday volume are not held anywhere on this endpoint: refuse, do not approximate with daily bars.\n9. OPTIONS DATA EXISTS: a licensed live chain for named US stocks is csp-contract-finder (puts, covered calls with side:\"call\" and a small min_otm_pct, put-financed calls), IV readings are iv-surface, a past chain is option-history-snapshot, and options-csp-underwriter scores ONE contract taken from the chain — never a strike you made up. A token is required; never tell a user there is no options data. Report an underwriter verdict as the rating plus one plain line per failed rule (what the contract has vs what the rule wants, from its vetoes and cautions) — never its numeric score, dimensions or weights: the reasons are the trader’s, the method is the author’s.\n8. A wall is reported, not swallowed: when the atom is truly absent (no data column, no history, no index series), call report_gap with the missing piece in buildable terms and what you CAN do, then tell your user the same — recorded, never promised.\n10. MARKET FEAR IS HELD, BY NAME (2026-09-23): \"is fear extreme right now\", \"how stretched is the VIX curve\", \"are puts bid\", \"is credit stressed\" is sentiment-layers with series_path = the sentiment-series-v1 series file list_datasets names — z-scores of the VIX term structure (ln VIX/VIX3M), the CBOE total put/call ratio and a high-yield credit PRICE PROXY (ln IEF/HYG, not a spread) against their own trailing year, one fear composite with a declared band, the window’s most- and least-fearful sessions. Market-level, end-of-day, dated; it says how unusual today is, never what follows — no forward-return claim is attached. Positioning and attention layers per name are not held yet: report that wall, do not proxy it from headlines.\n6. Flags filter inside the scan: rank.filters read any depth of a value (candles_3.last_bar.hammer, supertrend_10_3.just_flipped_bullish) with booleans as 1/0 and ops eq/ne — not by hand afterwards.\nWorked example, live and free on this endpoint (2026-09-08, 332 survivors → 44 names in ~5 s): invoke_capability fundamentals-screen {screen_path: <fundamentals-current-v1 paths.screen_path>, as_of, filters:{revenue_growth_yoy_min:15, market_cap_min:2e9, market_cap_max:1e10}, symbols_only:true} → result.symbols_path; invoke_capability earnings-calendar {calendar_path: <earnings-calendar-v1 paths.calendar_path>, as_of, symbols_path, horizon_days:120} → result.anchor_dates_path; invoke_capability ta-primitives {bars_dir: <us-equity-bars-full-v1 paths.bars_dir>, symbols_path, as_of, indicators:[{name:\"avwap\", anchor_dates_path}, {name:\"hull\", period:20}], rank:{by:\"avwap_by_symbol.distance_pct\", filters:[{metric:\"avwap_by_symbol.tested_and_held\", op:\"eq\", value:1}], limit:50}} → rank.rows, each with values and geometry.\n\nDistinctions that are easy to get wrong:\n- One named stock vs a universe: coil-detector takes one history; fresh-coil-scanner screens a universe in one billable run.\n- 200-WEEK is not 200-day. long-term-support-scanner is the 200-week (SMA-1000) only.\n- A value is not a setup. ta-primitives computes indicators and carries no outcome evidence; the screeners own their geometry and a filter rebuilt from primitives is a different screen.\n- A volatility band is not a signal, and its right tail may not be quoted without its downside.\n\nNot encoded on this endpoint: head and shoulders, double top / double bottom, flags and pennants, wedges, gap-and-go, earnings-reaction screens. There is no capability for these — say so rather than approximating one with a screen that looks for different geometry. Divergence LEFT this list on 2026-09-06: ta-primitives now carries a generic price/indicator divergence (MACD histogram, RSI, CMF), and the creator-published 5-wave AO divergence detectors cover AO. This list is curated and can lag a creator-driven catalog — when a capability search finds a skill this list claims absent, the search wins and the list is the defect.\n\nA scan is the commercial unit. A scan that ran and returned zero names is a completed, billable run and a real answer — not an error and not a reason to retry with a wider net.",
"tools": [
{
"description": "WHEN: Use when you already have a capability id and need schema, price, and when-to-use before paying.\n\nNOT for: Do not use to execute the scan.\n\nReturns: The full manifest — input and output schema, support envelope, limitations — plus the price and access class on THIS endpoint, and the routing block.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_capability",
"outputSchema": null
},
{
"description": "WHEN: Use when you need the dated forward-return pack for a listed skill (n, window, as-of).\n\nNOT for: Do not use as a live scan and do not treat evidence as today’s hits.\n\nReturns: Semantic evidence (does it do what it says) kept strictly separate from historical economic evidence (what was measured about the population it describes) — never combined into a score. Universe-relative and vs-benchmark figures appear only where they were actually measured; a capability with no economic measurement returns NOT_MEASURED rather than a borrowed figure.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"id": {
"description": "Capability id",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_capability_evidence",
"outputSchema": null
},
{
"description": "WHEN: Use when you have chosen a listed skill, the user wants names that match it now, and you are ready to pay.\n\nNOT for: Do not use for quotes, news, or a chart pattern nowhere on this endpoint (head-and-shoulders — say we don’t have that). Do not refuse a NAMED indicator before get_capability ta-primitives has been read, and do not rebuild a held recipe from memory: the composing rules in the routing guide apply to every call here.\n\nReturns: { ok, result } or { ok: false, error }. A priced capability answers an unpaid call with an x402 PaymentRequired naming the exact amount, asset, network and recipient; nothing executes and nothing is charged until a payment verifies. A scan that ran and returned zero names is a completed billable run, not an error.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"id": {
"description": "Capability id",
"type": "string"
},
"input": {
"additionalProperties": {},
"description": "Input conforming to the capability's input_schema",
"type": "object"
}
},
"required": [
"id",
"input"
],
"type": "object"
},
"name": "invoke_capability",
"outputSchema": null
},
{
"description": "WHEN: Use when you need what universes / as-of books a skill can run on.\n\nNOT for: Do not use to fetch prices or news.\n\nReturns: The published datasets with their as-of dates and the universes they enumerate; with a `universe` argument, the member ticker list itself. Raw dataset files are never returned.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"dataset": {
"description": "Dataset name, when the endpoint publishes more than one.",
"type": "string"
},
"eligible_only": {
"description": "SECULAR_TREND only — restrict to members that also pass the LIQUID_VOLATILE mechanical gates.",
"type": "boolean"
},
"format": {
"description": "\"full\" (default) returns member records with metadata, paged. \"symbols\" returns the complete ticker list in one cheap response.",
"enum": [
"full",
"symbols"
],
"type": "string"
},
"limit": {
"description": "Members per page for format \"full\" (default 250, max 1000).",
"type": "number"
},
"offset": {
"description": "Page offset for format \"full\".",
"type": "number"
},
"theme": {
"description": "SECULAR_TREND only — restrict to one secular theme id.",
"type": "string"
},
"universe": {
"description": "Enumerate the members of one universe. Omit to list datasets and see which universes are available.",
"enum": [
"LIQUID_VOLATILE",
"SECULAR_TREND"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_datasets",
"outputSchema": null
},
{
"description": "WHEN: Use when you concluded, after search_capabilities and get_capability, that Dantes cannot do part of what your user asked — name the missing data column, indicator, history or composition in buildable terms, and what Dantes CAN do of the ask.\n\nNOT for: Do not use for a capability that exists and refused your input shape (read its schema and retry), and do not tell your user the gap will be built or when — it is recorded for the operators, never promised.\n\nReturns: { ok, recorded } — the missing pieces as written to the operators’ gaps board, free, or { ok: false } with the reason.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"capabilities_tried": {
"items": {
"maxLength": 60,
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"could_do": {
"maxLength": 400,
"type": "string"
},
"missing": {
"items": {
"maxLength": 200,
"minLength": 3,
"type": "string"
},
"maxItems": 6,
"minItems": 1,
"type": "array"
},
"question": {
"maxLength": 400,
"minLength": 8,
"type": "string"
}
},
"required": [
"question",
"missing"
],
"type": "object"
},
"name": "report_gap",
"outputSchema": null
},
{
"description": "WHEN: Use when the user named a setup in trader language and you need to know which Dantes skill matches.\n\nNOT for: Do not use to run a scan or to invent a skill we do not list.\n\nReturns: Matching capability ids, each with its price, what it takes to run it, and its own when / not_for / returns — plus `not_encoded`, the setups this endpoint does not have.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"category": {
"type": "string"
},
"query": {
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_capabilities",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:f72c26300c7caf56dd68c77bf55b85c4bc3930ac3144f8739cc086b48fc2055b | sha256sum