{"apiVersion":"v1","directorySlug":"holdoutlabs-mcp-0bbbaaad88","title":"Holdout Labs","description":"Scientific audits for trading strategies. We test your backtest for overfitting with published methods and deliver a fragility grade and a fix list.","pageUrl":"https://www.mcpbundles.com/skills/holdoutlabs-mcp-0bbbaaad88","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.holdoutlabs.io/mcp","hostedMcpUrl":null,"toolCount":7,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"io.holdoutlabs/holdoutlabs-mcp-0bbbaaad88","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"check_backtest_luck","description":"Use when someone asks whether a trading strategy's backtest is overfit, too good to be true, or could be luck. Computes the deflated Sharpe ratio (Bailey & Lopez de Prado 2014): the probability that the strategy's true Sharpe is above the best Sharpe expected from the same number of zero-skill attempts. Needs the annualised Sharpe, how many variants were tried (parameters, rules, assets; include discarded ones), and the length of the backtest.","inputSchema":{"type":"object","required":["sharpe","trials","years"],"properties":{"skew":{"type":"number","default":0,"maximum":20,"minimum":-20},"years":{"type":"number","maximum":200,"minimum":0.05},"sharpe":{"type":"number","maximum":10,"minimum":-10},"trials":{"type":"integer","maximum":10000000,"minimum":1},"kurtosis":{"type":"number","default":3,"maximum":500,"minimum":1},"frequency":{"enum":["d","w","m"],"type":"string","default":"d"},"trial_sharpe_variance":{"type":"number","exclusiveMinimum":0}},"additionalProperties":false},"title":"Check whether a backtest's Sharpe ratio could be luck","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"check_backtest_luck","displayName":"Check whether a backtest's Sharpe ratio could be luck"},{"name":"noise_sharpe_benchmark","description":"Use when someone wants to know how high a Sharpe ratio random, zero-skill strategies reach by chance: given how many variants are tried over how many years, returns the median and 95th-percentile best annualised Sharpe from noise alone.","inputSchema":{"type":"object","required":["trials","years"],"properties":{"years":{"type":"number","maximum":200,"minimum":0.05},"trials":{"type":"integer","maximum":10000000,"minimum":1}},"additionalProperties":false},"title":"Sharpe ratio that pure noise reaches","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"noise_sharpe_benchmark","displayName":"Sharpe ratio that pure noise reaches"},{"name":"win_rate_interval","description":"Use when someone quotes a trading win rate from a limited number of trades (e.g. '63% over 63 trades'). Returns the 95% Wilson interval for the true win rate and the chance a 50/50 strategy would do at least as well.","inputSchema":{"type":"object","required":["trades"],"properties":{"wins":{"type":"integer","minimum":0},"trades":{"type":"integer","maximum":10000000,"minimum":1},"win_rate":{"type":"number","maximum":1,"minimum":0}},"additionalProperties":false},"title":"How much a win rate can be trusted","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"win_rate_interval","displayName":"How much a win rate can be trusted"},{"name":"expectancy_interval","description":"Use when someone reports a win rate and an expectancy or average win in R multiples (risk units) over some number of trades. Returns the implied average win, the per-trade spread, the 95% range for the true expectancy, and roughly how many trades are needed before that range excludes zero. Assumes every loss is the stated average loss.","inputSchema":{"type":"object","required":["trades","win_rate"],"properties":{"trades":{"type":"integer","maximum":10000000,"minimum":2},"win_rate":{"type":"number","exclusiveMaximum":1,"exclusiveMinimum":0},"avg_win_r":{"type":"number","exclusiveMinimum":0},"avg_loss_r":{"type":"number","default":1,"exclusiveMinimum":0},"expectancy_r":{"type":"number"}},"additionalProperties":false},"title":"Range for a strategy's expectancy per trade (in R)","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"expectancy_interval","displayName":"Range for a strategy's expectancy per trade (in R)"},{"name":"seasonality_check","description":"Use when someone claims a seasonal or calendar pattern, e.g. 'never a losing October in 5 years' or 'up 9 of the last 10 Septembers'. Returns how often a coin flip would produce that record, and the chance that at least one of all the buckets scanned (12 months, 5 weekdays, ...) shows a record that extreme by luck alone.","inputSchema":{"type":"object","required":["years","hits"],"properties":{"hits":{"type":"integer","minimum":0},"years":{"type":"integer","maximum":200,"minimum":1},"base_rate":{"type":"number","default":0.5,"exclusiveMaximum":1,"exclusiveMinimum":0},"buckets_scanned":{"type":"integer","default":12,"maximum":10000,"minimum":1}},"additionalProperties":false},"title":"Could a seasonal pattern be chance?","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"seasonality_check","displayName":"Could a seasonal pattern be chance?"},{"name":"scan_false_alarms","description":"Use when someone scans many assets, indicators or conditions for a signal (a screener, dashboard or AI agent). Given how many independent checks are run and the significance level, returns how many will look significant by chance and the probability that at least one does.","inputSchema":{"type":"object","required":["checks"],"properties":{"alpha":{"type":"number","default":0.05,"exclusiveMaximum":1,"exclusiveMinimum":0},"checks":{"type":"integer","maximum":100000000,"minimum":1}},"additionalProperties":false},"title":"False alarms from scanning many signals","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"scan_false_alarms","displayName":"False alarms from scanning many signals"},{"name":"full_audit_options","description":"Use when someone wants an independent, full test of a trading strategy beyond a single Sharpe check: describes what a sealed Holdout Labs audit covers, its prices and how to request one.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"title":"Holdout Labs sealed audit options","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"full_audit_options","displayName":"Holdout Labs sealed audit options"}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Holdout-Labs&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AuaG9sZG91dGxhYnMuaW8vbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Holdout-Labs%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.holdoutlabs.io%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Holdout-Labs%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.holdoutlabs.io%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Holdout+Labs&connectorUrl=https%3A%2F%2Fmcp.holdoutlabs.io%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Holdout-Labs\" --url \"https://mcp.holdoutlabs.io/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/holdoutlabs-mcp-0bbbaaad88","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/holdoutlabs-mcp-0bbbaaad88/tools/{tool}","mcpServerUrl":"https://mcp.holdoutlabs.io/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/holdoutlabs-mcp-0bbbaaad88?live=1"}