cmbs.news: CMBS loan data
Free CMBS loan data from SEC filings, no key on the free tier: search loans, open loan and trust records, the monthly distress index, special servicing transfers, tenant exposure and comps. Remote endpoint: https://cmbs.news/mcp
Hosted MCP Server
npx add-mcp 'https://cmbs.news/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
CMBS data for your code and your agents
The loans in public CMBS trusts that file with the SEC (12,119 loans, $283.3B), the special servicer's comments, the trusts' bond classes, the distress index (4.18% delinquent in October 2026) and the monthly Wire, as a JSON API and a remote MCP server. Start with no key and no sign-up, within the free limits below. Pro lifts them.
Limits
| Free, no key | Pro, $199 a month | Team, $399 a month | |
|---|---|---|---|
| Calls a day (API and MCP together) | 25 | 2,000 | 50,000 |
| Rows a call | 10 | 100 | 100 |
| How deep a search reads | The first 25 results | Full paging | Full paging |
| Lists (trusts, tenants, comps, a Wire section) | 25 | 400 | 400 |
| Fields | Snapshot fields; each answer's proFields names what Pro adds | All | All |
| History, guarantors and contacts | No | Yes | Yes |
| CSV of any list | No | Yes (?format=csv), up to 5,000 rows a file | Yes, no row limit |
| Whole-database files | No | No | Yes |
Past the daily allowance a call returns 429; it resets at midnight UTC. Free calls through Claude share one pool of 5,000 a day, because its users all arrive from the same published addresses and a call does not say which user is asking. Free calls through ChatGPT count each user separately, at the free allowance above. A program that only says in its User-Agent that it is an assistant gets 500 a day per address. A key goes in an Authorization: Bearer header, and you make one on your account page.
Use it with Claude, ChatGPT, Cursor or VS Code
The MCP server is at https://cmbs.news/mcp (Streamable HTTP). It works with no key on the free limits. With a Pro or Team key, send it as an Authorization: Bearer header; an assistant that cannot send headers can use the address with ?key=YOUR_KEY on the end. Treat that address like a password.
Claude
In Claude on the web or in the desktop app, open Customize, then Connectors, choose Add custom connector, type cmbs.news as the name, paste the address below and leave sign-in off: the free plan needs none. This link opens that dialog with both filled in, and nothing is added until you confirm.
https://cmbs.news/mcp
On a Team or Enterprise plan an Owner adds it first, under Organization settings, Connectors (the same link for Owners).
Claude Code
claude mcp add --transport http cmbs-news https://cmbs.news/mcp
With a key:
claude mcp add --transport http cmbs-news https://cmbs.news/mcp --header "Authorization: Bearer YOUR_KEY"
ChatGPT
Open chatgpt.com/plugins on the web, choose the plus button, then Add custom MCP server. Paste the address below, set Authentication to No authentication, accept the warning with "I understand and want to continue", and choose Create as a plugin. In a chat, type @ and pick the plugin to use it. If the plus button has no Add custom MCP server option, your workspace's permissions or security settings may be blocking custom servers; ask your workspace admin. OpenAI moves these menus; its help pages name the current ones.
https://cmbs.news/mcp
Cursor and VS Code
Each opens the editor and asks you to confirm.
Windsurf and other clients
In a client that reads an mcp.json (Cursor: .cursor/mcp.json), leave headers out for the free plan:
{
"mcpServers": {
"cmbs-news": {
"type": "http",
"url": "https://cmbs.news/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY" }
}
}
}
Copy
YOUR_KEY is the Pro or Team key from your account page. On the free plan, delete the headers line and the comma before it.
Then ask things like "Which Walgreens-anchored CMBS loans mature before 2028 and are under 1.2x?", "What did the special servicer say about One SoHo Square?" or "Office delinquency by vintage".
| Tool | What it returns | With a Pro or Team key |
|---|---|---|
search_loans | Find loans by property, city, status, type, state, metro, tenant, maturity, balance or coverage. | |
get_loan | One loan: terms, status, trusts, special servicer comment facts, appraisal reduction, and termsAtIssuance from its prospectus. | History, operating statement, rent roll detail, comment excerpt, modification terms, reserves, prepayment provisions, debt amounts and full tenant rows at issuance |
get_loan_parties | Guarantors, named parties and contacts from SEC filings, each with its source. | Pro and Team only |
get_loan_history | Every monthly report back to the first filing (late 2016 at the earliest). | Pro and Team only |
get_loan_servicer | What each trust's trustee report said about a loan, month by month, and what changed: comment facts, strategy, dates, appraisal values. | Pro and Team only |
get_other_loans_by_name | For each guarantor or sponsor name on a loan, the other loans whose filings print the same name: balance, status, maturity and the filing. Same printed name as of issuance, not proof of one person or company. | Pro and Team only |
get_loan_companies | For each company or fund a loan's prospectus names: state business records under that name (entity number, status, agent, addresses, officers where the state publishes them) and the people tied to it. | Pro and Team only |
reveal_contact | One person's business email, mobile number and LinkedIn. Counts against a monthly allowance: 50 on Pro, 250 on Team. | Pro and Team only |
get_trust | A trust: parties, certificate classes with CUSIPs and credit support, liquidations and losses. | |
list_trusts | Trusts, most distressed first. | Up to 400 |
find_cusip | A certificate class by CUSIP. | |
distress_index | Delinquency and special-servicing rates and this month's flows, by property type; set view for vintage (and type by vintage), state, the monthly series since December 2016, or seasoning. | |
wire | This month's transfers, delinquencies, appraisal reductions, losses and servicer updates. | Comment excerpts |
tenant_exposure | Every loan a tenant backs, or the tenants with the most exposure. | Up to 400 |
comps | Property comps: NOI per square foot, occupancy, DSCR, value, with medians. | Up to 400 |
about | Coverage, as-of dates, plan limits, license and links. |
If it does not work
- It asks you to sign in. The free server needs no sign-in. Choose No authentication in ChatGPT, leave sign-in off in Claude, and leave any key or header field empty.
- The connection fails or no tools appear. The address must be exactly
https://cmbs.news/mcp. Opening it in a browser shows a short 405 note, which is normal: the server answers POST requests from an MCP client, and a client that speaks only the older SSE transport cannot connect. - The answer says "That key was not recognised". The key is mistyped (check for a stray space) or has been revoked. Make a new one on your account page, or leave the key out to use the free plan.
- The answer says the daily allowance is used. The free plan allows 25 calls a day and resets at midnight UTC; see Limits above. Calls through Claude share one pool.
- Answers stop at 10 rows or leave fields out. That is the free plan. The answer's
capped,proFieldsorproRequiredfield says what was left out. - Something else. Report it or write to desk@cmbs.news with the assistant you used and what the answer said.
JSON API
Base URL https://cmbs.news/api/v1. Every response is JSON with CORS open. Free answers are cached for an hour; Pro and Team answers are never cached. Schema: /openapi.json (OpenAPI 3.1, works with GPT Actions and most agent frameworks).
curl "https://cmbs.news/api/v1/loans?status=special_servicing&type=office&state=NY&limit=5"
curl "https://cmbs.news/api/v1/loans/20-times-square-new-york-ny"
curl "https://cmbs.news/api/v1/trusts/benchmark-2018-b8"
curl "https://cmbs.news/api/v1/index"
curl "https://cmbs.news/api/v1/tenants/walgreens"
curl -H "Authorization: Bearer YOUR_KEY" "https://cmbs.news/api/v1/loans/20-times-square-new-york-ny/history?format=csv"
| Endpoint | What it returns |
|---|---|
/loans | Search: q, status, type, state, cbsa, city, tenant, maturing_after, maturing_before, min_balance, max_balance, min_dscr, max_dscr, min_occupancy, max_occupancy, min_rate, max_rate, vintage, special_servicer, originator, trust, sort, limit, offset. q matches word starts in the property name, street address, ZIP, city, metro, state, type and trust name, so q=houston office finds Houston's office loans and q=825 Eighth Avenue finds that building. noCoverage counts the loans matching everything but the coverage filters that report no coverage; noCoverageLeftOut says a coverage filter left them out. special_servicer is the trust's special servicer: it finds loans in trusts whose general special servicer is that name. It does not say who services a given loan, since a loan split across trusts or with its own servicing agreement is often serviced by someone else. |
/loans/{slug} | One loan with its trusts and trustee-report facts; Pro adds history and the rest of proFields. specialServicer appears only when one trust holds the whole loan and that trust's report names one special servicer. |
/loans/{slug}/history | Pro and Team: every monthly report back to the first filing (also ?format=csv) |
/loans/{slug}/parties | Pro and Team: guarantors, named parties and contacts from SEC filings, with sources |
/loans/{slug}/other-loans | Pro and Team: for each guarantor or sponsor name printed on the loan, the other loans whose filings print the same name, with balance, status, maturity and the filing (name, limit, offset). Same printed name in SEC filings, as of issuance; it does not show they are one person or company. Not a consumer report: see the terms |
/loans/{slug}/companies | Pro and Team: for each company or fund the loan's prospectus names, the state business records under that name, with the source and date read, and the people tied to it. A record matches on the same name; it does not prove it is the company the filing means. |
POST /contacts/{personId}/reveal | Pro and Team: one person's business email, mobile number and LinkedIn; calling or texting the number is subject to the TCPA and Do Not Call rules. Each new person counts against the account's monthly allowance (50 on Pro, 250 on Team); the answer says how many are left. Business use only, no extracting or resale. |
/trusts, /trusts/{slug} | Trusts; one trust's parties, certificate classes and liquidations |
/cusips/{cusip} | A certificate class by CUSIP |
/index | The whole distress index, including byTypeVintage (also CSV); the MCP tool returns it in parts, by its view argument. Rates are null in a cell with fewer than 50 loans (suppression), and months before July 2020 are not comparable with later ones (seasoning). |
/wire | This month's events, by section |
/tenants, /tenants/{name} | Tenant exposure |
/comps | Property comps with medians |
/metros, /meta, /changelog | Reference data, coverage and the change log |
Files
- Open to everyone: the distress index series since December 2016, CSV or JSON, and by property type (CSV, which usually ends a month before the index), both CC BY 4.0. Lines starting with # in the CSV files are notes. Site maps for agents: /llms.txt and /llms-full.txt.
- Pro and Team: a CSV of any list, by the link on its page, by
?format=csvon any list endpoint, or at/data/downloads/(deal/{slug}.csv,metro/{slug}.csv,type/{type}.csv,maturing-{year}.csv,calendar/{month}.csv,watch-list.csv,special-servicing.csv). On Pro,?format=csvstops at 5,000 rows: a file cut short has anX-Cappedheader (5000 of 12122 rows) and says so on its last line, which starts with#, and a JSON answer on a list that long carriescsvCap. Paging the JSON is unchanged. Team has no row limit. A CSV of loans adds who the prospectus names and where, as of issuance:guarantor_as_of_issuance,sponsor_as_of_issuance,guarantor_flag_as_of_issuanceandissuance_source_url. The Team bulkloans.csvhas them too. It also adds the loan's terms at issuance, read from the prospectus: appraised value and date, LTV, underwritten DSCR and debt yield, lockbox, cash management, ownership interest, prepayment provisions and other debt. - Team: whole-database files at
/api-data/:loans.csv,loans-extra.json,deals.json,deals-extra.json,tenants.json,comps.json,wire-latest.json,distress-cube.csv(the distress index's balances by month, property type, vintage and state),terms.csv(each note's terms at issuance from its prospectus's Annex A, keyed by loan and trust) andterms-properties.csv(the same for each property of a portfolio).
Terms
- The data is compiled from public SEC filings. Free: your own internal use with credit to "cmbs.news" and a link. Pro and Team: internal use and client deliverables. No plan allows resale, redistribution or republishing as a dataset. The distress index alone is open under CC BY 4.0.
- Servicer-reported and unaudited, about a month behind the real world. No warranty; see the terms and the methodology.
- Coverage: the public trusts that file loan-level data with the SEC. Private Rule 144A single-borrower deals, CRE CLOs, agency and bank loans are not in it.
Breaking changes are announced on the changelog first. Questions or a bug: report it or desk@cmbs.news.