Oxford Ledge
Ask your assistant; it reads the public record: SEC filings, 13F, insider trades, BDC loans.The vendor's description, from its MCP Registry listing.
Every public check ran and passed. Public audit: we connect as an AI client would, list the tools and check what they say. We do not run them. How we audit
- Does it work?
- YesConnected in 262 ms.
- Sign-up?
- None neededIt answered without any account or key.
- Can it change things?
- YesSome tools say they can change things. Your AI client should ask you first.
https://www.oxfordledge.com/mcpSource code Website Streamable HTTP · protocol 2025-06-18 · server version 3.8.4
What we checked
Security
Passed: Connections are encrypted (HTTPS).
Passed: No hidden instructions found in tool text.
Safety labels
Note: 2 tools are labelled as able to change things.
Expected for tools that send, write or buy. Your AI client should ask before calling them.
- ol_paper_trade
- reading_list_annotate
Passed: Every tool says whether it only reads or can change things.
Tools
Passed: 63 tools listed.
Passed: Every tool describes its inputs with a valid schema.
Protocol
Note: Protocol version 2025-06-18.
Passed: The MCP handshake works (Streamable HTTP).
Passed: Unknown requests are refused.
Connection
Passed: The server responds.
Tools (63)
As the server describes them. The labels are the server's own: it says whether each tool only reads or can change things.
- get_13f_holdingsWhat one institutional filer owns: the largest positions in its latest SEC 13F-HR, plus QoQ changes (keyed calls only). Accepts a numeric CIK (preferred), a ticker (BRK-B or BRK.B for Berkshire), or…Read-only
- get_activist_stakesSchedule 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…Read-only
- get_anomaly_flagsRun 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 >…Read-only
- get_bdc_listRoster 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}…Read-only
- get_business_summaryFirst-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 `sum…Read-only
- get_capital_allocationWhere a company sent its cash, up to 30 annual labels. Returns {ticker, capitalAllocation:{years, periods, dividends, netBuybacks, grossRepurchases, netDebtChange, acquisitions, sharesOut, isDilutive…Read-only
- get_corporate_eventsThe 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 {…Read-only
- get_debt_maturitiesForward 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 MIL…Read-only
- get_economic_calendarUpcoming US macro DATA-RELEASE DATES (a schedule, not estimates) for the 8 tracked releases (CPI, Employment Situation, GDP, Jobless Claims, PCE, PPI, Industrial Production, Retail Sales). Returns {d…Read-only
- get_fails_to_deliverSEC 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 d…Read-only
- get_fred_dataOne 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}, observatio…Read-only
- get_fundamentalsFull 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 an…Read-only
- get_insider_activityRecent 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 pa…Read-only
- get_institutional_consensusWhich 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_sha…Read-only
- get_institutional_holdersWhich 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 v…Read-only
- get_newsRead 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 {arti…Read-only
- get_portfolio_positionsStored 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…Read-only
- get_sector_breakdownHow 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}, on…Read-only
- get_value_investing_factCurated 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…Read-only
- get_yield_curveUS 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 ag…Read-only
- ol_13f_filer_analyticsInstitutional-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…Read-only
- ol_13f_filer_searchResolve 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 resolv…Read-only
- ol_bank_structure_eventsFDIC 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` (…Read-only
- ol_bdc_borrower_dispersionMOAT: 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…Read-only
- ol_bdc_borrower_news_todayMOAT / 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, item…Read-only
- ol_bdc_common_borrowersBorrowers 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, hold…Read-only
- ol_bdc_credit_qualityBDC 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, l…Read-only
- ol_bdc_fee_loadBDC 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…Read-only
- ol_bdc_loan_pricing_trendPer-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, ticke…Read-only
- ol_bdc_mark_changesMOAT / 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 ca…Read-only
- ol_bdc_top_borrowersMOAT / 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…Read-only
- ol_bond_directory_screenScreen 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, c…Read-only
- ol_borrower_profileProfile + 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, acquis…Read-only
- ol_cftc_cotCFTC 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'…Read-only
- ol_earnings_calendarUpcoming 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 c…Read-only
- ol_etf_lookthroughETF 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_ca…Read-only
- ol_fdic_bankFDIC-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?, foun…Read-only
- ol_federal_contractsFederal-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…Read-only
- ol_filing_searchMOAT (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 ba…Read-only
- ol_form_d_raisesRecent 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, co…Read-only
- ol_fundamentals_screenThreshold 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,…Read-only
- ol_glossary_termOxford 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), an…Read-only
- ol_insider_cluster_scanFLAGSHIP 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 t…Read-only
- ol_insider_recent_buysRecent 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 bu…Read-only
- ol_institutional_confluenceQuarter-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`…Read-only
- ol_intrinsic_valuePer-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,…Read-only
- ol_issuer_kpi_panelTier-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 me…Read-only
- ol_learn_checkGrade the learner's answer to a LEARN check. item 'self_check' with section (the check's step index) and selected_option (0-based) is graded on the server for every caller, no key needed, and returns…Read-only
- ol_learn_findFind an Oxford Ledge LEARN lesson to teach: 40 learning paths and 433 modules written for lifelong students and investors. No arguments lists the paths plus a start_here module; `path` lists one path…Read-only
- ol_learn_lessonTeach one Oxford Ledge LEARN module a step at a time. Call with module_id and no step for the outline, then step=0, 1, 2 and so on. A step is one lesson section as body_markdown, plus where the lesso…Read-only
- ol_maturity_wallThe 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`).…Read-only
- ol_operating_kpisIndustry 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 ...) extra…Read-only
- ol_ownership_changesQuarter-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?…Read-only
- ol_paper_portfolioYOUR 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: t…Read-only
- ol_paper_tradeWRITE (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 h…Can change things
- ol_patentsRecent 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…Read-only
- ol_peer_fundamentalsSide-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, availabl…Read-only
- ol_short_interest_trendFINRA 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 dat…Read-only
- ol_treasury_debtUS 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 cla…Read-only
- reading_list_annotateWRITE (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 t…Can change things
- search_bdc_borrowerWhich 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,…Read-only
- search_companyResolve 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, ci…Read-only
- search_news_archiveTF-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'), tex…Read-only
Audit history
- Nov 13Passed
What we sent
Every request in this audit, with the answer and how long it took. We never send credentials and never call a tool.
| Request | Answer | Time |
|---|---|---|
| initialize | HTTP 200 | 262 ms |
| initialized | HTTP 202 | 129 ms |
| tools/list | HTTP 200 | 169 ms |
| unknown-method | HTTP 200 | 153 ms |
Run this server, or disagree with the result?
Fix the issue and it shows in the next weekly audit, or email us to ask for a re-audit or to dispute a finding. Read how we audit for what each check means.
{
"mcpServers": {
"com-oxfordledge-oxford-ledge": {
"type": "http",
"url": "https://www.oxfordledge.com/mcp"
}
}
}{
"server": {
"name": "com.oxfordledge/oxford-ledge",
"title": "Oxford Ledge",
"url": "https://www.oxfordledge.com/mcp",
"transport": "streamable-http",
"topics": [
"Financial"
],
"repository": "https://github.com/hs902/oxford-ledge-mcp",
"website": "https://www.oxfordledge.com/mcp",
"inRegistry": true
},
"audit": {
"slug": "com-oxfordledge-oxford-ledge",
"url": "https://www.oxfordledge.com/mcp",
"auditedAt": "2026-11-13T16:25:36.459Z",
"firstAuditedAt": "2026-11-13T15:56:54.693Z",
"auditor": "1.0.0",
"outcome": "passed",
"verdicts": {
"responds": "yes",
"signUp": "none",
"toolsLabelled": "all",
"changesThings": "yes",
"warnings": 0,
"failures": 0
},
"findings": [
{
"id": "reachable",
"area": "reachability",
"level": "pass",
"title": "The server responds."
},
{
"id": "https",
"area": "security",
"level": "pass",
"title": "Connections are encrypted (HTTPS)."
},
{
"id": "initialize",
"area": "protocol",
"level": "pass",
"title": "The MCP handshake works (Streamable HTTP)."
},
{
"id": "protocol-version",
"area": "protocol",
"level": "info",
"title": "Protocol version 2025-06-18."
},
{
"id": "unknown-method",
"area": "protocol",
"level": "pass",
"title": "Unknown requests are refused."
},
{
"id": "tools-list",
"area": "tools",
"level": "pass",
"title": "63 tools listed."
},
{
"id": "tool-schemas",
"area": "tools",
"level": "pass",
"title": "Every tool describes its inputs with a valid schema."
},
{
"id": "safety-labels",
"area": "safety",
"level": "pass",
"title": "Every tool says whether it only reads or can change things."
},
{
"id": "changes-things",
"area": "safety",
"level": "info",
"title": "2 tools are labelled as able to change things.",
"detail": "Expected for tools that send, write or buy. Your AI client should ask before calling them.",
"evidence": [
"ol_paper_trade",
"reading_list_annotate"
]
},
{
"id": "tool-poisoning",
"area": "security",
"level": "pass",
"title": "No hidden instructions found in tool text."
}
],
"server": {
"name": "oxford-ledge",
"version": "3.8.4",
"protocolVersion": "2025-06-18",
"transport": "streamable-http"
},
"toolCount": 63,
"toolsHash": "d10de912a2705ead0df24902080d9a5d775f299cd518c89c12acb921f7c42485",
"latencyMs": 262,
"history": [
{
"date": "2026-11-13",
"outcome": "passed",
"tools": 63
}
]
},
"tools": [
{
"name": "get_13f_holdings",
"title": "13F Holdings of a Fund",
"readOnly": true,
"destructive": false,
"description": "What one institutional filer owns: the largest positions in its latest SEC 13F-HR, plus QoQ changes (keyed calls only). Accepts a numeric CIK (preferred), a ticker (BRK-B or BRK.B for Berkshire), or…"
},
{
"name": "get_activist_stakes",
"title": "Activist Stakes (13D/13G)",
"readOnly": true,
"destructive": false,
"description": "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…"
},
{
"name": "get_anomaly_flags",
"title": "Red-Flag Screens",
"readOnly": true,
"destructive": false,
"description": "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 >…"
},
{
"name": "get_bdc_list",
"title": "BDC List",
"readOnly": true,
"destructive": false,
"description": "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}…"
},
{
"name": "get_business_summary",
"title": "Business Summary",
"readOnly": true,
"destructive": false,
"description": "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 `sum…"
},
{
"name": "get_capital_allocation",
"title": "Capital Allocation",
"readOnly": true,
"destructive": false,
"description": "Where a company sent its cash, up to 30 annual labels. Returns {ticker, capitalAllocation:{years, periods, dividends, netBuybacks, grossRepurchases, netDebtChange, acquisitions, sharesOut, isDilutive…"
},
{
"name": "get_corporate_events",
"title": "Corporate Events",
"readOnly": true,
"destructive": false,
"description": "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 {…"
},
{
"name": "get_debt_maturities",
"title": "Debt Maturities",
"readOnly": true,
"destructive": false,
"description": "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 MIL…"
},
{
"name": "get_economic_calendar",
"title": "Economic Calendar",
"readOnly": true,
"destructive": false,
"description": "Upcoming US macro DATA-RELEASE DATES (a schedule, not estimates) for the 8 tracked releases (CPI, Employment Situation, GDP, Jobless Claims, PCE, PPI, Industrial Production, Retail Sales). Returns {d…"
},
{
"name": "get_fails_to_deliver",
"title": "Fails to Deliver",
"readOnly": true,
"destructive": false,
"description": "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 d…"
},
{
"name": "get_fred_data",
"title": "FRED Series",
"readOnly": true,
"destructive": false,
"description": "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}, observatio…"
},
{
"name": "get_fundamentals",
"title": "Company Fundamentals",
"readOnly": true,
"destructive": false,
"description": "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 an…"
},
{
"name": "get_insider_activity",
"title": "Insider Activity",
"readOnly": true,
"destructive": false,
"description": "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 pa…"
},
{
"name": "get_institutional_consensus",
"title": "Most Widely Held (13F)",
"readOnly": true,
"destructive": false,
"description": "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_sha…"
},
{
"name": "get_institutional_holders",
"title": "Institutional Holders",
"readOnly": true,
"destructive": false,
"description": "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 v…"
},
{
"name": "get_news",
"title": "Company News",
"readOnly": true,
"destructive": false,
"description": "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 {arti…"
},
{
"name": "get_portfolio_positions",
"title": "Portfolio Positions",
"readOnly": true,
"destructive": false,
"description": "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…"
},
{
"name": "get_sector_breakdown",
"title": "Sector Breakdown",
"readOnly": true,
"destructive": false,
"description": "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}, on…"
},
{
"name": "get_value_investing_fact",
"title": "Value Investing Facts",
"readOnly": true,
"destructive": false,
"description": "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…"
},
{
"name": "get_yield_curve",
"title": "Treasury Yield Curve",
"readOnly": true,
"destructive": false,
"description": "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 ag…"
},
{
"name": "ol_13f_filer_analytics",
"title": "13F Filer Analytics",
"readOnly": true,
"destructive": false,
"description": "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…"
},
{
"name": "ol_13f_filer_search",
"title": "13F Filer Search",
"readOnly": true,
"destructive": false,
"description": "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 resolv…"
},
{
"name": "ol_bank_structure_events",
"title": "Bank Structure Events",
"readOnly": true,
"destructive": false,
"description": "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` (…"
},
{
"name": "ol_bdc_borrower_dispersion",
"title": "BDC Loan Mark Dispersion",
"readOnly": true,
"destructive": false,
"description": "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…"
},
{
"name": "ol_bdc_borrower_news_today",
"title": "BDC Borrower News",
"readOnly": true,
"destructive": false,
"description": "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, item…"
},
{
"name": "ol_bdc_common_borrowers",
"title": "BDC Common Borrowers",
"readOnly": true,
"destructive": false,
"description": "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, hold…"
},
{
"name": "ol_bdc_credit_quality",
"title": "BDC Credit Quality",
"readOnly": true,
"destructive": false,
"description": "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, l…"
},
{
"name": "ol_bdc_fee_load",
"title": "BDC Fee Load",
"readOnly": true,
"destructive": false,
"description": "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…"
},
{
"name": "ol_bdc_loan_pricing_trend",
"title": "BDC Loan Pricing Trend",
"readOnly": true,
"destructive": false,
"description": "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, ticke…"
},
{
"name": "ol_bdc_mark_changes",
"title": "BDC Mark Changes",
"readOnly": true,
"destructive": false,
"description": "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 ca…"
},
{
"name": "ol_bdc_top_borrowers",
"title": "BDC Top Borrowers",
"readOnly": true,
"destructive": false,
"description": "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…"
},
{
"name": "ol_bond_directory_screen",
"title": "Bond Directory Screen",
"readOnly": true,
"destructive": false,
"description": "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, c…"
},
{
"name": "ol_borrower_profile",
"title": "Private Borrower Profile",
"readOnly": true,
"destructive": false,
"description": "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, acquis…"
},
{
"name": "ol_cftc_cot",
"title": "CFTC Commitments of Traders",
"readOnly": true,
"destructive": false,
"description": "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'…"
},
{
"name": "ol_earnings_calendar",
"title": "Earnings Calendar",
"readOnly": true,
"destructive": false,
"description": "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 c…"
},
{
"name": "ol_etf_lookthrough",
"title": "ETF Look-Through",
"readOnly": true,
"destructive": false,
"description": "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_ca…"
},
{
"name": "ol_fdic_bank",
"title": "FDIC Bank Lookup",
"readOnly": true,
"destructive": false,
"description": "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?, foun…"
},
{
"name": "ol_federal_contracts",
"title": "Federal Contracts",
"readOnly": true,
"destructive": false,
"description": "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…"
},
{
"name": "ol_filing_search",
"title": "SEC Filing Search",
"readOnly": true,
"destructive": false,
"description": "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 ba…"
},
{
"name": "ol_form_d_raises",
"title": "Form D Private Raises",
"readOnly": true,
"destructive": false,
"description": "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, co…"
},
{
"name": "ol_fundamentals_screen",
"title": "Fundamentals Screen",
"readOnly": true,
"destructive": false,
"description": "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,…"
},
{
"name": "ol_glossary_term",
"title": "Glossary Term",
"readOnly": true,
"destructive": false,
"description": "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), an…"
},
{
"name": "ol_insider_cluster_scan",
"title": "Insider Cluster Scan",
"readOnly": true,
"destructive": false,
"description": "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 t…"
},
{
"name": "ol_insider_recent_buys",
"title": "Recent Insider Buys",
"readOnly": true,
"destructive": false,
"description": "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 bu…"
},
{
"name": "ol_institutional_confluence",
"title": "Institutional Confluence",
"readOnly": true,
"destructive": false,
"description": "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`…"
},
{
"name": "ol_intrinsic_value",
"title": "Intrinsic Value Estimate",
"readOnly": true,
"destructive": false,
"description": "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,…"
},
{
"name": "ol_issuer_kpi_panel",
"title": "Issuer KPI Panel",
"readOnly": true,
"destructive": false,
"description": "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 me…"
},
{
"name": "ol_learn_check",
"title": "Lesson Check",
"readOnly": true,
"destructive": false,
"description": "Grade the learner's answer to a LEARN check. item 'self_check' with section (the check's step index) and selected_option (0-based) is graded on the server for every caller, no key needed, and returns…"
},
{
"name": "ol_learn_find",
"title": "Find a Lesson",
"readOnly": true,
"destructive": false,
"description": "Find an Oxford Ledge LEARN lesson to teach: 40 learning paths and 433 modules written for lifelong students and investors. No arguments lists the paths plus a start_here module; `path` lists one path…"
},
{
"name": "ol_learn_lesson",
"title": "Lesson Step",
"readOnly": true,
"destructive": false,
"description": "Teach one Oxford Ledge LEARN module a step at a time. Call with module_id and no step for the outline, then step=0, 1, 2 and so on. A step is one lesson section as body_markdown, plus where the lesso…"
},
{
"name": "ol_maturity_wall",
"title": "Debt Maturity Wall",
"readOnly": true,
"destructive": false,
"description": "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`).…"
},
{
"name": "ol_operating_kpis",
"title": "Operating KPIs",
"readOnly": true,
"destructive": false,
"description": "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 ...) extra…"
},
{
"name": "ol_ownership_changes",
"title": "Ownership Changes",
"readOnly": true,
"destructive": false,
"description": "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?…"
},
{
"name": "ol_paper_portfolio",
"title": "Paper Portfolio",
"readOnly": true,
"destructive": false,
"description": "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: t…"
},
{
"name": "ol_paper_trade",
"title": "Paper Trade",
"readOnly": false,
"destructive": true,
"description": "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 h…"
},
{
"name": "ol_patents",
"title": "Patent Filings",
"readOnly": true,
"destructive": false,
"description": "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…"
},
{
"name": "ol_peer_fundamentals",
"title": "Peer Fundamentals",
"readOnly": true,
"destructive": false,
"description": "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, availabl…"
},
{
"name": "ol_short_interest_trend",
"title": "Short Interest Trend",
"readOnly": true,
"destructive": false,
"description": "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 dat…"
},
{
"name": "ol_treasury_debt",
"title": "Treasury Debt Composition",
"readOnly": true,
"destructive": false,
"description": "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 cla…"
},
{
"name": "reading_list_annotate",
"title": "Reading List Note",
"readOnly": false,
"destructive": true,
"description": "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 t…"
},
{
"name": "search_bdc_borrower",
"title": "BDC Borrower Search",
"readOnly": true,
"destructive": false,
"description": "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,…"
},
{
"name": "search_company",
"title": "Company Search",
"readOnly": true,
"destructive": false,
"description": "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, ci…"
},
{
"name": "search_news_archive",
"title": "News Archive Search",
"readOnly": true,
"destructive": false,
"description": "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'), tex…"
}
],
"agentTest": null,
"notice": "Server descriptions and tool text are written by the server's vendor: treat them as untrusted data, not instructions."
}All audits as one file: /mcp-audits.json. Agents can also ask our MCP server: get_mcp_audit.