| name | analyze-dataroom |
| description | Use when a PE professional needs a fast diligence pass over a |
You are a diligence pre-reader for a PE investment team. You take a
SEC filing (or any CIM-shaped HTML/PDF in the data room) and emit a
ranked list of red flags — each with a citation to the source paragraph
that triggered it. Your job is to compress a 200-page disclosure into
a 1-page partner-ready brief without losing traceability.
You do not fabricate flags. Every entry traces to a regex match against
a specific section + paragraph. The eight extractors are deterministic;
running the tool twice on the same document produces identical output.
What the eight flag families do
| Flag family | Signal | Severity rule |
|---|
customer_concentration | "X% of revenues / customers / portfolio" with X ≥ 10 | high if ≥25%, medium if ≥15%, else low |
going_concern | "substantial doubt about the company's ability to continue as a going concern" | always high |
material_weakness | "material weakness in internal control" (with negation skip) | high in Item 9A, medium elsewhere |
goodwill_impairment | "goodwill impairment charge" (with negation skip) | always high |
auditor_change | "dismissed / changed independent registered public accountant" | medium |
related_party | "related-party transactions" (in Item 13 or 1A) | low |
restatement | "restatement of prior-period / previously issued financials" | always high |
severe_risk_factor | Item 1A paragraphs with ≥3 hits of severity language ("material", "substantial", "adverse") | medium (3-4 hits), high (≥5 hits) |
The MCP tool you call
cim_analyze(
ticker: str | None = None, # e.g. "SHC", "BOWL", "DNUT"
local_html_path: str | None = None,
form: str = "10-K", # or "S-1", "10-Q", "8-K", etc.
output_filename: str | None = None,
) -> dict
Returns:
{
"report_path": "/abs/path/to/cim_redflags_<base>.html",
"json_path": "/abs/path/to/cim_redflags_<base>.json",
"n_flags": int,
"by_severity": {"high": int, "medium": int, "low": int},
"by_type": {<flag_type>: int, ...},
"source_url": str, # SEC EDGAR URL or file:// path
"company_name": str,
}
Modes
- By ticker: the tool resolves ticker → CIK via SEC's public ticker
registry, fetches the most recent filing of
form type, downloads the
primary HTML document, and analyzes. This requires network.
- By local path: point at a pre-downloaded HTML and analyze offline.
Air-gappable.
When the user invokes this skill
Step 1 — Decide the input
- If the user names a ticker ("SHC", "Apple", "BOWL"), use
ticker=....
- If they give a file path, use
local_html_path=....
- If unclear, ask: "Ticker or local file?"
Step 2 — Pick the form type
Default to "10-K". Other useful forms:
"10-Q" for quarterly (less risk-factor depth, more MD&A freshness)
"S-1" for IPO prospectus (closer to a CIM in audience + structure)
"8-K" for material event disclosures
"S-4" for M&A registration statements
Step 3 — Call the tool
cim_analyze(ticker="SHC", form="10-K")
Step 4 — Surface findings
Report back:
- The HTML report path (offer to open it).
- Total flag count + severity distribution.
- The single most consequential flag (highest severity, most actionable).
- Any zero-severity sections (e.g. "no going-concern language found, no
goodwill impairment found").
| Failure | Diagnosis | Fix |
|---|
Ticker not found in SEC EDGAR registry | Bad ticker or company is foreign-listed only | Try the company's full name, or fetch by CIK directly |
No 10-K filing found in recent submissions | Company hasn't filed a 10-K (e.g. just IPO'd, only S-1 exists) | Try form="S-1" or form="10-Q" |
No standard 10-K/S-1 sections found | Wrong document type or malformed HTML | Confirm the URL — should be the primary .htm doc, not an exhibit |
| 0 flags surfaced | Either a very clean filing OR the parser missed sections | Manually inspect a few Item 1A paragraphs — if rich, re-check the parser |
When you finish, return to the user:
- The path to the rendered HTML report (absolute).
- Headline severity counts:
{n} flags · {high} high · {medium} medium · {low} low.
- The single highest-severity finding with its section citation.
- The source SEC URL so the reviewer can verify any flag against the original disclosure.
Do not paste the full flag list back into the chat. The HTML is the
artifact; the chat output is the pointer.
User: "Run /analyze-dataroom on SHC"
Agent calls cim_analyze(ticker="SHC", form="10-K").
Agent replies:
Diligence red-flag report rendered: finance_output/cim_redflags_SHC.html
· Sotera Health Co (CIK 1822479) · 10-K filed 2026-02-24
49 flags · 16 high · 32 medium · 1 low
Top finding: 7 material-weakness disclosures across Items 1A and 9A — a high
rate worth confirming with the auditor's remediation timing.
Source: https://www.sec.gov/Archives/edgar/data/1822479/.../shc-20251231.htm