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. advisor_equity_pct is a percentage like "0.50" (a trailing % is accepted); effective_date is YYYY-MM-DD and is the date vesting runs from.

Input Schema

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

Output Schema

TableJSON 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.9/5.0
Behavior5/5

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

Even though annotations flag destructiveHint=true, the description goes far beyond that: it explains exactly what a signed FAST writes to the cap table (advisor on register as stakeholder, option holding with equity percentage and fixed 24-month/3-month cliff vesting), that an unsigned FAST grants nothing, and that a name mismatch adds a silent second, equity-free stakeholder row that hides in ownership views but counts in stakeholder counts. This is the level of disclosure a mutation tool needs.

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-loaded with the core action, then the critical signed_at warning before any secondary detail; every sentence carries real behavioral content. It is dense and long, and the all-caps emphasis is heavy, but nothing reads as filler.

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

Completeness5/5

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

For a 10-parameter, nested-object mutation tool with an output schema present, the description covers the branches an agent must get right (draft vs. signed, party matching) and the parameter formats the schema omits. Return values are left to the output schema, which is appropriate.

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

Parameters5/5

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

Schema coverage is only 30%, so the description must compensate and does: it defines signed_at (a declaration, not a date field), advisor_equity_pct format ('0.50', trailing % accepted), effective_date as the vesting start in YYYY-MM-DD, and the PARTY exact-name matching rule. This is substantial added meaning over the bare schema.

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+resource (records a non-SAFE agreement) and enumerates the concrete agreement types (option, RSU, RSA, FAST advisor agreement, board consent). Distinguishes itself from siblings like cap_table_import_safe and cap_table_record_cap_table_investment by scoping to non-SAFE equity agreements.

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 defines when to set signed_at versus leaving it empty ('the safe choice'), and instructs to call GetListCapTableStakeholders first and pass stakeholder_id when the advisor is already on the register. The rule 'set it ONLY when the person tells you the agreement has been signed' directly resolves the branch point.

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.