LP Capital Summary (Claude Skill)

Last updated: July 6, 2026

This Claude Skill teaches Claude to rank your largest LPs by commitment (or any metric) and show each one's capital position: commitment, called, unfunded, contributed, distributed, and DPI, for one fund, a fund group, or firm-wide, pulled live (read-only) from your Hanover Park account.

How to set it up (one time)

lp-capital-summary.zip
  1. Download the attached file just above.

  2. In Claude, go to Settings > Capabilities > Skills and upload the file.

  3. Done. There is nothing to configure.

How to use it

Just ask Claude, for example:

  • "Who are our top 10 LPs?"

  • "Top LPs in [fund] by commitment"

  • "LP capital summary firm-wide as an Excel"

What's inside the skill (reference only)

You don't need to read anything below to use the skill. It's the full instruction set packaged in the attached file, shown here for reference.

Rank the largest LPs by commitment (or another metric on request) and show each one's capital position. The person asking is a fund principal (CFO/GP) or someone on their finance team, typically prepping for an LP meeting or a capital call — the table may be forwarded or read aloud to LPs, so accuracy and honest labeling beat completeness.

Definitions — get these right or the summary misleads

  • Called is what the fund has asked the LP for; contributed is the cash that actually arrived. They usually match; a gap means outstanding calls (point the user at delinquent-lp-report if they want to chase it).

  • DPI — report the platform's dpi field as-is; never recompute it from cashflows. If asked, the platform computes it as distributed ÷ called.

  • Unfunded = commitment − called. % called = called ÷ commitment.

  • Commitment is always the current booked amount. Called/distributed come in two legitimate bases: the single-fund leaderboard is as-of-today (a call issued but not yet due is excluded), while directory and per-investor totals are booked (it's included). Neither is wrong — but never mix bases in one column without saying so, and when the two visibly differ, add a one-line note ("a further call of ~X% of commitment is booked but not yet due").

Step 0 — Scope

Call get_user_context (Hanover Park connector; load the tools via tool search if deferred).

  • The response covers the user's firm — its funds, other vehicles, and today's date. Everything that follows is scoped to that firm.

  • "LPs" means investorTypes: ["limited_partner"] — the default. Include the GP or affiliates only if asked, and then keep a Partner Type column so nobody mistakes the GP for an LP. (This matters: the GP's NAV and multiples include carried interest, so it can outrank every real LP and distort the table.)

  • Note today and each fund's totalCommittedCapital — you'll use them for the as-of line and the concentration figure.

Step 1 — One round of clarification

Collect only what the request didn't pin down, in a single round (use the AskUserQuestion tool when available, otherwise ask plainly in chat). Busy CFOs and accountants will not sit through sequential question rounds — and never re-ask anything the prompt already answered. Usually the only real question is:

  • Scope — offer three options: a specific fund (if the firm has several, which one), a specific group of funds, or firm-wide across all funds. Suggest natural groupings from the firm's fund names — a flagship family ("the main [Firm] funds"), a strategy ("the [Strategy] funds"), or a fund plus its sidecars ("[Fund 1] and [Fund 1 sidecar]") — so the user can pick one by name instead of typing a list.

Everything else has a default that isn't worth a question: count defaults to top 10 (honor any number in the prompt; the single-fund leaderboard caps at 50), ranking defaults to commitment, and output defaults to a chat table with Excel offered at the end — produce a file only when asked.

Step 2 — Pull the data

Never page through the directory and sort or sum rows yourself — the platform ranks server-side, and a partial page sorted by hand silently drops LPs.

Single fund — call list_investors with view: "leaderboard", the fund in vehicleNames, metric: "commitment" (or called / distributed / nav / dpi / net_tvpi / net_irr if the user wants a different ranking), investorTypes: ["limited_partner"], limit: N. Rows come back with commitment, called, distributed, DPI, NAV, TVPI, net IRR, and rank, plus totalFundInvestments for the "top N of M" line. Pass asOfDate if the user wants the picture as of a past date (commitment stays current-booked — say so).

The leaderboard does not return contributed. Fetch it with one get_investor call per listed LP (batch the calls in parallel) and take that LP's row for this fund. Keep the leaderboard's called/distributed figures — get_investor is booked-to-date, so for historical asOfDate runs skip contributed and note why. If N > 15, skip the per-LP calls, leave contributed out, and offer it as a follow-up — twenty-plus lookups isn't worth the wait unless the user wants it.

Fund group or firm-wide — call list_investors with the directory view: sortBy: "commitment" (or called / contributed / distributed / dpi), investorTypes: ["limited_partner"], limit: N. Rows include all core figures including contributed — no per-LP calls needed, with each LP's totals aggregated across the funds in scope. Set vehicleIds to the chosen group's funds; for firm-wide, use all of the firm's vehicleType: "fund" vehicles so SPVs, GP entities, and the ManCo don't leak into "our funds". Either way, state exactly which funds are in scope in the output, and widen it if the user asks (e.g. "include SPVs"). Directory totals are booked-to-date only; if the user wants a group or firm-wide view as of a past date, explain that's available per fund, not aggregated. NAV/TVPI/IRR are likewise per-fund only.

Step 3 — Deliver

Chat table (default) — one compact markdown table:

| Rank | LP | Commitment | Called | % Called | Unfunded | Contributed | Distributed | DPI |

Drop the Contributed column when it wasn't fetched. Money as $1,234,568 (whole dollars), % called as 84.0%, DPI as 0.05x (two decimals); show null metrics as "—", never as zero. Above the table, one line of scope: fund, fund group (name the funds), or firm-wide (and what's excluded), "top N of M LPs by commitment", and the as-of date. Below it, 2–3 sentences: top-N concentration (top-N commitment ÷ the fund's totalCommittedCapital, labeled "of total fund commitments" since that total includes the GP), anything notable in the data (an LP whose contributed lags called, an unusual DPI), and any caveats. Then offer the Excel version in one short sentence.

There is no built-in flagging: don't offer thresholds or add a Flags column on your own. Within a single fund, calls and distributions are pro-rata, so per-LP DPI and % called are nearly uniform — a threshold column is noise. But if the user explicitly asks to flag something ("flag anyone called under 60%"), honor exactly that spec: add a Flags column, apply only the threshold(s) they named, and state plainly when nothing trips ("no LP is below 60% called; the lowest is [LP 1] at 72.0%") — a clean result is a finding, not a failure.

Excel (on request) — use the xlsx skill for mechanics and excel-formatting for house style (this is a report, not a calc model). One sheet: title block (firm name; "LP Capital Summary — [fund / group name / 'All Funds']"; scope + as-of line), the table with a frozen header row, $#,##0 money, 0.0% percentages, 0.00"x" DPI, and footer "Prepared by Hanover Park · [generation date]". If the user requested a flag column, render flagged text in red. Filename: [Firm] - LP Capital Summary - [Fund or All Funds] - [as-of date].xlsx.

Pitfalls

  • Don't rank or total LPs from hand-summed directory pages — use the leaderboard or sortBy.

  • Don't recompute DPI, TVPI, or IRR from capital actions, and don't reach for get_fund_performance here — it's fund-level, not per-LP.

  • Don't present called-vs-commitment gaps as money owed — uncalled is not unpaid. Outstanding (called-but-unpaid) capital is delinquent-lp-report's job.

  • Ties in commitment are common (parallel entities take equal allocations); keep the platform's rank order and don't reorder ties alphabetically.

  • If the firm has no fund matching the user's words, list the fund names from get_user_context and ask — never guess between plausible matches (e.g. "[Fund III]" could mean "[Fund III] LP" or its "[Fund III] sidecar" vehicle).