eli-cli 0.2.0

Internal CLI library for the `eli` crate. Use `cargo install market-search`.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
[
        {
            "name": "finance_timeseries",
            "description": "Universal data spine: OHLCV time series with cross-asset correlation analytics. 8 providers auto-detected from ticker pattern: stocks/ETFs/futures→Yahoo, FRED macro series→FRED (also FRED: prefix), IBKR:→Interactive Brokers 15-min delayed futures/FX/equities (e.g. IBKR:FUT:CL:NYMEX, IBKR:CASH:EUR:IDEALPRO), CLEV:→Cleveland Fed daily inflation nowcast (CLEV:CPI, CLEV:COREPCE), KX*→Kalshi candlesticks, numeric 6+digit→Polymarket price history, PYTH:→24/7 oracle, BN:→Binance crypto (2019+ depth). Mix sources freely in one call — top-level `sources` field lists distinct providers actually returned. Every candle has a 't' timestamp — check it for data freshness. Presets expand to curated groups.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "preset": {
                        "type": "string",
                        "description": "17 presets: macro, yield_curve, liquidity, credit (ICE BofA OAS), financial_conditions (NFCI/STLFSI4/VIX), recession (Sahm/spreads/claims), fed_balance_sheet (QE/QT), housing (Case-Shiller/starts/mortgage), labor (NFP/JOLTS/wages), inflation (CPI/PCE/sticky/median), real_rates (TIPS), consumer_credit (delinquency/SLOOS), forex_majors, crypto, energy (WTI/Brent/NG/RBOB/HO/Gasoil via IBKR), commodities (CL/GC/SI/HG/grains/softs via IBKR), treasuries (ZT/ZF/ZN/ZB/VIX futures via IBKR)."
                    },
                    "tickers": {
                        "type": "string",
                        "description": "Comma-separated. Stocks: AAPL,SPY,CL=F. FRED: UNRATE,T10Y2Y. IBKR futures: IBKR:FUT:CL:NYMEX, IBKR:FUT:GC:COMEX. IBKR FX: IBKR:CASH:EUR:IDEALPRO. IBKR equities: IBKR:STK:2222:TADAWUL. Cleveland Fed: CLEV:CPI,CLEV:COREPCE. Pyth: PYTH:OIL,PYTH:BTC. Kalshi: KXNBERRECESSQ-Q1-2026. Polymarket: 609655. Binance: BN:BTCUSDT. Mix freely in one call."
                    },
                    "range": {
                        "type": "string",
                        "description": "Lookback: 30m, 1h, 4h, 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y (default: 1y)"
                    },
                    "granularity": {
                        "type": "string",
                        "description": "Candle interval: 1m, 5m, 15m, 30m, 1h, 1d, 1w, 1mo (default: 1d)"
                    },
                    "as_of": {
                        "type": "string",
                        "description": "End timestamp for the window (RFC3339 or YYYY-MM-DD). Pin this for reproducible cache hits and historical reconstruction. Defaults to now."
                    },
                    "start": {
                        "type": "string",
                        "description": "Explicit window start (RFC3339 or YYYY-MM-DD). Must be used with end."
                    },
                    "end": {
                        "type": "string",
                        "description": "Explicit window end (RFC3339 or YYYY-MM-DD). Must be used with start."
                    },
                    "provider": {
                        "type": "string",
                        "description": "Force a specific provider (auto|yahoo|fred|ibkr|pyth|binance). Default auto routes by ticker prefix."
                    },
                    "max_points_per_ticker": {
                        "type": "integer",
                        "description": "Safety cap. Errors if window×granularity would exceed this; suggests a coarser granularity."
                    }
                }
            }
        },
        {
            "name": "finance_rate_path",
            "description": "Aggregated Polymarket+Kalshi probabilities per FOMC meeting (hold/cut/hike buckets). DERIVED — combines multiple prediction markets per meeting via volume-weighted average. Returns: meetings[] (per-meeting hold/cut/hike + n_markets + volume_total, dates snapped to actual FOMC decision day), year_view (cuts_distribution, eoy_rate_distribution, cut_by_meeting_distribution from cardinality markets), compound_paths[] (joint multi-meeting Pause-Pause-Pause paths). For raw individual markets use finance_odds.",
            "inputSchema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "name": "finance_odds",
            "description": "Prediction market discovery + live pricing (Kalshi + Polymarket). Use single specific words for search — multi-word phrases return garbage. Examples: 'recession', 'tariff', 'fed', 'oil', 'iran'. Returns probabilities, volume (USD), and bid/ask. For probability HISTORY over time, use finance_timeseries with the market ticker instead.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "search": {
                        "type": "string",
                        "description": "Single-word keyword works best (e.g. recession, tariff, fed, bitcoin, oil, iran, hormuz)"
                    },
                    "live": {
                        "type": "boolean",
                        "description": "Fetch fresh prices from exchange APIs (default: true)"
                    },
                    "orderbook": {
                        "type": "boolean",
                        "description": "Include Polymarket orderbook depth in returned markets"
                    },
                    "depth": {
                        "type": "integer",
                        "description": "Number of bid/ask levels per outcome. Defaults to 5 if orderbook=true. Polymarket only."
                    },
                    "limit": {
                        "type": "integer",
                        "description": "Maximum markets to return. Default 12."
                    },
                    "list_series": {
                        "type": "boolean",
                        "description": "Kalshi only. List available series (top-level groupings)."
                    },
                    "list_events": {
                        "type": "boolean",
                        "description": "List available events (mid-level groupings)."
                    },
                    "list_markets": {
                        "type": "boolean",
                        "description": "List available markets (leaf binary contracts)."
                    },
                    "list_tags": {
                        "type": "boolean",
                        "description": "Polymarket only. List available tags."
                    },
                    "provider": {
                        "type": "string",
                        "enum": ["kalshi", "polymarket", "auto"],
                        "description": "Force a specific venue. Default auto."
                    },
                    "series": {
                        "type": "string",
                        "description": "Kalshi series ticker filter (e.g. KXFEDDECISION)."
                    },
                    "event": {
                        "type": "string",
                        "description": "Event ticker filter."
                    },
                    "market": {
                        "type": "string",
                        "description": "Specific market ticker or Polymarket numeric ID."
                    },
                    "min_volume": {
                        "type": "integer",
                        "description": "Minimum 24h USD volume filter on local-cache search."
                    },
                    "top": {
                        "type": "integer",
                        "description": "Return top N markets after ranking. Different from `limit`: limit=API page size, top=post-rank cutoff."
                    },
                    "sort_by": {
                        "type": "string",
                        "enum": ["relevance", "volume", "delta_prob", "delta_yes_price", "delta_volume"],
                        "description": "Sort key for local-cache search. Default relevance."
                    },
                    "category": {
                        "type": "string",
                        "description": "Category filter."
                    },
                    "profile": {
                        "type": "string",
                        "enum": ["auto", "macro", "broad"],
                        "description": "Query profile. macro narrows to Fed/CPI/etc., broad casts wider."
                    },
                    "country": {
                        "type": "string",
                        "description": "Country filter for local-cache search (v1: US only)."
                    },
                    "cursor": {
                        "type": "string",
                        "description": "Pagination cursor for Kalshi list endpoints."
                    },
                    "deltas_only": {
                        "type": "boolean",
                        "description": "Only return markets that changed since last sync. Requires sync delta index."
                    },
                    "explain": {
                        "type": "boolean",
                        "description": "Include compact ranking explanations in local-cache search output."
                    },
                    "include_mentions": {
                        "type": "boolean",
                        "description": "Include mention/speech-prediction markets (filtered by default)."
                    },
                    "max_pages": {
                        "type": "integer",
                        "description": "Max pages to fetch from Kalshi list endpoints. Default unbounded."
                    },
                    "min_delta_pp": {
                        "type": "number",
                        "description": "Minimum absolute probability move (percentage points) since last sync. Requires sync delta index."
                    },
                    "status": {
                        "type": "string",
                        "description": "Filter by status (e.g. open, closed)."
                    }
                }
            }
        },
        {
            "name": "finance_options",
            "description": "Options chain with IV (from Yahoo), put/call OI ratio, max pain, and vol skew. Defaults to summary mode with ±10% strikes around current price. No Greeks (no Black-Scholes) — IV is passthrough from exchange. Max pain filters out pre-split strike artifacts. For full chain across ALL expirations with IV term structure and OI concentration, pass all=true. Top-level `atm_iv` mirrors `metrics.atm_iv` (jq `.atm_iv`); in `all=true` mode it reflects the nearest non-expired snapshot's ATM IV.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "ticker": {
                        "type": "string",
                        "description": "Underlying ticker (e.g. SPY, NVDA, AAPL, QQQ)"
                    },
                    "all": {
                        "type": "boolean",
                        "description": "Fetch ALL expirations with cross-expiry analytics: IV term structure, OI concentration, max pain range. Large output auto-saves to file."
                    },
                    "summary": {
                        "type": "boolean",
                        "description": "Return summary metrics only, no full chain (default: true)"
                    },
                    "near_money": {
                        "type": "number",
                        "description": "Only return strikes within this % of the underlying (e.g. 5)"
                    },
                    "target_dte": {
                        "type": "integer",
                        "description": "Target days to expiry. If set without explicit expiry, picks the nearest listed expiry."
                    },
                    "expirations": {
                        "type": "boolean",
                        "description": "List available expirations only (no chain data)."
                    },
                    "expiry": {
                        "type": "string",
                        "description": "Specific expiration date (YYYY-MM-DD). Use --expirations first to see valid dates."
                    },
                    "type": {
                        "type": "string",
                        "enum": ["calls", "puts", "both"],
                        "description": "Filter chain by option type. Default both."
                    }
                },
                "required": ["ticker"]
            }
        },
        {
            "name": "finance_fundamentals",
            "description": "Quarterly financial statements: income statement, balance sheet, cash flow. Not for ETFs — use finance_timeseries instead.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "tickers": {
                        "type": "string",
                        "description": "Comma-separated list of tickers, e.g. AAPL,MSFT,NVDA. Single ticker returns array of 1."
                    }
                },
                "required": ["tickers"]
            }
        },
        {
            "name": "finance_search",
            "description": "Search for ticker symbols or FRED macro series IDs by name. Use before timeseries when you don't know the exact ticker/series ID.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "Search query (e.g. tesla, unemployment, S&P 500, crude oil)"
                    }
                },
                "required": ["query"]
            }
        },
        {
            "name": "finance_filings",
            "description": "Recent SEC filings (8-K, 10-K, 10-Q) for a ticker. Can download and inline document text for analysis.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "ticker": {
                        "type": "string",
                        "description": "Stock ticker (e.g. TSLA, NVDA, AAPL)"
                    },
                    "forms": {
                        "type": "string",
                        "description": "Comma-separated form types (e.g. 10-K,10-Q). Default: 8-K,10-K,10-Q"
                    },
                    "limit": {
                        "type": "integer",
                        "description": "Max filings (default: 5)"
                    },
                    "include_text": {
                        "type": "boolean",
                        "description": "Download and inline document text excerpt"
                    },
                    "max_chars": {
                        "type": "integer",
                        "description": "Max chars for inline excerpt"
                    }
                },
                "required": ["ticker"]
            }
        },
        {
            "name": "finance_schedule",
            "description": "Earnings calendar (Nasdaq) + macro release calendar (FRED). Shows upcoming CPI, PCE, GDP, jobs, FOMC, claims, and earnings dates. Use min_cap (e.g. '50B') to filter large-cap earnings only.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "kind": {
                        "type": "string",
                        "description": "all | earnings | macro (default: macro)"
                    },
                    "from": {
                        "type": "string",
                        "description": "Start date YYYY-MM-DD"
                    },
                    "to": {
                        "type": "string",
                        "description": "End date YYYY-MM-DD"
                    },
                    "date": {
                        "type": "string",
                        "description": "Single date YYYY-MM-DD (overrides from/to)"
                    },
                    "major": {
                        "type": "boolean",
                        "description": "Macro: keep just major US releases"
                    },
                    "ticker": {
                        "type": "string",
                        "description": "Filter earnings by ticker(s), comma-separated"
                    },
                    "min_cap": {
                        "type": "string",
                        "description": "Min market cap for earnings (e.g. 10B, 500M, 1T)"
                    },
                    "time": {
                        "type": "string",
                        "description": "Filter: pre-market | after-hours"
                    },
                    "macro_profile": {
                        "type": "string",
                        "enum": ["broad", "market", "major"],
                        "description": "Macro filtering profile. broad=all releases, market=common-watched only, major=top-tier only. The boolean `major` is a shortcut for macro_profile=major."
                    }
                }
            }
        },
        {
            "name": "finance_auctions",
            "description": "Recent US Treasury auction results: bid-to-cover, direct/indirect bidder pct, high yield, total accepted, total tendered, CUSIP, security type, security term, auction/issue/maturity dates.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "security_type": {
                        "type": "string",
                        "description": "all, bill, note, bond, tips, frn (default: all)"
                    },
                    "limit": {
                        "type": "integer",
                        "description": "Number of recent auctions (default: 50)"
                    }
                }
            }
        },
        {
            "name": "finance_cot",
            "description": "CFTC Commitment of Traders weekly positions (specs vs commercials, longs/shorts/net, OI, week-over-week change). Released Friday for prior Tuesday. Natural query matching — use 'crude', 'gold', '10-year', 'spx', 'yen', 'treasury'. Auto-detects financial vs disaggregated report. Includes historical percentile rank across the requested window.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "Natural query: gold, crude, 10-year, spx, treasury, yen, bitcoin"
                    },
                    "weeks": {
                        "type": "integer",
                        "description": "Weeks of history (default: 12)"
                    },
                    "report": {
                        "type": "string",
                        "description": "disaggregated (commodities) or financial (rates/FX/equity). Auto-detected if omitted"
                    },
                    "limit": {
                        "type": "integer",
                        "description": "Max distinct contracts to return (default: 15). Use higher for broad queries"
                    }
                }
            }
        },
        {
            "name": "finance_nyfed",
            "description": "NY Fed Markets data: overnight reference rates (SOFR, EFFR, OBFR, TGCR, BGCR with percentiles and volume), ON RRP facility (total amount, counterparties, rate), SOMA holdings (Fed balance sheet by security type), primary dealer positions. Real-time Fed plumbing data.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "kind": {
                        "type": "string",
                        "description": "rates (SOFR/EFFR/OBFR/TGCR/BGCR), rrp (reverse repo facility), soma (Fed balance sheet), dealers (primary dealer positions). Default: rates"
                    }
                }
            }
        },
        {
            "name": "finance_volsurface",
            "description": "CBOE volatility indices: VIX (30-day), VIX9D (9-day), VIX3M (3-month), VIX6M (6-month), VIX1Y (1-year), VVIX (vol-of-vol), OVX (oil), GVZ (gold), SKEW. Returns latest OHLC + optional history. Not a per-underlying strike/expiry implied-vol surface.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "symbols": {
                        "type": "string",
                        "description": "Comma-separated: VIX,VIX9D,VIX3M,VIX6M,VIX1Y,VVIX,OVX,GVZ,SKEW (default: all 9)"
                    },
                    "history": {
                        "type": "integer",
                        "description": "Trading days of history (default: latest only)"
                    }
                }
            }
        },
        {
            "name": "finance_stress",
            "description": "OFR Financial Stress Index (composite + credit/equity/funding/safe-assets/volatility components). Daily, updated T+1. Index is z-scored vs OFR's own historical baseline; raw values returned without categorical labeling.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "range": {
                        "type": "integer",
                        "description": "Days of history (default: 30)"
                    }
                }
            }
        },
        {
            "name": "finance_fiscal",
            "description": "Treasury fiscal data: daily national debt total (public + intragovernmental, in billions), daily Treasury operating cash balance (deposits/withdrawals), average interest rates by security type.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "kind": {
                        "type": "string",
                        "description": "debt (daily national debt), statement (Treasury cash balance), interest (avg rates by security). Default: debt"
                    }
                }
            }
        },
        {
            "name": "finance_ecb",
            "description": "ECB Statistical Data Warehouse (SDMX): EUR exchange rates, Euro STR, M3 money supply, EURIBOR term structure, euro area yield curve, Eurosystem balance sheet. No auth required. Presets or custom SDMX dataset+key.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "preset": {
                        "type": "string",
                        "description": "eurusd | fx_majors (USD/GBP/JPY/CHF/CNY) | estr (Euro Short-Term Rate) | m3 (money supply) | euribor (1M/3M/6M/12M term structure) | yield_curve (3M-30Y spot rates) | balance_sheet (Eurosystem total assets)"
                    },
                    "dataset": {
                        "type": "string",
                        "description": "SDMX dataset ID (EXR, FM, EST, BSI, YC). Use with key."
                    },
                    "key": {
                        "type": "string",
                        "description": "SDMX dimension key (e.g. D.USD.EUR.SP00.A). Use with dataset."
                    },
                    "start": {
                        "type": "string",
                        "description": "Start period YYYY-MM-DD or YYYY-MM. Default: 2025-01-01"
                    },
                    "end": {
                        "type": "string",
                        "description": "End period (YYYY-MM-DD or YYYY-MM). Defaults to now."
                    }
                }
            }
        },
        {
            "name": "finance_eia",
            "description": "EIA (U.S. Energy Information Administration): weekly petroleum inventories (crude oil, gasoline, distillate stocks) and natural gas storage. Requires EIA_API_KEY env var (free registration at eia.gov/opendata).",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "preset": {
                        "type": "string",
                        "description": "crude (US crude oil stocks excl SPR) | gasoline | distillate | all (crude+gasoline+distillate+Cushing) | nat_gas (Lower 48 working storage)"
                    },
                    "start": {
                        "type": "string",
                        "description": "Start date YYYY-MM-DD"
                    },
                    "length": {
                        "type": "integer",
                        "description": "Max observations (default 52 = ~1 year weekly)"
                    },
                    "route": {
                        "type": "string",
                        "description": "Custom EIA API route (e.g. petroleum/stoc/wstk/data/). Overrides preset."
                    }
                }
            }
        },
        {
            "name": "finance_bis",
            "description": "BIS (Bank for International Settlements): global central bank policy rates, total assets, credit-to-GDP gaps, property prices, real effective exchange rates. Covers 40-50 economies. No auth.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "preset": {
                        "type": "string",
                        "description": "policy_rates (US/EU/JP/GB/CH/CN) | assets (CB total assets in local ccy) | credit_gap (credit-to-GDP gap) | property (real residential prices) | eer (real effective exchange rates)"
                    },
                    "countries": {
                        "type": "string",
                        "description": "Comma-separated ISO codes: US,XM(Euro area),JP,GB,CH,CN,AU,CA. Default: US,XM,JP,GB"
                    },
                    "dataset": {
                        "type": "string",
                        "description": "BIS SDMX dataset (e.g. WS_CBPOL). Use with `key` for direct query, bypassing presets."
                    },
                    "key": {
                        "type": "string",
                        "description": "SDMX dimension key (e.g. M.US+XM+JP+GB). Use with `dataset`."
                    },
                    "start": {
                        "type": "string",
                        "description": "Start period YYYY-MM. Default: 2020-01"
                    }
                }
            }
        },
        {
            "name": "finance_boj",
            "description": "Bank of Japan: monetary base, BOJ balance sheet (total assets, JGB holdings, ETF holdings), TANKAN business sentiment DI, call rate, M2/M3 money stock, USD/JPY. New Feb 2026 API, no auth.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "preset": {
                        "type": "string",
                        "description": "policy_rate | call_rate | monetary_base | balance_sheet | money_stock (M2+M3) | tankan (Mfg+Non-Mfg large DI) | fx (USD/JPY)"
                    },
                    "start": {
                        "type": "string",
                        "description": "Start date YYYYMM format. Default: 202401"
                    },
                    "db": {
                        "type": "string",
                        "description": "BOJ database name (e.g. IR01, FM01, BS01, CO). Use with codes for direct query."
                    },
                    "codes": {
                        "type": "string",
                        "description": "BOJ series codes (comma-separated)."
                    }
                }
            }
        },
        {
            "name": "finance_boe",
            "description": "Bank of England: Bank Rate, SONIA, gilt yields (5Y/10Y/20Y par and zero-coupon), M4 money supply, GBP exchange rates. CSV endpoint, no auth.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "preset": {
                        "type": "string",
                        "description": "bank_rate | sonia | gilts (5Y/10Y/20Y yields) | m4 (money supply) | fx (GBP/USD, GBP/EUR, GBP/JPY) | all (dashboard: rate+SONIA+10Y+M4+GBPUSD)"
                    },
                    "codes": {
                        "type": "string",
                        "description": "Comma-separated BOE series codes (e.g. IUDBEDR,IUDSOIA,IUDMNPY). Use instead of preset for custom queries."
                    },
                    "start": {
                        "type": "string",
                        "description": "Start date DD/Mon/YYYY (e.g. 01/Jan/2025). Default: 01/Jan/2025"
                    },
                    "end": {
                        "type": "string",
                        "description": "End date DD/Mon/YYYY format like 01/Jan/2026, or 'now'. Defaults to now."
                    }
                }
            }
        },
        {
            "name": "finance_curve",
            "description": "Futures forward curve for commodities. Returns every contract month's price, front month price, back month price, raw spread (back-front), and spread_pct. Supported: oil/wti, brent, gold, silver, natgas, copper, platinum, palladium, gasoline/rbob, heating/ho.",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "commodity": {
                        "type": "string",
                        "description": "Commodity to chart: oil, brent, gold, silver, natgas, copper, platinum, palladium, gasoline, heating"
                    },
                    "months": {
                        "type": "integer",
                        "description": "Number of forward months to include (default 12, max 24)"
                    },
                    "list": {
                        "type": "boolean",
                        "description": "List supported commodities and exit (no curve data)."
                    }
                }
            }
        }
    ]