Independent rule and fee data on 71 prop trading firms, every figure with its evidence state.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Two firms side by side. Reports each figure with its evidence state and whether the pair is comparable at all: a field neither firm records is not a tie, and a field only one records is not a win. No per-field winner is declared, because the direction of "better" for several of these is a judgement the published scoring model already makes; each firm's grade is returned alongside so the verdict comes from that model rather than from this tool.
First firm slug.
Second firm slug.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Two firms side by side. Reports each figure with its evidence state and whether the pair is comparable at all: a field neither firm records is not a tie, and a field only one records is not a win. No per-field winner is declared, because the direction of "better" for several of these is a judgement the published scoring model already makes; each firm's grade is returned alongside so the verdict comes from that model rather than from this tool.
| Argument | Type | Description |
|---|---|---|
| a* | string | First firm slug. |
| b* | string | Second firm slug. |
{
"type": "object",
"required": [
"a",
"b"
],
"properties": {
"a": {
"type": "string",
"description": "First firm slug."
},
"b": {
"type": "string",
"description": "Second firm slug."
}
}
}Firms matching every criterion given. A firm whose record does not carry a criterion is never counted as a match and never silently dropped: it is returned separately under unknown, with the field that could not be tested. Absence is common here, so read counts before treating the matched list as the answer.
| Argument | Type | Description |
|---|---|---|
| assetClass | string | Firms recorded as offering this. 21 of 71 records name no asset class and are returned as unknown. |
| maxResetFee | number | Reset fee at or below this. 56 of 71 record no fee. |
| maxActivationFee | number | Activation fee at or below this. 42 of 71 record no fee. |
| maxConsistencyPct | number | Consistency rule at or below this. 28 of 71 record none. |
| maxDailyLossLimit | number | Daily loss limit at or below this, in the unit dailyLossLimitUnit names. 31 of 71 record none. |
| maxMinTradingDays | number | Minimum trading days at or below this, counted as minTradingDaysUnit names. 16 of 71 record none. |
| dailyLossLimitUnit | string | The unit maxDailyLossLimit is in. Daily loss limits are recorded in percent at some firms and in dollars at others, and the two are never compared: a firm recorded in the other unit is returned under unknown with its unit named. |
| maxMinDaysToPayout | number | Minimum days to first payout at or below this, counted as minDaysToPayoutUnit names. 26 of 71 record none. |
| minTradingDaysUnit | string | What maxMinTradingDays counts: calendar_days, trading_days or winning_days. A minimum is compared only with minimums counted the same way; a firm counting another way, or stating no unit, is returned under unknown with what it counts named. |
The stored reading behind a figure: the verbatim quote, the page it came from, and the date we read it. Answers "we hold none" explicitly rather than returning an empty list. `outcome` is load-bearing: a `contradicted`, `contradiction` or `absent` row records what we read, not a figure we publish. Use get_firm for the published figure.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The firm slug, e.g. "topstep". |
| field | string | One field path, e.g. "rules.dailyLossLimit". Omit for every field we hold for this firm. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The firm slug, e.g. \"topstep\"."
},
"field": {
"type": "string",
"description": "One field path, e.g. \"rules.dailyLossLimit\". Omit for every field we hold for this firm."
}
}
}One prop trading firm. Every figure states whether we hold evidence for it, and a firm whose score range spans more than one band carries no letter grade at all.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The firm slug, e.g. "topstep". |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The firm slug, e.g. \"topstep\"."
}
}
}The dated record of what changed, newest first. Every entry states its KIND, and most of this tape is FirmFax correcting its own data rather than a firm changing its rules. Read counts before describing industry activity: a total taken across kinds overstates it.
| Argument | Type | Description |
|---|---|---|
| kind | string | firm = the firm changed a rule. record = FirmFax corrected its own data. withdrawn = we published an entry and then retracted it. |
| slug | string | Limit to one firm. Omit for every firm. |
| limit | number | How many entries to return, newest first. Default 50. |
| since | string | ISO date, e.g. "2026-08-01". Entries dated on or after it. |
{
"type": "object",
"properties": {
"kind": {
"enum": [
"firm",
"record",
"withdrawn"
],
"type": "string",
"description": "firm = the firm changed a rule. record = FirmFax corrected its own data. withdrawn = we published an entry and then retracted it."
},
"slug": {
"type": "string",
"description": "Limit to one firm. Omit for every firm."
},
"limit": {
"type": "number",
"description": "How many entries to return, newest first. Default 50."
},
"since": {
"type": "string",
"description": "ISO date, e.g. \"2026-08-01\". Entries dated on or after it."
}
}
}Every firm slug and name. Carries no figures, so nothing here needs evidence.
No arguments.
{
"type": "object",
"properties": {}
}| minDaysToPayoutUnit | string | What maxMinDaysToPayout counts: calendar_days, trading_days or winning_days. A wait is compared only with waits counted the same way; a firm counting another way, or stating no unit, is returned under unknown with what it counts named. |
| minTradingDaysMinProfit | number | With winning_days only: the profit a day must reach to count. A firm whose winning days carry a different profit bar is returned under unknown. |
| minDaysToPayoutMinProfit | number | With winning_days only: the profit a day must reach to count. A firm whose winning days carry a different profit bar is returned under unknown. |
{
"type": "object",
"properties": {
"assetClass": {
"enum": [
"forex",
"futures",
"crypto"
],
"type": "string",
"description": "Firms recorded as offering this. 21 of 71 records name no asset class and are returned as unknown."
},
"maxResetFee": {
"type": "number",
"description": "Reset fee at or below this. 56 of 71 record no fee."
},
"maxActivationFee": {
"type": "number",
"description": "Activation fee at or below this. 42 of 71 record no fee."
},
"maxConsistencyPct": {
"type": "number",
"description": "Consistency rule at or below this. 28 of 71 record none."
},
"maxDailyLossLimit": {
"type": "number",
"description": "Daily loss limit at or below this, in the unit dailyLossLimitUnit names. 31 of 71 record none."
},
"maxMinTradingDays": {
"type": "number",
"description": "Minimum trading days at or below this, counted as minTradingDaysUnit names. 16 of 71 record none."
},
"dailyLossLimitUnit": {
"enum": [
"percent",
"usd"
],
"type": "string",
"description": "The unit maxDailyLossLimit is in. Daily loss limits are recorded in percent at some firms and in dollars at others, and the two are never compared: a firm recorded in the other unit is returned under unknown with its unit named."
},
"maxMinDaysToPayout": {
"type": "number",
"description": "Minimum days to first payout at or below this, counted as minDaysToPayoutUnit names. 26 of 71 record none."
},
"minTradingDaysUnit": {
"enum": [
"calendar_days",
"trading_days",
"winning_days"
],
"type": "string",
"description": "What maxMinTradingDays counts: calendar_days, trading_days or winning_days. A minimum is compared only with minimums counted the same way; a firm counting another way, or stating no unit, is returned under unknown with what it counts named."
},
"minDaysToPayoutUnit": {
"enum": [
"calendar_days",
"trading_days",
"winning_days"
],
"type": "string",
"description": "What maxMinDaysToPayout counts: calendar_days, trading_days or winning_days. A wait is compared only with waits counted the same way; a firm counting another way, or stating no unit, is returned under unknown with what it counts named."
},
"minTradingDaysMinProfit": {
"type": "number",
"description": "With winning_days only: the profit a day must reach to count. A firm whose winning days carry a different profit bar is returned under unknown."
},
"minDaysToPayoutMinProfit": {
"type": "number",
"description": "With winning_days only: the profit a day must reach to count. A firm whose winning days carry a different profit bar is returned under unknown."
}
}
}