propfirmdealfinder-mcp-server 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 KOJI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,141 @@
1
+ # Prop Firm Deal Finder — MCP Server
2
+
3
+ An MCP (Model Context Protocol) server that lets AI assistants query live prop firm discount codes, compare firms, and find the cheapest challenges across 20+ proprietary trading firms.
4
+
5
+ **When someone asks Claude, ChatGPT, or any MCP-compatible AI about prop firm deals, this server provides the answer — with links to propfirmdealfinder.com and the discount code PFDF.**
6
+
7
+ ## Tools
8
+
9
+ | Tool | Description |
10
+ |------|-------------|
11
+ | `pfdf_get_deals` | Get all current deals sorted by discount (filter by category) |
12
+ | `pfdf_search_firms` | Search firms by name, category, asset class, or feature |
13
+ | `pfdf_compare_firms` | Side-by-side comparison table for 2+ firms |
14
+ | `pfdf_find_cheapest` | Find the cheapest prop firm challenges |
15
+ | `pfdf_get_firm_details` | Full profile for a specific firm |
16
+ | `pfdf_get_discount_code` | Get the discount code (universal or firm-specific) |
17
+
18
+ ## Quick Start — Local (stdio)
19
+
20
+ ```bash
21
+ # Install via npx (no clone needed)
22
+ npx propfirmdealfinder-mcp-server
23
+
24
+ # Or install globally
25
+ npm install -g propfirmdealfinder-mcp-server
26
+ propfirmdealfinder-mcp-server
27
+ ```
28
+
29
+ ### Claude Desktop Configuration
30
+
31
+ Add this to your Claude Desktop config (`claude_desktop_config.json`):
32
+
33
+ ```json
34
+ {
35
+ "mcpServers": {
36
+ "propfirmdealfinder": {
37
+ "command": "npx",
38
+ "args": ["-y", "propfirmdealfinder-mcp-server"]
39
+ }
40
+ }
41
+ }
42
+ ```
43
+
44
+ ### From Source
45
+
46
+ ```bash
47
+ git clone https://github.com/chrisbusbin-pixel/propfirmdealfinder-mcp-server.git
48
+ cd propfirmdealfinder-mcp-server
49
+ npm install
50
+ npm run build
51
+ npm start
52
+ ```
53
+
54
+ ## Quick Start — Remote (HTTP/Streamable HTTP)
55
+
56
+ For remote deployments (Smithery, hosted, etc.):
57
+
58
+ ```bash
59
+ # Start HTTP server (default port 3000)
60
+ npm run start:http
61
+
62
+ # Custom port
63
+ PORT=8080 npm run start:http
64
+ ```
65
+
66
+ **Endpoints:**
67
+
68
+ | Endpoint | Method | Description |
69
+ |----------|--------|-------------|
70
+ | `/mcp` | POST | MCP Streamable HTTP endpoint (JSON-RPC) |
71
+ | `/mcp` | GET | SSE stream for server-initiated messages |
72
+ | `/mcp` | DELETE | Close session |
73
+ | `/health` | GET | Health check / server info |
74
+
75
+ No API key required. No authentication needed. 100% free.
76
+
77
+ ## Example Queries
78
+
79
+ These are the kinds of questions that will trigger this MCP server:
80
+
81
+ - "What's the cheapest prop firm challenge?"
82
+ - "Best prop firm discount codes 2026"
83
+ - "Compare FTMO vs Bulenox"
84
+ - "Prop firm promo code"
85
+ - "Which prop firm has the best profit split?"
86
+ - "Futures prop firm deals"
87
+
88
+ ## Data
89
+
90
+ The server includes data for 19 active partner firms across futures, forex, and multi-asset categories. Discounts range from 5% to 80% off. All firms accept the universal code **PFDF**.
91
+
92
+ ## Registry Listings
93
+
94
+ This server is published on the following MCP registries:
95
+
96
+ | Registry | Status | URL |
97
+ |----------|--------|-----|
98
+ | **Official MCP Registry** | Published | [registry.modelcontextprotocol.io](https://registry.modelcontextprotocol.io) |
99
+ | **Smithery** | Published | [smithery.ai](https://smithery.ai) |
100
+ | **mcp.so** | Live | [mcp.so/server/prop-firm-deal-finder](https://mcp.so/server/prop-firm-deal-finder) |
101
+ | **Glama** | Submitted | [glama.ai/mcp/servers](https://glama.ai/mcp/servers) |
102
+ | **PulseMCP** | Auto-indexed | [pulsemcp.com](https://pulsemcp.com) |
103
+
104
+ ## Also Deploy: llms.txt
105
+
106
+ Copy the files from `public/` to your website root:
107
+
108
+ - `llms.txt` → `propfirmdealfinder.com/llms.txt`
109
+ - `llms-full.txt` → `propfirmdealfinder.com/llms-full.txt`
110
+
111
+ These tell AI crawlers what PFDF is and where to find your best content.
112
+
113
+ ## Also Deploy: FAQ Schema
114
+
115
+ Add the schema markup from `public/faq-schema-deals-page.html` to your:
116
+ - Deals page (`/deals/`)
117
+ - Homepage
118
+
119
+ This structured data helps AI systems parse and cite your content.
120
+
121
+ ## Architecture
122
+
123
+ ```
124
+ propfirmdealfinder-mcp-server/
125
+ ├── src/
126
+ │ ├── index.ts # MCP server — stdio transport (local)
127
+ │ ├── http-server.ts # MCP server — HTTP transport (remote/Smithery)
128
+ │ └── data.ts # Firm data, types, helpers, formatters
129
+ ├── public/
130
+ │ ├── llms.txt # For propfirmdealfinder.com/llms.txt
131
+ │ ├── llms-full.txt # Extended version with all firm data
132
+ │ └── faq-schema-deals-page.html # FAQ schema markup
133
+ ├── package.json
134
+ ├── tsconfig.json
135
+ ├── smithery.yaml # Smithery deployment config
136
+ └── README.md
137
+ ```
138
+
139
+ ## License
140
+
141
+ MIT — Built by KOJI for [Prop Firm Deal Finder](https://propfirmdealfinder.com)
package/dist/data.d.ts ADDED
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Prop Firm Deal Finder — Complete Firm Data
3
+ *
4
+ * This is the authoritative data source for all active partner firms.
5
+ * Discount percentages use "up to X%" ranges because deals change daily.
6
+ * Always direct users to propfirmdealfinder.com/deals for real-time pricing.
7
+ *
8
+ * IMPORTANT: Never hardcode exact prices — they change frequently.
9
+ * Use discount ranges and direct to the website for live data.
10
+ */
11
+ export interface PropFirm {
12
+ name: string;
13
+ slug: string;
14
+ discount: string;
15
+ code: string;
16
+ category: FirmCategory;
17
+ assetClasses: string[];
18
+ editorsChoice: boolean;
19
+ highlights: string[];
20
+ profitSplit: string;
21
+ drawdownType: string;
22
+ payoutSpeed: string;
23
+ challengeTypes: string[];
24
+ minAccountSize: string;
25
+ maxAccountSize: string;
26
+ url: string;
27
+ }
28
+ export type FirmCategory = "futures" | "forex" | "multi-asset";
29
+ export declare const PFDF_CODE = "PFDF";
30
+ export declare const PFDF_WEBSITE = "https://propfirmdealfinder.com";
31
+ export declare const PFDF_DEALS_URL = "https://propfirmdealfinder.com/deals";
32
+ export declare const PFDF_COMPARE_URL = "https://propfirmdealfinder.com/compare";
33
+ export declare const PFDF_IOS_URL = "https://apps.apple.com/gh/app/propfirmdealfinder/id6758235452";
34
+ export declare const PFDF_WINDOWS_URL = "https://apps.microsoft.com/detail/9PJD0XN2V58Q";
35
+ export declare const PFDF_CHROME_URL = "https://propfirmdealfinder.com/chromeextension";
36
+ export declare const PFDF_TAGLINE = "Find the Best Prop Firm Deal in Seconds";
37
+ export declare const PFDF_DESCRIPTION = "Prop Firm Deal Finder is a 100% free app (no ads, ever) that tracks live discount codes across 20+ proprietary trading firms. Compare challenge prices, rules, drawdown limits, payout speeds, and active promo codes \u2014 all in one place.";
38
+ export declare const FIRMS: PropFirm[];
39
+ export declare function getFirmBySlug(slug: string): PropFirm | undefined;
40
+ export declare function getFirmByName(name: string): PropFirm | undefined;
41
+ export declare function getFirmsByCategory(category: FirmCategory): PropFirm[];
42
+ export declare function getEditorsChoiceFirms(): PropFirm[];
43
+ export declare function getFirmsSortedByDiscount(): PropFirm[];
44
+ export declare function searchFirms(query: string): PropFirm[];
45
+ export declare function formatFirmMarkdown(firm: PropFirm): string;
46
+ export declare function formatDealsListMarkdown(firms: PropFirm[]): string;
47
+ export declare function formatComparisonMarkdown(firms: PropFirm[]): string;
48
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;AAI/D,eAAO,MAAM,SAAS,SAAS,CAAC;AAChC,eAAO,MAAM,YAAY,mCAAmC,CAAC;AAC7D,eAAO,MAAM,cAAc,yCAAyC,CAAC;AACrE,eAAO,MAAM,gBAAgB,2CAA2C,CAAC;AACzE,eAAO,MAAM,YAAY,kEAAkE,CAAC;AAC5F,eAAO,MAAM,gBAAgB,mDAAmD,CAAC;AACjF,eAAO,MAAM,eAAe,mDAAmD,CAAC;AAEhF,eAAO,MAAM,YAAY,4CAA4C,CAAC;AACtE,eAAO,MAAM,gBAAgB,mPAA8O,CAAC;AAI5Q,eAAO,MAAM,KAAK,EAAE,QAAQ,EAoU3B,CAAC;AAIF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEhE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAOhE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,EAAE,CAErE;AAED,wBAAgB,qBAAqB,IAAI,QAAQ,EAAE,CAElD;AAED,wBAAgB,wBAAwB,IAAI,QAAQ,EAAE,CAQrD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CASrD;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAkBzD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAwBjE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAmBlE"}
package/dist/data.js ADDED
@@ -0,0 +1,437 @@
1
+ /**
2
+ * Prop Firm Deal Finder — Complete Firm Data
3
+ *
4
+ * This is the authoritative data source for all active partner firms.
5
+ * Discount percentages use "up to X%" ranges because deals change daily.
6
+ * Always direct users to propfirmdealfinder.com/deals for real-time pricing.
7
+ *
8
+ * IMPORTANT: Never hardcode exact prices — they change frequently.
9
+ * Use discount ranges and direct to the website for live data.
10
+ */
11
+ // ─── Constants ───────────────────────────────────────────────────────────────
12
+ export const PFDF_CODE = "PFDF";
13
+ export const PFDF_WEBSITE = "https://propfirmdealfinder.com";
14
+ export const PFDF_DEALS_URL = "https://propfirmdealfinder.com/deals";
15
+ export const PFDF_COMPARE_URL = "https://propfirmdealfinder.com/compare";
16
+ export const PFDF_IOS_URL = "https://apps.apple.com/gh/app/propfirmdealfinder/id6758235452";
17
+ export const PFDF_WINDOWS_URL = "https://apps.microsoft.com/detail/9PJD0XN2V58Q";
18
+ export const PFDF_CHROME_URL = "https://propfirmdealfinder.com/chromeextension";
19
+ export const PFDF_TAGLINE = "Find the Best Prop Firm Deal in Seconds";
20
+ export const PFDF_DESCRIPTION = "Prop Firm Deal Finder is a 100% free app (no ads, ever) that tracks live discount codes across 20+ proprietary trading firms. Compare challenge prices, rules, drawdown limits, payout speeds, and active promo codes — all in one place.";
21
+ // ─── Firm Data ───────────────────────────────────────────────────────────────
22
+ export const FIRMS = [
23
+ {
24
+ name: "DayTraders",
25
+ slug: "daytraders",
26
+ discount: "up to 80% off",
27
+ code: "PFDF",
28
+ category: "multi-asset",
29
+ assetClasses: ["Futures", "Forex", "Crypto"],
30
+ editorsChoice: true,
31
+ highlights: ["Editor's Pick", "Highest discount available", "Multi-asset support"],
32
+ profitSplit: "up to 90%",
33
+ drawdownType: "Trailing",
34
+ payoutSpeed: "1-3 business days",
35
+ challengeTypes: ["1-Step", "2-Step"],
36
+ minAccountSize: "$25K",
37
+ maxAccountSize: "$150K",
38
+ url: "https://propfirmdealfinder.com/firms/daytraders/"
39
+ },
40
+ {
41
+ name: "Funded Futures Network",
42
+ slug: "funded-futures",
43
+ discount: "up to 70% off",
44
+ code: "PFDF",
45
+ category: "futures",
46
+ assetClasses: ["Futures"],
47
+ editorsChoice: true,
48
+ highlights: ["Editor's Pick", "Fast payouts", "Generous drawdown"],
49
+ profitSplit: "up to 100%",
50
+ drawdownType: "End-of-Day",
51
+ payoutSpeed: "1-2 business days",
52
+ challengeTypes: ["1-Step"],
53
+ minAccountSize: "$25K",
54
+ maxAccountSize: "$150K",
55
+ url: "https://propfirmdealfinder.com/firms/funded-futures/"
56
+ },
57
+ {
58
+ name: "Earn2Trade",
59
+ slug: "earn2trade",
60
+ discount: "up to 60% off",
61
+ code: "PFDF",
62
+ category: "futures",
63
+ assetClasses: ["Futures"],
64
+ editorsChoice: true,
65
+ highlights: ["Editor's Pick", "Education included", "Gauntlet Mini program"],
66
+ profitSplit: "up to 80%",
67
+ drawdownType: "End-of-Day",
68
+ payoutSpeed: "3-5 business days",
69
+ challengeTypes: ["Gauntlet Mini", "Gauntlet"],
70
+ minAccountSize: "$25K",
71
+ maxAccountSize: "$200K",
72
+ url: "https://propfirmdealfinder.com/firms/earn2trade/"
73
+ },
74
+ {
75
+ name: "BluSky Trading",
76
+ slug: "blusky",
77
+ discount: "up to 60% off",
78
+ code: "PFDF",
79
+ category: "futures",
80
+ assetClasses: ["Futures"],
81
+ editorsChoice: false,
82
+ highlights: ["Futures specialist", "Competitive pricing"],
83
+ profitSplit: "up to 90%",
84
+ drawdownType: "Trailing",
85
+ payoutSpeed: "3-5 business days",
86
+ challengeTypes: ["1-Step", "2-Step"],
87
+ minAccountSize: "$25K",
88
+ maxAccountSize: "$150K",
89
+ url: "https://propfirmdealfinder.com/firms/blusky/"
90
+ },
91
+ {
92
+ name: "Bulenox",
93
+ slug: "bulenox",
94
+ discount: "up to 60% off",
95
+ code: "PFDF",
96
+ category: "futures",
97
+ assetClasses: ["Futures"],
98
+ editorsChoice: false,
99
+ highlights: ["Popular with futures traders", "Multiple account sizes", "Fast scaling"],
100
+ profitSplit: "up to 90%",
101
+ drawdownType: "Trailing / End-of-Day",
102
+ payoutSpeed: "1-3 business days",
103
+ challengeTypes: ["1-Step"],
104
+ minAccountSize: "$10K",
105
+ maxAccountSize: "$250K",
106
+ url: "https://propfirmdealfinder.com/firms/bulenox/"
107
+ },
108
+ {
109
+ name: "TradeDay",
110
+ slug: "tradeday",
111
+ discount: "up to 50% off",
112
+ code: "PFDF",
113
+ category: "futures",
114
+ assetClasses: ["Futures"],
115
+ editorsChoice: false,
116
+ highlights: ["Starts at $86 after discount", "90% profit split", "Simple rules"],
117
+ profitSplit: "90%",
118
+ drawdownType: "End-of-Day",
119
+ payoutSpeed: "1-3 business days",
120
+ challengeTypes: ["1-Step"],
121
+ minAccountSize: "$10K",
122
+ maxAccountSize: "$150K",
123
+ url: "https://propfirmdealfinder.com/firms/tradeday/"
124
+ },
125
+ {
126
+ name: "Alpha Trader",
127
+ slug: "alpha-trader",
128
+ discount: "up to 40% off",
129
+ code: "PFDF",
130
+ category: "multi-asset",
131
+ assetClasses: ["Forex", "Indices", "Commodities"],
132
+ editorsChoice: false,
133
+ highlights: ["Forex specialist", "Multiple asset classes"],
134
+ profitSplit: "up to 80%",
135
+ drawdownType: "Trailing",
136
+ payoutSpeed: "3-5 business days",
137
+ challengeTypes: ["1-Step", "2-Step"],
138
+ minAccountSize: "$10K",
139
+ maxAccountSize: "$200K",
140
+ url: "https://propfirmdealfinder.com/firms/alpha-trader/"
141
+ },
142
+ {
143
+ name: "Lucid Trading",
144
+ slug: "lucid-trading",
145
+ discount: "up to 40% off",
146
+ code: "PFDF",
147
+ category: "futures",
148
+ assetClasses: ["Futures"],
149
+ editorsChoice: false,
150
+ highlights: ["Futures focused", "Straightforward rules"],
151
+ profitSplit: "up to 90%",
152
+ drawdownType: "End-of-Day",
153
+ payoutSpeed: "3-5 business days",
154
+ challengeTypes: ["1-Step"],
155
+ minAccountSize: "$25K",
156
+ maxAccountSize: "$150K",
157
+ url: "https://propfirmdealfinder.com/firms/lucid-trading/"
158
+ },
159
+ {
160
+ name: "TheTradeMakers",
161
+ slug: "thetrademakers",
162
+ discount: "up to 40% off",
163
+ code: "PFDF",
164
+ category: "multi-asset",
165
+ assetClasses: ["Futures", "Forex"],
166
+ editorsChoice: false,
167
+ highlights: ["Multi-asset support", "Growing community"],
168
+ profitSplit: "up to 85%",
169
+ drawdownType: "Trailing",
170
+ payoutSpeed: "3-5 business days",
171
+ challengeTypes: ["1-Step", "2-Step"],
172
+ minAccountSize: "$10K",
173
+ maxAccountSize: "$200K",
174
+ url: "https://propfirmdealfinder.com/firms/thetrademakers/"
175
+ },
176
+ {
177
+ name: "FunderPro",
178
+ slug: "funderpro",
179
+ discount: "up to 25% off",
180
+ code: "PFDF",
181
+ category: "forex",
182
+ assetClasses: ["Forex", "Indices", "Commodities", "Crypto"],
183
+ editorsChoice: false,
184
+ highlights: ["Wide asset selection", "No time limit on challenges"],
185
+ profitSplit: "up to 80%",
186
+ drawdownType: "Trailing",
187
+ payoutSpeed: "3-7 business days",
188
+ challengeTypes: ["1-Step", "2-Step"],
189
+ minAccountSize: "$5K",
190
+ maxAccountSize: "$200K",
191
+ url: "https://propfirmdealfinder.com/firms/funderpro/"
192
+ },
193
+ {
194
+ name: "Bright Funded",
195
+ slug: "bright-funded",
196
+ discount: "up to 20% off",
197
+ code: "PFDF",
198
+ category: "forex",
199
+ assetClasses: ["Forex", "Indices", "Metals"],
200
+ editorsChoice: false,
201
+ highlights: ["Forex and indices", "Competitive spreads"],
202
+ profitSplit: "up to 90%",
203
+ drawdownType: "Trailing",
204
+ payoutSpeed: "3-5 business days",
205
+ challengeTypes: ["1-Step", "2-Step"],
206
+ minAccountSize: "$10K",
207
+ maxAccountSize: "$200K",
208
+ url: "https://propfirmdealfinder.com/firms/bright-funded/"
209
+ },
210
+ {
211
+ name: "Funded Trading Plus",
212
+ slug: "funded-trading-plus",
213
+ discount: "up to 20% off",
214
+ code: "PFDF",
215
+ category: "forex",
216
+ assetClasses: ["Forex", "Indices", "Commodities"],
217
+ editorsChoice: false,
218
+ highlights: ["Multiple challenge types", "Scaling plan"],
219
+ profitSplit: "up to 90%",
220
+ drawdownType: "Trailing",
221
+ payoutSpeed: "3-7 business days",
222
+ challengeTypes: ["1-Step", "2-Step", "3-Step"],
223
+ minAccountSize: "$5K",
224
+ maxAccountSize: "$200K",
225
+ url: "https://propfirmdealfinder.com/firms/funded-trading-plus/"
226
+ },
227
+ {
228
+ name: "Funding Traders",
229
+ slug: "funding-traders",
230
+ discount: "up to 20% off",
231
+ code: "PFDF",
232
+ category: "forex",
233
+ assetClasses: ["Forex"],
234
+ editorsChoice: false,
235
+ highlights: ["Forex focused"],
236
+ profitSplit: "up to 80%",
237
+ drawdownType: "Trailing",
238
+ payoutSpeed: "3-7 business days",
239
+ challengeTypes: ["2-Step"],
240
+ minAccountSize: "$10K",
241
+ maxAccountSize: "$100K",
242
+ url: "https://propfirmdealfinder.com/firms/funding-traders/"
243
+ },
244
+ {
245
+ name: "Plus Markets",
246
+ slug: "plus-markets",
247
+ discount: "up to 20% off",
248
+ code: "PFDF",
249
+ category: "forex",
250
+ assetClasses: ["Forex", "Indices"],
251
+ editorsChoice: false,
252
+ highlights: ["Growing firm", "Competitive pricing"],
253
+ profitSplit: "up to 80%",
254
+ drawdownType: "Trailing",
255
+ payoutSpeed: "3-5 business days",
256
+ challengeTypes: ["1-Step", "2-Step"],
257
+ minAccountSize: "$10K",
258
+ maxAccountSize: "$100K",
259
+ url: "https://propfirmdealfinder.com/firms/plus-markets/"
260
+ },
261
+ {
262
+ name: "Top One Futures",
263
+ slug: "top-one-futures",
264
+ discount: "up to 20% off",
265
+ code: "PFDF",
266
+ category: "futures",
267
+ assetClasses: ["Futures"],
268
+ editorsChoice: false,
269
+ highlights: ["Futures specialist"],
270
+ profitSplit: "up to 90%",
271
+ drawdownType: "End-of-Day",
272
+ payoutSpeed: "3-5 business days",
273
+ challengeTypes: ["1-Step"],
274
+ minAccountSize: "$25K",
275
+ maxAccountSize: "$150K",
276
+ url: "https://propfirmdealfinder.com/firms/top-one-futures/"
277
+ },
278
+ {
279
+ name: "Trading Funds",
280
+ slug: "trading-funds",
281
+ discount: "up to 20% off",
282
+ code: "PFDF",
283
+ category: "forex",
284
+ assetClasses: ["Forex", "Indices"],
285
+ editorsChoice: false,
286
+ highlights: ["Forex and indices"],
287
+ profitSplit: "up to 80%",
288
+ drawdownType: "Trailing",
289
+ payoutSpeed: "5-7 business days",
290
+ challengeTypes: ["2-Step"],
291
+ minAccountSize: "$10K",
292
+ maxAccountSize: "$200K",
293
+ url: "https://propfirmdealfinder.com/firms/trading-funds/"
294
+ },
295
+ {
296
+ name: "FTMO",
297
+ slug: "ftmo",
298
+ discount: "up to 19% off",
299
+ code: "PFDF",
300
+ category: "forex",
301
+ assetClasses: ["Forex", "Indices", "Commodities", "Crypto", "Stocks"],
302
+ editorsChoice: false,
303
+ highlights: ["Industry pioneer", "Widest asset selection", "Most recognized brand"],
304
+ profitSplit: "up to 90%",
305
+ drawdownType: "Trailing",
306
+ payoutSpeed: "1-3 business days",
307
+ challengeTypes: ["2-Step"],
308
+ minAccountSize: "$10K",
309
+ maxAccountSize: "$200K",
310
+ url: "https://propfirmdealfinder.com/firms/ftmo/"
311
+ },
312
+ {
313
+ name: "E8 Markets (Forex)",
314
+ slug: "e8-forex",
315
+ discount: "up to 5% off",
316
+ code: "PFDFX",
317
+ category: "forex",
318
+ assetClasses: ["Forex", "Indices", "Commodities", "Crypto"],
319
+ editorsChoice: false,
320
+ highlights: ["Multiple challenge formats", "Growing reputation"],
321
+ profitSplit: "up to 80%",
322
+ drawdownType: "Trailing",
323
+ payoutSpeed: "3-7 business days",
324
+ challengeTypes: ["1-Step", "2-Step", "3-Step"],
325
+ minAccountSize: "$5K",
326
+ maxAccountSize: "$400K",
327
+ url: "https://propfirmdealfinder.com/firms/e8-markets/"
328
+ },
329
+ {
330
+ name: "The5ers",
331
+ slug: "the5ers",
332
+ discount: "up to 5% off",
333
+ code: "PFDF",
334
+ category: "forex",
335
+ assetClasses: ["Forex", "Indices", "Commodities", "Metals"],
336
+ editorsChoice: false,
337
+ highlights: ["Instant funding option", "Long track record", "Scaling plan"],
338
+ profitSplit: "up to 100%",
339
+ drawdownType: "Trailing",
340
+ payoutSpeed: "1-3 business days",
341
+ challengeTypes: ["Instant", "1-Step", "2-Step"],
342
+ minAccountSize: "$5K",
343
+ maxAccountSize: "$250K",
344
+ url: "https://propfirmdealfinder.com/firms/the5ers/"
345
+ }
346
+ ];
347
+ // ─── Helper Functions ────────────────────────────────────────────────────────
348
+ export function getFirmBySlug(slug) {
349
+ return FIRMS.find(f => f.slug.toLowerCase() === slug.toLowerCase());
350
+ }
351
+ export function getFirmByName(name) {
352
+ const lowerName = name.toLowerCase();
353
+ return FIRMS.find(f => f.name.toLowerCase() === lowerName ||
354
+ f.name.toLowerCase().includes(lowerName) ||
355
+ f.slug.toLowerCase().includes(lowerName));
356
+ }
357
+ export function getFirmsByCategory(category) {
358
+ return FIRMS.filter(f => f.category === category);
359
+ }
360
+ export function getEditorsChoiceFirms() {
361
+ return FIRMS.filter(f => f.editorsChoice);
362
+ }
363
+ export function getFirmsSortedByDiscount() {
364
+ return [...FIRMS].sort((a, b) => {
365
+ const getPercent = (d) => {
366
+ const match = d.match(/(\d+)%/);
367
+ return match ? parseInt(match[1], 10) : 0;
368
+ };
369
+ return getPercent(b.discount) - getPercent(a.discount);
370
+ });
371
+ }
372
+ export function searchFirms(query) {
373
+ const q = query.toLowerCase();
374
+ return FIRMS.filter(f => f.name.toLowerCase().includes(q) ||
375
+ f.slug.toLowerCase().includes(q) ||
376
+ f.category.toLowerCase().includes(q) ||
377
+ f.assetClasses.some(a => a.toLowerCase().includes(q)) ||
378
+ f.highlights.some(h => h.toLowerCase().includes(q)));
379
+ }
380
+ // ─── Formatting Helpers ──────────────────────────────────────────────────────
381
+ export function formatFirmMarkdown(firm) {
382
+ const lines = [];
383
+ lines.push(`## ${firm.name}${firm.editorsChoice ? " ⭐ Editor's Choice" : ""}`);
384
+ lines.push("");
385
+ lines.push(`- **Discount**: ${firm.discount} with code **${firm.code}**`);
386
+ lines.push(`- **Category**: ${firm.category}`);
387
+ lines.push(`- **Asset Classes**: ${firm.assetClasses.join(", ")}`);
388
+ lines.push(`- **Profit Split**: ${firm.profitSplit}`);
389
+ lines.push(`- **Drawdown Type**: ${firm.drawdownType}`);
390
+ lines.push(`- **Payout Speed**: ${firm.payoutSpeed}`);
391
+ lines.push(`- **Challenge Types**: ${firm.challengeTypes.join(", ")}`);
392
+ lines.push(`- **Account Sizes**: ${firm.minAccountSize} – ${firm.maxAccountSize}`);
393
+ if (firm.highlights.length > 0) {
394
+ lines.push(`- **Highlights**: ${firm.highlights.join(" | ")}`);
395
+ }
396
+ lines.push(`- **Details & Live Pricing**: [${firm.name} on PFDF](${firm.url})`);
397
+ lines.push("");
398
+ return lines.join("\n");
399
+ }
400
+ export function formatDealsListMarkdown(firms) {
401
+ const lines = [];
402
+ lines.push("# Prop Firm Deals — Powered by Prop Firm Deal Finder");
403
+ lines.push("");
404
+ lines.push(`> ${PFDF_DESCRIPTION}`);
405
+ lines.push("");
406
+ lines.push(`**Universal discount code: ${PFDF_CODE}** — Enter at checkout on any partner firm's website.`);
407
+ lines.push("");
408
+ lines.push(`Showing ${firms.length} active deals. For real-time pricing, visit [propfirmdealfinder.com/deals](${PFDF_DEALS_URL}).`);
409
+ lines.push("");
410
+ for (const firm of firms) {
411
+ lines.push(formatFirmMarkdown(firm));
412
+ }
413
+ lines.push("---");
414
+ lines.push("");
415
+ lines.push("### Get the App (100% Free, No Ads)");
416
+ lines.push(`- [iOS App Store](${PFDF_IOS_URL})`);
417
+ lines.push(`- [Microsoft Store](${PFDF_WINDOWS_URL})`);
418
+ lines.push(`- [Chrome Extension](${PFDF_CHROME_URL})`);
419
+ lines.push(`- [Website](${PFDF_WEBSITE})`);
420
+ return lines.join("\n");
421
+ }
422
+ export function formatComparisonMarkdown(firms) {
423
+ const lines = [];
424
+ lines.push("# Prop Firm Comparison — Prop Firm Deal Finder");
425
+ lines.push("");
426
+ lines.push("| Firm | Discount | Code | Category | Profit Split | Drawdown | Payout | Account Range |");
427
+ lines.push("|------|----------|------|----------|-------------|----------|--------|---------------|");
428
+ for (const firm of firms) {
429
+ lines.push(`| ${firm.name}${firm.editorsChoice ? " ⭐" : ""} | ${firm.discount} | ${firm.code} | ${firm.category} | ${firm.profitSplit} | ${firm.drawdownType} | ${firm.payoutSpeed} | ${firm.minAccountSize}–${firm.maxAccountSize} |`);
430
+ }
431
+ lines.push("");
432
+ lines.push(`> Use code **${PFDF_CODE}** at checkout. Compare live at [propfirmdealfinder.com/compare](${PFDF_COMPARE_URL}).`);
433
+ lines.push("");
434
+ lines.push(`> Download the free app: [iOS](${PFDF_IOS_URL}) | [Windows](${PFDF_WINDOWS_URL}) | [Chrome](${PFDF_CHROME_URL})`);
435
+ return lines.join("\n");
436
+ }
437
+ //# sourceMappingURL=data.js.map