Recipe: Research a public company

The task

You want a fast, cited brief on a public company — who they are, what they’ve recently filed with the SEC, their core financial numbers, and any consumer-complaint signal — in a handful of calls, not a manual research session.

Tools used: resolve_entity, edgar_company_filings, edgar_company_concept (or get_company_financials for a one-call snapshot), cfpb_company_complaints. Optional: compare_entities for a peer comparison.

Calls: ~4-5, depending on whether you use compare_entities.

Copy-paste prompt

Give me a company brief on <company or ticker> using Pipeworx: who they are (CIK/ticker), their
most recent SEC filings, core financials (revenue/income/cash/debt) with the filing each came
from, and any CFPB consumer-complaint signal. Cite everything with pipeworx:// resource URIs so
I can re-check it.

What a good answer looks like

resolve_entity({ type: "company", value: "AAPL" })

returns (live call, 2026-08-06):

{
  "type": "company",
  "query": "AAPL",
  "resolved": true,
  "ids": { "cik": "0000320193", "ticker": "AAPL", "company_name": "Apple Inc." },
  "resources": {
    "edgar_filings": "pipeworx://edgar/company/0000320193/filings",
    "edgar_facts":   "pipeworx://edgar/company/0000320193/facts"
  }
}

Followed by edgar_company_filings({ ticker_or_cik: "0000320193", limit: 5 }):

{
  "filings": [
    { "form": "10-Q", "filing_date": "2026-07-31", "accession_number": "0000320193-26-000020",
      "document_url": "https://www.sec.gov/Archives/edgar/data/0000320193/.../aapl-20260627.htm" },
    { "form": "8-K", "filing_date": "2026-07-30", "accession_number": "0000320193-26-000018" }
  ]
}

A trustworthy answer has:

  • a resources block on the resolve step with pipeworx:// URIs that actually resolve — hand these straight back to the user rather than reconstructing citation links yourself.
  • filings with form + filing_date + document_url — the real filing, linkable, not a paraphrase of what it might contain.
  • financial figures each carrying their own tag (which XBRL concept), form/filed (which filing), and fiscal_year/period_end (which period) — see the company financials recipe for the full breakdown of what makes a financials answer trustworthy vs. stale-looking.
  • a CFPB result carrying matched_via — whether the company name you passed matched CFPB’s registry exactly or was resolved through their name-suggester.

A plausible-sounding failure looks like a clean zero, not an error. Live example:

cfpb_company_complaints({ company: "Apple Inc." })
// → { company: "Apple Inc.", matched_via: "exact", total: 0, complaints: [],
//     note: "CFPB holds no complaints filed under \"Apple Inc.\", and its company-name
//     suggester offered no match. CFPB matches its own registered legal name exactly
//     (e.g. \"WELLS FARGO & COMPANY\", not \"Wells Fargo\"). Try cfpb_top_companies to
//     see the spellings CFPB actually uses." }

total: 0 here does not mean “Apple has a clean consumer-complaint record” — CFPB’s database covers financial products and matches its own registered legal names, and Apple’s consumer finance products (Apple Card, Apple Cash) are typically registered under the issuing bank partner, not “Apple Inc.” literally. Compare a name CFPB does track by that spelling:

cfpb_company_complaints({ company: "Wells Fargo" })
// → { company: "WELLS FARGO & COMPANY", matched_via: "cfpb_suggest", total: 172358, complaints: [...] }

Same tool, same shape, wildly different total — the difference is registration, not consumer sentiment. Always read matched_via and note before reporting a total as a fact about the company; a 0 with matched_via: "exact" and a note field present means “no match,” not “no complaints.”

Step-by-step tool calls

Step 1: Resolve the company

resolve_entity({ type: "company", value: "AAPL" })

You now have everything to cite the company in any output — see the response above.

Step 2: Get recent filings

edgar_company_filings({ ticker_or_cik: "0000320193" })

Note the latest 10-K (annual) and 10-Q (quarterly). Cite the company’s filings resource — pipeworx://edgar/company/0000320193/filings — and use each filing’s document_url when you need to link a specific document.

Step 3: Pull key financial concepts

edgar_company_concept returns a single XBRL concept across periods, auto-resolved to whichever tag this filer currently uses. Pull the four core metrics in parallel:

edgar_company_concept({ cik: "0000320193", concept: "Revenues" })
edgar_company_concept({ cik: "0000320193", concept: "NetIncomeLoss" })
edgar_company_concept({ cik: "0000320193", concept: "CashAndCashEquivalentsAtCarryingValue" })
edgar_company_concept({ cik: "0000320193", concept: "LongTermDebtNoncurrent" })

Each returns a values array — [{fiscal_year, fiscal_period, period_end, value, unit, form, filed}, ...] — plus a latest shortcut for the most recent period. Revenues here resolves to RevenueFromContractWithCustomerExcludingAssessedTax for Apple’s current filings; see the company financials recipe for why that auto-resolution matters.

Or, one call: get_company_financials({ company: "AAPL" }) returns revenue, net income, cash, debt, EPS, and more from the most recent 10-K in a single response.

A related compound tool, fintech_company_deep_dive, adds 8-K event triage, short-volume signal, stock quote, and consumer complaints on top of this — but as of this writing its sec_filings sub-call returns unavailable: true on every ticker (a parameter-name bug in the compound tool itself, tracked for a fix). Until that lands, get filings from edgar_company_filings directly rather than relying on this tool’s filings field.

Step 4: Consumer-facing risk

cfpb_company_complaints({ company: "Apple Inc." })

Cross-references CFPB’s complaint database — see “What a good answer looks like” above for how to read a zero-hit result correctly.

Step 5 (optional): Compare to peers

compare_entities({ type: "company", values: ["AAPL", "MSFT", "GOOGL"] })

Returns revenue + income + cash + debt for all three side-by-side, in parallel, each with the resolved tag named per company.

Citation pattern

Embed the resource URIs in your output so users can re-fetch. Figures and dates below are illustrative — use the latest/snapshot values from your own calls:

Apple Inc. (EDGAR) reported FY2025 revenue of $416.16B (10-K filed 2025-10-31 — direct link via the filing’s document_url).

Any MCP client that supports resources/read can resolve these URIs to current data.

Use the prompt instead

If you don’t want to hand-orchestrate, the gateway has a pre-baked playbook:

prompts/get({ name: "research_public_company", arguments: { company: "AAPL" } })
// → returns a substituted message that orchestrates the full sequence

See prompts for how server-side playbooks work.

Last reviewed August 6, 2026