Oxford Ledge

com.oxfordledge由 oxfordledge.com 發布官方發布者v3.8.3更新於 Oct 24, 2026

Ask your assistant; it reads the public record: SEC filings, 13F, insider trades, BDC loans.

已驗證Streamable HTTP可網頁執行資料庫金融資料與分析

概覽

AI 產生的概覽

Oxford Ledge 讓助理查詢美國公開財務紀錄:SEC 申報與基本面、13F 與內部人持股、BDC 貸款帳簿,以及財政部、FRED、FDIC、USAspending、USPTO 和 CFTC 資料。

可以做什麼
依股票代號取得 SEC 基本面、申報文件、資本配置和債務到期結構,以及 8-K 公司事件和 Form D 私募發行。查詢機構持股:13F 持倉、申報人搜尋與分析、13D/13G 維權持股、內部人交易和交割失敗紀錄。探索 BDC 與私募信貸貸款帳簿:主要借款人、共同借款人、跨貸款人定價差異、估值變動、信用品質和費用負擔。讀取宏觀與聯邦參考資料:公債殖利率曲線、FRED 序列、CFTC 持倉、FDIC 銀行、聯邦合約和專利。從 Oxford Ledge 自編語料取得價值投資原則。
適用情境
適合需要助理根據美國公開財務紀錄作答的情境,例如公司基本面、誰持有或交易某檔股票、私募信貸基金借給了誰,或宏觀利率,並在每個答案中註明來源。
執行需求
可作為遠端託管端點執行,也可作為本機 Python 套件執行(Python 3.9 以上,無第三方相依套件,可用 uvx 執行)。OXFORD_LEDGE_URL 指向託管資料;未設定時只有獨立的 SEC EDGAR 和 FRED 工具可用。FRED 工具需要 FRED_API_KEY。OXFORD_LEDGE_API_KEY(或 X-API-Key 標頭)為選用,用於解鎖付費層級工具。
安裝前請注意
API 金鑰是憑證,透過標頭傳送;帶金鑰時純 http 位址會被拒絕,除非主機是回送位址。帶金鑰的呼叫會計入帳戶的 agent-API 配額,試用金鑰有每日上限。部分工具屬付費層級,無金鑰會被拒絕。資料有其自身條款,部分數字是 Oxford Ledge 的推導值而非來源原始資料;價值投資相關措辭未與原始出處核對。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Oxford Ledge,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.oxfordledge%2Foxford-ledge/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "oxford-ledge": {
      "type": "http",
      "url": "https://www.oxfordledge.com/mcp"
    }
  }
}

README

Oxford Ledge MCP Server

Last updated: 2026-10-10 Version: 3.8.3 (gov-public-data-only surface; CUSIP + third-party-FRED carve-outs)

Ask your assistant; it reads the public record. This package lets Claude, Codex, Cursor or any client that speaks the Model Context Protocol look things up in SEC filings and fundamentals, 13F holdings, insider trades, BDC loan books, and Treasury, FRED, FDIC, USAspending, USPTO and CFTC data, with the source named on the answer.

Install: pip install oxford-ledge-mcp (Python 3.9 or later, no third-party dependencies). Connect: step-by-step setup for each client, and a free API key, at oxfordledge.com/mcp. Registry: listed in the official MCP Registry as com.oxfordledge/oxford-ledge, with this package and, as its remote, the hosted server at https://www.oxfordledge.com/mcp.

Free on every Oxford Ledge plan, and a few tools run with no account at all (see Standalone mode below). The release notes come next; what the tools cover, the three modes, the tool list and the data terms follow them.

Release notes

This is 3.8.3. A patch release on 3.8.2: no tool or argument is added, renamed or removed. Fixed: in get_fundamentals' LongTermDebt series, a year the filer tags only the noncurrent portion now adds that year's LongTermDebtCurrent (us-gaap LongTermDebt's own definition) only where the filer's own tags prove the identity -- at least one year carries all three facts and every such year agrees -- and concepts names the composed cell; a filer's series can still mix composed and noncurrent-only years, and commercial paper and short-term borrowings are still never summed. Fixed: get_sec_filings refuses an unknown ticker or CIK (DATA_UNAVAILABLE) instead of answering an empty list as a success. Added: get_yield_curve carries unit: "percent".

3.8.2 (the previous cut). A patch release on 3.8.1: no tool or argument is added, renamed or removed, and no data key is renamed or removed. Added: ol_bdc_top_borrowers rows keep fair_value_holders and inactive_holder_fair_value (how much of a merged-away lender's frozen mark was left out of the cross-holder sum). Fixed: the refusals that tell an operator where an API key is made pointed at an on-screen control the Oxford Ledge site has since removed; they now say "press K or open Settings -> API keys", the route the site and the hosted server name. Changed: the get_debt_maturities and get_capital_allocation description text names the tier "Researcher", the name on the pricing page; the [Tier: plus] prefix and the refusal keep plus, the tier key the API takes. Other allowlist changes in this cut govern the hosted server's anonymous answers, not this package (see CHANGELOG).

3.8.1. A patch release on 3.8.0: no tool, argument or data key is added, renamed or removed. Changed: every request this package sends to Oxford Ledge -- the REST proxy calls and both hosted-tool legs, with or without a key -- now names the package version in its User-Agent, OxfordLedgeMCP/1.0 (oxford-ledge-mcp 3.8.1) instead of the constant OxfordLedgeMCP/1.0, so a report about a call can be matched to the release that made it; the requests it sends to SEC EDGAR and FRED are unchanged. Changed: get_corporate_events carries one more entry in its tool_notes: an empty (or null) description is a filing whose text has not been read yet (not fetched, or it could not be extracted), never a filing that says nothing -- open sourceUrl to read it. Docs: this README now notes the official MCP Registry listing (above).

3.8.0. It also carries everything in the 3.7.2 cut described next, which was never published on its own -- upgrading from 3.7.1 gets both. Changed: every tool description is now a short card of at most 1,300 characters -- what the tool returns, its key arguments, its source and the one caveat to know before calling -- so a connected session spends far fewer tokens before its first call (the 29 descriptions went from about 70,900 to about 23,700 characters). The caveats that used to live in the descriptions now ride each response in a tool_notes list, placed near the head of the payload; licence, redistribution and refusal notices stay verbatim in the descriptions. Changed: response_size.over_budget now judges the data without tool_notes, while chars still reports the whole payload. No tool, argument or data key is renamed or removed.

3.7.2 (folded into 3.8.0, never published separately). The changes below landed between 3.7.1 and the 3.8.0 description change. Removed: amount and status on get_corporate_events -- no writer ever filled them, so they were always null. New keys this package passes: filedName on get_13f_holdings (the issuer name exactly as filed, present only when the served name differs); on get_holders, shares_outstanding_period (the fiscal period of the share count ownership percentages divide by) and other_class_rows_excluded (rows filed under another share class of the same company, left out of the totals); priceApplicable on get_insider_trades rows (false for gifts, awards and other codes filed at a price of 0 -- the filed 0 is kept); grossRepurchases per year and totalGrossRepurchases on get_capital_allocation (null when untagged; netBuybacks is unchanged and is a dilution proxy); last_ingested_at and parent_patent_number on ol_patents; fred_notice on get_fred_data and get_yield_curve (the FRED terms-of-use sentence). New arguments: limit and days on get_insider_trades; common_only (default true) and min_value on ol_insider_recent_buys. Host-side changes (an installed 3.7.1 sees them too): Class A and Class B holdings are no longer mixed (Berkshire Hathaway Class A positions had been served as Class B holders); get_corporate_events fills counterparty from the M&A reader when its confidence is at least 0.5 (labelled derived). BDC (MCP-D): ol_bdc_borrower_dispersion now returns one row per LENDER (limit counts lenders; the tranches are nested under tranches; new lender_count, tranche_count, lender_row_basis, par_amount, cost_amount; stale lenders are left out unless include_stale is true, reported as stale_lenders_excluded; count now counts lenders), and a row whose par mark sits well below its cost mark on a loan otherwise marked near cost carries mark_basis / mark_basis_note (a partly funded commitment) and no yield; get_bdc_holdings' parseQuality is suspect whenever the book's fair value is refused. Borrower descriptions: research-written descriptions are labelled as written by an AI model from public web sources and not checked for copying; descriptions whose research cited paywalled or restricted databases are no longer served (descriptionWithheld says why), and descriptionSources appears where the source was recorded.

3.7.1. Its changes from 3.7.0 are in MIGRATING.md. No tool, argument or key is renamed or removed, no argument changes, and nothing new is sent. Six keys the Oxford Ledge server already sends now pass this package's fail-closed emit filter (3.7.0 stripped them): fairValueGap / fairValueGapNote on get_bdc_list and get_bdc_holdings -- the label and sentence that say when a BDC's parsed-row total disagrees with the filing's own total by more than 5%, including the under-count case where totalFairValue understates the book; withheld / parser_dialect_version on ol_bdc_credit_quality -- why a covered non-accrual rate is null (coverage_state implausible: more than 25% of the determinate debt book flagged AND the flagged loans marked near par, a sign Oxford Ledge's parse misread the schedule; a rate above 25% on loans marked below 85, or with no mark on file to test, is stated as unusually_high -- check the filing) and which parser generation read the quarter; verbatim on get_value_investing_fact; and issuerSelfFiled on get_insider_trades and ol_insider_recent_buys -- true when the Form 4 was filed under the company's own SEC ID, so the reporting-owner field names the company, not a person (3.7.0 served those same rows unlabelled; Oxford Ledge never counts them in its own totals, and neither should yours). On get_insider_trades the key is absent, never false, when the host that answered does not send it. Descriptions corrected to the wire: a get_value_investing_fact entry paraphrases or summarises the named author's ideas in wording not verified against the source (some entries may repeat the author's own words), so it is not a verbatim quotation unless verbatim is true -- attribution is the credit line to use; ol_bdc_top_borrowers ranks on the ACTIVE lender count; ol_bdc_mark_changes names its fair_value_refused exclusion. Host-side changes the descriptions now state (an installed 3.7.0 sees them too, under keys it already passes): reportedTotalFairValue is null, never 0, when the filing tags no usable total or when Oxford Ledge's stored reference describes a different filing than the book served; get_bdc_list's lastParsed is the date Oxford Ledge last wrote the BDC's registry row; MRCC (merged into HRZN) has left get_bdc_list; and ol_bdc_mark_changes' filters.debt_mark_band_pts is now [30, 105]. The 3.7.0 changes (the X-OL-MCP-Tool header, get_bdc_holdings paging, get_fails_to_deliver's end_date, _meta.response_size, the MORTGAGE30US / AAA refusal) are under their own heading there.

What the tools cover

29 tools for SEC filings & fundamentals, institutional & insider ownership, BDC/private-credit holdings, macro rates, and federal reference data (FDIC, USAspending, USPTO, CFTC). As of 3.1.0 this is a gov-public-data-only package: 28 of the 29 tools are backed by a U.S.-government public source — SEC EDGAR, FRED, U.S. Treasury, FDIC, USAspending, USPTO or CFTC — and the one exception, get_value_investing_fact, is Oxford Ledge-authored (basis: ol-authored, a curated corpus of attributed paraphrases and principles whose wording is not verified against the primary source -- author / source / attribution on every row, and verbatim is true only for a text verified against its primary source); there is no commercial-vendor feed anywhere in the surface, and third-party-copyright data is excluded (S&P/ICE/Moody's/CBOE FRED series are refused; FactSet-licensed bond CUSIPs are not disseminated). The software is MIT-licensed and Oxford-Ledge-authored; the data it returns carries its own terms (see Data license below). 27 of the 29 tools are reachable with no Oxford Ledge account: 4 run fully standalone against public APIs (2 SEC EDGAR, keyless; 2 FRED, needing a free FRED_API_KEY), and 23 more answer keyless once OXFORD_LEDGE_URL points at a running Oxford Ledge instance (14 name-proxies of the hosted MCP's anonymous /mcp transport plus 9 proxies of unauthenticated REST routes). Only the two Plus-tier tools (get_debt_maturities, get_capital_allocation) need an OXFORD_LEDGE_API_KEY. API mode with a key is still the recommended install: it attributes calls to your account, unlocks the two paid tools, and is the only leg that can refresh a stale EDGAR cache (see get_activist_stakes). (Vendor-fed quotes/estimates/screens/news and CUSIP bond lookups are no longer in the package — use the hosted Oxford Ledge MCP server for those.)

Upgrading from 1.x / 2.0.0 / 2.0.1? See MIGRATING.md (GitHub — this file and CHANGELOG.md are not in the wheel or the sdist). Short version: tool names, arg schemas, and config are unchanged across the 2.x series. Two substantive changes:

  1. 2.0 extracted the shared tool registry into an oxford_ledge_mcp_core subpackage consumed by both the pip-installable server and Oxford Ledge's in-tree server. No user-visible behavior change.
  2. 2.0.1 removed yfinance from this package (it was a ToS-violating scraper dependency). 11 tools that used to work standalone now require OXFORD_LEDGE_URL.
  3. 2.0.2 internal-refactor cleanup; no behavior change.

Install

bash
pip install oxford-ledge-mcp

The base install has zero third-party dependencies (stdlib only, since the 2.0.1 yfinance excision). The server ships with a built-in JSON-RPC-over-stdio fallback, so it runs as-is. For the canonical mcp protocol library path, install the optional extra:

bash
pip install "oxford-ledge-mcp[mcp]"

If the mcp package is present the server uses it; otherwise it transparently falls back to the built-in stdio loop. Either way, requires Python ≥ 3.9.

The two transports agree. The 3.4.0 publish vet drove both and found them disagreeing on three things a client keys on; all three are closed in 3.4.0. On both transports in 3.4.0: a tool error (AUTH_REQUIRED, INVALID_PARAMS, DATA_UNAVAILABLE, RATE_LIMITED, an unknown tool) comes back flagged isError: true, so an agent framework that retries or aborts on the flag sees the same thing either way; a call missing a required argument is refused as INVALID_PARAMS naming the argument, and so is a number outside its declared minimum / maximum (see Argument bounds below — nothing is clamped on either transport); and tools/list carries the derived [Tier: free|plus] prefix on every description. How to pick: the built-in loop when you want zero dependencies (this is what a bare pip install or plain uvx runs); the [mcp] extra when your client or framework wants the reference protocol library's own framing and schema validation. Neither serves different data.

Running via uvx (no install). You can skip pip install and let uv fetch + run the package on demand — set "command": "uvx", "args": ["oxford-ledge-mcp"]. Because the package declares no required deps, plain uvx oxford-ledge-mcp runs the built-in JSON-RPC loop (complete, zero extra deps); add the official library with "args": ["--with", "mcp", "oxford-ledge-mcp"] only if you specifically want its protocol handling. Both connect to Claude Desktop. On Windows, if Claude Desktop reports the server failed to start, it usually can't find uvx on the GUI's PATH — use the absolute path as the command (e.g. C:\\Users\\<you>\\.local\\bin\\uvx.exe).


Three modes

This server runs in one of three modes — pick the one that matches your Oxford Ledge subscription state. The pip package is the user-distributed canonical path; the in-tree dev server is for Oxford Ledge contributors only.

1. API mode (recommended) — all 29 tools

For full functionality, point the server at a running Oxford Ledge instance. Add to your claude_desktop_config.json:

json
{  "mcpServers": {    "oxford-ledge": {      "command": "oxford-ledge-mcp",      "env": {        "OXFORD_LEDGE_URL": "https://www.oxfordledge.com",        "OXFORD_LEDGE_API_KEY": "ol_live_..."      }    }  }}

OXFORD_LEDGE_URL should be the URL of an Oxford Ledge instance you have access to (the public app, your own self-hosted deploy, or http://localhost:5000 for local dev). If OXFORD_LEDGE_API_KEY is also set, a plain http:// URL is refused unless the host is a loopback address (127.0.0.1, 127.x.y.z, [::1]) or literally localhost -- the key would otherwise travel in the clear. Note that the 127.1 shorthand is not a parseable address and is refused; write 127.0.0.1. A key-carrying request to a loopback host is opened without any http_proxy / HTTP_PROXY from the environment -- it reaches the local interface directly, so a corporate or system proxy neither sees the key nor needs a no_proxy entry for this setup. Requests to an https:// host still honour the environment proxy.

OXFORD_LEDGE_API_KEY is your Oxford Ledge API key — create one in the app under YOUR API KEYS → + Create Key: sign in, then press K or open Settings -> API keys, or open oxfordledge.com/?panel=api-keys, which opens the panel directly (there is no /account page). It is sent as the x-api-key header (never in a URL, a log line or an error message, and never forwarded across a redirect) and it is what makes the tools yours:

  • Without it, this client is anonymous against the API — and 27 of the 29 tools still answer, deliberately: the 4 standalone tools never touch Oxford Ledge, the 14 name-proxied ol_* / gov tools ride the hosted server's anonymous /mcp transport, and the 9 REST-proxied tools call routes that carry no auth. What you do NOT get without a key: the two Plus-tier tools are refused as a free-tier caller — the hosted server's tier gate answers, and the wheel translates it to AUTH_REQUIRED saying which tier the tool needs, that this client is anonymous, that the operator sets OXFORD_LEDGE_API_KEY if they already have a plan that includes it (a paying subscriber who has not set the key gets exactly this refusal), and where to upgrade otherwise; and reads that only a keyed caller may trigger serve stored rows (the EDGAR refresh behind get_activist_stakes, which then reports stale: true).
  • With it, tools resolve against your plan's tier, and calls are attributed to your account (see /api/billing/agent-usage). A valid key on a plan below Plus gets AUTH_REQUIRED too, but the sentence then says the key was accepted and the plan is what is missing — never "check the key". A trial key (ol_trial_...) works too — it lets you evaluate the paid tools for 14 days, no card, under a daily cap. With the key set, the nine REST-proxied tools also send one X-OL-MCP-Tool header whose value is the tool's own name (no arguments, no package version), so those lookups count on your own activity page; it is never sent without the key and, like the key, never forwarded across a redirect.

What "FREE" means in a tool description. No plan tier is required — there is no paywall on the hosted channel for that tool, keyed or keyless. It does not mean unmetered: keyed calls (trial keys aside) count toward your account's agent-API allowance like every other keyed call. Keyless calls are not metered against any account.

Argument bounds. Every argument that declares a schema minimum / maximum (limit, days, since_days, quarters, max_holdings) or maxItems (ol_bdc_common_borrowers.bdc_tickers, 25) is validated before the call, on both transports: an out-of-range number is refused as INVALID_PARAMS naming the argument and the bound (`limit`: 5000 is greater than the maximum of 100 — the reference library's own sentence), an over-long list as `bdc_tickers`: [...] is too long, nothing is sent, and nothing is silently clamped or truncated. The hosted server refuses the same numeric bounds the same way (its own handler would slice a 26-ticker list at 25, which the wheel's schema declares instead of discovering). _meta.params_accepted echoes the arguments the host received; the completeness block on the payload reports what was actually served (complete: null at exactly the cap means undecidable — read more_available_hint). This is said once here rather than in every description.

2. Standalone mode — 4 tools, no Oxford Ledge account needed

A small subset of tools works without an Oxford Ledge instance — the ones backed by direct public APIs:

json
{  "mcpServers": {    "oxford-ledge": {      "command": "oxford-ledge-mcp",      "env": {        "FRED_API_KEY": "your-fred-key"      }    }  }}

The four standalone tools split by their data source:

  • 2 fully keyless — get_fundamentals + get_sec_filings (direct SEC EDGAR). No env var of any kind.
  • 2 require FRED_API_KEY — get_yield_curve and get_fred_data call FRED directly and raise ToolError.API_REQUIRED with a "Set FRED_API_KEY" message if the key is unset. Get a free key at fred.stlouisfed.org. (get_fred_data serves U.S.-government / public-domain series only; third-party-copyright series — S&P, ICE BofA, Moody's, CBOE, University of Michigan — are refused.)

The other 25 tools raise ToolError.API_REQUIRED with a pointer to set OXFORD_LEDGE_URL when called in standalone mode. This is a change from 1.x / 2.0.0, which used yfinance to cover more standalone tools. That path was removed in 2.0.1 — see MIGRATING.md for the rationale.

3. Dev mode — in-tree from an Oxford Ledge checkout

If you're an Oxford Ledge contributor working on the parser/dispatcher itself, run mcp_server.py directly from your checkout:

json
{  "mcpServers": {    "oxford-ledge-dev": {      "command": "python",      "args": ["/abs/path/to/oxford_ledge/mcp_server.py"],      "env": {        "OXFORD_LEDGE_USER_TIER": "pro"      }    }  }}

OXFORD_LEDGE_USER_TIER is enforced in dev-mode by the in-tree server (M2 tier-gate, 2026-04-24); set it to one of the real tier keys — free, plus, pro, professional, institutional_plus, team, or team-member (the ranking lives in oxford_ledge_mcp_core/registry.py::TIER_RANK) — to test tier-restricted tools. The old display-name spellings learner and analyst are NOT tiers: learner aliases to free (denied for gated tools) and analyst is deliberately unaliased (denied). Not used in API or standalone modes: API mode authenticates with your OXFORD_LEDGE_API_KEY (the hosted remote endpoint is key/Bearer-only — session cookies are deliberately not accepted there); standalone mode has no tiers at all.

After editing config, restart Claude Desktop. You'll see the tools available.


Available tools (29)

Mode column: S = works in standalone (no OXFORD_LEDGE_URL required), A = API mode only (needs OXFORD_LEDGE_URL; a key only for the two marked Plus). As of 3.1.0 28 of the 29 tools are gov-public-data (SEC EDGAR / FRED / Treasury / FDIC / USAspending / USPTO / CFTC) and the 29th, get_value_investing_fact, is Oxford Ledge-authored, with third-party-copyright fields excluded — CUSIPs (FactSet IP) are stripped from 13F/event payloads, and S&P/ICE/Moody's/CBOE FRED series are refused. Each tool's description (what tools/list returns) is the contract: it states units, the row shape, what an empty result means, and which fields are Oxford Ledge derivations rather than the source's own figures.

Removed — vendor / third-party-copyright lineage (pin an older version if you need them): 3.1.0 (CUSIP + FINRA-attribution carve-out): search_bonds, get_bond_data (bond CUSIPs are FactSet IP), get_short_interest (advertised stub, unresolved float-lineage + FINRA-attribution) — pin ==3.0.1. A ==3.0.1 pin does NOT bring the two bond tools back as working tools: FINRA auth-walled the public TRACE hosts they scraped in 2026-07, and on 2026-09-13 both were RETIRED on the hosted server as well (the hosted names answer status: "retired" with empty lists / null prices, never data). For corporate-bond discovery use the hosted server's ol_bond_directory_screen (LQD/HYG directory — reference data, no prices); for one issuer's own maturity schedule, get_debt_maturities in this package. 3.0.0 (keyless-public cut): get_stock_quote, get_financials, get_balance_sheet, get_cash_flow, get_analyst_recommendations, get_company_info, compare_stocks, screen_stocks, get_anomaly_flags, get_options_chain, get_economic_calendar, get_news, search_company (pin ==2.1.0). 2.1.0 (FMP-removal): get_company_data, get_company_profile, get_market_indicators, get_valuation_history, calculate_intrinsic_value, get_price_history, get_peer_comparison (pin ==2.0.4). These remain available via the hosted Oxford Ledge MCP server. See CHANGELOG.md / MIGRATING.md.

SEC fundamentals & filings (4 tools)

ToolModeDescription
get_fundamentalsSUp to 10 years of XBRL financials from SEC EDGAR companyfacts (LongTermDebt, not total debt; per-period concepts; NCI-aware equity rung; Oxford Ledge split-basis check on EPS / diluted shares incl. steps across tagging holes; coverage[].contiguous)
get_sec_filingsSThe 10 newest EDGAR submissions of any form (filing_type narrows), with form, date, link and a window disclosure
get_capital_allocationA · PlusCapital-allocation scorecard from SEC XBRL — up to 30 fiscal-year labels with periods and a split-basis basis block, a 10-year summary window; dividends, net buybacks (issuance, IPO proceeds and SBC netted), net debt change, acquisitions, shares outstanding (hosted tool, name-proxied; the net series are Oxford Ledge derivations)
get_debt_maturitiesA · PlusForward maturity ladder from 10-K/20-F footnotes, in millions of USD, with parser confidence + balance-sheet validation (hosted tool, name-proxied; EDGAR only)

Ownership & insiders — SEC (6 tools)

ToolModeDescription
get_13f_holdingsAOne filer's latest 13F-HR positions + quarter-over-quarter changes (CUSIPs stripped; ticker is an Oxford Ledge CUSIP crosswalk, title_of_class the authoritative share class; PUT/CALL/PRN rows labelled; fund takes a CIK or a ticker incl. class-share forms like BRK-B)
get_holdersATop 10 institutional shareholders (13F-HR common-stock positions, each filer's latest filing; scoped note when empty)
get_insider_tradesAForm 4 transactions for one issuer — latest 20, every code, derivative rows labelled, a company filing under its own SEC ID labelled issuerSelfFiled (leave those out of totals), dateBasis names the served date
ol_insider_recent_buysAMarket-wide OPEN-MARKET insider purchases across the Oxford Ledge issuer catalog, newest first — a daily insider screen (Form 4; totalValue/position are Oxford Ledge derivations; issuer-self-filed purchases excluded)
get_activist_stakesASchedule 13D/13G >5% beneficial-owner filings for a ticker (stored rows with stale/age_seconds; only a keyed caller refreshes from EDGAR)
get_fails_to_deliverASEC fails-to-deliver settlement history for a ticker (biweekly CNS files)

Corporate events & private placements — SEC (2 tools)

ToolModeDescription
get_corporate_eventsAThe 20 most recent 8-K item events (material agreements, M&A, executive changes, earnings releases, ...; eventType is Oxford Ledge's item map; CUSIPs/ratings stripped)
ol_form_d_raisesAForm D private-placement filings from the SEC's QUARTERLY data set (~1-quarter posting lag), optionally by industry / trailing window

Macro — FRED / Treasury / CFTC (4 tools)

ToolModeDescription
get_yield_curveSTreasury constant-maturity yield curve from FRED (11 tenors, percent; per-tenor completeness when partial)
get_fred_dataSU.S.-government FRED series (GDP, UNRATE, CPI, etc.) with units/frequency; third-party-copyright series (S&P/ICE/Moody's/CBOE/U-Michigan) refused
ol_treasury_debtAMonthly Statement of the Public Debt — outstanding by security type/class, millions of USD (Treasury MSPD, verbatim)
ol_cftc_cotACFTC Commitments of Traders — Managed Money (disaggregated) / Leveraged Funds (TFF) positioning by market; market_key, market_label, mm_net are Oxford Ledge's

BDC & private credit — SEC / Oxford Ledge (9 tools)

ToolModeDescription
search_bdc_borrowerAWhich BDCs lend to a borrower — one row per tranche, stale holders labelled, current-holder aggregates; optional limit/offset page the tranche rows with a page block (SEC SoI; Oxford Ledge parse, ol-derived)
get_bdc_listAActive tracked BDCs with totalFairValue (arbitrated — read fairValueBasis and fairValueGap), holding counts and filing dates (Oxford Ledge parse)
get_bdc_holdingsAOne BDC's full latest-filing portfolio: borrower, industry, security type, lien, rate, maturity, par/cost/fair value (USD) and mark (percent of par) per position, arbitrated totals with the fairValueGap label (SEC SoI; Oxford Ledge parse)
get_bdc_borrower_mark_historyAMulti-quarter fair-value mark history for one borrower across every BDC that holds its debt, newest quarter first (per-quarter min/max/par-weighted marks, holding-row and holder counts; SEC SoI; Oxford Ledge parse, ol-derived)
ol_bdc_top_borrowersABorrowers syndicated across the MOST BDCs, ranked by ACTIVE lender count then exposure — the private-credit discovery entrypoint (SEC SoI; Oxford Ledge parse; free)
ol_bdc_borrower_dispersionACross-lender pricing dispersion for one borrower — how N BDCs each mark the SAME loan (spread_bps to compare on, marks, serve-time yields; SEC SoI; Oxford Ledge parse; free)
ol_bdc_common_borrowersABorrowers common to a given set of BDCs — the cross-portfolio set question (SEC SoI; Oxford Ledge parse; free)
ol_bdc_mark_changesAQuarter-over-quarter mark moves across a set of BDCs, with an explicit coverage block (SEC SoI; Oxford Ledge parse)
ol_bdc_credit_qualityANon-accrual share and its trend for one BDC, withheld below 90% determinate coverage or when more than 25% is flagged on loans marked near par (the misread signature; coverage_state says which), stated but labelled unusually_high when more than 25% is flagged on loans marked below 85 or with no mark on file (SEC SoI; Oxford Ledge parse)

Federal reference data — FDIC / USAspending / USPTO (3 tools)

ToolModeDescription
ol_fdic_bankAActive FDIC-insured banks and thrifts by name prefix or largest-asset (FDIC BankFind; $thousands). ticker is an Oxford Ledge CERT-to-ticker mapping, not an FDIC field
ol_federal_contractsAFederal-contract obligations by ticker, or the fiscal-year leaderboard (USAspending). Ticker attribution and per-ticker totals are an Oxford Ledge crosswalk; dropped_unresolved is an upper bound on its gap
ol_patentsARecent USPTO patent filings for a ticker's applicant (USPTO ODP; ticker is an Oxford Ledge applicant-name resolution)

Reference — Oxford Ledge (1 tool)

ToolModeDescription
get_value_investing_factABuffett / Graham / Munger principles and attributed paraphrases from Oxford Ledge's curated corpus, with an attribution credit line — wording not verified against the source, so not verbatim quotations unless verbatim is true (ol-authored)

What _meta.basis means

Every successful tool response carries a _meta block (terms_url, source, source_url, basis, and when the payload says so as_of / period; the 25 proxied tools also carry source_key and the host's disclaimer -- the four standalone tools carry the not-advice literal at the top level instead). An error envelope carries the error, not _meta. Where it comes from depends on how the tool reaches its data, and all three paths share one vocabulary:

  • the 16 name-proxied tools (the 14 keyless ol_* / gov tools plus the two Plus-tier tools) pass the hosted server's _meta through verbatim;
  • the 9 REST-proxied tools carry the _meta the hosted route's provenance middleware attaches to that route (one source of truth with the hosted catalog, so the wheel and the hosted server cannot say two different things about the same payload). The two of them that RESHAPE the route's payload under their own keys — get_holders and get_insider_trades — translate the route's derived_fields paths into their own key names at the reshape (trades[].value, not the route's transactions[].totalValue; the route's QoQ paths that never ship on the wheel are dropped; the wheel's own vintages / rankingBasis / transTypeLabel / is_open_market are added), so the list is resolvable on the payload it rides;
  • the 4 standalone tools (get_fundamentals, get_sec_filings, get_yield_curve, get_fred_data) never touch Oxford Ledge, so the wheel attaches its own table — {source, source_url, terms_url, basis: primary} — at the dispatch seam, kept in vocabulary parity with the hosted provenance registry by a contract test in the main repo.

basis tells you WHOSE numbers you are reading. The six values, and what you may conclude from the field alone:

valuewhat it meanscompanions
basis: primaryevery substantive value is the cited source's, verbatim (a filing, an agency table, a FRED series)--
basis: hybridthe cited source's values verbatim EXCEPT the fields listed in derived_fields, which are Oxford Ledge derivations (an entity attribution, a crosswalk sum, a classification flag). source still names the primary source: that is where the acknowledgment is owed and where the other values can be verifiedderived_fields (paths in the tool's own key names; [] marks list rows, . a nested dict; a path may name a key only one branch of the tool emits) and derived_basis (today always ol-derived) -- both present iff hybrid, absent otherwise
basis: ol-derivedthe payload is an Oxford Ledge computation OVER primary inputs (a tally, a screen, a cross-filer join, a compiled profile). source names the input. Do not quote it as the filer's or the agency's own figurea tool that serves model-written or compiled prose labels it in-payload (ai_generated / descriptionSource): the text is not filing text
basis: ol-authoredOxford Ledge wrote it (the value-investing corpus, glossary, methodology)--
basis: vendor-derivedcomputed by a data vendor, not by a filer and not by us--
basis: aggregateda roll-up across sources (news)--

A hybrid example, ol_fdic_bank: institutions[].ticker is our CERT-to-ticker map; every other field is FDIC BankFind's. The tool description says the same thing in prose (ATTRIBUTION: ...), because a reader of tools/list needs it before calling; the field says it on the payload, because the payload is the only channel a machine consumer reads.

Data sources

28 of the 29 tools are backed by U.S.-government public data — SEC EDGAR, FRED, U.S. Treasury, FDIC, USAspending, USPTO or CFTC; the 29th, get_value_investing_fact, is Oxford Ledge-authored (basis: ol-authored, attributed paraphrases and principles in wording not verified against the primary source, with author / source / attribution on every row and verbatim true only for a text verified against its primary source). Nothing in this package scrapes Yahoo Finance (the 1.x / 2.0.0 yfinance path was removed in the 2.0.1 Y1 excision), and as of 3.0.0 there is no commercial-vendor feed anywhere in the surface (the FMP/Finnhub-backed quote/estimate/screen/news tools were removed — they live on the hosted Oxford Ledge MCP server). As of 3.1.0 the FINRA-sourced tools were also removed: bond search + CUSIP lookup (search_bonds/get_bond_data) disseminated FactSet-licensed CUSIPs, and get_short_interest was an advertised stub with unresolved float-lineage + attribution. FINRA data now lives only on the hosted server — and the TRACE half of it is gone there too: FINRA auth-walled its public TRACE hosts in 2026-07 and Oxford Ledge holds no licence to redistribute TRACE data, so the hosted search_bonds / get_bond_data were RETIRED on 2026-09-13 (they answer status: "retired", never data); hosted corporate-bond discovery is ol_bond_directory_screen, a persisted LQD/HYG directory with no prices, and the hosted short-interest tools (FINRA's biweekly series) are unaffected. In 3.4.0 one leak the full audit found is re-closed: from 3.1.0 through 3.3.0, get_debt_maturities and get_capital_allocation proxied two REST routes that could fall back to a Finnhub-fed capital-structure snapshot and a modelled maturity ladder; in 3.4.0 both tools are name-proxies of the hosted EDGAR-only tools, and the surface is vendor-free again.

  • SEC EDGAR — XBRL fundamentals (get_fundamentals) and any-form EDGAR submission lists (get_sec_filings) are fetched directly from EDGAR by the pip package (keyless). Insider Form 4 (get_insider_trades), 13F holdings (get_13f_holdings / get_holders), 8-K events (get_corporate_events) and BDC Schedule-of-Investments parses route through OXFORD_LEDGE_URL (API mode) against Oxford Ledge's EDGAR-backed tables; the capital-allocation scorecard and the debt-maturity ladder are the hosted EDGAR-XBRL / 10-K-footnote tools, proxied by name.
  • FRED / U.S. Treasury — Treasury yield curve + FRED series, fetched directly, verbatim (basis: primary, nothing derived). Requires FRED_API_KEY (get_yield_curve / get_fred_data error out without it). get_fred_data serves U.S.-government / public-domain series only — third-party-copyright series (S&P, ICE BofA, Moody's, CBOE, University of Michigan) are refused fail-closed.
  • FDIC / USAspending / USPTO / CFTC — BankFind institution records, federal-contract obligations, patent filings and Commitments-of-Traders positioning, all routed through OXFORD_LEDGE_URL. All four are basis: hybrid and say so in their descriptions (ATTRIBUTION: ...) and in _meta.derived_fields: ol_fdic_bank — institutions[].ticker is our verified CERT-to-ticker map (one path); ol_federal_contracts — the ticker attribution, the per-ticker total_obligations_usd and entity_count sums and dropped_unresolved are our crosswalk, on both the ticker and the leaderboard branches (eight paths; dropped_unresolved is an upper bound on the crosswalk's gap, not a count of missed subsidiaries); ol_patents — filings[].ticker is our applicant-name resolution (one path); ol_cftc_cot — rows[].market_key and rows[].market_label are our curated market catalog and rows[].mm_net is our mm_long − mm_short (three paths). Every other field in those payloads is the agency's, verbatim.
  • Oxford Ledge proprietary parses — BDC holdings from SEC SoI filings (48 active BDCs on get_bdc_list at the 3.7.1 cut; the final filings of wound-down or merged-away BDCs stay readable through the borrower tools, labelled inactive) + the curated value-investing corpus. API mode only; their payloads say ol-derived / hybrid / ol-authored in _meta.basis, and their descriptions say it in prose.

Data license

The MIT license below covers the software in this package. The data the tools return is governed by the Oxford Ledge terms of service (https://www.oxfordledge.com/terms), which every payload links in _meta.terms_url. The operative sentences, quoted:

  • Attribution (section 5b): "Values derived by Oxford Ledge must be attributed to Oxford Ledge (oxfordledge.com) when restated to an end user. This applies whether the value reaches the end user as a number, a chart, or prose an agent has written around it. The underlying public filings (SEC EDGAR, U.S. Treasury and similar U.S. government sources) are public records and carry no such requirement; the obligation attaches to our derived layer — our parses of business-development-company Schedules of Investments, our borrower normalization and loan-identity keying, our dispersion and pricing aggregates, and our computed model outputs." In this package that is exactly what _meta.basis of ol-derived, hybrid (the derived_fields paths) or ol-authored marks; basis: primary payloads are the agency's public records.
  • No bulk extraction (section 5b): "You may not use the agent interfaces to systematically enumerate, download, or reconstruct the Oxford Ledge corpus or any substantial part of it, to build a competing or substitute dataset, or to resell or redistribute our derived values as a data product. Per-query and per-entity research use is exactly what these interfaces are for; corpus reconstruction is not."
  • Personal and internal use (section 8): "Data obtained through Oxford Ledge is licensed for personal and internal use only. You may not redistribute, resell, republish, sublicense, or make available to third parties any data, datasets, or content obtained from the Service, whether in raw, aggregated, or derived form, without prior written permission from Oxford Ledge."

Resource limits this client enforces on itself

These are properties of the CLIENT, not of any server. They exist because a desktop MCP client holds whatever a host sends in the memory of the process your editor launched, and because OXFORD_LEDGE_URL is operator-supplied.

  • Response size. A success body over its host's ceiling is refused before it is read in full: nothing is parsed, served or cached, and the refusal names the ceiling so you can tell it from an outage. The ceilings are per host -- 8 MB for the Oxford Ledge instance you configure, 32 MB for SEC XBRL companyfacts (a large filer's document legitimately exceeds 8 MB), 16 MB for SEC submissions, 8 MB for SEC's ticker map, 16 MB for FRED.
  • Cache size. Tool results are cached in-process for the tool's TTL, under TWO budgets: at most 500 entries, and at most 32 MB of aggregate serialized payload. When the total would exceed the byte budget the earliest-expiring entries are dropped; a single result too large for the budget is simply not cached, and the call still returns normally. A cache miss is never an error. Both budgets are per process, and the cache is not shared between processes.
  • Response nesting. A response nested deeper than roughly 500 levels is refused with a message saying so, rather than served. This is the depth at which the copy that keeps one caller's result from mutating another's stops being safe; real Oxford Ledge and SEC documents are a handful of levels deep.

What we don't expose

get_ai_question is intentionally not in the pip package. Claude Desktop and every other MCP client is itself an LLM with the full user conversation in context. Having Oxford Ledge generate "what should I ask about AAPL next?" questions would be redundant with what the consuming LLM already does natively, and worse — we'd see only the ticker, not the reasoning trajectory. If you want AI-guided analysis, use the Oxford Ledge app directly at www.oxfordledge.com where the RAG context + user session enable actually-useful suggestions. See docs/reference/KNOWN_GAPS.md in the main repo for the decision record.


The Full Platform

For the complete experience with 45+ databases, news archive, credit analysis, BDC data, and AI-powered analysis, visit www.oxfordledge.com.


Disclaimer

Oxford Ledge is a research and education platform for lifelong students and investors. This software is provided "as is", without warranty of any kind, under the MIT License (see LICENSE). It is an MCP server for accessing and parsing public financial data. It is not investment, financial, legal, or tax advice, and nothing it returns is a recommendation to buy, sell, or hold any security. Data may be incomplete, delayed, or inaccurate — SEC filings are periodic and lagged, and FRED series are revised. You are responsible for independently verifying anything you rely on and for your own investment decisions. Full terms: https://www.oxfordledge.com/terms


License

MIT (the software). The data is licensed separately — see Data license above.

Verify your install

After (re)starting your MCP client, check the server handshake: the client shows the server as oxford-ledge-mcp <version> on connect (in Claude Desktop: Settings → Developer → oxford-ledge). If the version is older than the one you installed, the client is still running a previous install — see the first troubleshooting entry below.

Troubleshooting

Real friction seen in the field — each with the fix that worked:

  • pip install --upgrade fails with WinError 32 (file in use) — the running MCP server processes hold oxford-ledge-mcp.exe. Quit your MCP client (Claude Desktop) fully, or kill the oxford-ledge-mcp processes, then re-run the upgrade.
  • A ~xford-ledge-mcp directory appears in site-packages — residue from an interrupted upgrade (the WinError 32 case above). Safe to delete after the upgrade succeeds.
  • oxford-ledge-mcp not found after install — pip printed a PATH warning during install. Either add the named Scripts directory to PATH, or put the full path to the executable in the command field of your client config.
  • Handshake shows an old version — the client cached the old process. Quit the client fully and restart it. uvx users: the uvx environment cache can pin an old version — refresh it (uvx --refresh oxford-ledge-mcp) or pin the version explicitly.
  • A tool answers NOT_FOUND: unknown tool — your installed package is newer than the hosted server or vice versa (version skew). Check the handshake version against this README's, and upgrade the older side.

來源:README.md,提交 fe4d3cc

工具

60

get_13f_holdings

13F Holdings of a Fund

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 {cik, fundName, filingDate, periodOfReport, totalHoldings, totalValue, holdings}; rows carry name, title_of_class, value (whole USD), shares, type, position_type, lots. There is NO ticker field and `cusip` is stripped on every channel (no plan carries a CUSIP Global Services licence today); `title_of_class` is the share-class discriminator. `position_type` is COM|PRN|PUT|CALL: do NOT sum across types. Source: SEC EDGAR 13F-HR, ~45-day quarterly delay. Heavy operation, max 2 concurrent.

輸入參數fund必填max_holdings

get_activist_stakes

Activist Stakes (13D/13G)

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 statement that it no longer owns more than 5% -- an exit OR a reporting realignment, so cross-check get_institutional_holders before reading it as a sale. FRESHNESS: keyless callers are served STORED rows and never trigger the EDGAR refresh -- read `stale` and `stale_basis`. Complements get_institutional_consensus. Source: SEC EDGAR.

輸入參數limitticker必填

get_anomaly_flags

Red-Flag Screens

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. A flag is a question to investigate, NOT a sell signal. available: false (+ reason, no flags) = not checked. Empty flags is no all-clear either: a screen missing its input is skipped. Pair with get_fundamentals and ol_intrinsic_value. Source: vendor quote/fundamentals snapshot plus computed heuristics. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數ticker必填

get_bdc_list

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 reconciliation block (reportedTotalFairValue, fairValueBasis, parsedRowSumFairValue, fairValueRefused, fairValueGap, fairValueGapNote). READ fairValueBasis BEFORE using totalFairValue, and fairValueGap with it: an under-counting parse keeps the parsed-row sum, which UNDERSTATES the book. holdingCount, totalFairValue and the arbitration are Oxford Ledge's parse, not filer-published figures. Borrower-keyed counterpart: search_bdc_borrower. Source: SEC EDGAR BDC filings (Oxford Ledge parse).

無需輸入參數。

get_business_summary

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). available=false means the store answered with no verified row and the provenance keys are ABSENT; an unreachable store is REFUSED (DATA_UNAVAILABLE). Rows generated before 2026-09-13 carry '10-K' and an empty `source_period` regardless of filer until Oxford Ledge re-stamps their provenance. For semantic passage retrieval over the full filing corpus use ol_filing_search. Source: SEC EDGAR annual report (Oxford Ledge first-party summary); FREE.

輸入參數ticker必填

get_capital_allocation

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 SBC); grossRepurchases is the filed line. Share-count cells on a pre-split basis are withheld, never shown as a phantom buyback. An IFRS reporter is REFUSED, never served zeros. Complements get_fundamentals and get_debt_maturities. Source: SEC EDGAR XBRL cash-flow tags, 24h cache. Requires Researcher tier.

輸入參數ticker必填

get_corporate_events

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 item-to-category map. The event_type filter matches STORED CATEGORIES ONLY; for M&A use acquisition_disposition. Dual-class siblings (GOOG/GOOGL) are unioned. An unreachable store REFUSES (DATA_UNAVAILABLE) rather than serving events=[]. For Form 4 insider transactions use get_insider_activity. Source: SEC EDGAR 8-K index (Oxford Ledge parse), re-indexed about every 7 days.

輸入參數ticker必填event_type

get_debt_maturities

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 cross-check) before quoting a total. Every empty answer carries `refusal_reason` and a readable `refusal_note`. For historical issuance/repayment use get_capital_allocation. Source: SEC EDGAR 10-K note extraction. Requires Researcher tier.

輸入參數ticker必填

get_economic_calendar

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-ahead default 90; above 180 is REFUSED. ALWAYS CHECK source_status: every failure mode returns events=[], otherwise indistinguishable from a quiet calendar. Cached 6h. Source: FRED releases/dates. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數days

get_fails_to_deliver

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 elsewhere. An empty or thin history describes the loaded SEC files, not an absence of fails: read `coverage` and `summary` before reading a gap. Prices are NOT split-adjusted. An unreachable store REFUSES (DATA_UNAVAILABLE). Pair with ol_short_interest_trend for the other half. Source: SEC Fails-to-Deliver dataset (published twice monthly, ~3-week lag).

輸入參數daysticker必填end_date

get_fred_data

FRED Series

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 ICE BofA OAS credit spreads (BAMLH0A0HYM2, BAMLC0A0CM, BAMLC0A1CAAA, BAMLH0A1HYBB, BAMLH0A2HYB, BAMLH0A3HYC), VIXCLS and UMCSENT are licensed content FRED redistributes under its own terms and Oxford Ledge does not; the answer is {series, data: null, refusal_reason: 'third_party_licence', licensor, error, note, directional, directional_unavailable_reason}. RESTRICTED posture: a keyed tool on the hosted channel. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數series必填

get_fundamentals

Company 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 ...). Dollar figures are whole USD; *Pct values are percentage numbers. A year the filer did not tag is null, never 0. Per-share cells on a pre-split basis are WITHHELD (null) rather than rescaled -- read `basis`. An IFRS reporter or a filer with no annual us-gaap fact returns {error, taxonomy, formsSeen, unitsSeen}. For cash deployment use get_capital_allocation; for per-share fair value ol_intrinsic_value; for industry operating metrics ol_operating_kpis. Source: SEC EDGAR company-facts XBRL (~45-day post-quarter lag), 24h cache.

輸入參數ticker必填

get_insider_activity

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), shares, pricePerShare, totalValue (USD, computed by Oxford Ledge at ingest), isDerivative (read it before treating `shares` as common stock) and url. A 4/A that repeats its original line is served once. Leave issuerSelfFiled rows out of any total. Market-wide buys: ol_insider_recent_buys; clusters: ol_insider_cluster_scan; >5% stakes: get_activist_stakes. Source: SEC EDGAR Form 4 (~2-day filing deadline). Requires Researcher tier.

輸入參數daysticker必填

get_institutional_consensus

Most Widely Held (13F)

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: an ownership tally, not exposure. Each fund contributes its own latest quarter, which may differ across funds. Answers 'who is buying X?'; get_13f_holdings answers 'what does fund X own?'. Source: SEC EDGAR 13F-HR, ~45-day quarterly delay.

輸入參數top_nmin_funds

get_institutional_holders

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.basis` ('universe' vs 'top_display') before quoting an aggregate. Common stock only; quarters can differ per row. Rows are CUSIP-resolved: a resolution failure drops or mis-attributes a row. Direction-only view: ol_ownership_changes; fund-keyed inverse: get_13f_holdings. Source: SEC EDGAR 13F-HR, ~45-day quarterly delay.

輸入參數limitticker必填

get_news

Company 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 matching is prefix-word, not semantic. Source: Oxford Ledge news archive (multi-provider, cron-populated). Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數limitqueryticker

get_portfolio_positions

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 positions=[] with error=null, so an empty list does not prove the portfolio exists. For the catalog-wide sector mix use get_sector_breakdown. Source: the portfolio's stored positions. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數portfolio_id

get_sector_breakdown

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 industry sits under the ONE sector holding most of its tickers. Returns {error} (a dict) when the read fails. For a named portfolio use get_portfolio_positions. Source: Oxford Ledge company profiles, ~5,200 tickers.

無需輸入參數。

get_value_investing_fact

Value Investing Facts

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 ON THE ARGUMENTS: a `query` returns {facts, count, total_facts} (facts capped at 10); a bare `category` or no arguments returns {fact, total_facts} (one random pick). Pedagogical content only -- never a market signal. Cached 24h per argument set.

輸入參數querycategory

get_yield_curve

Treasury 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 and national-debt series. UNITS: yields are PERCENT numbers (4.25 means 4.25%). The credit-spread OAS series and UMCSENT were removed 2026-07-21 (licensed data) and are NOT in the list. Source: Treasury.gov daily par yields (FRED fallback) plus FRED series; cached 4h.

輸入參數include_history

ol_13f_filer_analytics

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-equity value, explicitly NOT AUM. NO position list -- use get_13f_holdings. A filer with one stored quarter gets no fabricated turnover rate; an unreachable store is REFUSED (DATA_UNAVAILABLE). Source: SEC EDGAR 13F-HR (public domain; Oxford Ledge derived); FREE.

輸入參數fund必填

ol_bank_structure_events

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 charter matched. Ambiguous names return an `ambiguous` candidate list instead of guessing -- call again with the `cert`. An unreachable FDIC store is DATA_UNAVAILABLE, never an empty list. Complements ol_fdic_bank (active institutions only). Source: FDIC public data; FREE.

輸入參數certnamelimit

ol_bdc_borrower_dispersion

BDC Loan Mark 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, tranche_count, lenders, ...}: ONE row per BDC lender, widest spread first, tranches nested. UNITS TRAP: `spread` is the raw as-filed number and mixes percent and bps across filers -- compare lenders on `spread_bps` only. Exited positions are excluded by default (include_stale=true shows them). Default 25 lenders, hard cap 100. Source: SEC EDGAR BDC schedules of investments (Oxford Ledge parse; ol-derived); FREE.

輸入參數limitborrower_norm必填include_stale

ol_bdc_borrower_news_today

BDC Borrower News

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 default 25 / hard 100; since_days default 7 / hard 90; min_holders default 2 (max 50). No recent headlines returns items=[] -- absence is not a signal; an unreachable store is REFUSED (DATA_UNAVAILABLE). Source: Google News, matched to SEC EDGAR BDC borrowers; FREE. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數limitsince_daysmin_holders

ol_bdc_common_borrowers

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_range before treating the marks as contemporaneous. Debt positions only. Caps: bdc_tickers truncated at 25, limit 50/200, min_holders max 50. Feed a borrower_norm to ol_bdc_borrower_dispersion for cross-lender pricing. Source: SEC EDGAR BDC schedules of investments (Oxford Ledge parse -- ol-derived); FREE.

輸入參數limitbdc_tickers必填min_holders

ol_bdc_credit_quality

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 coverage is under 90% of debt fair value or the flag rate looks like a parse misread -- read `coverage_state` before reading flagged_pct. `quarters` default 12, hard cap 24. Pairs with ol_bdc_borrower_dispersion and ol_bdc_top_borrowers. Source: SEC EDGAR BDC schedule-of-investments non-accrual flags (Oxford Ledge parse); FREE.

輸入參數ticker必填quarters

ol_bdc_fee_load

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 dividend amount are not returned. A missing input is served as null and named, never as zero; an unreachable store is REFUSED (DATA_UNAVAILABLE). An internally-managed BDC carries no fee lines by construction. Source: SEC EDGAR 10-K/10-Q Statement-of-Operations XBRL, NOT a vendor fundamentals feed; FREE.

輸入參數ticker必填

ol_bdc_loan_pricing_trend

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_borrowers` over `debt_positions` across quarters: position counts are parser-grain-dependent. `quarters` default 16, max 24. Honest-empty (trend=[]) for an unparsed BDC. Pairs with ol_bdc_borrower_dispersion. Source: SEC EDGAR BDC 10-Q/10-K schedules of investments (Oxford Ledge parse); FREE.

輸入參數ticker必填quarters

ol_bdc_mark_changes

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-weighted across the BDC's tranches; mark_delta is in points. A borrower enters only when |mark_delta| >= 1.0 point and its fair value is >= $500k. Implausible moves are held in `suspect_moves` rather than ranked. `coverage` names every BDC that was NOT read and why. bdc_tickers capped at 25; limit default 10 / hard 50 per direction. Source: SEC 10-K/10-Q schedules of investments (Oxford Ledge parse); FREE.

輸入參數limitbdc_tickers必填

ol_bdc_top_borrowers

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), industry}. Feed a borrower_norm into ol_bdc_borrower_dispersion for cross-lender pricing. Caps: limit default 25 / hard 100; min_holders default 2 (max 50). Parser mis-ingests are filtered out when the filter is available (`borrower_filters` says whether it ran). Source: SEC EDGAR BDC schedules of investments (Oxford Ledge parse); FREE.

輸入參數limitmin_holders

ol_bond_directory_screen

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 (IG=LQD, HY=HYG), NOT a credit rating. limit default 25, hard cap 100. NOTE ON PROVENANCE: the directory is sourced from the LQD (investment-grade) and HYG (high-yield) ETF holdings. Its ingest-source redistribution posture is unresolved (Oxford Ledge legal review, 2026-07-07), so this is a FIRST-PARTY-only tool and is off the third-party redistribution surface until cleared. FREE. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數gradelimitissueroffsetcoupon_maxcoupon_minmaturity_aftermaturity_before

ol_borrower_profile

Private 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 surface), and `public_footprint` (patents, federal contracts, corporate events) matched by exact normalized name, with `matched_entities` provenance -- a same-name match is never a guaranteed identity, and an empty footprint is normal for a private borrower. Honest-empty when the key is unknown. Source: SEC EDGAR BDC Schedule-of-Investments + attributed public M&A events (Oxford Ledge proprietary parse); FREE.

輸入參數limitborrower_norm必填

ol_cftc_cot

CFTC Commitments of Traders

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 category per report family (Managed Money for gold and crude_oil, Leveraged Funds for sp500). `limit` (series only) default 52, hard cap 156. An unreachable store is REFUSED (DATA_UNAVAILABLE). Source: CFTC.gov (public domain); FREE. ATTRIBUTION: every field is CFTC verbatim EXCEPT market_key and market_label (Oxford Ledge's curated market catalog) and mm_net (mm_long minus mm_short, computed by Oxford Ledge).

輸入參數limitmarket

ol_earnings_calendar

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 the estimate as a company announcement. SCOPE: US domestic 8-K filers only. Read published_events_degraded before reading the note as an issuer fact. Distinct from get_economic_calendar (macro releases). Source: issuer IR pages + SEC filing cadence (Oxford Ledge); FREE.

輸入參數ticker必填

ol_etf_lookthrough

ETF Look-Through

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 USD), pct_of_nav (as filed) and weight_pct (Oxford Ledge derived; the shown rows will not sum to 100). HOLDINGS-ONLY: no yield, NAV or premium. An ETF with no filed holdings comes back opaque=true with `reason`; a store outage is DATA_UNAVAILABLE, never opaque. Source: SEC EDGAR N-PORT, latest filed period per series (~60-day lag); FREE.

輸入參數tickers必填top_holdings

ol_fdic_bank

FDIC Bank Lookup

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 structure event explains it (`structure_event`). An unreachable store is REFUSED (DATA_UNAVAILABLE). `limit` default 25, hard cap 100. Source: FDIC.gov (public domain); FREE. ATTRIBUTION: every field is FDIC BankFind verbatim EXCEPT `ticker`, which is an Oxford Ledge-verified CERT-to-ticker mapping, not an FDIC-published field.

輸入參數limitquery

ol_federal_contracts

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 Ledge's USAspending crosswalk, largest first -- not of all federal contractors. A fiscal year still in progress is PARTIAL (period_complete false) and year-to-date -- never compare it to a full year. Obligations are federal awards, not company-reported revenue. `limit` default 20, hard cap 100. An unreachable store is REFUSED (DATA_UNAVAILABLE). Source: USAspending.gov (public domain; OL ticker-crosswalked); FREE. Attributing awards to a ticker is an Oxford Ledge curated crosswalk.

輸入參數limittickerfiscal_year

ol_form_d_raises

Form D Private 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` window is EMPTY BY CONSTRUCTION -- not evidence that nothing was filed. `limit` default 50, hard cap 200. Source: SEC EDGAR Form D data sets (public domain); FREE.

輸入參數dayslimitindustry

ol_fundamentals_screen

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, in failed_criteria) or unknown (a metric not filed for the latest year, in unevaluated_criteria; unknown is not a fail). Not a universe screen; a fundamentals filter, NOT a buy signal. Source: SEC EDGAR company-facts XBRL.

輸入參數tickers必填min_revenuemin_net_incomemin_current_ratiomin_free_cash_flowmin_ebit_margin_pctmin_gross_margin_pctmax_debt_to_assets_pct

ol_glossary_term

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 platform teaches from, instead of improvising one. Source: Oxford Ledge editorial (reviewed in-house); FREE.

輸入參數term必填

ol_insider_cluster_scan

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, limit}; each event is {ticker, direction, insider_count, z_score, sector_z_score, percentile, window_start, window_end}. No fired clusters returns events=[] -- absence is not a signal; an unreachable store is REFUSED. Source: SEC EDGAR Form 4, windowed on FILING date so it is look-ahead-safe; FREE.

輸入參數limittickertickerssince_daysmin_insider_count

ol_insider_recent_buys

Recent Insider 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: when the window holds more purchases than `limit`, you get the NEWEST N filings, not the whole window -- never total these rows and call it the period's insider buying. totalValue and the fallback `position` label are the two derived fields. Source: SEC EDGAR Form 4 (public domain); FREE. Pairs with ol_insider_cluster_scan and get_insider_activity.

輸入參數limitmin_valuesince_dayscommon_only

ol_institutional_confluence

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 `institutional`, `insider`, `cluster`, `coverage` and a one-line `summary`. A DERIVED verdict, not raw data: no per-fund rows. Pairs with get_institutional_holders and ol_insider_cluster_scan. Source: SEC EDGAR 13F-HR + Form 4 (Oxford Ledge derived fusion); FREE, no tier gate and no AI metering.

輸入參數ticker必填

ol_intrinsic_value

Intrinsic Value Estimate

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, 21% tax). NO current price, market cap or margin of safety is returned -- fetch a price yourself and compare. A model is null when its inputs are negative or missing (null_reasons names the input), never computed as if debt-free. reason 'fetch_error' is transient: retry. The DCF is FCFE-style, not comparable to an enterprise-value DCF. Source: SEC EDGAR company-facts XBRL.

輸入參數ticker必填

ol_issuer_kpi_panel

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-gated; needs_review rows are EXCLUDED. Optional filters: metric, period, industry. Per-issuer by design. For broad operating KPIs across 26 configured industries use ol_operating_kpis. Source: SEC 10-K/10-Q/8-K/6-K exhibits (Oxford Ledge parse); FREE.

輸入參數limitmetricperiodticker必填industry

ol_maturity_wall

Debt 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 schedules only; an issuer with debt and no parsed schedule is NAMED under `unscheduled`, never estimated. LATENCY: a scoped call can fetch each issuer's annual report LIVE from SEC EDGAR -- seconds per issuer, minutes for a cold list. Source: SEC filing debt schedules + balance sheets (Oxford Ledge parse); FREE.

輸入參數tickersby_sector

ol_operating_kpis

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, total_metrics, period, as_of, provenance, caveat, ...}. Anonymous callers get at most 3 rows (partial, total_metrics says how many); keyed callers get the full panel. Values are AS-REPORTED and confidence-gated. available=false cannot tell an uncovered industry from a covered issuer with no rows or an outage: do not retry with variations. Per-issuer by design. Source: SEC 10-K/10-Q/8-K exhibits (Oxford Ledge parse); FREE.

輸入參數ticker必填

ol_ownership_changes

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 (default 50, hard cap 250). Pairs whose delta looks like an unconfirmed corporate action are withheld into `split_suspect` with their as-filed counts. Share classes are never summed or netted. Rows are CUSIP-resolved, so treat share figures as close approximations. Complements get_institutional_holders (snapshot). Source: SEC EDGAR 13F-HR (public domain; OL derived); FREE.

輸入參數limitticker必填

ol_paper_portfolio

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 DELAYED quote at read time. Requires an authenticated Oxford Ledge caller (API key or linked OAuth token) and serves the caller's own portfolio only; the local stdio server gets AUTH_REQUIRED. Never cached. Practice money: _meta.disclaimer says so on every response. Source: Oxford Ledge paper sandbox; FREE. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數history_limitinclude_history

ol_paper_trade

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 _dry_run: false AND that same _idempotency_key to execute; a rejection is a normal (non-error) response you must read and relay, and a repeat of the same key returns {replay: true, ...} without placing twice. shares is whole shares, 1..1,000,000; side is buy or sell; thesis (optional, max 250 chars) is the USER's own reason. Requires an API KEY or a linked OAuth token (a browser session cookie is refused). Capped at 20 executed fills per user per UTC day. Practice money: _meta.disclaimer says so on every response. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數side必填shares必填thesisticker必填_dry_run_idempotency_key

ol_patents

Patent Filings

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. Filings reflect Oxford Ledge's last on-demand USPTO ingest for the ticker, not a schedule; an unreachable store is REFUSED (DATA_UNAVAILABLE), never served as count 0. Source: USPTO (public domain); FREE. ATTRIBUTION: every filing field is USPTO ODP verbatim EXCEPT `ticker`, which is an Oxford Ledge applicant-name resolution, not a USPTO field.

輸入參數limitticker必填

ol_peer_fundamentals

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 percentage numbers. ONE YEAR ONLY -- no history (use get_fundamentals). Fiscal years are each filer's own, so peers are NOT calendar-aligned. A ticker without XBRL coverage returns {ticker, available: false} (no metric keys), never dropped. No price leg, so no P/E or EV multiples. Source: SEC EDGAR company-facts XBRL; one cold EDGAR fetch per ticker.

輸入參數tickers必填

ol_short_interest_trend

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_of` is the settlement date, not today. Honest-empty for a ticker FINRA does not publish; an unreachable store is REFUSED (DATA_UNAVAILABLE). Source: FINRA (public); FREE.

輸入參數pointsticker必填

ol_treasury_debt

Treasury Debt Composition

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 summing a column double-counts. `limit` (series only) default 120 months, hard cap 360. An unreachable store is REFUSED (DATA_UNAVAILABLE). Sibling of get_yield_curve. Source: Treasury.gov MSPD (public domain); FREE.

輸入參數limitsecurity_typesecurity_class

reading_list_annotate

Reading List Note

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 {replay: true, ...} without writing twice. Requires Researcher tier AND an authenticated Oxford Ledge caller -- the local stdio server has no account context and raises AUTH_REQUIRED. `slug` must already exist on /reading-list; `body` is capped at 500 chars. Notes stay PRIVATE; this tool can never publish one. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數body必填slug必填_dry_run_idempotency_key

search_bdc_borrower

BDC Borrower Search

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`, one row per TRANCHE. ABOVE-PAR TRAP: a mark above 100 is not a credit premium until fairValue is checked against cost. `description` is a compiled company profile from public sources, NOT filing text. A miss is {found: false} -- a search miss, not a finding of no BDC exposure. `query` needs 3+ characters; `limit` / `offset` page `holders` only. Source: SEC EDGAR BDC schedules of investments (~45-60 day lag).

輸入參數limitquery必填offset

search_company

Company Search

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 substring on ticker / companyName (plus the other class-share punctuation, and a digit-only CIK); former names and misspellings do NOT resolve. Once resolved, call get_fundamentals or get_business_summary. Source: Oxford Ledge company profiles, limited to SEC-submission identity fields.

輸入參數query必填

search_news_archive

News Archive Search

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 anonymous callers). For per-ticker archive reads use get_news; for semantic retrieval over SEC filings use ol_filing_search. Needs a free Oxford Ledge API key that the client's operator configures.

輸入參數limitquery必填

版本歷史

3
  1. v3.8.3最新Oct 11, 2026
  2. v3.8.2Oct 6, 2026
  3. v3.8.0Sep 27, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分