Add securitisation (structured finance) plugin — free SEC EDGAR connector + skills - #283
Add securitisation (structured finance) plugin — free SEC EDGAR connector + skills#283dacheah wants to merge 7 commits into
Conversation
kuangmi-bit
left a comment
There was a problem hiding this comment.
Review: PR #283 — Securitisation plugin
Overall: ✅ Strong contribution, ready to merge
This is a well-built, honest plugin. Here is what stood out.
What is excellent
1. Free data source. This is the only connector in the marketplace that
needs no paid subscription — SEC EDGAR is public data. Fills a real gap.
2. Honest coverage. DATA_PROVENANCE.md and LOAN_LEVEL_OUTPUTS.md
explicitly say what does NOT work (credit-card ABS no loan-level data, RMBS
rare, CLOs not on EDGAR). This builds trust.
3. SEC compliance. User-Agent identification + 10 req/s throttle built into
http_client.py. Clean pattern: config.py as single source of truth for
endpoints.
4. Layout-agnostic XML parser. record_iter.py handles both
<asset>-wrapped and flat ABS-EE layouts. The _Stratifier in
absee_parser.py is a clean abstraction for group-by aggregations.
5. Test coverage. 5 XML samples + Python tests for parsing and CMBS field
mapping. The samples exercise both layout formats and edge cases.
6. Region-ready architecture. regions/registry.py + UsEdgar
registration pattern makes it trivial to add EU/AU modules later.
Minor suggestions (non-blocking)
-
requirements.txt—mcp>=1.2.0. The parent repo has nopyproject.toml
or lockfile for this connector. Consider documenting how users install it
(pip install -r connector/requirements.txt) in the README or connector
README. -
.mcp.jsoncwd— Uses${CLAUDE_PLUGIN_ROOT}. This is a Cowork
built-in. Consider adding a comment noting this only works in Cowork; for Claude
Code users,cwdneeds an absolute path. -
extract_loan_timeseries— Joining across periods onassetNumberis
powerful but sensitive to data quality. A brief note in the skill about what
happens whenassetNumberis not stable across filings would help analysts
trust the output.
Verdict
Clean architecture, honest about limits, free data source, good test coverage.
Approved with minor documentation suggestions.
|
Thanks so much for the thorough review, @kuangmi-bit. I really appreciate the careful read and the kind words. Your three suggestions are all fair and happy to fold them in:
One question for the maintainers: the merge box flags "Commits must have verified signatures," and my commits are currently unsigned. Would you like me to sign and re-push them, or does your merge process handle that? Happy to do whichever is cleaner on your end. I'll also hold for a maintainer to approve the workflow runs. Thanks again for taking the time. |
29a6328 to
5f05b0f
Compare
|
Curious about the scope here — does this plugin target ABS/MBS/CLO equally, or focus on a specific asset class? Happy to help test with real EDGAR filings if helpful. |
|
Good question @kuangmi-bit. It's not even across asset classes, mostly because EDGAR's loan-level disclosure isn't either. Roughly where it stands: Auto ABS (loans and leases): the strongest area. The loan-level engine is built around this, since auto has the richest ABS-EE coverage. So document search, prospectus parsing and waterfall extraction work across registered ABS generally, but the loan-level analytics are really auto and CMBS. The coverage table in the README lays this out. Auto: a recent AmeriCredit (GM Financial), Westlake or GLS auto ABS-EE tape with analyze-loan-tape If something doesn't tie back to the filing, that's the feedback I'm after. |
- CMBS module + extract_cmbs_loan_level: DSCR, debt yield, occupancy, LTV,
property/state concentration, maturity wall, stratifications. Validated
on the real Benchmark 2018-B3 filing.
- /analyze-cmbs-tape command + cmbs-loan-tape-analysis skill.
- record_iter.py: structure-agnostic iterator (handles <asset>-wrapped and
flat assetTypeNumber layouts); auto parser now delegates to it.
- 40 auto + 13 CMBS tests pass; scripts/check.py clean. Plugin v0.2.0.
- New skills: prepayment-analysis (wraps extract_loan_timeseries) and deal-comps (cross-deal normalization), each with a matching slash command - server.py: import guard — a missing mcp SDK now prints an install hint to stderr and exits nonzero instead of failing silently - README: numbered Installation (Claude Code + Cowork), surface-support matrix, and a "verify the connector is live" check - plugin.json 0.2.0 -> 0.3.0; marketplace.json + README listings updated - scripts/check.py clean; 45 auto + 13 CMBS tests pass
- Add "securitization" (US spelling) alias to descriptions for discoverability - plugin.json 0.2.0 -> 0.3.0; marketplace.json + README listings updated
154f6d4 to
9e5b4f0
Compare
|
Thanks for the thorough breakdown @dacheah — the asset-class coverage matrix is exactly what I was looking for. The auto ABS / CMBS split makes sense given EDGAR's disclosure gaps. Happy to spot-check the AmeriCredit ABS-EE tape and Benchmark 2018-B3. I'll run them through analyze-loan-tape and analyze-cmbs-tape and report back if anything doesn't tie to the filings. One quick thought on the .mcp.json cwd note you mentioned earlier — if you're documenting |
Summary
Adds a securitisation / structured-finance vertical plugin backed by a free,
local SEC EDGAR connector. It searches registered ABS/CMBS deals, pulls their
prospectuses and investor reports, runs loan-level analysis on Form ABS-EE data
(auto and CMBS), compares deals, and measures prepayment/loss over time — with
skills for prospectus analysis, CLO indenture review, and waterfall extraction.
It's the only connector in this marketplace that needs no paid subscription —
SEC EDGAR is public data — filling the structured-finance gap alongside the
licensed providers.
What's inside
search-deals,parse-abs-prospectus,analyze-loan-tape,analyze-cmbs-tape,analyze-prepayment,deal-comps,extract-waterfall,review-clo-indentureloan-tape-analysis, cmbs-loan-tape-analysis, prepayment-analysis, deal-comps,
payment-waterfall-extraction, clo-indenture-review
connector/, Python standard library + themcpSDK only),exposing 6 tools:
search_securitisation_deals,get_deal_filings,get_filing_document,extract_loan_level,extract_cmbs_loan_level,extract_loan_timeseriesdeal-surveillance— reconciles a deal's latest ABS-EE tape(s) against its 10-D, tracks period-over-period movement and trigger headroom, and outputs a one-page surveillance note.Coverage (honest, verified)
Loan-level analysis (the differentiating piece)
The ~130–160 MB ABS-EE tape is streamed record-by-record (flat memory) through a
layout-agnostic iterator (handles
<asset>-wrapped and flat layouts). Beyond poolstats,
extract_loan_levelproduces single-dimension stratifications and 2-Dcross-tabs (e.g. FICO band × state);
extract_cmbs_loan_levelgives the CMBScredit view — balance-weighted DSCR, debt yield, occupancy, LTV, property-type and
geographic concentration, the maturity wall, and largest loans; and
extract_loan_timeseriesjoins loans onassetNumberacross periods for roll-ratematrices, static-pool loss curves, and prepayment — analyses that aggregate
10-D reports can't reproduce. The
deal-compsandprepayment-analysisskills buildon these primitives. Output formats are specified in each skill's
references/output-schemas.md.Extensible to other regions
Connector is US-first but region-neutral: a
Regioninterface with a cleanus/(SEC EDGAR) implementation. EU/AU can be added as sibling modules served via a
regionargument, with no command/skill changes.Testing & validation
connector/tests/) — no network;parsers run on bundled synthetic tapes, search/filings on real EDGAR JSON shapes.
CMBS analytics validated against the real Benchmark 2018-B3 filing.
scripts/check.pypasses (0 issues). Plugin version 0.3.0.mcpSDK isn't installed, the server now reports it explicitly in the MCPlogs (
pip install "mcp>=1.2.0") instead of failing silently.Data, rights, licence
SEC EDGAR public data, accessed per SEC fair-access policy (descriptive User-Agent,
request throttling). Apache-2.0, matching the repo. See
DATA_PROVENANCE.md.Updates since @kuangmi-bit's review — thank you
All three non-blocking suggestions addressed:
pip install -r connector/requirements.txt(pinned
mcp>=1.2.0), with a numbered Installation section and a Claude Code /Cowork / claude.ai support matrix.
.mcp.jsoncwd— documented that${CLAUDE_PLUGIN_ROOT}is substituted by theCowork/plugin runtime and that standalone/Claude Code use needs an absolute
cwd(kept out of
.mcp.jsonitself, which is parsed as strict JSON).extract_loan_timeseries— added anassetNumber-stability caveat in theloan-tape and prepayment skills.
Also added since review:
deal-compsandprepayment-analysisskills/commands, anMCP-SDK import guard, and a "securitisation / securitization" spelling alias for
discoverability.
Structure & conformance
Aligned with marketplace plugin conventions: a bundled Apache-2.0
LICENSE; aCONNECTOR.mdhealth-check/recovery guide that every connector-dependent skill and command points to (so a missing connector is stated plainly rather than silently degrading to web search); output schemas moved intoskills/*/references/for progressive disclosure;.mcp.jsonno longer hardcodesSEC_EDGAR_USER_AGENT, so a user's own value is respected (compliant default remains inconfig.py); skill frontmatter flattened to single-paragraph descriptions; and completedplugin.jsonmetadata ($schema,displayName,license,keywords).Try it
/securitisation:search-deals AmeriCredit auto→ then parse the 424B5, analyse thelatest ABS-EE tape (auto or CMBS), run
deal-compsacross a shelf, oranalyze-prepaymentacross a deal's monthly tapes. (One-time:pip install "mcp>=1.2.0".)