Compound tools

Pack tools usually map 1:1 to an upstream API call. Compound tools bundle multiple underlying calls — across packs — into a single response. They’re how Pipeworx turns “I need 5 things about X” into one round trip.

By convention, compound tools live in packs ending in -intel (housing-intel, fintech-intel, pharma-intel, govcon-intel, trade-intel, supply-chain-intel).

Where to find them: each of the five domain -intel packs is mounted in full on its matching vertical?vertical=housing gives you all ten housing-intel tools, ?vertical=pharma all six pharma-intel tools, and so on. That was only made true on 2026-08-11; before then several verticals carried a partial set or none of their own compounds, so if you connected earlier and concluded a compound didn’t exist, re-check. supply-chain-intel is not in a vertical — reach it on the full gateway or by pack path.

How they work

The pack receives one input, fans out to N upstream calls in parallel (via Promise.all, with a per-sub-call timeout so one slow upstream can’t stall the whole response), and merges the results into a single structured object with per-source provenance:

fintech_company_deep_dive({ ticker: "AAPL" })

Internally (verified live 2026-08-10):

  1. In parallel: edgar_ticker_to_cik (CIK) + edgar_company_filings (recent 10-Ks) + cfpb_company_complaints + sec_8k_recent (material-event triage) + finra.short_volume_daily
  2. If you pass _avKey: av_quote + av_overview + av_income_statement (Alpha Vantage), in parallel
  3. If you pass _fredKey: fed funds rate + 10Y Treasury (FRED), in parallel
  4. Merge results into one response, keyed by source, with unavailable/reason on any leg that failed

AlphaVantage and FRED are optional — omit the keys and you still get EDGAR + CFPB + the 8-K/short-volume legs. A 2026-08 fix corrected a param-name bug (edgar_company_filings wants ticker_or_cik/form_type, not ticker/type) that had made the sec_filings section silently unavailable on every call since the tool shipped (fleet #127) — a live call on 2026-08-10 confirms sec_filings now returns real filing data.

You wrote one tool call. The agent context grew by one transcript entry. The compound returns up to 8 sources’ worth of data depending on which optional keys you pass.

When to use a compound vs. individual tools

Compound when the task is “tell me about this entity” with a fixed set of dimensions. The compound’s structure is opinionated; you get a curated view.

Individual tools when you need fine control — different time windows, alternative concepts, specific HS codes, etc. Compound tools take simple inputs (ticker, drug name, NCT ID); they don’t expose every knob.

Currently available

Each -intel pack has grown past its original 1–2 tools — housing-intel alone is up to 10. The table below is what we’ve verified directly: a live call against most rows on 2026-08-10, plus the eight housing-intel rows added 2026-08-14 from a source read and a live tools/list. For the current, complete list on any pack, call get_pack_tools({slug: "housing-intel"}) or discover_tools({task: "..."}) rather than trusting a table to stay current.

Compound toolPackInputsWraps
housing_market_snapshothousing-intelmetro_name (optional)FRED + BLS + Zillow — not Census
housing_property_reporthousing-intel_attomKey, address1, address2ATTOM only — not Altos or FEMA
case_shiller_metro_comparehousing-intelmetros (array of names from the 20-city composite)FRED Case-Shiller series, one per metro — level, 3m/12m change, peak, drawdown
housing_affordability_checkhousing-intelmetro (optional)FRED (rate, median price) + HUD income limits → monthly payment and required income
housing_rental_analysishousing-intel_attomKey, address1, address2, stateATTOM rental AVM + HUD fair market rents + BLS CPI rent
housing_employment_outlookhousing-intelnoneBLS — total, construction and residential-building employment, unemployment, openings
housing_mortgage_historyhousing-intelnone / date rangeFRED — Freddie Mac PMMS weekly mortgage rate back to 1971 (not a price index)
housing_market_screenhousing-intelnoneZillow — ranks metros by gross rent yield (median rent × 12 ÷ typical home value)
housing_metro_demandhousing-intelmetrosCensus ACS — population + 5y growth, renter share, median income, unemployment, by CBSA
housing_signal_scanhousing-intelnone45+ FRED/BLS indicators, flagged for anomalies and reversals
trade_bilateral_analysistrade-intelreporter_code, partner_code (numeric ISO, not reporter/partner)Comtrade + Census + FRED (optional). Treasury’s exchange-rate leg is currently returning unavailable on live calls (fleet #136/#137 partially fixed — Census and FRED work; Treasury doesn’t, verified 2026-08-10)
trade_country_profiletrade-intelcountry_code, not countryComtrade only — not IMF or Census
trade_macro_dashboardtrade-intelnoneTreasury + Census + BLS + IMF PortWatch + FRED (optional)
fintech_company_deep_divefintech-inteltickerEDGAR + CFPB + sec-events (8-K triage) + FINRA (short volume), plus AlphaVantage + FRED if you pass their keys
fintech_bank_health_checkfintech-intelbank_name (not rssd_id)FDIC + CFPB
fintech_market_snapshotfintech-intelnoneCFPB + FDIC, plus FRED macro (rates/spreads/VIX) if you pass _fredKey
pharma_drug_profilepharma-inteldrug_nameRxNorm + FDA (approvals/labels/events) + ClinicalTrials + PubMed + DailyMed
pharma_safety_reportpharma-inteldrug_nameFDA (events/recalls/label text) + RxNorm. Explicitly returns drug_drug_interaction_check: {available: false} — Pipeworx has no interaction source (see prompts)
pharma_pipeline_scan, pharma_pipeline_catalysts, pharma_sponsor_diligence, pharma_indication_landscapepharma-intelsponsor/conditionClinicalTrials.gov + PubMed + FDA (pack has grown to 6 compound tools total)
govcon_contractor_profilegovcon-intelcompany_name (not “contractor name/duns” — no DUNS field)SAM.gov + USAspending + SBIR
govcon_opportunity_scangovcon-intelkeywords — plural, required; optional set_asideSAM.gov + USAspending + SBIR — not Federal Register
govcon_agency_landscapegovcon-intelagencyUSAspending + SBIR
supply_chain_risksupply-chain-intelecosystem, packagedeps.dev + OSV.dev + the ecosystem’s own registry (npm/PyPI/Cargo/Go)

Cost model

A compound counts as 1 call against your daily quota, not N — it’s a single tools/call from the gateway’s point of view, metered at a flat per-pack credit cost: 5 for trade-intel, 10 for fintech-intel, pharma-intel, govcon-intel and supply-chain-intel, 50 for housing-intel (verified in pack source 2026-08-14; the authoritative number for any call is _meta.cost on the response). The sub-calls aren’t separate gateway requests at all: the compound pack imports the underlying packs and calls their callTool() functions directly, in-process, so they never touch the gateway’s own billing or rate-limit path a second time. Each upstream API still gets hit for every leg that runs, though — so the gateway-to-upstream traffic is several times a single call, scaling with however many legs the compound fans out to.

Building a custom compound

If you keep running the same 3-tool sequence:

  1. File via pipeworx_feedback({type: "feature", message: "Compound tool for X"})
  2. Or chain manually using Promise.all in your client and pass _meta.cache.fresh_until through

The Pipeworx team adds compounds based on feedback signal — see meta-tools.

Last reviewed August 14, 2026