Oxford Ledge
Ask your assistant; it reads the public record: SEC filings, 13F, insider trades, BDC loans.
| Endpoint | https://www.oxfordledge.com/mcp (streamable-http) |
|---|---|
| Registry version | 3.8.3 |
| Now | 60 tools · grade C (74) · pin ts_851fe6cf03a013a32b4cb8c1bd023ea5 · protocol 2025-06-18 |
| First / last listed | 2026-10-27 00:40 UTC / 2026-10-27 00:40 UTC |
| Grade over time | 2026-10-27: C (74), 60 tools |
Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.
Tools: get_13f_holdings get_activist_stakes get_anomaly_flags get_bdc_list get_business_summary get_capital_allocation get_corporate_events get_debt_maturities get_economic_calendar get_fails_to_deliver get_fred_data get_fundamentals get_insider_activity get_institutional_consensus get_institutional_holders get_news get_portfolio_positions get_sector_breakdown get_value_investing_fact get_yield_curve ol_13f_filer_analytics ol_13f_filer_search ol_bank_structure_events ol_bdc_borrower_dispersion ol_bdc_borrower_news_today ol_bdc_common_borrowers ol_bdc_credit_quality ol_bdc_fee_load ol_bdc_loan_pricing_trend ol_bdc_mark_changes ol_bdc_top_borrowers ol_bond_directory_screen ol_borrower_profile ol_cftc_cot ol_earnings_calendar ol_etf_lookthrough ol_fdic_bank ol_federal_contracts ol_filing_search ol_form_d_raises ol_fundamentals_screen ol_glossary_term ol_insider_cluster_scan ol_insider_recent_buys ol_institutional_confluence ol_intrinsic_value ol_issuer_kpi_panel ol_maturity_wall ol_operating_kpis ol_ownership_changes ol_paper_portfolio ol_paper_trade ol_patents ol_peer_fundamentals ol_short_interest_trend ol_treasury_debt reading_list_annotate search_bdc_borrower search_company search_news_archive
get_13f_holdings | What one institutional filer owns: the largest positions in its latest SEC 13F-HR, plus quarter-over-quarter changes. Accepts a numeric CIK (preferred), a ticker (BRK-B or BRK.B for Berkshire), or a filer NAME (3-80 characters): ONE name-prefix match in the curated 13F filer universe resolves to its CIK (`resolved_from` says so); an ambiguous name is refused with candidates, never guessed. Returns params: fund*, max_holdings |
get_activist_stakes | Schedule 13D/13G >5% beneficial-owner filings for a ticker -- event-driven stake-building, unlike quarterly 13F. Returns {ticker, count, filings}, newest first, limit default 50 (hard cap 200); rows carry filer_name, filing_date, form_type, shares, percent_of_class, accession_number and is_activist (a FORM-TYPE label: true iff the form is a 13D, not a judgement). `reports_zero` is the filer's own params: ticker*, limit |
get_anomaly_flags | Run 15 red-flag screens on a ticker (short interest >12%, Altman Z distress, net leverage >4x, negative FCF, P/E >50, dividend yield >6%, insider net selling, revenue decline, payout >90%, goodwill >50% of assets, SBC >10% of revenue, declining ROIC and others). Returns {ticker, available, flags, count}; each flag is {severity, label, detail, scrollTo}: SEVERITY IS ONLY 'red' OR 'amber', red first params: ticker* |
get_bdc_list | Roster of the ACTIVE BDCs tracked by Oxford Ledge, sorted by portfolio size -- our coverage, not the whole BDC universe; wound-down issuers are excluded by design. No arguments. Returns {bdcs, count}; per BDC: ticker, name, listed (false for a non-traded BDC carried under a pseudo-ticker such as AGTC), holdingCount, totalFairValue (whole USD, latest filing), filingDate, lastParsed and a reconcilia params: none |
get_business_summary | First-party business summary for a ticker from its SEC annual report (10-K Item 1; 20-F Item 4 for a foreign private issuer): a curated, verifier-gated overview of what the company does. Returns `summary` (a one-line status line, NOT the content), `available`, `business_summary` (prose truncated at ~2400 chars), `short_summary`, and provenance (source_form, source_period, source_url, generated_at) params: ticker* |
get_capital_allocation | Where a company sent its cash, up to 30 annual labels. Returns {ticker, capitalAllocation:{years, periods, dividends, netBuybacks, grossRepurchases, netDebtChange, acquisitions, sharesOut, isDilutive, basis, summary}} as PARALLEL ARRAYS aligned to `years` (newest first, fiscal labels). netBuybacks is a NET, DERIVED DILUTION PROXY, not a buyback figure (repurchases minus issuance, IPO proceeds and params: ticker* |
get_corporate_events | The 20 most recent 8-K item events for a ticker from Oxford Ledge's 8-K index of SEC EDGAR, NEWEST FIRST -- a hard cap with no caller-settable limit, so a recent-events feed, not a history. Returns {ticker, events, count, coverage, summary}; each event is {ticker, eventDate, eventType, headline, description, counterparty, counterpartyTicker, sourceUrl, source}. `eventType` is Oxford Ledge's 8-K it params: ticker*, event_type |
get_debt_maturities | Forward debt maturity ladder parsed from the latest 10-K/20-F footnote. Returns {ticker, maturities:[{year, amount}], thereafter, confidence, confidence_score, source, validation}. AMOUNTS ARE IN MILLIONS OF USD, not raw dollars -- 400 means $400M. THE LADDER IS AS OF the filing date, not today: the current-year bucket may already be repaid or refinanced. Check `validation` (the balance-sheet cros params: ticker* |
get_economic_calendar | Upcoming US macro DATA-RELEASE DATES (a schedule, not estimates) for the 9 tracked releases (CPI, Core CPI, Employment Situation, GDP, Jobless Claims, PCE, PPI, Industrial Production, Retail Sales). Returns {days, events, count, source_status, error}; each event is only {date, event, release_id, release_name} -- NO prior/consensus/actual values, and FOMC meeting dates are NOT included. `days` look params: days |
get_fails_to_deliver | SEC fails-to-deliver history for one ticker -- the settlement-failure side of short pressure. Returns {ticker, days, history, count, window, coverage, as_of, summary}; each row is {date (settlement date), fails (SHARES, not dollars), price (USD), description}, OLDEST-FIRST. `days` (default 180, hard cap 730) is anchored to the latest LOADED settlement date, not to today; `end_date` ends it elsewhe params: ticker*, days, end_date |
get_fred_data | One series from Oxford Ledge's macro SNAPSHOT (about 41 FRED / Treasury series, newest observation each) by FRED id. Returns {series, data: {series, name, value, date, ytdChange, _source}, observation: 'latest_only', note} -- ONE observation, never a history. A series outside the snapshot returns {series, error, available}. THIRD-PARTY LICENSED SERIES ARE REFUSED WITH THE REASON (2026-09-13): the params: series* |
get_fundamentals | Full XBRL financial history for one ticker. Returns {ticker, fundamentals:{years, periods, metrics, balanceSheet, quarterly, basis, as_of}, source_period, as_of}: `years` is newest-first, UP TO 30 annual labels, and every entry under `metrics` / `balanceSheet` is a PARALLEL ARRAY aligned to it by index (revenue, netIncome, opCF, capex, epsDiluted, totalDebt, cash, derived fcf and margins ...). Dol params: ticker* |
get_insider_activity | Recent Form 4 insider transactions for one ticker. Returns {ticker, transactions}: THE 20 MOST RECENT TRANSACTION ROWS ONLY, newest by filing date; `days` filters within those 20 (it never reaches past the 20). Rows carry insiderName, position (the role, the load-bearing signal), transType (the raw SEC code: 'P' open-market buy, 'S' sale, 'A' grant, 'M' option exercise; filter on it yourself), sha params: ticker*, days |
get_institutional_consensus | Which tickers the tracked 13F filers most widely hold in common. Returns {as_of_quarter, tickers_found, min_funds, consensus}; each row is {ticker, issuer_name, fund_count, total_value_usd, total_shares, funds}, ranked by fund_count then value. `consensus` is truncated to top_n (default 50, cap 200) while `tickers_found` is the FULL count meeting min_funds (default 2, cap 20). COMMON STOCK ONLY: a params: top_n, min_funds |
get_institutional_holders | Which institutions hold one ticker, and which way they moved. Returns {ticker, holders, total_holders, as_of_quarter, coverage}. `holders`: the first `limit` (default 25, max 100) of the top 100 by value; `total_holders` is the TRUE filer count. Each holder carries fund_name, fund_cik, shares, value_usd (whole USD), quarter, change_type and pct_change vs that fund's prior quarter. Check `coverage. params: ticker*, limit |
get_news | Read the Oxford Ledge news archive by ticker and/or keyword, newest first. Default limit 25, hard cap 100; no pagination offset. THE RESPONSE SHAPE DEPENDS ON THE ARGUMENTS: ticker only returns {articles, total}; any free-text query returns {articles, count} with richer rows (publisher, snippet, sentimentScore, tickers, tags). Handle both. `sentiment` is a LABEL string, NOT a number. Query matchin params: query, ticker, limit |
get_portfolio_positions | Stored positions of one saved portfolio. Returns {portfolio_id, positions, error} on EVERY path (error is null on success, a string on failure, and positions is [] either way). Each position is ONLY {ticker, shares, costBasis (whole USD, may be null)}, ticker-sorted. THERE IS NO PRICE LEG: no price, market value, gain/loss or weight -- value the positions yourself. An unknown portfolio_id yields p params: portfolio_id |
get_sector_breakdown | How Oxford Ledge's covered universe splits across sectors and industries (the whole catalog, NOT a portfolio). No arguments. Returns a BARE LIST of {sector, industry, tickerCount, totalMarketCap}, one row per sector+industry PAIR -- aggregate rows to get a sector total. totalMarketCap IS ALWAYS NULL: a count-only breakdown. Rows with a blank sector are excluded; a blank industry is null. Each indu params: none |
get_value_investing_fact | Curated value-investing principle, historical fact or attributed paraphrase from Oxford Ledge's corpus (~2,000 entries about Buffett, Graham, Munger, Klarman and others). THE WORDING IS NOT VERIFIED against the primary source: none is a verbatim quotation unless `verbatim` is true -- so never present the text as the author's exact words, and credit it with the `attribution` line. THE SHAPE DEPENDS params: category, query |
get_yield_curve | US Treasury yield curve, plus (by default) the wider macro dashboard. TWO DIFFERENT SHAPES. include_history=true returns PARALLEL ARRAYS over 11 tenors (1M..30Y) -- today, ~91 days ago and ~1 year ago -- for steepening/inversion work. include_history false (the DEFAULT) returns {data: [...]}, a flat LIST of latest-value rows that mixes the Treasury tenors WITH CPI, unemployment, GDP, mortgage-rate params: include_history |
ol_13f_filer_analytics | Institutional-filer behavior derived purely from 13F holdings: concentration (top-N %, normalized HHI), turnover, and persistence (long-term holder vs fast money) for one filer. Pass a NUMERIC CIK (a ticker will not resolve here; ol_13f_filer_search finds it). Returns {summary, fund, quarter, n_positions, reported_long_equity_value, analytics}. The denominator is the filer's REPORTED 13F long-equi params: fund* |
ol_13f_filer_search | Resolve a 13F FILER name to its CIK -- the front door to get_13f_holdings and ol_13f_filer_analytics when you know the manager ('Berkshire Hathaway', 'Baupost') and not its CIK (search_company resolves ISSUERS). Returns {summary, query, filers: [{cik, name, last_filing, page_url}], count}; name-PREFIX matches rank first. THE UNIVERSE IS CURATED -- the filers Oxford Ledge ingests plus featured file params: query*, limit |
ol_bank_structure_events | FDIC STRUCTURAL EVENTS for one bank -- failures, assisted resolutions, mergers, acquisitions, charter changes -- newest first, with is_failure flagged from the FDIC CHANGECODE taxonomy. Pass `cert` (FDIC certificate) or `name`; a name resolves against active institutions AND closed charters, so a FAILED or merged-away bank (Signature Bank, First Republic) IS found, and `resolved_from` says which c params: cert, name, limit |
ol_bdc_borrower_dispersion | MOAT: cross-lender loan-pricing DISPERSION for one private-credit borrower -- how N different BDCs each price the SAME loan (spread / mark / fair value); when one BDC marks a borrower S+550 @ 98 and another S+575 @ 99, the lenders disagree on the credit. Pass `borrower_norm` (a key from ol_bdc_top_borrowers or search_bdc_borrower, or a name). Returns {summary, borrower_norm, count, lender_count, t params: borrower_norm*, limit, include_stale |
ol_bdc_borrower_news_today | MOAT / daily pulse: recent VERIFIED news for the private-credit borrowers held across MULTIPLE BDCs -- 'what broke recently for the cross-BDC borrowers I should watch?'. Returns {summary, count, items}; each item is {borrower, headline, source, url, date}. Matcher-VERIFIED only (>=0.9 confidence) and headline + link only, NO provider summary, so a false attribution cannot surface. Caps: limit defa params: since_days, min_holders, limit |
ol_bdc_common_borrowers | Borrowers common to a GIVEN SET of BDCs -- the cross-portfolio set question ('what do ARCC, OBDC and AGTC all lend to?') in ONE call. Returns per borrower: borrower, borrower_norm, holder_count, holder_tickers, holders ([{ticker, name}]), total_fair_value and total_par_amount in USD, and as_of_oldest/as_of_newest. Each BDC is read at ITS most recent filing, so rows MIX filing dates -- read as_of_r params: bdc_tickers*, min_holders, limit |
ol_bdc_credit_quality | BDC non-accrual credit-deterioration signal: the share of debt fair value on non-accrual (loans that stopped paying) in the latest filing, plus the trailing-quarter trend. Returns {summary, ticker, latest, trend}; `trend` is OLDEST-FIRST. flagged_pct is a percentage over the DETERMINATE-flag denominator, never total_debt_fv, and it is deliberately NULL (withheld, never zero) when determinate cover params: ticker*, quarters |
ol_bdc_fee_load | BDC fee load + NII-based dividend coverage for ONE fiscal year (not a series). Returns {summary, ticker, fiscal_year, fees, dividend_coverage}; `fees` holds base and incentive fees and net investment income in whole USD; `dividend_coverage` is NII divided by dividends paid, a ratio (0.92 means 0.92x) -- under 1.0 means the dividend is funded partly from capital. Fee RATE percentages and the divide params: ticker* |
ol_bdc_loan_pricing_trend | Per-quarter loan-pricing trend for ONE BDC, from the parsed schedule of investments: fair-value-weighted average credit spread, average mark and position counts, OLDEST-FIRST. Returns {summary, ticker, count, spread_unit, trend}. `weighted_avg_spread` is in BASIS POINTS, normalized at the store (the as-filed column mixes percent and bps, so never average a raw spread yourself). Prefer `priced_borr params: ticker*, quarters |
ol_bdc_mark_changes | MOAT / private credit: the largest quarter-over-quarter MARK moves across a SET of BDC portfolios -- 'which borrowers got marked up or down the most last quarter, and by whom' in ONE deterministic call. Returns {increases, decreases}, each a global ranking; each row is {borrower, portfolio, prior_mark, latest_mark, mark_delta, prior_filing, latest_filing}. Marks are percent of par, fair-value-weig params: bdc_tickers*, limit |
ol_bdc_top_borrowers | MOAT / BDC discovery: the private-credit borrowers syndicated across the MOST BDCs, ranked by ACTIVE lender count (holder_count_active), then holder_count, then exposure -- the entrypoint for the BDC/private-credit category. Returns {summary, count, borrowers}; each row is {borrower, borrower_norm (the key other ol_bdc_* tools take), holder_count, total_fair_value (whole USD, latest filings), indu params: min_holders, limit |
ol_bond_directory_screen | Screen the corporate-bond browse directory by issuer name, grade (IG or HY), and optional coupon and maturity bands. Returns {summary, count, total_matching, bonds}; each bond is {key, issuer_name, coupon (percent number), coupon_type, maturity_date, grade, source_etf}. REFERENCE DATA ONLY -- no price, yield, spread or trade activity, and no security identifier. `grade` is the coarse SOURCE BUCKET params: issuer, grade, coupon_min, coupon_max, maturity_after, maturity_before, limit, offset |
ol_borrower_profile | Profile + verified M&A/ownership history for one private-credit borrower. Pass `borrower_norm` (a key from ol_bdc_top_borrowers, or a name). Returns {summary, borrower_norm, borrower, profile, acquisitions, count, public_footprint}: the `profile` (description, industry, known_lenders, lien_position, estimated_size, notes, source), VERIFIED-only `acquisitions` (unaudited or refuted events never sur params: borrower_norm*, limit |
ol_cftc_cot | CFTC Commitments-of-Traders positioning for THREE curated markets (keys gold, crude_oil, sp500). Pass `market` for its weekly history, NEWEST FIRST (names are normalised: 'wti', 'GOLD', 'e-mini s&p' resolve), or omit it for the latest report across the three. Returns {summary, market, matched_market, rows}. mm_* and open_interest are CONTRACT counts, not dollars, and mm_* cover ONE speculative cat params: market, limit |
ol_earnings_calendar | Upcoming EARNINGS DATES for one issuer, provenance-labelled: published_events are dates the ISSUER posted on its own IR calendar; estimate is an Oxford Ledge projection from the issuer's SEC filing cadence, with its confidence. Returns {ticker, published_events, published_events_degraded, estimate, provenance_rule, note}. The two are NOT merged: prefer a published date yourself, and never present params: ticker* |
ol_etf_lookthrough | ETF look-through: expand up to 25 ETF tickers into the underlying holdings the fund ITSELF filed on Form N-PORT. Returns {summary, count, etfs, units}; per ETF {etf, name, category, net_assets, in_catalog, series_id, opaque, reason, period_date, holdings_available, top_holdings}. `top_holdings` is value-ranked (default 10, hard cap 50), each with underlying_ticker, issuer_name, value_usd (whole US params: tickers*, top_holdings |
ol_fdic_bank | FDIC-insured banks and thrifts. Pass `query` for a name PREFIX search against ACTIVE institutions (largest-asset first), or omit it for the largest active institutions. Returns {summary, query?, found?, institutions}. UNITS: `asset` and `dep` are THOUSANDS of dollars. The store is loaded ACTIVE-ONLY, so a bank that merged away or failed is absent by construction; a name miss says whether a structu params: query, limit |
ol_federal_contracts | Federal-contract obligation history for a ticker, OR the fiscal-year leaderboard -- for government-revenue-dependence diligence. TWO SHAPES: exactly one of `ticker` or `fiscal_year` is REQUIRED (both is refused). With `ticker`: per-fiscal-year obligations (USD, the ten largest recipients, dropped_unresolved), NEWEST FY FIRST; with fiscal_year only: a leaderboard of the public companies on Oxford L params: ticker, fiscal_year, limit |
ol_filing_search | MOAT (PAID -- AI): semantic retrieval over EMBEDDED SEC filings for a ticker. Ask a natural-language question ('what did they say about supply-chain risk?') and get the most relevant filing CHUNKS back from an Oxford Ledge hybrid retrieval (lexical BM25 plus a dense pass, fused by reciprocal rank). This is the ONE metered tool: it draws on your daily AI quota (25 searches/day, UTC reset, plus a bu params: ticker*, query*, k |
ol_form_d_raises | Recent SEC Form D private-placement filings from the SEC's QUARTERLY Form D data set -- newest first, optionally scoped to an industry group and/or a trailing filing-date window. Returns {summary, count, days, industry, offerings}. Amounts are whole USD as disclosed; total_offering_amount is a ceiling, not money raised. The data set lands about one quarter after quarter-end, so a short `days` wind params: industry, days, limit |
ol_fundamentals_screen | Threshold screen over up to 10 caller-supplied tickers (extras named in `dropped`) on latest-year SEC EDGAR XBRL fundamentals. Optional criteria: min_revenue, min_free_cash_flow, min_ebit_margin_pct, min_gross_margin_pct, max_debt_to_assets_pct, min_current_ratio, min_net_income (whole USD; *_pct as percentage numbers). Each result carries verdict: pass, fail (a reported value misses a threshold, params: tickers*, min_revenue, min_free_cash_flow, min_ebit_margin_pct, min_gross_margin_pct, max_debt_to_assets_pct, min_current_ratio, min_net_income |
ol_glossary_term | Oxford Ledge's editorial GLOSSARY: ~1,500 finance and investing terms written for lifelong students of the market -- definition, worked example, etymology, pronunciation, related terms (see-also), and the learning paths that teach the concept. Look up one term by name (case and punctuation tolerant: 'first lien', 'convexity', 'duration'). Use it to ground explanations in the SAME definitions the p params: term* |
ol_insider_cluster_scan | FLAGSHIP MOAT: scan for ACTIVE multi-insider cluster-buy/sell signals (distinct-actor Form 4 clusters with statistical strength). THREE GRAINS: pass `tickers` for a watchlist, a single `ticker` for that name's recent fired clusters, or NEITHER for the MARKET-WIDE scan (top fired clusters across every ticker, one row per ticker and direction). Returns {summary, count, events, grain, since_days, lim params: tickers, ticker, since_days, min_insider_count, limit |
ol_insider_recent_buys | Recent OPEN-MARKET insider PURCHASES (SEC code 'P') across the Oxford Ledge issuer catalog (~5.3k tickers) -- a daily insider screen. Returns {summary, since_days, count, buys}, NEWEST FIRST; each buy carries ticker, filing and transaction dates, insiderName, position, shares, pricePerShare, totalValue (USD), url. since_days default 30 (hard cap 180), limit default 25 (hard cap 100). SAMPLING TRAP params: since_days, limit, common_only, min_value |
ol_institutional_confluence | Quarter-aligned institutional-confluence read for one ticker: 13F accumulation x insider Form 4 net buying x buy-cluster confirmation, fused on the ticker's reference 13F quarter. Returns a `verdict` (confluence_accumulation / confluence_distribution / partial_net_adding / partial_net_reducing / neutral, or insufficient_13f_coverage / insufficient_history, never coerced to neutral), plus `institut params: ticker* |
ol_intrinsic_value | Per-share intrinsic value from SEC EDGAR XBRL -- three textbook models: a levered-FCF DCF, a Greenwald Earnings-Power-Value, and the Graham number. Returns {summary, ticker, available, dcf_per_share, epv_per_share, graham_number, inputs, assumptions, as_of}; all three values are USD PER SHARE. `assumptions` are FIXED model constants, not per-name (10% discount, 2.5% terminal growth, 10y horizon, 2 params: ticker* |
ol_issuer_kpi_panel | Tier-3 KPI PANEL for ONE issuer -- curated per-issuer metric rows (ARR, RPO/cRPO, NRR, logo retention, DAU/MAU, capacity utilization, ...) extracted from SEC filing exhibits, WITH the issuer's own metric definitions and full provenance. ABSENCE IS FIRST-CLASS: a row with value=null and is_absence=true is an answer (metric_availability says why), not a gap to fill from memory. Values are confidence params: ticker*, metric, period, industry, limit |
ol_maturity_wall | The corporate DEBT MATURITY WALL: scheduled bond/loan maturities aggregated by year -- total_by_year, by_rating, top_issuers_by_year, peak_year, concentration. Amounts are USD MILLIONS (see `units`). `by_rating` splits IG vs HY by an Oxford Ledge LEVERAGE HEURISTIC, NOT agency ratings. Market-wide when `tickers` is omitted, or scoped to up to 50 tickers. Coverage is companies with PARSED maturity params: tickers, by_sector |
ol_operating_kpis | Industry OPERATING KPIs for ONE issuer -- the operational numbers the income statement hides (same-store sales, RevPAR, load factor, medical-loss ratio, net interest margin, TEU, rig count ...) extracted from SEC filings across 26 configured industries, each switched on by a deployment flag, so live coverage is a subset. Returns the issuer's panel {ticker, industry, metrics, available, partial, to params: ticker* |
ol_ownership_changes | Quarter-over-quarter institutional accumulation/distribution for one ticker: each fund's position classified new / increased / decreased / exited over the last ~4 quarters -- the 'who is moving on X?' flow read. Returns {summary, ticker, quarters_analyzed, counts, new_positions, increased, decreased, exited, split_suspect, ...}. `counts` is always the COMPLETE tally; `limit` bounds EACH row list ( params: ticker*, limit |
ol_paper_portfolio | YOUR paper (practice) portfolio on Oxford Ledge -- the same snapshot the web sandbox at /practice/ renders: {portfolio, positions, totals, position_theses, summary, has_portfolio}. include_history: true adds recent_trades (history_limit 1..50, default 20). A user with NO portfolio gets {has_portfolio: false, how_to_start} -- an honest empty, not an error. Positions are marked to the platform's DEL params: include_history, history_limit |
ol_paper_trade | WRITE (opt-in): place a market order in YOUR paper (practice) portfolio -- the same engine, quote, fills and rejections as the web sandbox; no real money, no real account. One of TWO mutating tools here (the other is reading_list_annotate). DEFAULTS TO A DRY RUN: with _dry_run omitted or true nothing is placed and you get {dry_run: true, tool, args, idempotency_key, preview, message}. Re-call with params: ticker*, side*, shares*, thesis, _dry_run, _idempotency_key |
ol_patents | Recent USPTO patent filings for a ticker (innovation-intensity diligence). Returns {summary, ticker, count, filings}, NEWEST FIRST; `limit` default 50, hard cap 200, so this is a recent slice, never a full portfolio, and `count` is the number RETURNED. TRAP: a non-empty patent_number marks a continuation of an already-granted PARENT, NOT a grant of this application -- read the status field. Filing params: ticker*, limit |
ol_peer_fundamentals | Side-by-side latest-fiscal-year fundamentals for a peer set (the FIRST 6 unique tickers; the rest are named in `dropped`). Returns {summary, count, peers, dropped, as_of}; a peer is {ticker, available, fiscal_year, revenue, net_income, eps_diluted, free_cash_flow, gross_margin_pct, ebit_margin_pct, debt_to_assets_pct, current_ratio, stockholders_equity}. Dollar figures are whole USD; *_pct are per params: tickers* |
ol_short_interest_trend | FINRA short-interest trend for one ticker: the biweekly settlement-date short-percent series, OLDEST-FIRST. Returns {summary, ticker, count, as_of, trend}; each point is EXACTLY {date (settlement date), shortPct (a PERCENTAGE number)} -- no share counts and no days-to-cover. `points` default 6, max 26 (about one year). A fortnightly SNAPSHOT with a reporting lag, not a live short-float figure; `as params: ticker*, points |
ol_treasury_debt | US Treasury debt composition from the Monthly Statement of the Public Debt. Omit BOTH args for the newest month's full class breakdown; pass security_type AND security_class together for that one class's monthly history (only one of them is refused). Returns {summary, rows}. AMOUNTS ARE IN MILLIONS OF USD -- a 28,000,000 value means $28 trillion. The breakdown holds component AND Total rows, so su params: security_type, security_class, limit |
reading_list_annotate | WRITE (opt-in): save or update YOUR private note on an Oxford Ledge reading-list entry. One of TWO mutating tools here (the other is ol_paper_trade). DEFAULTS TO A DRY RUN: with _dry_run omitted or true you get a proposal {dry_run: true, tool, args, idempotency_key, message}, not a save. Re-call with _dry_run: false AND that same _idempotency_key to execute; a repeat of the same key returns {repla params: slug*, body*, _dry_run, _idempotency_key |
search_bdc_borrower | Which BDCs lend to one private-credit borrower, matched fuzzily on name -- Oxford Ledge's parse of SEC EDGAR BDC schedules of investments (ol-derived), not filer-published data. Returns borrowerName, borrowerNorm (the key the ol_bdc_* tools take), description, descriptionSource, industry, aggregates over CURRENT holders (totalHolders, totalParAmount, totalFairValue, avgMarkedPrice) and `holders`, params: query*, limit, offset |
search_company | Resolve a company name, ticker or CIK to its SEC identity. Returns {results, count}, up to 20 matches (hard cap); each result carries SEC-EDGAR-derivable identity fields only: ticker, companyName, cik, sicCode, exchange, fiscalYearEnd, tickerStatus (check it before treating a match as a live listing). A null field is OMITTED from the row, so never assume `cik` is present. Matching is a literal sub params: query* |
search_news_archive | TF-IDF full-text search over the archived news headlines + the pulse-fact corpus (a lexical index, not embeddings). Returns {query, count, results, index}; each result is {type ('news' | 'fact'), text, score (0-1 cosine), metadata}. `limit` default 20, hard cap 50. The first call after a restart pays the index build (seconds); later calls are fast. RESTRICTED posture: a keyed tool (refuses anonymo params: query*, limit |
Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.