Imported from carta/plugins (
plugins/carta-cap-table/skills/carta-valuation-history/SKILL.md). Install upstream withnpx skills add carta/plugins --skill carta-valuation-history. Copyright stays with the author.
Valuation History
Fetch a company's fair market value (FMV) history.
FMV is not always a 409A. A 409A is the US instrument; a UK company is valued under an EMI or CSOP agreement with HMRC, and other companies use a share-price report. Read whichever the company actually has, and never tell a company with a valid EMI valuation that it has none.
When to Use
- "What's our current valuation?" / "What's the current 409A?"
- "Show me the FMV history"
- "When does the valuation expire?"
- "What's the exercise price for common stock?"
- "Has the FMV changed recently?"
- "Is the valuation still valid?"
Prerequisites
You need the corporation_id. Get it from list_accounts if you don't have it.
Data Retrieval
call_tool({"name": "cap_table__get__valuations", "arguments": {"corporation_id": corporation_id}})
Optional valuation_source filters to one or more of EMI, CSOP, 409A, SHARE_PRICE.
Omit it — the point of this command is that it covers every source at once.
Response Format
{
"count": 2,
"active": [
{
"price": "0.500000000000",
"currency": "GBP",
"valuation_type": "AMV",
"support_reference_type": "EMI_VALUATION_REPORT",
"effective_date": "2026-01-15",
"expiration_date": "2027-01-14",
"share_class_name": "Ordinary",
"status": "ACTIVE"
}
],
"history": []
}
history holds every row including expired ones; active is the subset the server considers
live.
Key Fields
price: FMV per share, a high-precision decimal string (e.g."0.500000000000")currency: ISO code for this row — read it per row, never assumevaluation_type:AMV,UMV,FMV, orSHARE_PRICEsupport_reference_type: which instrument the row came from (409A / EMI / CSOP / share price)effective_date/expiration_date: ISOYYYY-MM-DDstatus:ACTIVEorEXPIRED, computed server-sideshare_class_name: e.g. "Common", "Ordinary"
AMV and UMV
A single HMRC valuation produces two prices, both live at once:
- AMV — actual market value, discounted for restrictions on the shares
- UMV — unrestricted market value
They are not duplicates and one is not "the real one". Show both, labelled. If asked which applies to a specific grant, say that depends on the grant's terms and point the user to their equity advisor — the data does not record it, and the two carry different tax outcomes.
Fallback
If cap_table__get__valuations is unavailable for the company, fall back to
cap_table__get__409a_valuations, which returns {count, current_409a, history} for US 409A
data only. That response has no currency field — present its prices unlabelled rather than
assuming a symbol, and check current_409a.is_expired before calling it current.
Workflow
Step 1 — Fetch Valuations
call_tool({"name": "cap_table__get__valuations", "arguments": {"corporation_id": corporation_id}})
Step 2 — Identify the Current Valuation
Use active. Do not re-derive live-vs-expired from dates: the server applies per-source
rules (a share-price report has its own state; a null expiration means open-ended) that a date
comparison gets wrong.
Where you do sort, sort on parsed dates, never raw strings. These are ISO so they happen to
sort correctly, but the 409A fallback returns MM/DD/YYYY, where a string sort is month-major
and ranks 12/01/2023 above 04/25/2025.
If active holds more than one row, they are all current — an AMV/UMV pair, or several share
classes. Present them all rather than picking one.
Step 3 — Check Expiration
- Within 90 days of today — flag as a time-sensitive action item, not just a data point: bold it, give the exact days remaining, and recommend starting renewal now (especially if a financing round is in progress, since closing will likely push past the expiry date).
- Already past — flag as expired.
- No
expiration_date— say it does not expire on a fixed date rather than inferring one.
Step 4 — Present Results
Show the history table and trend summary (see Presentation section).
Gates
Required inputs: corporation_id.
If missing, call AskUserQuestion before proceeding (see carta-interaction-reference §4.1).
AI computation: No — this skill presents Carta data directly.
Presentation
Format: Table + trend summary
BLUF lead: Lead with the current FMV per share — with its currency and source — and its effective/expiration dates, before showing the history table.
Sort order: By effective_date descending (most recent first).
Date format: MMM d, yyyy (e.g. "Jan 15, 2026").
Currency: format price with the row's own currency, trimming trailing zeros. Never
hardcode a $, and never default to USD — a GBP valuation shown as dollars is a reporting
error, not a cosmetic one.
| Effective | Expires | FMV/Share | Type | Source | Share Class | Status |
|---|---|---|---|---|---|---|
| Jan 15, 2026 | Jan 14, 2027 | GBP 0.50 | AMV | EMI | Ordinary | Current |
| Jan 15, 2026 | Jan 14, 2027 | GBP 0.75 | UMV | EMI | Ordinary | Current |
| Apr 25, 2024 | Apr 24, 2025 | USD 12.61 | FMV | 409A | Common | Expired |
Drop the Type and Source columns when every row shares the same values (a US-only company gets back its familiar 409A table).
Do not render a bar chart for FMV history — values in mature companies cluster near the maximum, making bars uninformative (all bars look the same width). The table is sufficient. Instead, after the table, add a one-line trend summary:
FMV has grown Nx since YYYY, with [acceleration/steady growth] since [year].
Only compare like with like. A growth multiple across two different currencies is
meaningless, and so is one that mixes an AMV with a UMV. Compute the trend within a single
currency and a single valuation_type; if the series spans more than one, give a separate
line for each or omit the trend entirely.
If multiple share classes exist, group by share class name in the table.
Caveats
- The
pricefield is a string with many trailing zeros — always parse and format before displaying. - A valuation with a past
expiration_dateshould never be used for new grant pricing. Flag it prominently. - Valuations are point-in-time snapshots — a material event (e.g. a new financing round) can invalidate a current valuation before its expiration date.
- This skill reads valuations; it cannot create or update one. Route those requests to the Carta app — for a non-US company that is the international valuations dashboard, not the 409A ledger.