TheStrat MCP
An official MCP server provided by TheStrat LLC that allows AI agents to perform quant price analysis. Agents send their own OHLC bars, and the server returns TheStrat facts including bar scenarios, timeframe continuity, signals with triggers and targets, and simultaneous breaks across baskets. It supports portfolio protection checks based on algorithmic participation evidence.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.thestrat.ai/mcpWhat you can do with it
- Analyze price action scenarios (1, 2, 3) across multiple timeframes
- Identify simultaneous breaks across a basket of assets
- Check portfolio positions against algorithmic selling/buying evidence
- Generate trading signals with trigger, target, and reclaim levels
Source and maintenance
Protocol and capabilities
- Server
- thestrat 0.3.1
- MCP protocol
- 2025-06-18
- Tools
- 16 advertised
- Resources
- 2 advertised
- Resource templates
- 0 advertised
- Prompts
- 2 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
16 advertised
classify_bars
Label every bar as TheStrat scenario 1, 2u, 2d or 3 (Truth #1). Rule: compare each bar with the bar before it. Took the prior high only = 2u. Took the prior low only = 2d. Took both = 3. Took neither = 1 (inside bar). Equal to the prior high/low is NOT a take-out (still a 1). The first bar has no scenario (null). Also returns color, hammer/shooter shape, failed-2 flags (2u red / 2d green = potential 3) and 3u/3d when the bar has first_side data. Use this instead of reading a chart.
{
"type": "object",
"title": "classify_barsArguments",
"required": [
"bars"
],
"properties": {
"bars": {
"type": "array",
"items": {},
"title": "Bars",
"description": "OHLC bars, oldest first. Each bar is an object {t, o, h, l, c, v?} (also accepts open/high/low/close/time) or a row [t, o, h, l, c, v?]. t = bar START time, ISO 8601 (New York time if no offset). Daily bars may use a date only."
}
}
}timeframe_continuity
Full timeframe continuity (FTFC, Truth #2): is the last sale above (up) or below (down) the open of every timeframe in the group, or mixed (conflict)? Returns per-timeframe side, color and aggression (above an open: buyers more aggressive, willing to buy at higher prices; below: sellers more aggressive), state up/down/mixed, override (day and 60 agree against the week/month) and the profit-taking note (only the 60 red). FTFC is a state, not a signal.
{
"type": "object",
"title": "timeframe_continuityArguments",
"required": [
"price",
"opens"
],
"properties": {
"group": {
"type": "string",
"title": "Group",
"default": "standard",
"description": "standard = M W D 60 (default), intraday = 60 30 15 5, investing = Y Q M W, all = Y Q M W D 60 30 15 5."
},
"opens": {
"type": "object",
"title": "Opens",
"description": "Open price of the CURRENT bar per timeframe, e.g. {\"M\": 650.1, \"W\": 662.0, \"D\": 665.2, \"60\": 666.0}.",
"additionalProperties": {
"type": "number"
}
},
"price": {
"type": "number",
"title": "Price",
"description": "The last sale."
}
}
}find_signals
Find TheStrat actionable signals on one timeframe. Patterns: 2-2 reversal, 1-2-2 rev strat, 3-2-2, 2-1-2, 3-1-2, 3-2, hammer, shooter, momo hammer/shooter, inside bar, outside bar reversal (2d-3u / 2u-3d), 1-3 rev strat, 1-3-2, I-O-I. Each signal has: trigger, target (magnitude, null if the pattern has none), level_of_reclaim, invalidation, status, sequence, kind (reversal/continuation) and source_url (the docs page for the rule). Status: setup (trigger not taken), in_force (taken, target not hit, still active), triggered (taken, bar closed, no target), hit_target, failed. Timing: a signal is in force only while its bar is open; D fires stay active until the next session open; the W is closed from Friday close to Monday open.
{
"type": "object",
"title": "find_signalsArguments",
"required": [
"bars"
],
"properties": {
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"bars": {
"type": "array",
"items": {},
"title": "Bars",
"description": "OHLC bars, oldest first. Each bar is an object {t, o, h, l, c, v?} (also accepts open/high/low/close/time) or a row [t, o, h, l, c, v?]. t = bar START time, ISO 8601 (New York time if no offset). Daily bars may use a date only."
},
"timeframe": {
"type": "string",
"title": "Timeframe",
"default": "D",
"description": "Timeframe of the bars: 5, 15, 30, 60, D, W, M, Q or Y."
},
"include_history": {
"type": "boolean",
"title": "Include History",
"default": false,
"description": "Also list older setups and what happened to them (evidence of participation)."
}
}
}exhaustion
Exhaustion risk: how much time is left in the signal's bar (session minutes, wall-clock minutes, sessions left, fraction left), and until when the fire stays active. Docs example: a 60-minute hammer that triggers at 9:32 has 58 minutes; at 10:25 it has 5. Once the bar closes, the signal is gone. The tool reports time; it does not grade it.
{
"type": "object",
"title": "exhaustionArguments",
"required": [
"signal"
],
"properties": {
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"signal": {
"type": "object",
"title": "Signal",
"description": "A signal from find_signals, or {\"timeframe\": \"60\", \"trigger_bar_t\": \"2026-10-23T09:30:00-04:00\"}.",
"additionalProperties": true
}
}
}describe_price
Multi-timeframe price analysis in plain language for one symbol (quant price action, technical signals, timeframe continuity) from your own bars. Returns `text` (one short line per timeframe, e.g. "SPY day: 2u, above the day open (green). Last 3 bars: 2d 1 2u. In force: bullish 2-1-2 ...") and the same facts as JSON: scenario, color, last 3 bars, signals in force, setups, and FTFC (M W D 60). Start here, then quote the text to the user. Hosted server: free, no cooldown. Fair-use limit: 60 calls per minute.
{
"type": "object",
"title": "describe_priceArguments",
"required": [
"symbol",
"bars_by_timeframe"
],
"properties": {
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"symbol": {
"type": "string",
"title": "Symbol",
"description": "Ticker, e.g. SPY."
},
"bars_by_timeframe": {
"type": "object",
"title": "Bars By Timeframe",
"description": "Bars per timeframe, e.g. {\"M\": [...], \"W\": [...], \"D\": [...], \"60\": [...]}. Give at least 3 bars per timeframe; more gives more signals.",
"additionalProperties": {
"type": "array",
"items": {}
}
}
}
}resample_bars
Build higher-timeframe bars from smaller bars (US equities session 09:30-16:00 New York; 60-minute bars start at 09:30; extended hours are dropped; a partial first period is dropped). Each bar gets first_side (which prior side it took first) for 3u/3d.
{
"type": "object",
"title": "resample_barsArguments",
"required": [
"bars",
"to_timeframe"
],
"properties": {
"bars": {
"type": "array",
"items": {},
"title": "Bars",
"description": "OHLC bars, oldest first. Each bar is an object {t, o, h, l, c, v?} (also accepts open/high/low/close/time) or a row [t, o, h, l, c, v?]. t = bar START time, ISO 8601 (New York time if no offset). Daily bars may use a date only."
},
"to_timeframe": {
"type": "string",
"title": "To Timeframe",
"description": "60, 30, 15, D, W, M, Q or Y."
},
"from_timeframe": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "From Timeframe",
"default": null,
"description": "Input timeframe: 1, 5, 15, 30, 60 or D."
}
}
}define_term
Define a TheStrat term with a quote from the docs and its source_url (67-term glossary: definition, machine_rule where the docs state one, status "needs Alex" where the docs conflict). If the term is not in the glossary, returns the best docs_search hits.
{
"type": "object",
"title": "define_termArguments",
"required": [
"term"
],
"properties": {
"term": {
"type": "string",
"title": "Term",
"description": "A TheStrat word, e.g. 'FTFC', 'rev strat', 'level of reclaim'."
}
}
}docs_search
Search TheStrat docs (titles and descriptions from https://thestrat.ai/llms.txt, cached 24 h). Returns title, URL, section and description. Read the URL for detail.
{
"type": "object",
"title": "docs_searchArguments",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 5,
"description": "Max results."
},
"query": {
"type": "string",
"title": "Query",
"description": "Words to find, e.g. 'shooter trigger' or 'full timeframe continuity'."
}
}
}sim_breaks
Simultaneous breaks: find which symbols in a basket broke their setup bar in the same direction in the same bar (2d-2u, 1-2u, 3-1-2u up / 2u-2d, 1-2d down). Quant price action and sector rotation from your own OHLC data, no third-party feed. Docs: "A simultaneous break is multiple correlated assets breaking 2 in the same direction at the same time." No threshold: the count and the % of the basket, ranked. At 80%+ the group gets the label "80%+ concentration: evidence of algorithmic buying (selling) in this group". Returns a ranked list per direction with count, % of basket, symbols, and per symbol the trigger, target and level of reclaim, plus the as-of time and a `text` line to quote.
{
"type": "object",
"title": "sim_breaksArguments",
"required": [
"basket"
],
"properties": {
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Optional ISO time. Use only bars that start at or before this time (replay a past bar)."
},
"basket": {
"type": "object",
"title": "Basket",
"description": "Bars per symbol on ONE timeframe, oldest first: {\"XLE\": [...], \"XOM\": [...], ...}. Same bar format as find_signals. Limits: 60 symbols, 500 bars per symbol (10 to 50 are enough). Swing: a sector ETF + its holdings on W. Intraday: SPY QQQ DIA IWM on 30 or 60.",
"additionalProperties": {
"type": "array",
"items": {}
}
},
"timeframe": {
"type": "string",
"title": "Timeframe",
"default": "W",
"description": "Timeframe of the bars: 5, 15, 30, 60, D, W, M, Q or Y."
},
"strict_setup_bar": {
"type": "boolean",
"title": "Strict Setup Bar",
"default": true,
"description": "True (default): count only the setup bars on the owner list (2d green / 2d hammer for longs, 2u red / 2u shooter for shorts, inside bars both ways). False: any docs reversal setup."
}
}
}sim_setups
Simultaneous setups (before the break): a concentration of setup bars in one direction across a basket of symbols. A technical signals screener on your own data, any timeframe. Docs: "A concentration of signals in the same sector or index identifies a potential simultaneous break: it fires if all of the signals go in force." Returns a ranked list per direction: count, % of basket, symbols, each with trigger, target and level of reclaim.
{
"type": "object",
"title": "sim_setupsArguments",
"required": [
"basket"
],
"properties": {
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Optional ISO time. Use only bars that start at or before this time (replay a past bar)."
},
"basket": {
"type": "object",
"title": "Basket",
"description": "Bars per symbol on ONE timeframe, oldest first: {\"XLE\": [...], \"XOM\": [...], ...}. Same bar format as find_signals. Limits: 60 symbols, 500 bars per symbol (10 to 50 are enough). Swing: a sector ETF + its holdings on W. Intraday: SPY QQQ DIA IWM on 30 or 60.",
"additionalProperties": {
"type": "array",
"items": {}
}
},
"timeframe": {
"type": "string",
"title": "Timeframe",
"default": "W",
"description": "Timeframe of the bars: 5, 15, 30, 60, D, W, M, Q or Y."
},
"strict_setup_bar": {
"type": "boolean",
"title": "Strict Setup Bar",
"default": true,
"description": "True (default): count only the setup bars on the owner list (2d green / 2d hammer for longs, 2u red / 2u shooter for shorts, inside bars both ways). False: any docs reversal setup."
}
}
}sector_analysis
Sector rotation by participation: a sector ETF + its holdings on one timeframe. Returns the ETF's own state (scenario, color, last 3 bars, signals in force), the most-2s split of the holdings (1 / 2u / 2d / 3, 2u red, 2d green), simultaneous breaks and simultaneous setups across ETF + holdings with majority flags, and a `text` summary.
{
"type": "object",
"title": "sector_analysisArguments",
"required": [
"etf",
"basket"
],
"properties": {
"etf": {
"type": "string",
"title": "Etf",
"description": "The sector ETF ticker, e.g. XLE. Include its bars in the basket."
},
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Optional ISO time. Use only bars that start at or before this time (replay a past bar)."
},
"basket": {
"type": "object",
"title": "Basket",
"description": "Bars per symbol on ONE timeframe, oldest first: {\"XLE\": [...], \"XOM\": [...], ...}. Same bar format as find_signals. Limits: 60 symbols, 500 bars per symbol (10 to 50 are enough). Swing: a sector ETF + its holdings on W. Intraday: SPY QQQ DIA IWM on 30 or 60.",
"additionalProperties": {
"type": "array",
"items": {}
}
},
"timeframe": {
"type": "string",
"title": "Timeframe",
"default": "W",
"description": "Timeframe of the bars: 5, 15, 30, 60, D, W, M, Q or Y."
}
}
}signals_in_force
Technical signals in force across a basket: every TheStrat actionable signal whose trigger is taken while its bar is open, grouped by direction and pattern, with % of basket and the trigger, target and level of reclaim per symbol.
{
"type": "object",
"title": "signals_in_forceArguments",
"required": [
"basket"
],
"properties": {
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Optional ISO time. Use only bars that start at or before this time (replay a past bar)."
},
"basket": {
"type": "object",
"title": "Basket",
"description": "Bars per symbol on ONE timeframe, oldest first: {\"XLE\": [...], \"XOM\": [...], ...}. Same bar format as find_signals. Limits: 60 symbols, 500 bars per symbol (10 to 50 are enough). Swing: a sector ETF + its holdings on W. Intraday: SPY QQQ DIA IWM on 30 or 60.",
"additionalProperties": {
"type": "array",
"items": {}
}
},
"timeframe": {
"type": "string",
"title": "Timeframe",
"default": "D",
"description": "Timeframe of the bars: 5, 15, 30, 60, D, W, M, Q or Y."
}
}
}potential_signals_next_bar
Potential signals for the next bar across a basket: every setup whose trigger the next bar (or the open bar) can take, grouped by direction and pattern, with trigger, target and level of reclaim per symbol. A price action watchlist for agents.
{
"type": "object",
"title": "potential_signals_next_barArguments",
"required": [
"basket"
],
"properties": {
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Optional ISO time. Use only bars that start at or before this time (replay a past bar)."
},
"basket": {
"type": "object",
"title": "Basket",
"description": "Bars per symbol on ONE timeframe, oldest first: {\"XLE\": [...], \"XOM\": [...], ...}. Same bar format as find_signals. Limits: 60 symbols, 500 bars per symbol (10 to 50 are enough). Swing: a sector ETF + its holdings on W. Intraday: SPY QQQ DIA IWM on 30 or 60.",
"additionalProperties": {
"type": "array",
"items": {}
}
},
"timeframe": {
"type": "string",
"title": "Timeframe",
"default": "D",
"description": "Timeframe of the bars: 5, 15, 30, 60, D, W, M, Q or Y."
}
}
}buy_sell_list
Buy list and sell list: reversal signals in force across timeframes (technical signals screener on your own data). Buy: hammer, 2d-2u, 3-2u, 1-2u in force. Sell: shooter, 2u-2d, 3-2d, 1-2d in force. Continuations (2u-2u, 2d-2d) do not count. Per timeframe: symbols, count, % of basket, trigger, target and level of reclaim; plus which timeframes each symbol is on.
{
"type": "object",
"title": "buy_sell_listArguments",
"required": [
"basket_by_timeframe"
],
"properties": {
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Optional ISO time. Use only bars that start at or before this time (replay a past bar)."
},
"basket_by_timeframe": {
"type": "object",
"title": "Basket By Timeframe",
"description": "Bars per timeframe, then per symbol: {\"M\": {\"AAPL\": [...], ...}, \"W\": {...}}. Up to 4 timeframes; 60 symbols and 500 bars per symbol each.",
"additionalProperties": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {}
}
}
}
}
}open_decisions
Rules the docs do not state exactly, with the default this server uses. Read this before you present a borderline result as a rule.
{
"type": "object",
"title": "open_decisionsArguments",
"properties": {}
}portfolio_check
Protect-your-assets check for one portfolio, from your own bars: measurable conditions on the losing side of the user's positions, with the evidence. Read the playbook first: MCP resource thestrat://playbooks/protect-portfolio (or the prompt protect_portfolio). Returns (1) the market condition: "Algorithmic buying identified in VIX while algorithmic selling in 4 major indexes" (VIX symbol over its M W D 60 opens, SPY QQQ IWM DIA each under all 4), confirmed or not at a 60-minute close, plus the VIX futures curve state if given; (2) per position, the opens on the holder's losing side (long: under the open = buyers on that timeframe are losing; short: over the open = sellers are losing), reversals in force against the position (buy/sell list rule) and setups against it (trigger not taken), with trigger, target and level of reclaim; (3) concentration: the % of the user's basket (and of each ETF basket) whose current bar took the prior bar's low or high, labelled at 80%+. Each part has `text` to quote and source URLs. Conditions only: not a buy or sell signal. Quote `footer` at the end.
{
"type": "object",
"title": "portfolio_checkArguments",
"required": [
"positions",
"bars_by_timeframe"
],
"properties": {
"now": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Now",
"default": null,
"description": "Current time, ISO 8601. Decides if the last bar is still open. Default: the server clock."
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Optional ISO time. Use only bars that start at or before this time (replay a past bar)."
},
"positions": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "string"
}
},
{
"type": "array",
"items": {}
}
],
"title": "Positions",
"description": "The user's positions: {\"NVDA\": \"long\", \"TSLA\": \"short\"} or [{\"symbol\": \"NVDA\", \"side\": \"long\"}]. Up to 25. Sizes are not needed."
},
"vix_curve": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "number"
}
},
{
"type": "null"
}
],
"title": "Vix Curve",
"default": null,
"description": "Optional VIX futures prices {\"front\": 18.2, \"second\": 19.0}. Front over second = backwardation. Leave out if you have no curve data (the reply then says: no data)."
},
"etf_baskets": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {}
}
}
},
{
"type": "null"
}
],
"title": "Etf Baskets",
"default": null,
"description": "Optional, up to 3: the holdings of an ETF the user owns, {\"WGMI\": {\"IREN\": [...], ...}}, on etf_timeframe. For the concentration check."
},
"etf_timeframe": {
"type": "string",
"title": "Etf Timeframe",
"default": "D",
"description": "Timeframe of the etf_baskets bars: D (default) or W."
},
"bars_by_timeframe": {
"type": "object",
"title": "Bars By Timeframe",
"description": "Bars per timeframe, then per symbol: {\"M\": {\"NVDA\": [...], \"VIXY\": [...], \"SPY\": [...]}, \"W\": {...}, \"D\": {...}, \"60\": {...}}. Each position on the user's timeframes (investor Y; position trader Q M; swing or day trader W D 60). VIX or a VIX ETN (VIXY, VXX, UVXY) and SPY QQQ IWM DIA on M W D 60 for the market condition. The last bar of each timeframe must be the current bar (its open is the open). 60 symbols and 500 bars per symbol per timeframe; 10 to 50 bars are enough.",
"additionalProperties": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {}
}
}
},
"position_timeframes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Position Timeframes",
"default": null,
"description": "The user's timeframes for the positions: [\"Y\"] investor, [\"Q\", \"M\"] position trader, [\"W\", \"D\", \"60\"] swing or day trader. Positions are checked only on these. Ask the user."
}
}
}Prompts
2 advertised
how_thestrat_thinks — How TheStrat thinks
Load TheStrat's way of reading price (Alex Sopa) before you analyze bars with these tools.
protect_portfolio — Protect your assets
Step-by-step playbook: check a user's positions with TheStrat and report the measurable conditions on the losing side, with evidence. Conditions only, no advice.
- positions
- Optional, e.g. 'NVDA long, TSLA short, WGMI long'.
Resources
2 advertised
how-we-think — How TheStrat thinks
How TheStrat reads price, in Alex Sopa's words: participation groups, 80%+ algorithms, trapped traders, stops in previous ranges, timed reversals, and a worked QQQ example with real bars. Read it before you explain a TheStrat result.
thestrat://how-we-thinkprotect-portfolio — Protect your assets (playbook)
Playbook for an agent that watches a user's portfolio with TheStrat: which bars to send, which tools to call, the conditions (VIX vs. the 4 major indexes, the opens on the losing side of each position, signals against it, concentration 80%+), and how to report them as facts, not advice.
thestrat://playbooks/protect-portfolio30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 644 ms
- 95th percentile latency
- 644 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 644 ms · metadata changed · 16 tool(s), 2 resource(s), 0 resource template(s), 2 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http thestrat-mcp https://mcp.thestrat.ai/mcpCodex
codex mcp add thestrat-mcp --url https://mcp.thestrat.ai/mcpCursor
{
"mcpServers": {
"thestrat-mcp": {
"url": "https://mcp.thestrat.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"thestrat-mcp": {
"type": "streamableHttp",
"url": "https://mcp.thestrat.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"thestrat-mcp": {
"type": "http",
"url": "https://mcp.thestrat.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http thestrat-mcp https://mcp.thestrat.ai/mcpClaude Desktop
{
"mcpServers": {
"thestrat-mcp": {
"url": "https://mcp.thestrat.ai/mcp"
}
}
}Windsurf
{
"mcpServers": {
"thestrat-mcp": {
"serverUrl": "https://mcp.thestrat.ai/mcp"
}
}
}Let your agent find its tools
Find servers like TheStrat MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run TheStrat MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.