Skip to main content
Glama

Lovie Company Formation

Simulate Cap Table Exit

cap_table_simulate_cap_table_exit

Computes what every stakeholder takes home at ONE hypothetical exit valuation, running the liquidation-preference waterfall over the issued cap table. An outstanding SAFE takes the greater of its money back and its conversion at the sale: a capped SAFE converts at its cap (its discount is a financing term and does not apply), an uncapped discount SAFE at the sale price less its discount. The unallocated option pool is cancelled and paid nothing, and bought stock that was never wired is a commitment, not a holder. Read-only — nothing is written. When the user asks to "run a simulation" without naming a number, do not pick round numbers out of the air: read the company's own valuations first (GetListCapTableRounds for pre/post-money, GetListCapTableSecurities for SAFE valuation caps) and call this once per valuation, plus one clearly below the cheapest and one or two well above the richest, so the ladder shows both a down-round and an upside. Keep it to about five valuations. Report each scenario as: the exit value, the total distributed, and one line per investor with the payout and the cash-out multiple (payout / capital invested, e.g. "20.0x"); call out anyone crossing $1M and $30M, and say plainly when an exit below the last round means liquidation preferences are repaid before common stock. Never hand-calculate any of these numbers.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
companyIdYesUUID value wrapper.
exitValuationNo
liquidationOverridesNo
additionalExitValuationsNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
rowsNo
scenariosNo
assumptionsNo
exitValuationNo
totalDistributedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / additionalExitValuations
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
    • addedInput schema / properties / liquidationOverrides
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "participationCap": {
      +        "maxLength": 20,
      +        "pattern": "^([0-9]+(\\.[0-9]{1,6})?)?$",
      +        "type": "string"
      +      },
      +      "preferenceType": {
      +        "maxLength": 32,
      +        "pattern": "^(none|1x_non_participating|1x_participating|2x_non_participating)$",
      +        "type": "string"
      +      },
      +      "securityId": {
      +        "description": "UUID value wrapper.",
      +        "properties": {
      +          "value": {
      +            "format": "uuid",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "seniority": {
      +        "maximum": 100,
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "securityId"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 100,
      +  "type": "array"
      +}
    • addedOutput schema / properties / assumptions
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "detail": {
      +        "type": "string"
      +      },
      +      "holder": {
      +        "type": "string"
      +      },
      +      "holdingId": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / rows / items / properties / securityId
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "UUID value wrapper.",
      +      "properties": {
      +        "value": {
      +          "format": "uuid",
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / scenarios
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "exitValuation": {
      +        "type": "string"
      +      },
      +      "rows": {
      +        "items": {
      +          "properties": {
      +            "asConvertedPayout": {
      +              "type": "string"
      +            },
      +            "finalPayout": {
      +              "type": "string"
      +            },
      +            "liqPreferencePayout": {
      +              "type": "string"
      +            },
      +            "mechanism": {
      +              "type": "string"
      +            },
      +            "moic": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "participatingPayout": {
      +              "type": "string"
      +            },
      +            "securityId": {
      +              "anyOf": [
      +                {
      +                  "description": "UUID value wrapper.",
      +                  "properties": {
      +                    "value": {
      +                      "format": "uuid",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "stakeholderId": {
      +              "anyOf": [
      +                {
      +                  "description": "UUID value wrapper.",
      +                  "properties": {
      +                    "value": {
      +                      "format": "uuid",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "type": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "totalDistributed": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed4 schema fields changed
    • addedOutput schema / properties / rows / items / properties / stakeholderId / anyOf
      Added value: +[
      +  {
      +    "description": "UUID value wrapper.",
      +    "properties": {
      +      "value": {
      +        "format": "uuid",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / rows / items / properties / stakeholderId / description
      Removed value: -"UUID value wrapper."
    • removedOutput schema / properties / rows / items / properties / stakeholderId / properties
      Removed value: -{
      -  "value": {
      -    "format": "uuid",
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / rows / items / properties / stakeholderId / type
      Removed value: -"object"
  3. First observed

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false and openWorldHint=false; the description adds substantial behavior well beyond that — the SAFE greater-of rule (capped converts at cap, discount ignored; uncapped at sale less discount), the unallocated option pool being cancelled, and unwired bought stock counting as a commitment not a holder. It also restates read-only (nothing is written), which reinforces rather than exceeds the safety annotation. Rich but not exhaustive on failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core computation in the first sentence and proceeds in a logical order (mechanics, then usage strategy, then reporting). It is long, and the reporting-format/'never hand-calculate' directives drift into workflow instruction rather than tool semantics, but for a complex waterfall simulation most sentences earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description thoroughly covers the calculation logic, read-only nature, and calling strategy. The one real gap is the cryptic liquidationOverrides parameter, which an agent cannot invoke confidently from this description alone, making it slightly incomplete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description must carry parameter meaning, but it explains none of the inputs directly. It hints exitValuation is a single valuation ('ONE hypothetical exit valuation'), yet leaves liquidationOverrides (seniority, preferenceType, participationCap, securityId) and additionalExitValuations wholly unexplained, despite the apparent tension between 'call once per valuation' and a multi-valuation array.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (simulate/computes) and resource (exit payout over the cap table) with scope: ONE hypothetical exit valuation run through the liquidation-preference waterfall. It is distinguishable from the neighboring simulation tool (dilution) because the exit/waterfall framing is explicit. An agent knows exactly what computation this produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (user asks to run a simulation), what to do first (read the company's own valuations via GetListCapTableRounds and GetListCapTableSecurities rather than guessing round numbers), and how many calls to make (once per valuation plus one below the cheapest and one or two above the richest, ~five total). This is exactly the when/when-not/alternative guidance the dimension rewards.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.