Skip to main content
Glama

Lovie Company Formation

Import RSA

cap_table_import_rsa
Destructive

Imports a signed Restricted Stock Purchase/Award Agreement (RSA) from an uploaded PDF and stores the document in S3. USE THIS (not ExtractRsaTermsOcr + CreateCapTableAgreement, and not RecordCapTableInvestment) whenever the user provides or uploads a signed RSA PDF. The grantee (founder/employee/advisor) MUST already exist as a cap-table stakeholder — this tool matches the document to an existing stakeholder by name and does NOT create one; if there is no match the import is rejected, so add the stakeholder first. Mandatory two-step human-in-the-loop flow: (1) call GetOcrUploadUrl with kind=RSA and mime_type=application/pdf, then upload the PDF bytes to the returned PUT URL; (2) call ImportRSA with preview=true and that source_s3_uri — this runs OCR and returns the extracted founder/company names and terms (shares, vesting, price_per_share, grant_date, 83b status, acceleration) plus the resolved grantee (matched_stakeholder_id; when it is empty no stakeholder matched, the response carries a warning, and the import will be refused until the grantee is added) WITHOUT persisting anything; (3) PRESENT those terms to the user as a table, let them correct any value, and get explicit confirmation; (4) call ImportRSA again WITHOUT preview and the SAME source_s3_uri; pass rsa_terms_override with any user-corrected terms (omit it to accept the extracted terms as-is), and stakeholder_id to pin the matched grantee. This creates the common-stock holding with its vesting schedule (or updates the grantee's existing holding), records a signed RSA agreement, and links the PDF — atomically. Never skip the preview + confirmation step; never persist unreviewed OCR output. Empty string / 0 / false in the extracted terms means the value was not stated in the document — never fabricate.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
previewNo
companyIdYesUUID value wrapper.
sourceS3UriNo
stakeholderIdNoUUID value wrapper.
consentToAiReadNo
rsaTermsOverrideNo
newStakeholderNameNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
statusNo
createdNo
previewNo
securityIdNo
agreementIdNo
stakeholderIdNo
consentVersionNo
consentBodyMarkdownNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changed
    • 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"
    • addedOutput schema / properties / preview / anyOf
      Added value: +[
      +  {
      +    "properties": {
      +      "companyName": {
      +        "type": "string"
      +      },
      +      "founderName": {
      +        "type": "string"
      +      },
      +      "matchedStakeholderId": {
      +        "anyOf": [
      +          {
      +            "description": "UUID value wrapper.",
      +            "properties": {
      +              "value": {
      +                "format": "uuid",
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "ocrConfidence": {
      +        "type": "string"
      +      },
      +      "resolvedStakeholderName": {
      +        "type": "string"
      +      },
      +      "rsaTerms": {
      +        "anyOf": [
      +          {
      +            "properties": {
      +              "accelerationClause": {
      +                "type": "string"
      +              },
      +              "governingLaw": {
      +                "type": "string"
      +              },
      +              "grantDate": {
      +                "anyOf": [
      +                  {
      +                    "format": "date-time",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "ipAssignment": {
      +                "type": "boolean"
      +              },
      +              "pricePerShare": {
      +                "type": "string"
      +              },
      +              "repurchaseOptionWindowMonths": {
      +                "type": "integer"
      +              },
      +              "repurchaseRight": {
      +                "type": "boolean"
      +              },
      +              "rightOfFirstRefusal": {
      +                "type": "boolean"
      +              },
      +              "section83bFiled": {
      +                "type": "string"
      +              },
      +              "signedByName": {
      +                "type": "string"
      +              },
      +              "signedByTitle": {
      +                "type": "string"
      +              },
      +              "signedDate": {
      +                "anyOf": [
      +                  {
      +                    "format": "date-time",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "spouseConsent": {
      +                "type": "boolean"
      +              },
      +              "totalPurchasePrice": {
      +                "type": "string"
      +              },
      +              "totalShares": {
      +                "type": "string"
      +              },
      +              "unvestedShares": {
      +                "type": "string"
      +              },
      +              "vestingCliffMonths": {
      +                "type": "integer"
      +              },
      +              "vestingProvision": {
      +                "type": "string"
      +              },
      +              "vestingStartDate": {
      +                "anyOf": [
      +                  {
      +                    "format": "date-time",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "vestingTotalMonths": {
      +                "type": "integer"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "warnings": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "wouldCreate": {
      +        "type": "boolean"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / preview / properties
      Removed value: -{
      -  "companyName": {
      -    "type": "string"
      -  },
      -  "founderName": {
      -    "type": "string"
      -  },
      -  "matchedStakeholderId": {
      -    "description": "UUID value wrapper.",
      -    "properties": {
      -      "value": {
      -        "format": "uuid",
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "ocrConfidence": {
      -    "type": "string"
      -  },
      -  "resolvedStakeholderName": {
      -    "type": "string"
      -  },
      -  "rsaTerms": {
      -    "properties": {
      -      "accelerationClause": {
      -        "type": "string"
      -      },
      -      "governingLaw": {
      -        "type": "string"
      -      },
      -      "grantDate": {
      -        "format": "date-time",
      -        "type": "string"
      -      },
      -      "ipAssignment": {
      -        "type": "boolean"
      -      },
      -      "pricePerShare": {
      -        "type": "string"
      -      },
      -      "repurchaseOptionWindowMonths": {
      -        "type": "integer"
      -      },
      -      "repurchaseRight": {
      -        "type": "boolean"
      -      },
      -      "rightOfFirstRefusal": {
      -        "type": "boolean"
      -      },
      -      "section83bFiled": {
      -        "type": "string"
      -      },
      -      "signedByName": {
      -        "type": "string"
      -      },
      -      "signedByTitle": {
      -        "type": "string"
      -      },
      -      "signedDate": {
      -        "format": "date-time",
      -        "type": "string"
      -      },
      -      "spouseConsent": {
      -        "type": "boolean"
      -      },
      -      "totalPurchasePrice": {
      -        "type": "string"
      -      },
      -      "totalShares": {
      -        "type": "string"
      -      },
      -      "unvestedShares": {
      -        "type": "string"
      -      },
      -      "vestingCliffMonths": {
      -        "type": "integer"
      -      },
      -      "vestingProvision": {
      -        "type": "string"
      -      },
      -      "vestingStartDate": {
      -        "format": "date-time",
      -        "type": "string"
      -      },
      -      "vestingTotalMonths": {
      -        "type": "integer"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "warnings": {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "wouldCreate": {
      -    "type": "boolean"
      -  }
      -}
    • removedOutput schema / properties / preview / type
      Removed value: -"object"
    • addedOutput schema / properties / securityId / anyOf
      Added value: +[
      +  {
      +    "description": "UUID value wrapper.",
      +    "properties": {
      +      "value": {
      +        "format": "uuid",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / securityId / description
      Removed value: -"UUID value wrapper."
    • removedOutput schema / properties / securityId / properties
      Removed value: -{
      -  "value": {
      -    "format": "uuid",
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / securityId / type
      Removed value: -"object"
    • addedOutput schema / properties / stakeholderId / anyOf
      Added value: +[
      +  {
      +    "description": "UUID value wrapper.",
      +    "properties": {
      +      "value": {
      +        "format": "uuid",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / stakeholderId / description
      Removed value: -"UUID value wrapper."
    • removedOutput schema / properties / stakeholderId / properties
      Removed value: -{
      -  "value": {
      -    "format": "uuid",
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / stakeholderId / type
      Removed value: -"object"
  2. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and openWorldHint=false, and the description goes well beyond them: it details the mandatory preview-then-persist flow, that preview persists nothing, atomic creation of the holding/vesting/agreement/PDF link, rejection on unmatched grantee, and the '0/false means not stated, never fabricate' rule. It omits auth/permission requirements and any rate-limit context, so it stops just short of a 5.

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?

It is long but the length is justified by a genuine multi-step workflow, and it is front-loaded with purpose before the numbered steps. Some sentences pack multiple constraints together (e.g. the empty-string/0/false rule), but almost nothing is redundant.

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 complex, destructive, multi-step import tool with an output schema available, the description covers the full lifecycle: upload prerequisite, preview, human confirmation, persist, and the fields returned by preview. An agent has everything needed to call it correctly.

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?

Schema description coverage is only 29%, so the description must compensate, and it does for the core flow: preview=true triggers OCR without persisting, source_s3_uri carries the uploaded PDF, rsa_terms_override accepts user corrections, stakeholder_id pins the matched grantee. It does not explain consentToAiRead or newStakeholderName, leaving minor gaps.

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 ('Imports a signed Restricted Stock Purchase/Award Agreement (RSA) from an uploaded PDF and stores the document in S3') and explicitly names the sibling tools it is NOT (ExtractRsaTermsOcr, CreateCapTableAgreement, RecordCapTableInvestment). An agent can distinguish it from siblings without opening a schema.

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?

Gives explicit when-to-use ('whenever the user provides or uploads a signed RSA PDF'), names alternatives to avoid, and states the critical precondition that the grantee must already exist as a stakeholder with rejection behavior if not matched. This is a complete routing guide.

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.