stratify / index.html
srinath-exe's picture
Sentence-case the result label; inset the coverage table
e8a4f7f verified
Raw History Blame Contribute Delete
17.5 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Stratify — options backtests over MCP</title>
<meta name="description" content="Backtest NIFTY and SENSEX options strategies from ChatGPT, Claude or any MCP client. The backtest runs on Stratify's server against 372 million real one-minute option bars.">
<link rel="icon" href="assets/icon-64.png">
<style>
@font-face{font-family:"Geist";font-weight:300 800;font-display:swap;src:url(assets/geist.woff2) format("woff2")}
@font-face{font-family:"Geist Mono";font-weight:400 600;font-display:swap;src:url(assets/geist-mono.woff2) format("woff2")}
@font-face{font-family:"Instrument Serif";font-weight:400;font-display:swap;src:url(assets/instrument-serif.woff2) format("woff2")}
:root{--bg:#131313;--surface:#1A1A1A;--surface-2:#232323;--stroke:#2F2F2F;--fg:#FFFFFF;--fg-muted:#BABABA;--fg-subtle:#8E8E8E;--green:#8DDD8D;--good:#0AE448;--bad:#FF5470;
--sans:"Geist",-apple-system,"Segoe UI",Roboto,sans-serif;--mono:"Geist Mono",ui-monospace,SFMono-Regular,Menlo,monospace;--serif:"Instrument Serif",Georgia,serif;--ease:cubic-bezier(.23,1,.32,1)}
*{box-sizing:border-box}
html{color-scheme:dark}
body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.6 var(--sans);-webkit-font-smoothing:antialiased}
a{color:var(--green);text-underline-offset:3px}
:focus-visible{outline:2px solid var(--green);outline-offset:3px;border-radius:6px}
.wrap{max-width:1080px;margin:0 auto;padding:0 16px}
header.top{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 0}
.brand{display:flex;align-items:center;gap:10px;color:var(--fg);text-decoration:none}
.brand img{width:34px;height:34px;border-radius:8px}
.brand span{font:400 1.7rem/1 var(--serif);letter-spacing:.005em}
.tag{font:500 .72rem/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--green);border:1px solid var(--green);border-radius:999px;padding:6px 10px;white-space:nowrap}
.hero{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:40px;align-items:center;padding:40px 0 64px}
h1{font-size:clamp(2.1rem,4.6vw,3.4rem);line-height:1.05;letter-spacing:-.035em;font-weight:650;margin:0 0 18px;text-wrap:balance}
h1 em{font-style:normal;color:var(--green)}
.lede{color:var(--fg-muted);font-size:1.12rem;margin:0 0 26px;max-width:56ch}
.lede strong{color:var(--fg);font-weight:560}
.actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
.btn{display:inline-flex;align-items:center;gap:8px;border-radius:999px;padding:12px 20px;font-weight:600;font-size:.98rem;text-decoration:none;transition:transform .25s var(--ease),background .25s var(--ease)}
.btn.primary{background:var(--green);color:#0E1A0E}
.btn.ghost{border:1px solid var(--stroke);color:var(--fg)}
.btn.ghost:hover{background:var(--surface)}
.btn:active{transform:scale(.97)}
.film{border:1px solid var(--stroke);border-radius:18px;overflow:hidden;background:#000}
.film video{display:block;width:100%;height:auto}
.film figcaption{font:.78rem/1.4 var(--mono);color:var(--fg-subtle);padding:10px 14px;background:var(--surface);border-top:1px solid var(--stroke)}
section{padding:56px 0;border-top:1px solid var(--stroke)}
.eyebrow{font:500 .74rem/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--fg-subtle);margin:0 0 12px}
h2{font-size:clamp(1.5rem,3vw,2.05rem);letter-spacing:-.025em;line-height:1.15;font-weight:620;margin:0 0 14px;text-wrap:balance}
.sub{color:var(--fg-muted);max-width:64ch;margin:0 0 28px}
.flow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.card{background:var(--surface);border:1px solid var(--stroke);border-radius:16px;padding:20px}
.card h3{font-size:1.05rem;margin:0 0 6px;font-weight:600}
.card p{margin:0;color:var(--fg-muted);font-size:.95rem}
.step{font:500 .72rem/1 var(--mono);color:var(--green);letter-spacing:.1em;margin-bottom:12px;display:block}
.copy{display:flex;align-items:stretch;background:var(--surface);border:1px solid var(--stroke);border-radius:10px;overflow:hidden}
.copy pre{margin:0;flex:1;min-width:0;overflow-x:auto;padding:13px 14px;font:13.5px/1.55 var(--mono);color:var(--fg);white-space:pre}
.copy button{flex:none;margin:7px;align-self:flex-start;border:1px solid var(--stroke);background:var(--surface-2);color:var(--fg);font:600 .82rem/1 var(--sans);border-radius:999px;padding:9px 14px;cursor:pointer;transition:background .2s var(--ease)}
.copy button:hover{background:#2c2c2c}
.copy button.done{color:var(--green);border-color:var(--green)}
.tabs{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}
.tabs button{font:500 .88rem/1 var(--sans);color:var(--fg-muted);background:transparent;border:1px solid var(--stroke);border-radius:999px;padding:9px 14px;cursor:pointer;transition:color .2s var(--ease),border-color .2s var(--ease),background .2s var(--ease)}
.tabs button[aria-selected="true"]{color:var(--bg);background:var(--fg);border-color:var(--fg)}
.where{color:var(--fg-muted);font-size:.93rem;margin:0 0 10px}
.panel[hidden]{display:none}
.split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px}
.stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:18px 0 0}
.stat{background:var(--surface-2);border-radius:12px;padding:14px}
.stat b{display:block;font:600 1.25rem/1.2 var(--mono);font-variant-numeric:tabular-nums}
.stat span{font-size:.8rem;color:var(--fg-subtle)}
.pos{color:var(--good)}.neg{color:var(--bad)}
.verdict{margin-top:14px;font:500 .8rem/1.4 var(--mono);color:var(--bad);border:1px solid var(--bad);border-radius:999px;display:inline-block;padding:6px 12px}
table{width:100%;border-collapse:collapse;font-size:.95rem}
th,td{text-align:left;padding:12px 14px;border-bottom:1px solid var(--stroke)}
th{font:500 .74rem/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-subtle)}
td.num{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap}
.tablewrap{overflow-x:auto;border:1px solid var(--stroke);border-radius:14px;background:var(--surface);padding:6px 10px}
ul.plain{margin:0;padding:0;list-style:none;display:grid;gap:10px}
ul.plain li{color:var(--fg-muted);padding-left:22px;position:relative}
ul.plain li::before{content:"";position:absolute;left:4px;top:.62em;width:8px;height:1px;background:var(--fg-subtle)}
footer{border-top:1px solid var(--stroke);padding:28px 0 48px;color:var(--fg-subtle);font-size:.85rem}
footer p{margin:0 0 6px;max-width:80ch}
@media (max-width:860px){.hero{grid-template-columns:1fr;padding-top:16px}.flow,.split{grid-template-columns:1fr}}
@media (max-width:520px){.stats{grid-template-columns:1fr 1fr}.tag{display:none}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
</style>
</head>
<body>
<div class="wrap">
<header class="top">
<a class="brand" href="https://stratify.aeon-labs.site"><img src="assets/icon-256-dark.png" alt="" width="34" height="34"><span>Stratify</span></a>
<span class="tag">Remote MCP server</span>
</header>
<main>
<div class="hero">
<div>
<h1>Backtest NIFTY &amp; SENSEX options by <em>asking your AI</em>.</h1>
<p class="lede">Describe a strategy in plain English to ChatGPT, Claude or any MCP client. The backtest
runs <strong>on Stratify's server, against 372 million real one-minute option bars</strong>, with every
charge a broker would take. Your AI gets the results; option prices never leave the server.</p>
<div class="actions">
<a class="btn primary" href="https://stratify.aeon-labs.site">Get started free</a>
<a class="btn ghost" href="https://github.com/Srinath-exe/stratify-mcp">Source on GitHub</a>
</div>
</div>
<figure class="film" style="margin:0">
<video src="assets/tour.mp4" poster="assets/poster.jpg" controls muted playsinline preload="none"></video>
<figcaption>66 s · ChatGPT and Claude Code, real runs, captions on</figcaption>
</figure>
</div>
<section aria-labelledby="url">
<p class="eyebrow">The server</p>
<h2 id="url">One URL. Add it to the AI you already use.</h2>
<p class="sub">ChatGPT and Claude sign you in with Google when you add it, so they need no key.
Terminal clients use a free key from the site.</p>
<div class="copy"><pre>https://stratify-mcp.aeon-labs.site/mcp</pre><button type="button" data-copy>Copy</button></div>
</section>
<section aria-labelledby="connect">
<p class="eyebrow">Connect</p>
<h2 id="connect">Pick your client</h2>
<p class="sub">For the key-based clients, sign in at <a href="https://stratify.aeon-labs.site">stratify.aeon-labs.site</a>,
make a key, and put it where <code>sk_live_...</code> is.</p>
<div class="tabs" role="tablist" aria-label="Clients">
<button role="tab" aria-selected="true" aria-controls="p-chatgpt" id="t-chatgpt">ChatGPT</button>
<button role="tab" aria-selected="false" aria-controls="p-claude" id="t-claude">Claude</button>
<button role="tab" aria-selected="false" aria-controls="p-code" id="t-code">Claude Code</button>
<button role="tab" aria-selected="false" aria-controls="p-cursor" id="t-cursor">Cursor</button>
<button role="tab" aria-selected="false" aria-controls="p-vscode" id="t-vscode">VS Code</button>
<button role="tab" aria-selected="false" aria-controls="p-codex" id="t-codex">Codex</button>
<button role="tab" aria-selected="false" aria-controls="p-gemini" id="t-gemini">Gemini CLI</button>
<button role="tab" aria-selected="false" aria-controls="p-stdio" id="t-stdio">stdio / Python</button>
</div>
<div class="panel" role="tabpanel" id="p-chatgpt" aria-labelledby="t-chatgpt">
<p class="where">Stratify is a published app in ChatGPT: search for it. Or Settings → Plugins → <em>Create</em> (Developer mode on) and paste the URL.</p>
<div class="copy"><pre>https://stratify-mcp.aeon-labs.site/mcp</pre><button type="button" data-copy>Copy</button></div>
</div>
<div class="panel" role="tabpanel" id="p-claude" aria-labelledby="t-claude" hidden>
<p class="where">claude.ai or Claude Desktop: Settings → Connectors → <em>Add custom connector</em>, paste the URL.</p>
<div class="copy"><pre>https://stratify-mcp.aeon-labs.site/mcp</pre><button type="button" data-copy>Copy</button></div>
</div>
<div class="panel" role="tabpanel" id="p-code" aria-labelledby="t-code" hidden>
<p class="where">Run once in a terminal.</p>
<div class="copy"><pre>claude mcp add --transport http stratify https://stratify-mcp.aeon-labs.site/mcp \
--header "Authorization: Bearer sk_live_..."</pre><button type="button" data-copy>Copy</button></div>
</div>
<div class="panel" role="tabpanel" id="p-cursor" aria-labelledby="t-cursor" hidden>
<p class="where">Add to <code>~/.cursor/mcp.json</code>. If it already has an <code>mcpServers</code> block, add the entry inside it.</p>
<div class="copy"><pre>{
"mcpServers": {
"stratify": {
"url": "https://stratify-mcp.aeon-labs.site/mcp",
"headers": { "Authorization": "Bearer sk_live_..." }
}
}
}</pre><button type="button" data-copy>Copy</button></div>
</div>
<div class="panel" role="tabpanel" id="p-vscode" aria-labelledby="t-vscode" hidden>
<p class="where">Run once in a terminal.</p>
<div class="copy"><pre>code --add-mcp '{"name":"stratify","type":"http","url":"https://stratify-mcp.aeon-labs.site/mcp","headers":{"Authorization":"Bearer sk_live_..."}}'</pre><button type="button" data-copy>Copy</button></div>
</div>
<div class="panel" role="tabpanel" id="p-codex" aria-labelledby="t-codex" hidden>
<p class="where">Add to <code>~/.codex/config.toml</code>.</p>
<div class="copy"><pre>[mcp_servers.stratify]
url = "https://stratify-mcp.aeon-labs.site/mcp"
http_headers = { Authorization = "Bearer sk_live_..." }</pre><button type="button" data-copy>Copy</button></div>
</div>
<div class="panel" role="tabpanel" id="p-gemini" aria-labelledby="t-gemini" hidden>
<p class="where">Run once in a terminal.</p>
<div class="copy"><pre>gemini mcp add -s user -t http stratify https://stratify-mcp.aeon-labs.site/mcp \
-H "Authorization: Bearer sk_live_..."</pre><button type="button" data-copy>Copy</button></div>
</div>
<div class="panel" role="tabpanel" id="p-stdio" aria-labelledby="t-stdio" hidden>
<p class="where">For a client that only speaks stdio, or from a notebook.</p>
<div class="copy"><pre>STRATIFY_API_KEY=sk_live_... npx stratify-mcp
pip install stratify-mcp # Python client, results as pandas DataFrames</pre><button type="button" data-copy>Copy</button></div>
</div>
</section>
<section aria-labelledby="how">
<p class="eyebrow">Where the backtest runs</p>
<h2 id="how">Not inside the AI. On our server, on real data.</h2>
<p class="sub">A chatbot asked how a strategy did will give you a confident, invented answer. With Stratify
connected, the AI only writes the strategy down; the numbers come from replaying it against what the market did.</p>
<div class="flow">
<div class="card"><span class="step">1 · YOUR AI</span><h3>Turns your words into a spec</h3>
<p>Strikes, entry and exit times, stops, rolls. You can see exactly what it sent.</p></div>
<div class="card"><span class="step">2 · OUR SERVER</span><h3>Replays it minute by minute</h3>
<p>289 M NIFTY and 83 M SENSEX one-minute option bars. Brokerage, STT, exchange fees, SEBI, GST, stamp duty, measured slippage, SPAN-style margin.</p></div>
<div class="card"><span class="step">3 · RESULTS ONLY</span><h3>Comes back with a verdict</h3>
<p>Trades, P&amp;L after charges, drawdown, walk-forward folds, an out-of-sample test and a report link.</p></div>
</div>
</section>
<section aria-labelledby="example">
<p class="eyebrow">A real run</p>
<div class="split">
<div>
<h2 id="example">It tells you when a result doesn't hold up.</h2>
<p class="sub" style="margin-bottom:0">“Sell a NIFTY strangle every day for a year, 0.5% from spot, in at 09:20, out at 15:15.”
Charges were 40% of the gross profit, and the strategy failed its out-of-sample test. A backtester that only
brings good news is a slot machine.</p>
</div>
<div class="card">
<p class="eyebrow" style="margin:0;text-transform:none;letter-spacing:.02em">NIFTY · 1 Jul 2025 – 30 Jun 2026 · one lot</p>
<div class="stats">
<div class="stat"><b class="pos">+₹40,940</b><span>net, after charges</span></div>
<div class="stat"><b>₹27,328</b><span>charges</span></div>
<div class="stat"><b>149 / 234</b><span>days won</span></div>
<div class="stat"><b class="neg">−₹14,941</b><span>worst day</span></div>
</div>
<span class="verdict">Out-of-sample: failed</span>
</div>
</div>
</section>
<section aria-labelledby="cov">
<p class="eyebrow">Coverage</p>
<h2 id="cov">What you can test</h2>
<div class="tablewrap"><table>
<thead><tr><th scope="col">Index</th><th scope="col">Free</th><th scope="col">Paid (waitlist)</th></tr></thead>
<tbody>
<tr><td>NIFTY</td><td class="num">1 Jul 2025 – 30 Jun 2026</td><td class="num">1 Jan 2019 – 30 Jun 2026</td></tr>
<tr><td>SENSEX</td><td class="num">1 Jul 2025 – 30 Jun 2026</td><td class="num">7 Aug 2023 – 30 Jun 2026</td></tr>
</tbody>
</table></div>
<p class="sub" style="margin:14px 0 0">Free: 100 backtests an hour. SENSEX options start in August 2023, so no tier claims earlier history.
Strangles, iron condors, iron flies, credit spreads, long options, or your own legs and rules (NIFTY).</p>
</section>
<section aria-labelledby="wont">
<p class="eyebrow">Honest limits</p>
<h2 id="wont">What it won't do</h2>
<ul class="plain">
<li>Tell you what to trade, size a position, or pick a day to act. It answers what happened, not what to do.</li>
<li>Place orders. It only simulates history: one lot, after charges.</li>
<li>Hand over option prices. They stay on the server; your AI gets results.</li>
</ul>
</section>
</main>
<footer>
<p>A historical simulation for research and education. Not investment advice.</p>
<p>ChatGPT, Claude, Codex, Cursor, VS Code and Gemini are trademarks of their owners; Stratify is independent.
· <a href="https://stratify.aeon-labs.site">stratify.aeon-labs.site</a> · <a href="https://github.com/Srinath-exe/stratify-mcp">MIT source</a></p>
</footer>
</div>
<script>
document.querySelectorAll("[data-copy]").forEach(function(b){
b.addEventListener("click",function(){
var t=b.parentNode.querySelector("pre").innerText;
var done=function(){b.textContent="Copied";b.classList.add("done");setTimeout(function(){b.textContent="Copy";b.classList.remove("done")},1600)};
if(navigator.clipboard){navigator.clipboard.writeText(t).then(done,function(){b.textContent="Select it"})}else{b.textContent="Select it"}
});
});
var tabs=[].slice.call(document.querySelectorAll('[role="tab"]'));
function pick(t){tabs.forEach(function(x){var on=x===t;x.setAttribute("aria-selected",on);x.tabIndex=on?0:-1;document.getElementById(x.getAttribute("aria-controls")).hidden=!on});}
tabs.forEach(function(t,i){
t.tabIndex=i?-1:0;
t.addEventListener("click",function(){pick(t)});
t.addEventListener("keydown",function(e){var d=e.key==="ArrowRight"?1:e.key==="ArrowLeft"?-1:0;if(d){var n=tabs[(i+d+tabs.length)%tabs.length];pick(n);n.focus();e.preventDefault()}});
});
</script>
</body>
</html>