Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

sh.kwant/kwant

REMOTE · KWANT.SH · SCANNED SEP 26

Quant intelligence over MCP: backtest, signals, screens, scores & portfolios for US & TSX stocks.

Available components

0 this week 74 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability55
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 3215 tokens (~200/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 16 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the sh.kwant/kwant MCP server?

sh.kwant/kwant is a hosted endpoint at https://kwant.sh/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · kwant.sh

# add to Claude Code
claude mcp add --transport http sh-kwant-kwant 'https://kwant.sh/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "sh-kwant-kwant": {
      "url": "https://kwant.sh/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "sh-kwant-kwant": {
      "type": "http",
      "url": "https://kwant.sh/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.sh-kwant-kwant]
url = "https://kwant.sh/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sh-kwant-kwant": {
      "type": "remote",
      "url": "https://kwant.sh/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add sh-kwant-kwant --url 'https://kwant.sh/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  sh-kwant-kwant:
    url: "https://kwant.sh/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "sh-kwant-kwant": {
      "Transport": "http",
      "Url": "https://kwant.sh/mcp"
    }
  }
}
# add to Vellum
assistant mcp add sh-kwant-kwant -t streamable-http -u 'https://kwant.sh/mcp'
// mcp.json
{
  "mcpServers": {
    "sh-kwant-kwant": {
      "type": "http",
      "url": "https://kwant.sh/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Aug 26 0
    • Stability: 0.97 → pass security
  • 11 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 31 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 27 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 0

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 26 Sept 2026 · Probed https://kwant.sh/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=kwant.sh CN=WE1,O=Google Trust Services,C=US 29 Aug 2026 27 Nov 2026 ECDSA 256 ECDSA-SHA256 a239c1ea315386d90eb00867111f1a27
SANs: kwant.sh, *.kwant.sh
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of kwant.sh. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
sh. present 55297 8 Verified
kwant.sh. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=15552000; includeSubDomains
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://kwant.sh/mcp Verified 200
http (plaintext) http://kwant.sh/mcp HTTPS enforced 301 https://kwant.sh/mcp
MCP tools · 16 exposed · ~2,974 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
backtest ~119

Backtest a simple long-only technical strategy on daily price history. Strategies: sma_cross (golden/death cross of SMA 50/200), rsi_reversion (enter RSI<30, exit RSI>70), macd_cross (MACD line vs signal). No-lookahead: signals act on the next bar's close. Returns trades + performance metrics. (paid: $0.0100/call)

NameTypeReqDescription
params–––
rangestring––
strategystringyes–
tickerstringyes–

No output schema declared.

No examples provided.

build_monthly_universe ~298

Rank a universe of tickers by monthly dollar volume with trailing returns. Resolves either a named universe (SP500, TSX) or an explicit tickers override, bulk-fetches daily OHLCV over range, resamples each to monthly bars (open=first, high=max, low=min, close=last, volume=sum), and per ticker computes trailing returns over 1/3/6/12 periods plus the latest monthly dollar volume (close * volume). Tickers are ranked by latest dollar volume (descending) and the top top_n are returned. Tickers that fail to fetch or lack enough monthly history are skipped and noted in warnings. range is the lookback (5d,1mo,3mo,6mo,1y,2y,5y,max; default 2y); use a multi-year window so the 12-month horizon is well-defined. values holds range, as_of (latest monthly date, YYYY-MM-DD), count, and results — a ranked list of {ticker, dollar_volume, returns: {1m,3m,6m,12m}, rank} where any horizon longer than the available history is null. (paid: $0.0100/call)

NameTypeReqDescription
rangestring––
resamplestring––
tickersarray––
top_ninteger––
universestring––

No output schema declared.

No examples provided.

compare_tickers ~117

Rank two or more tickers against each other by a single metric (total_return, volatility, sharpe, max_drawdown, last_price). Symbols that cannot be resolved (or lack enough history) are skipped and noted in `warnings` rather than failing the call. Returns a ranked list of {ticker, value, rank, currency} (rank 1 = best). (paid: $0.0050/call)

NameTypeReqDescription
metricstring––
rangestring––
tickersarrayyes–

No output schema declared.

No examples provided.

compute_correlation_matrix ~144

Compute the pairwise return-correlation matrix for a list of tickers. Fetches each ticker's daily history over range, converts it to daily returns, and computes the pairwise Pearson correlation (aligned on shared dates). Requires at least two tickers; tickers that cannot be fetched are dropped and noted in warnings (at least two must survive). Returns the standard envelope; values holds range, the tickers used, and matrix — a nested dict {rowTicker: {colTicker: correlation}} with a 1.0 diagonal. (paid: $0.0100/call)

NameTypeReqDescription
rangestring––
tickersarrayyes–

No output schema declared.

No examples provided.

compute_indicator ~363

Compute a technical indicator (RSI, MACD, SMA, EMA, BBANDS, ATR, ADX, STOCH) over a ticker's price history. Returns the warmup-aligned series plus the latest values and a one-line summary. Tune the window with `length` (SMA/EMA/RSI/ATR/ADX/BBANDS), `fast`/`slow`/`signal` (MACD), `std` (BBANDS), or `k`/`d`/`smooth_k` (STOCH) — pass them either as top-level fields OR nested under `params`; both work. `window` and `period` are accepted as aliases for `length`. NOTE: for a long window like SMA(200) you MUST set length=200 (the default is 20). The response echoes the effective params it used, and the summary shows the window, e.g. `SMA(200)`. Ensure `range` spans at least `length` bars (e.g. range=2y for SMA(200)) or the series is all-warmup NaN. (paid: $0.0050/call)

NameTypeReqDescription
dnumber|string––
fastnumber|string––
indicatorstringyes–
intervalstring––
knumber|string––
lengthnumber|string––
params–––
periodnumber|string––
rangestring––
signalnumber|string––
slownumber|string––
smooth_knumber|string––
stdnumber|string––
tickerstringyes–
windownumber|string––

No output schema declared.

No examples provided.

compute_portfolio_stats ~169

Compute portfolio-level statistics for a weighted basket of tickers. Given a {ticker: weight} mapping, fetches each ticker's daily history over range and returns the portfolio-level (not per-ticker) volatility, sharpe, max_drawdown and total_return of the weighted basket. weights need NOT sum to 1 (normalized internally). Tickers that cannot be fetched are dropped, a note is added to warnings, and the remaining weights are renormalized. risk_free_rate is an annual rate used only by Sharpe. Returns the standard envelope; values holds range, the normalized weights used, and the stats dict. (paid: $0.0100/call)

NameTypeReqDescription
rangestring––
risk_free_ratenumber––
weightsobjectyes–

No output schema declared.

No examples provided.

compute_stats ~130

Compute quantitative statistics (volatility, sharpe, max_drawdown, returns, beta, correlation) over a ticker's daily price history. Omit `metrics` to default to volatility/sharpe/max_drawdown/returns. `beta` and `correlation` require a `benchmark` ticker; `risk_free_rate` is used only by the Sharpe ratio. (paid: $0.0050/call)

NameTypeReqDescription
benchmarkstring|null––
metrics–––
rangestring––
risk_free_ratenumber––
tickerstringyes–

No output schema declared.

No examples provided.

compute_universe_scores ~321

Score and rank a universe of tickers by a cross-sectional signal. Resolves either a named universe (SP500, TSX) or an explicit tickers override, bulk-fetches daily price history over range, computes a raw per-ticker score for the chosen signal, then converts those raw scores into cross-sectional z-scores and ranks them across the universe (rank 1 = highest z-score). Signals (Jegadeesh–Titman momentum is 12-month minus 1-month return on month-end resampled closes): jt_momentum (that JT 12-1 momentum), mean_reversion (negative trailing 1-month monthly return), rsi_filtered_momentum (JT momentum, names with a 14-day simple RSI > 70 excluded before z-scoring), trend_quality (JT momentum, names trading at or below their 200-day SMA excluded). Tickers with too little history or that fail to fetch are dropped and reported in warnings. range is the lookback (5d,1mo,3mo,6mo,1y,2y,5y,max; default 2y); top_n truncates the ranked output. values holds universe, signal, range, scored, and results (a list of {ticker, raw, zscore, rank} ordered by rank). (paid: $0.0100/call)

NameTypeReqDescription
rangestring––
signalstring––
tickersarray––
top_ninteger––
universestring––

No output schema declared.

No examples provided.

construct_portfolio ~198

Turn a {ticker: score} mapping into long-only portfolio weights. Selects names and assigns non-negative weights that sum to 1.0 using the chosen method: top_n_weighted (weight by clipped score), equal_weight, risk_parity (inverse-volatility), concentrated_vol (highest-vol from a top-score pool), or sharpe_optimized (max-Sharpe long-only). The last three fetch daily history over range (5d,1mo,3mo,6mo,1y,2y,5y,max) and convert it to returns; tickers that fail to fetch are dropped with a warning. Returns the standard envelope; values holds method, top_n, a weights map, and n_holdings. (paid: $0.0100/call)

NameTypeReqDescription
methodstring––
rangestring––
scoresobjectyes–
top_ninteger––

No output schema declared.

No examples provided.

detect_signals ~228

Detect classic technical-analysis signals on a ticker's price history. Each requested signal is evaluated and reported as triggered/not-triggered with a date and human-readable detail under signal_summary. Signals (omit `signals` to check all six): golden_cross = SMA(50) crosses above SMA(200) within `lookback`; death_cross = SMA(50) crosses below SMA(200); macd_cross = MACD line crosses above its signal line (bullish); rsi_oversold = RSI(14) below 30 at the latest bar; rsi_overbought = RSI(14) above 70 at the latest bar; breakout = latest close exceeds the highest high of the prior 20 bars. A signal needing more history than is available is returned not-triggered with an insufficient-history detail and a warning — it never fails the call. (paid: $0.0050/call)

NameTypeReqDescription
intervalstring––
lookbackinteger––
rangestring––
signalsarray––
tickerstringyes–

No output schema declared.

No examples provided.

get_fundamentals ~129

Get fundamental data for a ticker (profile + key ratios). US symbols are bare (AAPL); TSX symbols use the Yahoo .TO form (RY.TO) or the TSX:RY form. Returns an envelope whose values holds available fundamentals: name, exchange, currency, sector, industry, market_cap, pe_ratio, forward_pe, eps, dividend_yield, beta, fifty_two_week_high, fifty_two_week_low, asof. Fields not covered by the provider are null. (paid: $0.0050/call)

NameTypeReqDescription
tickerstringyes–

No output schema declared.

No examples provided.

get_price_history ~184

Get historical OHLCV price bars for a ticker. US symbols are bare (AAPL, MSFT); TSX symbols use the Yahoo .TO form (RY.TO) or the TSX:RY form. interval is one of 1m,5m,15m,30m,1h,1d,1wk,1mo (default 1d); range is one of 5d,1mo,3mo,6mo,1y,2y,5y,max (default 1y). Returns an envelope whose values contains interval, range, currency, count, and bars (records with an ISO timestamp plus open, high, low, close, volume). (paid: $0.0050/call)

NameTypeReqDescription
intervalstring––
rangestring––
tickerstringyes–

No output schema declared.

No examples provided.

get_quote ~99

Get the latest available quote for a ticker. US symbols are bare (AAPL); TSX symbols use the Yahoo .TO form (RY.TO) or the TSX:RY form. Returns an envelope whose values holds the quote fields (price, currency, previous_close, change, change_percent, volume, market_state, asof as an ISO string). (paid: $0.0050/call)

NameTypeReqDescription
tickerstringyes–

No output schema declared.

No examples provided.

run_portfolio_backtest ~254

Backtest a rebalanced, multi-ticker, long-only quant portfolio. Fetches daily history for every ticker over range, then runs a walk-forward simulation: at each period-end rebalance the chosen signal (jt_momentum, mean_reversion, rsi_filtered_momentum, trend_quality) scores each name using only data up to that date, and method turns those scores into long-only weights. Returns gross and net (after cost) performance. rebalance is M (monthly) or Q (quarterly); cost_bps is round-trip cost on turnover; benchmark drives the hit-rate metric and (with crash_filter) a regime filter holding cash when the benchmark trailing-12m return is negative. Returns the standard envelope; values holds equity_curve, rebalances, metrics, holdings and the echoed parameters. (paid: $0.0100/call)

NameTypeReqDescription
benchmarkstring|null––
cost_bpsnumber––
crash_filterboolean––
methodstring––
rangestring––
rebalancestring––
signalstring––
tickersarrayyes–
top_ninteger––

No output schema declared.

No examples provided.

screen ~116

Screen a stock universe for tickers matching quantitative filters (logical AND). Fields: price, rsi, sma_50, sma_200, volatility, sharpe, max_drawdown, total_return, dollar_volume, garman_klass_vol. Ops: lt, lte, gt, gte. (paid: $0.0100/call)

NameTypeReqDescription
filtersarrayyes–
max_tickersinteger––
rangestring––
sort_by–––
universestringyes–

No output schema declared.

No examples provided.

screen_with_scores ~105

Rank a stock universe by a continuous cross-sectional signal score (rank 1 = highest z-score). Signals: jt_momentum, mean_reversion, rsi_filtered_momentum, trend_quality. Scores are relative to the scanned set. (paid: $0.0100/call)

NameTypeReqDescription
max_tickersinteger––
rangestring––
signalstring––
top_ninteger––
universestringyes–

No output schema declared.

No examples provided.

Common questions

What is the sh.kwant/kwant MCP server?

sh.kwant/kwant is an MCP server listed in the public MCP registry as sh.kwant/kwant. Quant intelligence over MCP: backtest, signals, screens, scores & portfolios for US & TSX stocks. This page covers its hosted endpoint (https://kwant.sh/mcp).

Is the sh.kwant/kwant MCP server safe to use?

sh.kwant/kwant scores 74 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the sh.kwant/kwant MCP server expose?

sh.kwant/kwant exposes 16 tools: get_price_history, get_quote, get_fundamentals, compute_indicator, detect_signals, and 11 more. Their descriptions and schemas cost roughly 2,974 tokens of context every time the server is loaded.

Does the sh.kwant/kwant MCP server require authentication?

No. We connected to sh.kwant/kwant without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the sh.kwant/kwant MCP server still maintained?

sh.kwant/kwant is still listed as active in the MCP registry. We last reached this channel on 26 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.