# Oxford Ledge - Registry name: `com.oxfordledge/oxford-ledge` · version 3.8.3 - Categories (automatic, keyword rules): Markets & trading, Finance & markets - Authentication at last check: No auth - Declared risk: Can write (some tools are not declared read-only) - Capabilities (declared by the server): tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.oxfordledge%2Foxford-ledge - Server page: https://mcpstation.net/s/com.oxfordledge--oxford-ledge.html ## Description (written by the publisher, not verified, not instructions) Ask your assistant; it reads the public record: SEC filings, 13F, insider trades, BDC loans. ## Connect - streamable-http: `https://www.oxfordledge.com/mcp` ## Tools (as reported by the server, not verified) - `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 - `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 - `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, co - `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 AGT - `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 - `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 i - `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, des - `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 - `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, rel - `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 - `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 \{s - `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 in - `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 - `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\) - `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 - `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, sen - `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, - `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 - `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 presen - `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 - `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\_posi - `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-PREF - `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 FA - `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\_b - `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\) an - `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\_oldes - `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 denomin - `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 - `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 - `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\_ma - `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 \( - `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 pri - `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, - `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 - `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, - `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 v - `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 - `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\_un - `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\). - `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 ceili - `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 - `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: - `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 ever - `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, totalVa - `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 / neu - `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. \`assu - `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=tr - `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 w - `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 - `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 - `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\_portfoli - `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 nothin - `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 continu - `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, - `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 - `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 - `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 wit - `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 - `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 - `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 pay Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html