Skip to main content
Glama

Lovie Company Formation

Create Cap Table Agreement

cap_table_create_cap_table_agreement
Destructive

Records a non-SAFE agreement (option, RSU, RSA, FAST advisor agreement, board consent) against a company. Without signed_at it creates a draft and touches nothing else. SIGNED_AT IS NOT A DATE FIELD — it is a declaration that the document is already executed, and for a FAST it WRITES TO THE CAP TABLE: it puts the advisor on the register as a stakeholder and issues them an option holding carrying the equity percentage and the FAST's fixed 24-month / 3-month-cliff vesting. Set it ONLY when the person tells you the agreement has been signed, and say what it will do before you do it. An unsigned FAST grants nothing, so leaving signed_at empty is always the safe choice. PARTY: the advisor is matched to an existing stakeholder by EXACT name and created fresh otherwise, so a spelling that differs from the register adds a SECOND row for the same person — the twin holds no equity, so ownership views hide it while stakeholder counts include it. Call GetListCapTableStakeholders first and pass stakeholder_id whenever the advisor is already on the register. fast_terms.equity_percentage is a percentage like "0.50" (a trailing % is accepted); fast_terms.effective_date is YYYY-MM-DD and is the date vesting runs from.

Input Schema

NameRequiredDescriptionDefault
nameNo
typeNo
roundIdNoUUID value wrapper.
signedAtNo
companyIdYesUUID value wrapper.
fastTermsNo
granteeNameNo
sourceS3UriNo
progressTotalNo
stakeholderIdNoUUID value wrapper.

Output Schema

NameRequiredDescriptionDefault
agreementIdYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / fastTerms
      Added value: +{
      +  "properties": {
      +    "advisorName": {
      +      "description": "Human-readable name (1-255 Unicode chars).",
      +      "properties": {
      +        "value": {
      +          "maxLength": 255,
      +          "minLength": 1,
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "advisorTitle": {
      +      "maxLength": 200,
      +      "type": "string"
      +    },
      +    "companyName": {
      +      "description": "Human-readable name (1-255 Unicode chars).",
      +      "properties": {
      +        "value": {
      +          "maxLength": 255,
      +          "minLength": 1,
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "effectiveDate": {
      +      "maxLength": 10,
      +      "type": "string"
      +    },
      +    "engagementLevel": {
      +      "maxLength": 200,
      +      "type": "string"
      +    },
      +    "equityPercentage": {
      +      "maxLength": 20,
      +      "pattern": "^$|^[0-9]+(\\.[0-9]+)?$",
      +      "type": "string"
      +    },
      +    "governingLaw": {
      +      "maxLength": 200,
      +      "type": "string"
      +    },
      +    "securityType": {
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    "shares": {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "signatureDate": {
      +      "maxLength": 10,
      +      "type": "string"
      +    },
      +    "signed": {
      +      "type": "boolean"
      +    },
      +    "tier": {
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    "vestingCliffMonths": {
      +      "maximum": 600,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "vestingFrequency": {
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    "vestingTotalMonths": {
      +      "maximum": 600,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / signedAt
      Added value: +{
      +  "format": "date-time",
      +  "type": "string"
      +}
  2. Changed5 schema fields changed
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "CAP_TABLE_AGREEMENT_TYPE_UNSPECIFIED",
      -  "CAP_TABLE_AGREEMENT_TYPE_SAFE",
      -  "CAP_TABLE_AGREEMENT_TYPE_OPTION",
      -  "CAP_TABLE_AGREEMENT_TYPE_RSU",
      -  "CAP_TABLE_AGREEMENT_TYPE_RSA",
      -  "CAP_TABLE_AGREEMENT_TYPE_FAST",
      -  "CAP_TABLE_AGREEMENT_TYPE_BOARD_CONSENT",
      -  "CAP_TABLE_AGREEMENT_TYPE_CONVERTIBLE_LOAN",
      -  "CAP_TABLE_AGREEMENT_TYPE_VENTURE_DEBT",
      -  "CAP_TABLE_AGREEMENT_TYPE_OTHER"
      -]New value: +[
      +  "CAP_TABLE_AGREEMENT_TYPE_SAFE",
      +  "CAP_TABLE_AGREEMENT_TYPE_OPTION",
      +  "CAP_TABLE_AGREEMENT_TYPE_RSU",
      +  "CAP_TABLE_AGREEMENT_TYPE_RSA",
      +  "CAP_TABLE_AGREEMENT_TYPE_FAST",
      +  "CAP_TABLE_AGREEMENT_TYPE_BOARD_CONSENT",
      +  "CAP_TABLE_AGREEMENT_TYPE_CONVERTIBLE_LOAN",
      +  "CAP_TABLE_AGREEMENT_TYPE_VENTURE_DEBT",
      +  "CAP_TABLE_AGREEMENT_TYPE_OTHER"
      +]
    • addedOutput schema / properties / agreementId / anyOf
      Added value: +[
      +  {
      +    "description": "UUID value wrapper.",
      +    "properties": {
      +      "value": {
      +        "format": "uuid",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / agreementId / description
      Removed value: -"UUID value wrapper."
    • removedOutput schema / properties / agreementId / properties
      Removed value: -{
      -  "value": {
      -    "format": "uuid",
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / agreementId / type
      Removed value: -"object"
  3. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Far exceeds what annotations convey: it discloses that without signed_at only a draft is created, that a signed FAST actually writes a stakeholder row and issues an option holding with fixed 24-month/3-month-cliff vesting, and that name mismatches create a duplicate stakeholder row that hides from ownership views but inflates counts. This is exactly the side-effect detail an agent needs for a destructiveHint=true tool.

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?

Dense but front-loaded and almost every sentence adds decision-relevant content; the critical caveat is flagged early and in caps. Slight redundancy between the 'unsigned FAST grants nothing' sentence and the earlier signed_at warning, and the all-caps emphasis is heavy.

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?

Covers the danger zones of a destructive, nested-schema write tool well, and an output schema exists so return values need not be described. Gaps remain: the relationship between granteeName and stakeholderId is never clarified (the text refers to 'PARTY' which is not a schema field), and roundId/sourceS3Uri expectations are unstated.

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

Parameters4/5

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

With only 30% schema description coverage across 10 parameters, the description carries needed weight: it explains the non-obvious semantics of signedAt, prescribes stakeholder_id usage, and pins down fast_terms.equity_percentage format and fast_terms.effective_date format. Several parameters (name, granteeName, roundId, sourceS3Uri, progressTotal, type enum selection) are still unexplained.

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 and resource ('Records a non-SAFE agreement ... against a company') and enumerates the covered types (option, RSU, RSA, FAST, board consent). The 'non-SAFE' framing cleanly separates it from cap_table_import_safe and cap_table_create_cap_table_stakeholder.

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

Usage Guidelines4/5

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

Gives concrete when-to-use rules for the riskiest parameter ('Set it ONLY when the person tells you the agreement has been signed, and say what it will do before you do it') and a default behavior ('leaving signed_at empty is always the safe choice'), plus a prerequisite lookup step. It does not name other agreement-creation paths (e.g. import_safe, update_cap_table_agreement) as explicit alternatives.

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.